// @(#)root/eve:$Id$
// Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

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

#include "TEveTrackPropagatorEditor.h"
#include "TEveTrackPropagator.h"
// #include <TEveTrack.h>

#include "TEveGValuators.h"
#include "TEveManager.h"

#include "TVirtualPad.h"
#include "TColor.h"

#include "TGLabel.h"
#include "TG3DLine.h"
#include "TGButton.h"
#include "TGNumberEntry.h"
#include "TGColorSelect.h"
#include "TGComboBox.h"
#include "TGDoubleSlider.h"
#include "TGComboBox.h"
#include "TAttMarkerEditor.h"

//______________________________________________________________________________
// TEveTrackPropagatorSubEditor
//
// Sub-editor for TEveTrackPropagator class.

ClassImp(TEveTrackPropagatorSubEditor);

//______________________________________________________________________________
TEveTrackPropagatorSubEditor::TEveTrackPropagatorSubEditor(const TGWindow *p):
   TGVerticalFrame(p),
   fM (0),

   fMaxR(0),   fMaxZ(0),   fMaxOrbits(0),   fMaxAng(0),   fDelta(0),

   fRefsCont(0),      fPMFrame(0),
   fFitDaughters(0),  fFitReferences(0),
   fFitDecay(0),
   fFitCluster2Ds(0), fFitLineSegments(0),
   fRnrDaughters(0),  fRnrReferences(0),
   fRnrDecay(0),      fRnrCluster2Ds(0),
   fRnrFV(0),
   fPMAtt(0), fFVAtt(0),
   fProjTrackBreaking(0), fRnrPTBMarkers(0), fPTBAtt(0)
{
   // Constructor.

   Int_t labelW = 51;

   // --- Limits
   fMaxR = new TEveGValuator(this, "Max R:", 90, 0);
   fMaxR->SetLabelWidth(labelW);
   fMaxR->SetNELength(6);
   fMaxR->Build();
   fMaxR->SetLimits(0.1, TEveTrackPropagator::fgEditorMaxR, 101, TGNumberFormat::kNESRealOne);
   fMaxR->SetToolTip("Maximum radius to which the tracks will be drawn.");
   fMaxR->Connect("ValueSet(Double_t)", "TEveTrackPropagatorSubEditor", this, "DoMaxR()");
   AddFrame(fMaxR, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));

   fMaxZ = new TEveGValuator(this, "Max Z:", 90, 0);
   fMaxZ->SetLabelWidth(labelW);
   fMaxZ->SetNELength(6);
   fMaxZ->Build();
   fMaxZ->SetLimits(0.1, TEveTrackPropagator::fgEditorMaxZ, 101, TGNumberFormat::kNESRealOne);
   fMaxZ->SetToolTip("Maximum z-coordinate to which the tracks will be drawn.");
   fMaxZ->Connect("ValueSet(Double_t)", "TEveTrackPropagatorSubEditor", this, "DoMaxZ()");
   AddFrame(fMaxZ, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));

   fMaxOrbits = new TEveGValuator(this, "Orbits:", 90, 0);
   fMaxOrbits->SetLabelWidth(labelW);
   fMaxOrbits->SetNELength(6);
   fMaxOrbits->Build();
   fMaxOrbits->SetLimits(0.1, 10, 101, TGNumberFormat::kNESRealOne);
   fMaxOrbits->SetToolTip("Maximal angular path of tracks' orbits (1 ~ 2Pi).");
   fMaxOrbits->Connect("ValueSet(Double_t)", "TEveTrackPropagatorSubEditor", this, "DoMaxOrbits()");
   AddFrame(fMaxOrbits, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));

   fMaxAng = new TEveGValuator(this, "Angle:", 90, 0);
   fMaxAng->SetLabelWidth(labelW);
   fMaxAng->SetNELength(6);
   fMaxAng->Build();
   fMaxAng->SetLimits(1, 160, 81, TGNumberFormat::kNESRealOne);
   fMaxAng->SetToolTip("Maximal angular step between two helix points.");
   fMaxAng->Connect("ValueSet(Double_t)", "TEveTrackPropagatorSubEditor", this, "DoMaxAng()");
   AddFrame(fMaxAng, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));

   fDelta = new TEveGValuator(this, "Delta:", 90, 0);
   fDelta->SetLabelWidth(labelW);
   fDelta->SetNELength(6);
   fDelta->Build();
   fDelta->SetLimits(0.001, 10, 101, TGNumberFormat::kNESRealThree);
   fDelta->SetToolTip("Maximal error at the mid-point of the line connecting to helix points.");
   fDelta->Connect("ValueSet(Double_t)", "TEveTrackPropagatorSubEditor", this, "DoDelta()");
   AddFrame(fDelta, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
}

//______________________________________________________________________________
void TEveTrackPropagatorSubEditor::CreateRefsContainer(TGVerticalFrame* p)
{
   // Create a frame containing track-reference controls under parent
   // frame p.

   fRefsCont = new TGCompositeFrame(p, 80, 20, kVerticalFrame);
   fPMFrame  = new TGVerticalFrame(fRefsCont);
   // Rendering control.
   {
      TGGroupFrame* fitPM = new TGGroupFrame(fPMFrame, "PathMarks:", kLHintsTop | kLHintsCenterX);
      fitPM->SetTitlePos(TGGroupFrame::kLeft);
      fPMFrame->AddFrame( fitPM, new TGLayoutHints(kLHintsTop | kLHintsCenterX | kLHintsExpandX, 3, 3, 3, 3));

      TGMatrixLayout *ml = new TGMatrixLayout(fitPM, 0,1,6);
      fitPM->SetLayoutManager(ml);

      fFitDaughters  = new TGCheckButton(fitPM, "Fit Daughters",   TEvePathMark::kDaughter);
      fFitReferences = new TGCheckButton(fitPM, "Fit Refs",        TEvePathMark::kReference);
      fFitDecay      = new TGCheckButton(fitPM, "Fit Decay",       TEvePathMark::kDecay);
      fFitCluster2Ds = new TGCheckButton(fitPM, "Fit 2D Clusters", TEvePathMark::kCluster2D);
      fFitLineSegments = new TGCheckButton(fitPM, "Fit Line Segments", TEvePathMark::kLineSegment);

      fitPM->AddFrame(fFitDaughters);
      fitPM->AddFrame(fFitReferences);
      fitPM->AddFrame(fFitDecay);
      fitPM->AddFrame(fFitCluster2Ds);
      fitPM->AddFrame(fFitLineSegments);

      fFitDecay       ->Connect("Clicked()","TEveTrackPropagatorSubEditor", this, "DoFitPM()");
      fFitReferences  ->Connect("Clicked()","TEveTrackPropagatorSubEditor", this, "DoFitPM()");
      fFitDaughters   ->Connect("Clicked()","TEveTrackPropagatorSubEditor", this, "DoFitPM()");
      fFitCluster2Ds  ->Connect("Clicked()","TEveTrackPropagatorSubEditor", this, "DoFitPM()");
      fFitLineSegments->Connect("Clicked()","TEveTrackPropagatorSubEditor", this, "DoFitPM()");
   }
   // Kinematics fitting.
   {
      TGGroupFrame* rnrPM = new TGGroupFrame(fPMFrame, "PathMarks:", kLHintsTop | kLHintsCenterX);
      rnrPM->SetTitlePos(TGGroupFrame::kLeft);
      fPMFrame->AddFrame( rnrPM, new TGLayoutHints(kLHintsTop | kLHintsCenterX | kLHintsExpandX, 3, 3, 3, 3));

      TGMatrixLayout *ml = new TGMatrixLayout(rnrPM, 0, 1, 6);
      rnrPM->SetLayoutManager(ml);

      fRnrDaughters  = new TGCheckButton(rnrPM, "Rnr Daughters",   TEvePathMark::kDaughter);
      fRnrReferences = new TGCheckButton(rnrPM, "Rnr Refs",        TEvePathMark::kReference);
      fRnrDecay      = new TGCheckButton(rnrPM, "Rnr Decay",       TEvePathMark::kDecay);
      fRnrCluster2Ds = new TGCheckButton(rnrPM, "Rnr 2D Clusters", TEvePathMark::kCluster2D);

      rnrPM->AddFrame(fRnrDaughters);
      rnrPM->AddFrame(fRnrReferences);
      rnrPM->AddFrame(fRnrDecay);
      rnrPM->AddFrame(fRnrCluster2Ds);

      fRnrDecay     ->Connect("Clicked()","TEveTrackPropagatorSubEditor", this, "DoRnrPM()");
      fRnrReferences->Connect("Clicked()","TEveTrackPropagatorSubEditor", this, "DoRnrPM()");
      fRnrDaughters ->Connect("Clicked()","TEveTrackPropagatorSubEditor", this, "DoRnrPM()");
      fRnrCluster2Ds->Connect("Clicked()","TEveTrackPropagatorSubEditor", this, "DoRnrPM()");

      fRefsCont->AddFrame(fPMFrame, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
   }
   // Marker attributes.
   {
      fPMAtt = new TAttMarkerEditor(fRefsCont);
      TGFrameElement *el = (TGFrameElement*) fPMAtt->GetList()->First();
      TGFrame *f = el->fFrame; fPMAtt->RemoveFrame(f);
      f->DestroyWindow(); delete f;
      fRefsCont->AddFrame(fPMAtt, new TGLayoutHints(kLHintsTop, 1, 1, 3, 1));
   }
   // First vertex.
   {
      TGCompositeFrame *vf = new TGCompositeFrame
         (fRefsCont, 145, 10, kHorizontalFrame | kLHintsExpandX | kFixedWidth | kOwnBackground);
      vf->AddFrame(new TGLabel(vf, "FirstVertex"),
                   new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
      vf->AddFrame(new TGHorizontal3DLine(vf),
                   new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 5));
      fRefsCont->AddFrame(vf, new TGLayoutHints(kLHintsTop, 0, 0, 4, 0));

      fRnrFV = new TGCheckButton(fRefsCont, "Rnr");
      fRnrFV->Connect("Clicked()","TEveTrackPropagatorSubEditor", this, "DoRnrFV()");
      fRefsCont->AddFrame(fRnrFV, new TGLayoutHints(kLHintsTop, 5, 1, 2, 0));
      {
         fFVAtt = new TAttMarkerEditor(fRefsCont);
         TGFrameElement *el = (TGFrameElement*) fFVAtt->GetList()->First();
         TGFrame *f = el->fFrame; fFVAtt->RemoveFrame(f);
         f->DestroyWindow(); delete f;
         fRefsCont->AddFrame(fFVAtt, new TGLayoutHints(kLHintsTop, 1, 1, 3, 1));
      }
   }
   // Break-points of projected tracks
   {
      TGCompositeFrame *vf = new TGCompositeFrame
         (fRefsCont, 145, 10, kHorizontalFrame | kLHintsExpandX | kFixedWidth | kOwnBackground);
      vf->AddFrame(new TGLabel(vf, "BreakPoints"),
                   new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
      vf->AddFrame(new TGHorizontal3DLine(vf),
                   new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 5));
      fRefsCont->AddFrame(vf, new TGLayoutHints(kLHintsTop, 0, 0, 4, 0));

      {
         UInt_t labelW = 40;
         UInt_t labelH = 20;
         TGHorizontalFrame* hf = new TGHorizontalFrame(fRefsCont);
         // label
         TGCompositeFrame *labfr = new TGHorizontalFrame(hf, labelW, labelH, kFixedSize);
         TGLabel* label = new TGLabel(labfr, "Mode:");
         labfr->AddFrame(label, new TGLayoutHints(kLHintsLeft  | kLHintsBottom));
         hf->AddFrame(labfr, new TGLayoutHints(kLHintsLeft));
         // combo
         fProjTrackBreaking = new TGComboBox(hf);
         fProjTrackBreaking->AddEntry("Break tracks",         TEveTrackPropagator::kPTB_Break);
         fProjTrackBreaking->AddEntry("First point position", TEveTrackPropagator::kPTB_UseFirstPointPos);
         fProjTrackBreaking->AddEntry("Last point position",  TEveTrackPropagator::kPTB_UseLastPointPos);
         fProjTrackBreaking->Connect("Selected(Int_t)", "TEveTrackPropagatorSubEditor", this, "DoModePTB(UChar_t)");
         fProjTrackBreaking->Resize(140, labelH);
         hf->AddFrame(fProjTrackBreaking, new TGLayoutHints(kLHintsLeft, 0,0,2,0));
         fRefsCont->AddFrame(hf, new TGLayoutHints(kLHintsTop, 4, 1, 1, 1));
      }

      fRnrPTBMarkers = new TGCheckButton(fRefsCont, "Rnr");
      fRnrPTBMarkers->Connect("Clicked()","TEveTrackPropagatorSubEditor", this, "DoRnrPTB()");
      fRefsCont->AddFrame(fRnrPTBMarkers, new TGLayoutHints(kLHintsTop, 5, 1, 2, 0));
      {
         fPTBAtt = new TAttMarkerEditor(fRefsCont);
         TGFrameElement *el = (TGFrameElement*) fPTBAtt->GetList()->First();
         TGFrame *f = el->fFrame; fPTBAtt->RemoveFrame(f);
         f->DestroyWindow(); delete f;
         fRefsCont->AddFrame(fPTBAtt, new TGLayoutHints(kLHintsTop, 1, 1, 3, 1));
      }
   }

   p->AddFrame(fRefsCont, new TGLayoutHints(kLHintsTop| kLHintsExpandX));
}

//______________________________________________________________________________
void TEveTrackPropagatorSubEditor::SetModel(TEveTrackPropagator* m)
{
   // Set model object.

   fM = m;

   fMaxR->SetValue(fM->fMaxR);
   fMaxZ->SetValue(fM->fMaxZ);
   fMaxOrbits->SetValue(fM->fMaxOrbs);
   fMaxAng->SetValue(fM->GetMaxAng());
   fDelta->SetValue(fM->GetDelta());

   if(fM->fEditPathMarks)
   {
      ShowFrame(fPMFrame);
      fRnrDaughters->SetState(fM->fRnrDaughters ? kButtonDown : kButtonUp);
      fRnrReferences->SetState(fM->fRnrReferences ? kButtonDown : kButtonUp);
      fRnrDecay->SetState(fM->fRnrDecay ? kButtonDown : kButtonUp);
      fRnrCluster2Ds->SetState(fM->fRnrCluster2Ds ? kButtonDown : kButtonUp);

      fFitDaughters->SetState(fM->fFitDaughters ? kButtonDown : kButtonUp);
      fFitReferences->SetState(fM->fFitReferences ? kButtonDown : kButtonUp);
      fFitDecay->SetState(fM->fFitDecay ? kButtonDown : kButtonUp);
      fFitCluster2Ds->SetState(fM->fFitCluster2Ds ? kButtonDown : kButtonUp);
      fFitLineSegments->SetState(fM->fFitLineSegments ? kButtonDown : kButtonUp);

      fPMAtt->SetModel(&fM->fPMAtt);
   }
   else
   {
      fRefsCont->HideFrame(fPMFrame);
   }

   fRnrFV->SetState(fM->fRnrFV ? kButtonDown : kButtonUp);
   fFVAtt->SetModel(&fM->fFVAtt);

   fProjTrackBreaking->Select(fM->fProjTrackBreaking, kFALSE);
   fRnrPTBMarkers->SetState(fM->fRnrPTBMarkers ? kButtonDown : kButtonUp);
   fPTBAtt->SetModel(&fM->fPTBAtt);
}

/******************************************************************************/

//______________________________________________________________________________
void TEveTrackPropagatorSubEditor::Changed()
{
   // Emit "Changed()" signal.

   Emit("Changed()");
}

/******************************************************************************/

//______________________________________________________________________________
void TEveTrackPropagatorSubEditor::DoMaxR()
{
   // Slot for MaxR.

   fM->SetMaxR(fMaxR->GetValue());
   Changed();
}

//______________________________________________________________________________
void TEveTrackPropagatorSubEditor::DoMaxZ()
{
   // Slot for MaxZ.

   fM->SetMaxZ(fMaxZ->GetValue());
   Changed();
}

//______________________________________________________________________________
void TEveTrackPropagatorSubEditor::DoMaxOrbits()
{
   // Slot for MaxOrbits.

   fM->SetMaxOrbs(fMaxOrbits->GetValue());
   Changed();
}

//______________________________________________________________________________
void TEveTrackPropagatorSubEditor::DoMaxAng()
{
   // Slot for MaxAng.

   fM->SetMaxAng(fMaxAng->GetValue());
   Changed();
}

//______________________________________________________________________________
void TEveTrackPropagatorSubEditor::DoDelta()
{
   // Slot for Delta.

   fM->SetDelta(fDelta->GetValue());
   Changed();
}

/******************************************************************************/

//______________________________________________________________________________
void TEveTrackPropagatorSubEditor::DoFitPM()
{
   // Slot for FitPM.

   TGButton* b = (TGButton *) gTQSender;
   TEvePathMark::EType_e type = TEvePathMark::EType_e(b->WidgetId());
   Bool_t on = b->IsOn();

   switch(type)
   {
      case TEvePathMark::kDaughter:
         fM->SetFitDaughters(on);
         break;
      case TEvePathMark::kReference:
         fM->SetFitReferences(on);
         break;
      case TEvePathMark::kDecay:
         fM->SetFitDecay(on);
         break;
      case TEvePathMark::kCluster2D:
         fM->SetFitCluster2Ds(on);
         break;
      case TEvePathMark::kLineSegment:
         fM->SetFitLineSegments(on);
         break;

      default:
         break;
   }
   Changed();
}

//______________________________________________________________________________
void TEveTrackPropagatorSubEditor::DoRnrPM()
{
   // Slot for RnrPM.

   TGButton * b = (TGButton *) gTQSender;
   TEvePathMark::EType_e type = TEvePathMark::EType_e(b->WidgetId());
   Bool_t on = b->IsOn();
   switch(type){
      case  TEvePathMark::kDaughter:
         fM->SetRnrDaughters(on);
         break;
      case  TEvePathMark::kReference:
         fM->SetRnrReferences(on);
         break;
      case  TEvePathMark::kDecay:
         fM->SetRnrDecay(on);
         break;
      case  TEvePathMark::kCluster2D:
         fM->SetRnrCluster2Ds(on);
         break;
      default:
         break;
   }
   Changed();
}

//______________________________________________________________________________
void TEveTrackPropagatorSubEditor::DoRnrFV()
{
   // Slot for RnrFV.

   fM->SetRnrFV(fRnrFV->IsOn());
   Changed();
}

//______________________________________________________________________________
void TEveTrackPropagatorSubEditor::DoModePTB(UChar_t mode)
{
   // Slot for PTBMode.

   fM->SetProjTrackBreaking(mode);
   Changed();
}

//______________________________________________________________________________
void TEveTrackPropagatorSubEditor::DoRnrPTB()
{
   // Slot for RnrPTBMarkers.

   fM->SetRnrPTBMarkers(fRnrPTBMarkers->IsOn());
   Changed();
}


//==============================================================================
// TEveTrackPropagatorEditor
//==============================================================================

//______________________________________________________________________________
//
// GUI editor for TEveTrackPropagator.
// It's only a wrapper around a TEveTrackPropagatorSubEditor that holds actual
// widgets.

ClassImp(TEveTrackPropagatorEditor);

//______________________________________________________________________________
TEveTrackPropagatorEditor::TEveTrackPropagatorEditor(const TGWindow *p,
                                                     Int_t width, Int_t height,
                                                     UInt_t options, Pixel_t back) :
   TGedFrame(p, width, height, options | kVerticalFrame, back),
   fM(0),
   fRSSubEditor(0)
{
   // Constructor.

   MakeTitle("RenderStyle");

   fRSSubEditor = new TEveTrackPropagatorSubEditor(this);
   fRSSubEditor->Connect("Changed()", "TEveTrackPropagatorEditor", this, "Update()");
   AddFrame(fRSSubEditor, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 2, 0,0,0));

   TGVerticalFrame* refsFrame = CreateEditorTabSubFrame("Refs");
   {
      TGCompositeFrame *cf = new TGCompositeFrame
         (refsFrame, 145, 10, kHorizontalFrame | kLHintsExpandX | kFixedWidth | kOwnBackground);
      cf->AddFrame(new TGLabel(cf, "PathMarks"),
                   new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
      cf->AddFrame(new TGHorizontal3DLine(cf),
                   new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
      refsFrame->AddFrame(cf, new TGLayoutHints(kLHintsTop, 0, 0, 2, 0));
   }

   // path marks
   fRSSubEditor->CreateRefsContainer(refsFrame);
   fRSSubEditor->fPMAtt->SetGedEditor((TGedEditor*)gEve->GetEditor());
   fRSSubEditor->fFVAtt->SetGedEditor((TGedEditor*)gEve->GetEditor());

   fRSSubEditor->Connect("Changed()", "TEveTrackPropagatorEditor", this, "Update()");
}

/******************************************************************************/

//______________________________________________________________________________
void TEveTrackPropagatorEditor::SetModel(TObject* obj)
{
   // Set model object.

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