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

//////////////////////////////////////////////////////////////////////////
//                                                                      //
//  TGeoPconEditor                                                      //
//                                                                      //
//////////////////////////////////////////////////////////////////////////
//Begin_Html
/*
<img src="gif/pcon_pic.gif">
*/
//End_Html
//Begin_Html
/*
<img src="gif/pcon_ed.jpg">
*/
//End_Html

#include "TGeoPconEditor.h"
#include "TGeoTabManager.h"
#include "TGeoPcon.h"
#include "TGeoManager.h"
#include "TVirtualGeoPainter.h"
#include "TPad.h"
#include "TView.h"
#include "TGTab.h"
#include "TGComboBox.h"
#include "TGButton.h"
#include "TGTextEntry.h"
#include "TGNumberEntry.h"
#include "TGLabel.h"

ClassImp(TGeoPconEditor)

enum ETGeoPconWid {
   kPCON_NAME, kPCON_NZ, kPCON_PHI1, kPCON_DPHI, kPCON_APPLY, kPCON_UNDO
};

//______________________________________________________________________________
TGeoPconEditor::TGeoPconEditor(const TGWindow *p, Int_t width,
                                   Int_t height, UInt_t options, Pixel_t back)
   : TGeoGedFrame(p, width, height, options | kVerticalFrame, back)
{
   // Constructor for polycone editor
   fShape   = 0;
   fNsections = 0;
   fSections = 0;
   fNsecti = 0;
   fPhi1i = 0;
   fDPhii = 0;
   fZi = 0;
   fRmini = 0;
   fRmaxi = 0;
   fIsModified = kFALSE;
   fIsShapeEditable = kFALSE;

   fLHsect = new TGLayoutHints(kLHintsTop | kLHintsLeft, 0,0,2,2);
      
   // TextEntry for shape name
   MakeTitle("Name");
   fShapeName = new TGTextEntry(this, new TGTextBuffer(50), kPCON_NAME);
   fShapeName->Resize(135, fShapeName->GetDefaultHeight());
   fShapeName->SetToolTipText("Enter the polycone name");
   fShapeName->Associate(this);
   AddFrame(fShapeName, new TGLayoutHints(kLHintsLeft, 3, 1, 2, 5));

   MakeTitle("Parameters");
   // Number entry for Nsections
   TGTextEntry *nef;
   TGCompositeFrame *f1 = new TGCompositeFrame(this, 155, 10, kHorizontalFrame | kFixedWidth);
   f1->AddFrame(new TGLabel(f1, "Nz"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
   fENz = new TGNumberEntry(f1, 0., 5, kPCON_NZ);
   fENz->SetNumAttr(TGNumberFormat::kNEAPositive);
   fENz->SetNumStyle(TGNumberFormat::kNESInteger);
   fENz->Resize(100,fENz->GetDefaultHeight());
   nef = (TGTextEntry*)fENz->GetNumberEntry();
   nef->SetToolTipText("Enter the  number of Z sections");
   fENz->Associate(this);
   f1->AddFrame(fENz, new TGLayoutHints(kLHintsRight, 2, 2, 2, 2));
   AddFrame(f1, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
   
   // Number entry for Phi1
   f1 = new TGCompositeFrame(this, 155, 10, kHorizontalFrame | kFixedWidth);
   f1->AddFrame(new TGLabel(f1, "Phi1"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
   fEPhi1 = new TGNumberEntry(f1, 0., 5, kPCON_PHI1);
   fEPhi1->Resize(100,fEPhi1->GetDefaultHeight());
   nef = (TGTextEntry*)fEPhi1->GetNumberEntry();
   nef->SetToolTipText("Enter the starting phi angle [deg]");
   fEPhi1->Associate(this);
   f1->AddFrame(fEPhi1, new TGLayoutHints(kLHintsRight, 2, 2, 2, 2));
   AddFrame(f1, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));

   // Number entry for Dphi
   f1 = new TGCompositeFrame(this, 155, 10, kHorizontalFrame | kFixedWidth);
   f1->AddFrame(new TGLabel(f1, "Dphi"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
   fEDPhi = new TGNumberEntry(f1, 0., 5, kPCON_DPHI);
   fEDPhi->SetNumAttr(TGNumberFormat::kNEAPositive);
   fEDPhi->Resize(100,fEDPhi->GetDefaultHeight());
   nef = (TGTextEntry*)fEDPhi->GetNumberEntry();
   nef->SetToolTipText("Enter the phi range [deg]");
   fEDPhi->Associate(this);
   f1->AddFrame(fEDPhi, new TGLayoutHints(kLHintsRight, 2, 2, 2, 2));
   AddFrame(f1, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));

   // TGCanvas containing sections
   MakeTitle("Pcon sections");
   fCan = new TGCanvas(this, 160, 200,  kSunkenFrame | kDoubleBorder);
   TGCompositeFrame *cont = new TGCompositeFrame(fCan->GetViewPort(), 155, 20, kVerticalFrame | kFixedWidth);
   fCan->SetContainer(cont);
   // labels for #i, Z, Rmin, Rmax
   f1 = new TGCompositeFrame(cont, 160, 10, kHorizontalFrame | kFixedWidth);
   f1->AddFrame(new TGLabel(f1, "#"), new TGLayoutHints(kLHintsLeft, 2, 20, 6, 0));
   f1->AddFrame(new TGLabel(f1, "Z"), new TGLayoutHints(kLHintsLeft, 2, 20, 6, 0));
   f1->AddFrame(new TGLabel(f1, "Rmin"), new TGLayoutHints(kLHintsLeft, 2, 20, 6, 0));
   f1->AddFrame(new TGLabel(f1, "Rmax"), new TGLayoutHints(kLHintsLeft, 2, 10, 6, 0));
   cont->AddFrame(f1, new TGLayoutHints(kLHintsLeft, 0,0,0,0));
   CreateSections(2);

   AddFrame(fCan, new TGLayoutHints(kLHintsLeft, 0, 0, 4, 4));
      
   // Delayed draw
   fDFrame = new TGCompositeFrame(this, 155, 10, kHorizontalFrame | kFixedWidth | kSunkenFrame);
   fDelayed = new TGCheckButton(fDFrame, "Delayed draw");
   fDFrame->AddFrame(fDelayed, new TGLayoutHints(kLHintsLeft , 2, 2, 4, 4));
   AddFrame(fDFrame,  new TGLayoutHints(kLHintsLeft, 6, 6, 4, 4));  

   // Buttons
   fBFrame = new TGCompositeFrame(this, 155, 10, kHorizontalFrame | kFixedWidth);
   fApply = new TGTextButton(fBFrame, "Apply");
   fBFrame->AddFrame(fApply, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
   fApply->Associate(this);
   fUndo = new TGTextButton(fBFrame, "Undo");
   fBFrame->AddFrame(fUndo, new TGLayoutHints(kLHintsRight , 2, 2, 4, 4));
   fUndo->Associate(this);
   AddFrame(fBFrame,  new TGLayoutHints(kLHintsLeft, 6, 6, 4, 4));  
   fUndo->SetSize(fApply->GetSize());
}

//______________________________________________________________________________
TGeoPconEditor::~TGeoPconEditor()
{
// Destructor
   if (fSections) delete fSections;
   if (fZi) delete [] fZi;
   if (fRmini) delete [] fRmini;
   if (fRmaxi) delete [] fRmaxi;
   TGFrameElement *el;
   TIter next(GetList());
   while ((el = (TGFrameElement *)next())) {
      if (el->fFrame->IsComposite()) 
         TGeoTabManager::Cleanup((TGCompositeFrame*)el->fFrame);
   }
   Cleanup();   
}

//______________________________________________________________________________
void TGeoPconEditor::ConnectSignals2Slots()
{
   // Connect signals to slots.
   fENz->Connect("ValueSet(Long_t)", "TGeoPconEditor", this, "DoNz()");
   fEPhi1->Connect("ValueSet(Long_t)", "TGeoPconEditor", this, "DoPhi()");
   fEDPhi->Connect("ValueSet(Long_t)", "TGeoPconEditor", this, "DoPhi()");
   fApply->Connect("Clicked()", "TGeoPconEditor", this, "DoApply()");
   fUndo->Connect("Clicked()", "TGeoPconEditor", this, "DoUndo()");
   fShapeName->Connect("TextChanged(const char *)", "TGeoPconEditor", this, "DoModified()");
   fInit = kFALSE;
}


//______________________________________________________________________________
void TGeoPconEditor::SetModel(TObject* obj)
{
   // Connect to a given pcon.
   if (obj == 0 || (obj->IsA() != TGeoPcon::Class())) {
      SetActive(kFALSE);
      return;                 
   } 
   fShape = (TGeoPcon*)obj;
   const char *sname = fShape->GetName();
   if (!strcmp(sname, fShape->ClassName())) fShapeName->SetText("-no_name");
   else fShapeName->SetText(sname);

   Int_t nsections = fShape->GetNz();
   fNsecti = nsections;
   fENz->SetNumber(nsections);
   fEPhi1->SetNumber(fShape->GetPhi1());
   fPhi1i = fShape->GetPhi1();
   fEDPhi->SetNumber(fShape->GetDphi());
   fDPhii = fShape->GetDphi();
   CreateSections(nsections);
   UpdateSections();
   
   fApply->SetEnabled(kFALSE);
   fUndo->SetEnabled(kFALSE);
   
   if (fInit) ConnectSignals2Slots();
   SetActive();
}

//______________________________________________________________________________
void TGeoPconEditor::CreateSections(Int_t inew)
{
// Change dynamically the number of sections.
   if (inew == fNsections) return;
   if (!fSections) fSections = new TObjArray(8);
   TGCompositeFrame *cont = (TGCompositeFrame*)fCan->GetContainer();
   TGeoPconSection *sect;
   Int_t isect;
   // new sections requested
   if (inew>fNsections) {
      for (isect=fNsections; isect<inew; isect++) {
         sect = new TGeoPconSection(cont, 150, 10, isect);
         fSections->Add(sect);
         cont->AddFrame(sect, fLHsect);
         sect->Connect("Changed(Int_t)", "TGeoPconEditor", this, "DoSectionChange(Int_t)");
      }   
   } else {
   // some sections need to be removed
      for (isect=inew; isect<fNsections; isect++) {
         sect = (TGeoPconSection*)fSections->At(isect);
         sect->HideDaughters();
         cont->HideFrame(sect);
         cont->RemoveFrame(sect);
//         sect->Disconnect("Changed(Int_t)", "TGeoPconEditor", this, "DoSectionChange(Int_t)");
         fSections->RemoveAt(isect);
         delete sect;
      }
   }   
   fNsections = inew;
   fCan->MapSubwindows();
   cont->Layout();
   cont->MapWindow();
   fCan->Layout();
}         

//______________________________________________________________________________
Bool_t TGeoPconEditor::CheckSections(Bool_t change)
{
// Check validity of sections
   TGeoPconSection *sect;
   Double_t zmin = 0;
   Double_t rmin = 0, rmax = 1.;
   for (Int_t isect=0; isect<fNsections; isect++) {
      sect = (TGeoPconSection*)fSections->At(isect);
      if (isect && (sect->GetZ()<zmin)) {
         if (!change) return kFALSE;
         sect->SetZ(zmin+1.);
      }   
      zmin = sect->GetZ();
      if (sect->GetRmin()<0 ||
          (sect->GetRmax()<0) || ((sect->GetRmin()==0) && (sect->GetRmax()==0))) {
         if (!change) return kFALSE;
         sect->SetRmin(rmin);
         sect->SetRmax(rmax);
      }   
      rmin = sect->GetRmin();
      rmax = sect->GetRmax();
   }
   return kTRUE;   
}
      
//______________________________________________________________________________
void TGeoPconEditor::UpdateSections()
{
// Update sections according fShape.
   if (fZi) delete [] fZi;
   if (fRmini) delete [] fRmini;
   if (fRmaxi) delete [] fRmaxi;
   fZi = new Double_t[fNsections];
   fRmini = new Double_t[fNsections];
   fRmaxi = new Double_t[fNsections];
   TGeoPconSection *sect;
   for (Int_t isect=0; isect<fNsections; isect++) {
      sect = (TGeoPconSection*)fSections->At(isect);
      sect->SetZ(fShape->GetZ(isect));
      fZi[isect] = fShape->GetZ(isect);
      sect->SetRmin(fShape->GetRmin(isect));
      fRmini[isect] = fShape->GetRmin(isect);
      sect->SetRmax(fShape->GetRmax(isect));
      fRmaxi[isect] = fShape->GetRmax(isect);
   }   
}      
      
//______________________________________________________________________________
Bool_t TGeoPconEditor::IsDelayed() const
{
// Check if shape drawing is delayed.
   return (fDelayed->GetState() == kButtonDown);
}

//______________________________________________________________________________
void TGeoPconEditor::DoName()
{
   // Perform name change
   DoModified();
}

//______________________________________________________________________________
void TGeoPconEditor::DoApply()
{
// Slot for applying modifications.
   const char *name = fShapeName->GetText();
   if (strcmp(name,fShape->GetName())) fShape->SetName(name);
   fApply->SetEnabled(kFALSE);
   fUndo->SetEnabled();
   if (!CheckSections()) return;
   // check if number of sections changed
   Bool_t recreate = kFALSE;
   Int_t nz = fENz->GetIntNumber();
   Double_t phi1 = fEPhi1->GetNumber();
   Double_t dphi = fEDPhi->GetNumber();
   if (nz != fShape->GetNz()) recreate = kTRUE;
   TGeoPconSection *sect;
   Int_t isect;
   if (recreate) {
      Double_t *array = new Double_t[3*(nz+1)];
      array[0] = phi1;
      array[1] = dphi;
      array[2] = nz;
      for (isect=0; isect<nz; isect++) {
         sect = (TGeoPconSection*)fSections->At(isect);
         array[3+3*isect] = sect->GetZ();
         array[4+3*isect] = sect->GetRmin();
         array[5+3*isect] = sect->GetRmax();
      }
      fShape->SetDimensions(array);
      delete [] array;
      if (fPad) {
         if (gGeoManager && gGeoManager->GetPainter() && gGeoManager->GetPainter()->IsPaintingShape()) {
            TView *view = fPad->GetView();
            if (!view) {
               fShape->Draw();
               fPad->GetView()->ShowAxis();
            } else {
               const Double_t *orig = fShape->GetOrigin();
               view->SetRange(orig[0]-fShape->GetDX(), orig[1]-fShape->GetDY(), orig[2]-fShape->GetDZ(),
                              orig[0]+fShape->GetDX(), orig[1]+fShape->GetDY(), orig[2]+fShape->GetDZ());
               Update();
            }                  
         } else Update();
      }   
      return;
   }           
   // No need to call SetDimensions   
   if (TMath::Abs(phi1-fShape->GetPhi1())>1.e-6) fShape->Phi1() = phi1;
   if (TMath::Abs(dphi-fShape->GetDphi())>1.e-6)  fShape->Dphi() = dphi;
   for (isect=0; isect<fNsections; isect++) {
      sect = (TGeoPconSection*)fSections->At(isect);
      fShape->Z(isect) = sect->GetZ();
      fShape->Rmin(isect) = sect->GetRmin();
      fShape->Rmax(isect) = sect->GetRmax();
   }   
   fShape->ComputeBBox();
   if (fPad) {
      if (gGeoManager && gGeoManager->GetPainter() && gGeoManager->GetPainter()->IsPaintingShape()) {
         TView *view = fPad->GetView();
         if (!view) {
            fShape->Draw();
            fPad->GetView()->ShowAxis();
         } else {
            const Double_t *orig = fShape->GetOrigin();
            view->SetRange(orig[0]-fShape->GetDX(), orig[1]-fShape->GetDY(), orig[2]-fShape->GetDZ(),
                           orig[0]+fShape->GetDX(), orig[1]+fShape->GetDY(), orig[2]+fShape->GetDZ());
            Update();
         }                  
      } else Update();
   }   
}

//______________________________________________________________________________
void TGeoPconEditor::DoSectionChange(Int_t isect)
{
// Change parameters of section isect;
   TGeoPconSection *sect, *sectlo=0, *secthi=0;
   sect = (TGeoPconSection*)fSections->At(isect);
   if (isect) sectlo = (TGeoPconSection*)fSections->At(isect-1);
   if (isect<fNsections-1) secthi = (TGeoPconSection*)fSections->At(isect+1);
   Double_t z = sect->GetZ();
   if (sectlo && z<sectlo->GetZ()) {
      z = sectlo->GetZ();
      sect->SetZ(z);
   }   
   if (secthi && z>secthi->GetZ()) {
      z = secthi->GetZ();
      sect->SetZ(z);
   } 
   DoModified();
   if (!IsDelayed()) DoApply();
}   

//______________________________________________________________________________
void TGeoPconEditor::DoNz()
{
// Change number of sections.
   Int_t nz = fENz->GetIntNumber();
   if (nz < 2) {
      nz = 2;
      fENz->SetNumber(nz);
   }   
   CreateSections(nz);
   CheckSections(kTRUE);
   DoModified();
   if (!IsDelayed()) DoApply();
}   

//______________________________________________________________________________
void TGeoPconEditor::DoPhi()
{
// Change phi range.
   Double_t phi1 = fEPhi1->GetNumber();
   Double_t dphi = fEDPhi->GetNumber();
   if (TMath::Abs(phi1)>360) fEPhi1->SetNumber(0);
   if (dphi>360) fEDPhi->SetNumber(360);
   DoModified();
   if (!IsDelayed()) DoApply();
}   

//______________________________________________________________________________
void TGeoPconEditor::DoModified()
{
// Slot for signaling modifications.
   fApply->SetEnabled();
}

//______________________________________________________________________________
void TGeoPconEditor::DoUndo()
{
// Slot for undoing last operation.
   fENz->SetNumber(fNsecti);
   CreateSections(fNsecti);
   fEPhi1->SetNumber(fPhi1i);
   fEDPhi->SetNumber(fDPhii);
   TGeoPconSection *sect;
   for (Int_t isect=0; isect<fNsections; isect++) {
      sect = (TGeoPconSection*)fSections->At(isect);
      sect->SetZ(fZi[isect]);
      sect->SetRmin(fRmini[isect]);
      sect->SetRmax(fRmaxi[isect]);
   }   
   DoApply();
   fUndo->SetEnabled(kFALSE);
   fApply->SetEnabled(kFALSE);
}

ClassImp(TGeoPconSection)

//______________________________________________________________________________
TGeoPconSection::TGeoPconSection(const TGWindow *p, UInt_t w, UInt_t h, Int_t id)
                :TGCompositeFrame(p,w,h,kHorizontalFrame | kFixedWidth)
{
   // Constructor.

   fNumber = id;
   TGTextEntry *nef;
   // Label with number
   AddFrame(new TGLabel(this, TString::Format("#%i",id)), new TGLayoutHints(kLHintsLeft, 2, 4, 6, 0));
   
   // Z entry
   fEZ = new TGNumberEntry(this, 0., 5);
   fEZ->Resize(40,fEZ->GetDefaultHeight());
   nef = (TGTextEntry*)fEZ->GetNumberEntry();
   nef->SetToolTipText("Enter the Z position");
   fEZ->Associate(this);
   AddFrame(fEZ, new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
   // Rmin entry
   fERmin = new TGNumberEntry(this, 0., 5);
   fERmin->SetNumAttr(TGNumberFormat::kNEAPositive);
   fERmin->Resize(40,fERmin->GetDefaultHeight());
   nef = (TGTextEntry*)fERmin->GetNumberEntry();
   nef->SetToolTipText("Enter the minimum radius");
   fERmin->Associate(this);
   AddFrame(fERmin, new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
   // Rmax entry
   fERmax = new TGNumberEntry(this, 0., 5);
   fERmax->SetNumAttr(TGNumberFormat::kNEAPositive);
   fERmax->Resize(40,fERmax->GetDefaultHeight());
   nef = (TGTextEntry*)fERmax->GetNumberEntry();
   nef->SetToolTipText("Enter the maximum radius");
   fERmax->Associate(this);
   AddFrame(fERmax, new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
   
   ConnectSignals2Slots();
   MapSubwindows();
   Layout();
}

//______________________________________________________________________________
TGeoPconSection::~TGeoPconSection()
{
// Destructor
   Cleanup();   
}

//______________________________________________________________________________
void TGeoPconSection::HideDaughters()
{
// Hide daughter frames
   fEZ->UnmapWindow();
   fERmin->UnmapWindow();
   fERmax->UnmapWindow();
}

//______________________________________________________________________________
void TGeoPconSection::Changed(Int_t i)
{
// Emit Changed(Int_t) signal.
   Emit("Changed(Int_t)", i);
}   

//______________________________________________________________________________
void TGeoPconSection::ConnectSignals2Slots()
{
// Connect signals to slots.
   fEZ->Connect("ValueSet(Long_t)", "TGeoPconSection", this, "DoZ()");
   fERmin->Connect("ValueSet(Long_t)", "TGeoPconSection", this, "DoRmin()");
   fERmax->Connect("ValueSet(Long_t)", "TGeoPconSection", this, "DoRmax()");
}

//______________________________________________________________________________
Double_t TGeoPconSection::GetZ() const
{
// Z value getter
   return fEZ->GetNumber();
}   

//______________________________________________________________________________
Double_t TGeoPconSection::GetRmin() const
{
// Rmin value getter
   return fERmin->GetNumber();
}   

//______________________________________________________________________________
Double_t TGeoPconSection::GetRmax() const
{
// Rmax value getter
   return fERmax->GetNumber();
}   

//______________________________________________________________________________
void TGeoPconSection::SetZ(Double_t z)
{
// Z value setter
   fEZ->SetNumber(z);
}   

//______________________________________________________________________________
void TGeoPconSection::SetRmin(Double_t rmin)
{
// Rmin value setter
   fERmin->SetNumber(rmin);
}   

//______________________________________________________________________________
void TGeoPconSection::SetRmax(Double_t rmax)
{
// Rmax value setter
   fERmax->SetNumber(rmax);
}   

//______________________________________________________________________________
void TGeoPconSection::DoZ()
{
// Z slot.
   Changed(fNumber);
}

//______________________________________________________________________________
void TGeoPconSection::DoRmin()
{
// Rmin slot.
   Double_t rmin = fERmin->GetNumber();
   Double_t rmax = fERmax->GetNumber();
   if (rmin>rmax-1.e-8) fERmin->SetNumber(rmax);
   Changed(fNumber);
}
   
//______________________________________________________________________________
void TGeoPconSection::DoRmax()
{
// Rmax slot.
   Double_t rmin = fERmin->GetNumber();
   Double_t rmax = fERmax->GetNumber();
   if (rmax<rmin+1.e-8) fERmax->SetNumber(rmin);
   Changed(fNumber);
}
 TGeoPconEditor.cxx:1
 TGeoPconEditor.cxx:2
 TGeoPconEditor.cxx:3
 TGeoPconEditor.cxx:4
 TGeoPconEditor.cxx:5
 TGeoPconEditor.cxx:6
 TGeoPconEditor.cxx:7
 TGeoPconEditor.cxx:8
 TGeoPconEditor.cxx:9
 TGeoPconEditor.cxx:10
 TGeoPconEditor.cxx:11
 TGeoPconEditor.cxx:12
 TGeoPconEditor.cxx:13
 TGeoPconEditor.cxx:14
 TGeoPconEditor.cxx:15
 TGeoPconEditor.cxx:16
 TGeoPconEditor.cxx:17
 TGeoPconEditor.cxx:18
 TGeoPconEditor.cxx:19
 TGeoPconEditor.cxx:20
 TGeoPconEditor.cxx:21
 TGeoPconEditor.cxx:22
 TGeoPconEditor.cxx:23
 TGeoPconEditor.cxx:24
 TGeoPconEditor.cxx:25
 TGeoPconEditor.cxx:26
 TGeoPconEditor.cxx:27
 TGeoPconEditor.cxx:28
 TGeoPconEditor.cxx:29
 TGeoPconEditor.cxx:30
 TGeoPconEditor.cxx:31
 TGeoPconEditor.cxx:32
 TGeoPconEditor.cxx:33
 TGeoPconEditor.cxx:34
 TGeoPconEditor.cxx:35
 TGeoPconEditor.cxx:36
 TGeoPconEditor.cxx:37
 TGeoPconEditor.cxx:38
 TGeoPconEditor.cxx:39
 TGeoPconEditor.cxx:40
 TGeoPconEditor.cxx:41
 TGeoPconEditor.cxx:42
 TGeoPconEditor.cxx:43
 TGeoPconEditor.cxx:44
 TGeoPconEditor.cxx:45
 TGeoPconEditor.cxx:46
 TGeoPconEditor.cxx:47
 TGeoPconEditor.cxx:48
 TGeoPconEditor.cxx:49
 TGeoPconEditor.cxx:50
 TGeoPconEditor.cxx:51
 TGeoPconEditor.cxx:52
 TGeoPconEditor.cxx:53
 TGeoPconEditor.cxx:54
 TGeoPconEditor.cxx:55
 TGeoPconEditor.cxx:56
 TGeoPconEditor.cxx:57
 TGeoPconEditor.cxx:58
 TGeoPconEditor.cxx:59
 TGeoPconEditor.cxx:60
 TGeoPconEditor.cxx:61
 TGeoPconEditor.cxx:62
 TGeoPconEditor.cxx:63
 TGeoPconEditor.cxx:64
 TGeoPconEditor.cxx:65
 TGeoPconEditor.cxx:66
 TGeoPconEditor.cxx:67
 TGeoPconEditor.cxx:68
 TGeoPconEditor.cxx:69
 TGeoPconEditor.cxx:70
 TGeoPconEditor.cxx:71
 TGeoPconEditor.cxx:72
 TGeoPconEditor.cxx:73
 TGeoPconEditor.cxx:74
 TGeoPconEditor.cxx:75
 TGeoPconEditor.cxx:76
 TGeoPconEditor.cxx:77
 TGeoPconEditor.cxx:78
 TGeoPconEditor.cxx:79
 TGeoPconEditor.cxx:80
 TGeoPconEditor.cxx:81
 TGeoPconEditor.cxx:82
 TGeoPconEditor.cxx:83
 TGeoPconEditor.cxx:84
 TGeoPconEditor.cxx:85
 TGeoPconEditor.cxx:86
 TGeoPconEditor.cxx:87
 TGeoPconEditor.cxx:88
 TGeoPconEditor.cxx:89
 TGeoPconEditor.cxx:90
 TGeoPconEditor.cxx:91
 TGeoPconEditor.cxx:92
 TGeoPconEditor.cxx:93
 TGeoPconEditor.cxx:94
 TGeoPconEditor.cxx:95
 TGeoPconEditor.cxx:96
 TGeoPconEditor.cxx:97
 TGeoPconEditor.cxx:98
 TGeoPconEditor.cxx:99
 TGeoPconEditor.cxx:100
 TGeoPconEditor.cxx:101
 TGeoPconEditor.cxx:102
 TGeoPconEditor.cxx:103
 TGeoPconEditor.cxx:104
 TGeoPconEditor.cxx:105
 TGeoPconEditor.cxx:106
 TGeoPconEditor.cxx:107
 TGeoPconEditor.cxx:108
 TGeoPconEditor.cxx:109
 TGeoPconEditor.cxx:110
 TGeoPconEditor.cxx:111
 TGeoPconEditor.cxx:112
 TGeoPconEditor.cxx:113
 TGeoPconEditor.cxx:114
 TGeoPconEditor.cxx:115
 TGeoPconEditor.cxx:116
 TGeoPconEditor.cxx:117
 TGeoPconEditor.cxx:118
 TGeoPconEditor.cxx:119
 TGeoPconEditor.cxx:120
 TGeoPconEditor.cxx:121
 TGeoPconEditor.cxx:122
 TGeoPconEditor.cxx:123
 TGeoPconEditor.cxx:124
 TGeoPconEditor.cxx:125
 TGeoPconEditor.cxx:126
 TGeoPconEditor.cxx:127
 TGeoPconEditor.cxx:128
 TGeoPconEditor.cxx:129
 TGeoPconEditor.cxx:130
 TGeoPconEditor.cxx:131
 TGeoPconEditor.cxx:132
 TGeoPconEditor.cxx:133
 TGeoPconEditor.cxx:134
 TGeoPconEditor.cxx:135
 TGeoPconEditor.cxx:136
 TGeoPconEditor.cxx:137
 TGeoPconEditor.cxx:138
 TGeoPconEditor.cxx:139
 TGeoPconEditor.cxx:140
 TGeoPconEditor.cxx:141
 TGeoPconEditor.cxx:142
 TGeoPconEditor.cxx:143
 TGeoPconEditor.cxx:144
 TGeoPconEditor.cxx:145
 TGeoPconEditor.cxx:146
 TGeoPconEditor.cxx:147
 TGeoPconEditor.cxx:148
 TGeoPconEditor.cxx:149
 TGeoPconEditor.cxx:150
 TGeoPconEditor.cxx:151
 TGeoPconEditor.cxx:152
 TGeoPconEditor.cxx:153
 TGeoPconEditor.cxx:154
 TGeoPconEditor.cxx:155
 TGeoPconEditor.cxx:156
 TGeoPconEditor.cxx:157
 TGeoPconEditor.cxx:158
 TGeoPconEditor.cxx:159
 TGeoPconEditor.cxx:160
 TGeoPconEditor.cxx:161
 TGeoPconEditor.cxx:162
 TGeoPconEditor.cxx:163
 TGeoPconEditor.cxx:164
 TGeoPconEditor.cxx:165
 TGeoPconEditor.cxx:166
 TGeoPconEditor.cxx:167
 TGeoPconEditor.cxx:168
 TGeoPconEditor.cxx:169
 TGeoPconEditor.cxx:170
 TGeoPconEditor.cxx:171
 TGeoPconEditor.cxx:172
 TGeoPconEditor.cxx:173
 TGeoPconEditor.cxx:174
 TGeoPconEditor.cxx:175
 TGeoPconEditor.cxx:176
 TGeoPconEditor.cxx:177
 TGeoPconEditor.cxx:178
 TGeoPconEditor.cxx:179
 TGeoPconEditor.cxx:180
 TGeoPconEditor.cxx:181
 TGeoPconEditor.cxx:182
 TGeoPconEditor.cxx:183
 TGeoPconEditor.cxx:184
 TGeoPconEditor.cxx:185
 TGeoPconEditor.cxx:186
 TGeoPconEditor.cxx:187
 TGeoPconEditor.cxx:188
 TGeoPconEditor.cxx:189
 TGeoPconEditor.cxx:190
 TGeoPconEditor.cxx:191
 TGeoPconEditor.cxx:192
 TGeoPconEditor.cxx:193
 TGeoPconEditor.cxx:194
 TGeoPconEditor.cxx:195
 TGeoPconEditor.cxx:196
 TGeoPconEditor.cxx:197
 TGeoPconEditor.cxx:198
 TGeoPconEditor.cxx:199
 TGeoPconEditor.cxx:200
 TGeoPconEditor.cxx:201
 TGeoPconEditor.cxx:202
 TGeoPconEditor.cxx:203
 TGeoPconEditor.cxx:204
 TGeoPconEditor.cxx:205
 TGeoPconEditor.cxx:206
 TGeoPconEditor.cxx:207
 TGeoPconEditor.cxx:208
 TGeoPconEditor.cxx:209
 TGeoPconEditor.cxx:210
 TGeoPconEditor.cxx:211
 TGeoPconEditor.cxx:212
 TGeoPconEditor.cxx:213
 TGeoPconEditor.cxx:214
 TGeoPconEditor.cxx:215
 TGeoPconEditor.cxx:216
 TGeoPconEditor.cxx:217
 TGeoPconEditor.cxx:218
 TGeoPconEditor.cxx:219
 TGeoPconEditor.cxx:220
 TGeoPconEditor.cxx:221
 TGeoPconEditor.cxx:222
 TGeoPconEditor.cxx:223
 TGeoPconEditor.cxx:224
 TGeoPconEditor.cxx:225
 TGeoPconEditor.cxx:226
 TGeoPconEditor.cxx:227
 TGeoPconEditor.cxx:228
 TGeoPconEditor.cxx:229
 TGeoPconEditor.cxx:230
 TGeoPconEditor.cxx:231
 TGeoPconEditor.cxx:232
 TGeoPconEditor.cxx:233
 TGeoPconEditor.cxx:234
 TGeoPconEditor.cxx:235
 TGeoPconEditor.cxx:236
 TGeoPconEditor.cxx:237
 TGeoPconEditor.cxx:238
 TGeoPconEditor.cxx:239
 TGeoPconEditor.cxx:240
 TGeoPconEditor.cxx:241
 TGeoPconEditor.cxx:242
 TGeoPconEditor.cxx:243
 TGeoPconEditor.cxx:244
 TGeoPconEditor.cxx:245
 TGeoPconEditor.cxx:246
 TGeoPconEditor.cxx:247
 TGeoPconEditor.cxx:248
 TGeoPconEditor.cxx:249
 TGeoPconEditor.cxx:250
 TGeoPconEditor.cxx:251
 TGeoPconEditor.cxx:252
 TGeoPconEditor.cxx:253
 TGeoPconEditor.cxx:254
 TGeoPconEditor.cxx:255
 TGeoPconEditor.cxx:256
 TGeoPconEditor.cxx:257
 TGeoPconEditor.cxx:258
 TGeoPconEditor.cxx:259
 TGeoPconEditor.cxx:260
 TGeoPconEditor.cxx:261
 TGeoPconEditor.cxx:262
 TGeoPconEditor.cxx:263
 TGeoPconEditor.cxx:264
 TGeoPconEditor.cxx:265
 TGeoPconEditor.cxx:266
 TGeoPconEditor.cxx:267
 TGeoPconEditor.cxx:268
 TGeoPconEditor.cxx:269
 TGeoPconEditor.cxx:270
 TGeoPconEditor.cxx:271
 TGeoPconEditor.cxx:272
 TGeoPconEditor.cxx:273
 TGeoPconEditor.cxx:274
 TGeoPconEditor.cxx:275
 TGeoPconEditor.cxx:276
 TGeoPconEditor.cxx:277
 TGeoPconEditor.cxx:278
 TGeoPconEditor.cxx:279
 TGeoPconEditor.cxx:280
 TGeoPconEditor.cxx:281
 TGeoPconEditor.cxx:282
 TGeoPconEditor.cxx:283
 TGeoPconEditor.cxx:284
 TGeoPconEditor.cxx:285
 TGeoPconEditor.cxx:286
 TGeoPconEditor.cxx:287
 TGeoPconEditor.cxx:288
 TGeoPconEditor.cxx:289
 TGeoPconEditor.cxx:290
 TGeoPconEditor.cxx:291
 TGeoPconEditor.cxx:292
 TGeoPconEditor.cxx:293
 TGeoPconEditor.cxx:294
 TGeoPconEditor.cxx:295
 TGeoPconEditor.cxx:296
 TGeoPconEditor.cxx:297
 TGeoPconEditor.cxx:298
 TGeoPconEditor.cxx:299
 TGeoPconEditor.cxx:300
 TGeoPconEditor.cxx:301
 TGeoPconEditor.cxx:302
 TGeoPconEditor.cxx:303
 TGeoPconEditor.cxx:304
 TGeoPconEditor.cxx:305
 TGeoPconEditor.cxx:306
 TGeoPconEditor.cxx:307
 TGeoPconEditor.cxx:308
 TGeoPconEditor.cxx:309
 TGeoPconEditor.cxx:310
 TGeoPconEditor.cxx:311
 TGeoPconEditor.cxx:312
 TGeoPconEditor.cxx:313
 TGeoPconEditor.cxx:314
 TGeoPconEditor.cxx:315
 TGeoPconEditor.cxx:316
 TGeoPconEditor.cxx:317
 TGeoPconEditor.cxx:318
 TGeoPconEditor.cxx:319
 TGeoPconEditor.cxx:320
 TGeoPconEditor.cxx:321
 TGeoPconEditor.cxx:322
 TGeoPconEditor.cxx:323
 TGeoPconEditor.cxx:324
 TGeoPconEditor.cxx:325
 TGeoPconEditor.cxx:326
 TGeoPconEditor.cxx:327
 TGeoPconEditor.cxx:328
 TGeoPconEditor.cxx:329
 TGeoPconEditor.cxx:330
 TGeoPconEditor.cxx:331
 TGeoPconEditor.cxx:332
 TGeoPconEditor.cxx:333
 TGeoPconEditor.cxx:334
 TGeoPconEditor.cxx:335
 TGeoPconEditor.cxx:336
 TGeoPconEditor.cxx:337
 TGeoPconEditor.cxx:338
 TGeoPconEditor.cxx:339
 TGeoPconEditor.cxx:340
 TGeoPconEditor.cxx:341
 TGeoPconEditor.cxx:342
 TGeoPconEditor.cxx:343
 TGeoPconEditor.cxx:344
 TGeoPconEditor.cxx:345
 TGeoPconEditor.cxx:346
 TGeoPconEditor.cxx:347
 TGeoPconEditor.cxx:348
 TGeoPconEditor.cxx:349
 TGeoPconEditor.cxx:350
 TGeoPconEditor.cxx:351
 TGeoPconEditor.cxx:352
 TGeoPconEditor.cxx:353
 TGeoPconEditor.cxx:354
 TGeoPconEditor.cxx:355
 TGeoPconEditor.cxx:356
 TGeoPconEditor.cxx:357
 TGeoPconEditor.cxx:358
 TGeoPconEditor.cxx:359
 TGeoPconEditor.cxx:360
 TGeoPconEditor.cxx:361
 TGeoPconEditor.cxx:362
 TGeoPconEditor.cxx:363
 TGeoPconEditor.cxx:364
 TGeoPconEditor.cxx:365
 TGeoPconEditor.cxx:366
 TGeoPconEditor.cxx:367
 TGeoPconEditor.cxx:368
 TGeoPconEditor.cxx:369
 TGeoPconEditor.cxx:370
 TGeoPconEditor.cxx:371
 TGeoPconEditor.cxx:372
 TGeoPconEditor.cxx:373
 TGeoPconEditor.cxx:374
 TGeoPconEditor.cxx:375
 TGeoPconEditor.cxx:376
 TGeoPconEditor.cxx:377
 TGeoPconEditor.cxx:378
 TGeoPconEditor.cxx:379
 TGeoPconEditor.cxx:380
 TGeoPconEditor.cxx:381
 TGeoPconEditor.cxx:382
 TGeoPconEditor.cxx:383
 TGeoPconEditor.cxx:384
 TGeoPconEditor.cxx:385
 TGeoPconEditor.cxx:386
 TGeoPconEditor.cxx:387
 TGeoPconEditor.cxx:388
 TGeoPconEditor.cxx:389
 TGeoPconEditor.cxx:390
 TGeoPconEditor.cxx:391
 TGeoPconEditor.cxx:392
 TGeoPconEditor.cxx:393
 TGeoPconEditor.cxx:394
 TGeoPconEditor.cxx:395
 TGeoPconEditor.cxx:396
 TGeoPconEditor.cxx:397
 TGeoPconEditor.cxx:398
 TGeoPconEditor.cxx:399
 TGeoPconEditor.cxx:400
 TGeoPconEditor.cxx:401
 TGeoPconEditor.cxx:402
 TGeoPconEditor.cxx:403
 TGeoPconEditor.cxx:404
 TGeoPconEditor.cxx:405
 TGeoPconEditor.cxx:406
 TGeoPconEditor.cxx:407
 TGeoPconEditor.cxx:408
 TGeoPconEditor.cxx:409
 TGeoPconEditor.cxx:410
 TGeoPconEditor.cxx:411
 TGeoPconEditor.cxx:412
 TGeoPconEditor.cxx:413
 TGeoPconEditor.cxx:414
 TGeoPconEditor.cxx:415
 TGeoPconEditor.cxx:416
 TGeoPconEditor.cxx:417
 TGeoPconEditor.cxx:418
 TGeoPconEditor.cxx:419
 TGeoPconEditor.cxx:420
 TGeoPconEditor.cxx:421
 TGeoPconEditor.cxx:422
 TGeoPconEditor.cxx:423
 TGeoPconEditor.cxx:424
 TGeoPconEditor.cxx:425
 TGeoPconEditor.cxx:426
 TGeoPconEditor.cxx:427
 TGeoPconEditor.cxx:428
 TGeoPconEditor.cxx:429
 TGeoPconEditor.cxx:430
 TGeoPconEditor.cxx:431
 TGeoPconEditor.cxx:432
 TGeoPconEditor.cxx:433
 TGeoPconEditor.cxx:434
 TGeoPconEditor.cxx:435
 TGeoPconEditor.cxx:436
 TGeoPconEditor.cxx:437
 TGeoPconEditor.cxx:438
 TGeoPconEditor.cxx:439
 TGeoPconEditor.cxx:440
 TGeoPconEditor.cxx:441
 TGeoPconEditor.cxx:442
 TGeoPconEditor.cxx:443
 TGeoPconEditor.cxx:444
 TGeoPconEditor.cxx:445
 TGeoPconEditor.cxx:446
 TGeoPconEditor.cxx:447
 TGeoPconEditor.cxx:448
 TGeoPconEditor.cxx:449
 TGeoPconEditor.cxx:450
 TGeoPconEditor.cxx:451
 TGeoPconEditor.cxx:452
 TGeoPconEditor.cxx:453
 TGeoPconEditor.cxx:454
 TGeoPconEditor.cxx:455
 TGeoPconEditor.cxx:456
 TGeoPconEditor.cxx:457
 TGeoPconEditor.cxx:458
 TGeoPconEditor.cxx:459
 TGeoPconEditor.cxx:460
 TGeoPconEditor.cxx:461
 TGeoPconEditor.cxx:462
 TGeoPconEditor.cxx:463
 TGeoPconEditor.cxx:464
 TGeoPconEditor.cxx:465
 TGeoPconEditor.cxx:466
 TGeoPconEditor.cxx:467
 TGeoPconEditor.cxx:468
 TGeoPconEditor.cxx:469
 TGeoPconEditor.cxx:470
 TGeoPconEditor.cxx:471
 TGeoPconEditor.cxx:472
 TGeoPconEditor.cxx:473
 TGeoPconEditor.cxx:474
 TGeoPconEditor.cxx:475
 TGeoPconEditor.cxx:476
 TGeoPconEditor.cxx:477
 TGeoPconEditor.cxx:478
 TGeoPconEditor.cxx:479
 TGeoPconEditor.cxx:480
 TGeoPconEditor.cxx:481
 TGeoPconEditor.cxx:482
 TGeoPconEditor.cxx:483
 TGeoPconEditor.cxx:484
 TGeoPconEditor.cxx:485
 TGeoPconEditor.cxx:486
 TGeoPconEditor.cxx:487
 TGeoPconEditor.cxx:488
 TGeoPconEditor.cxx:489
 TGeoPconEditor.cxx:490
 TGeoPconEditor.cxx:491
 TGeoPconEditor.cxx:492
 TGeoPconEditor.cxx:493
 TGeoPconEditor.cxx:494
 TGeoPconEditor.cxx:495
 TGeoPconEditor.cxx:496
 TGeoPconEditor.cxx:497
 TGeoPconEditor.cxx:498
 TGeoPconEditor.cxx:499
 TGeoPconEditor.cxx:500
 TGeoPconEditor.cxx:501
 TGeoPconEditor.cxx:502
 TGeoPconEditor.cxx:503
 TGeoPconEditor.cxx:504
 TGeoPconEditor.cxx:505
 TGeoPconEditor.cxx:506
 TGeoPconEditor.cxx:507
 TGeoPconEditor.cxx:508
 TGeoPconEditor.cxx:509
 TGeoPconEditor.cxx:510
 TGeoPconEditor.cxx:511
 TGeoPconEditor.cxx:512
 TGeoPconEditor.cxx:513
 TGeoPconEditor.cxx:514
 TGeoPconEditor.cxx:515
 TGeoPconEditor.cxx:516
 TGeoPconEditor.cxx:517
 TGeoPconEditor.cxx:518
 TGeoPconEditor.cxx:519
 TGeoPconEditor.cxx:520
 TGeoPconEditor.cxx:521
 TGeoPconEditor.cxx:522
 TGeoPconEditor.cxx:523
 TGeoPconEditor.cxx:524
 TGeoPconEditor.cxx:525
 TGeoPconEditor.cxx:526
 TGeoPconEditor.cxx:527
 TGeoPconEditor.cxx:528
 TGeoPconEditor.cxx:529
 TGeoPconEditor.cxx:530
 TGeoPconEditor.cxx:531
 TGeoPconEditor.cxx:532
 TGeoPconEditor.cxx:533
 TGeoPconEditor.cxx:534
 TGeoPconEditor.cxx:535
 TGeoPconEditor.cxx:536
 TGeoPconEditor.cxx:537
 TGeoPconEditor.cxx:538
 TGeoPconEditor.cxx:539
 TGeoPconEditor.cxx:540
 TGeoPconEditor.cxx:541
 TGeoPconEditor.cxx:542
 TGeoPconEditor.cxx:543
 TGeoPconEditor.cxx:544
 TGeoPconEditor.cxx:545
 TGeoPconEditor.cxx:546
 TGeoPconEditor.cxx:547
 TGeoPconEditor.cxx:548
 TGeoPconEditor.cxx:549
 TGeoPconEditor.cxx:550
 TGeoPconEditor.cxx:551
 TGeoPconEditor.cxx:552
 TGeoPconEditor.cxx:553
 TGeoPconEditor.cxx:554
 TGeoPconEditor.cxx:555
 TGeoPconEditor.cxx:556
 TGeoPconEditor.cxx:557
 TGeoPconEditor.cxx:558
 TGeoPconEditor.cxx:559
 TGeoPconEditor.cxx:560
 TGeoPconEditor.cxx:561
 TGeoPconEditor.cxx:562
 TGeoPconEditor.cxx:563
 TGeoPconEditor.cxx:564
 TGeoPconEditor.cxx:565
 TGeoPconEditor.cxx:566
 TGeoPconEditor.cxx:567
 TGeoPconEditor.cxx:568
 TGeoPconEditor.cxx:569
 TGeoPconEditor.cxx:570
 TGeoPconEditor.cxx:571
 TGeoPconEditor.cxx:572
 TGeoPconEditor.cxx:573
 TGeoPconEditor.cxx:574
 TGeoPconEditor.cxx:575
 TGeoPconEditor.cxx:576
 TGeoPconEditor.cxx:577
 TGeoPconEditor.cxx:578
 TGeoPconEditor.cxx:579
 TGeoPconEditor.cxx:580
 TGeoPconEditor.cxx:581
 TGeoPconEditor.cxx:582
 TGeoPconEditor.cxx:583
 TGeoPconEditor.cxx:584
 TGeoPconEditor.cxx:585
 TGeoPconEditor.cxx:586
 TGeoPconEditor.cxx:587
 TGeoPconEditor.cxx:588
 TGeoPconEditor.cxx:589
 TGeoPconEditor.cxx:590
 TGeoPconEditor.cxx:591
 TGeoPconEditor.cxx:592
 TGeoPconEditor.cxx:593
 TGeoPconEditor.cxx:594
 TGeoPconEditor.cxx:595