#ifndef ROOT_TParallelCoord
#define ROOT_TParallelCoord
#ifndef ROOT_TAttLine
#include "TAttLine.h"
#endif
#ifndef ROOT_TNamed
#include "TNamed.h"
#endif
class TTree;
class TPaveText;
class TEntryList;
class TParallelCoordSelect;
class TParallelCoordVar;
class TParallelCoordRange;
class TList;
class TGaxis;
class TSelectorDraw;
class TParallelCoord : public TNamed {
public:
enum {
kVertDisplay =BIT(14),
kCurveDisplay =BIT(15),
kPaintEntries =BIT(16),
kLiveUpdate =BIT(17),
kGlobalScale =BIT(19),
kCandleChart =BIT(20),
kGlobalLogScale =BIT(21)
};
private:
UInt_t fNvar;
Long64_t fCurrentFirst;
Long64_t fCurrentN;
Long64_t fNentries;
Int_t fDotsSpacing;
Color_t fLineColor;
Width_t fLineWidth;
Int_t fWeightCut;
TEntryList *fCurrentEntries;
TEntryList *fInitEntries;
TTree *fTree;
TString fTreeName;
TString fTreeFileName;
TList *fVarList;
TList *fSelectList;
TParallelCoordSelect* fCurrentSelection;
TGaxis *fCandleAxis;
void Init();
void PaintEntries(TParallelCoordSelect* sel=NULL);
void SetAxesPosition();
public:
TParallelCoord();
TParallelCoord(Long64_t nentries);
TParallelCoord(TTree* tree, Long64_t nentries);
~TParallelCoord();
void AddVariable(Double_t* val, const char* title="");
void AddVariable(const char* varexp);
void AddSelection(const char* title);
void ApplySelectionToTree();
static void BuildParallelCoord(TSelectorDraw* selector, Bool_t candle);
void CleanUpSelections(TParallelCoordRange* range);
void RemoveVariable(TParallelCoordVar* var);
TParallelCoordVar* RemoveVariable(const char* var);
void DeleteSelection(TParallelCoordSelect* sel);
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);
virtual void Draw(Option_t* options="");
virtual void ExecuteEvent(Int_t entry, Int_t px, Int_t py);
Bool_t GetCandleChart() {return TestBit(kCandleChart);}
Long64_t GetCurrentFirst() {return fCurrentFirst;}
Long64_t GetCurrentN() {return fCurrentN;}
TParallelCoordSelect* GetCurrentSelection();
Bool_t GetCurveDisplay() const {return TestBit(kCurveDisplay);}
Int_t GetDotsSpacing() const {return fDotsSpacing;}
TEntryList *GetEntryList(Bool_t sel=kTRUE);
Double_t GetGlobalMin();
Double_t GetGlobalMax();
Bool_t GetGlobalScale() {return TestBit(kGlobalScale);}
Bool_t GetGlobalLogScale() {return TestBit(kGlobalLogScale);}
Color_t GetLineColor() {return fLineColor;}
Width_t GetLineWidth() {return fLineWidth;}
Int_t GetNbins();
UInt_t GetNvar() {return fNvar;}
Long64_t GetNentries() {return fNentries;}
TList *GetSelectList() {return fSelectList;}
TParallelCoordSelect* GetSelection(const char* title);
TTree *GetTree();
Double_t *GetVariable(const char* var);
Double_t *GetVariable(Int_t i);
TList *GetVarList() {return fVarList;}
Bool_t GetVertDisplay() const {return TestBit(kVertDisplay);}
Int_t GetWeightCut() const {return fWeightCut;};
virtual void Paint(Option_t* options="");
void ResetTree();
void SaveEntryLists(const char* filename="", Bool_t overwrite=kFALSE);
void SavePrimitive(std::ostream & out,Option_t *options);
void SaveTree(const char* filename="", Bool_t overwrite=kFALSE);
void SetAxisHistogramBinning(Int_t n=100);
void SetAxisHistogramHeight(Double_t h=0.5);
void SetAxisHistogramLineWidth(Int_t lw=2);
void SetCandleChart(Bool_t can);
virtual void SetCurveDisplay(Bool_t curve=1) {SetBit(kCurveDisplay,curve);}
void SetCurrentEntries(TEntryList* entries) {fCurrentEntries = entries;}
void SetCurrentFirst(Long64_t);
void SetCurrentN(Long64_t);
TParallelCoordSelect* SetCurrentSelection(const char* title);
void SetCurrentSelection(TParallelCoordSelect* sel);
void SetDotsSpacing(Int_t s=0);
static void SetEntryList(TParallelCoord* para, TEntryList* enlist);
void SetGlobalScale(Bool_t gl);
void SetGlobalLogScale(Bool_t);
void SetGlobalMin(Double_t min);
void SetGlobalMax(Double_t max);
void SetInitEntries(TEntryList* entries) {fInitEntries = entries;}
void SetLineColor(Color_t col) {fLineColor = col;}
void SetLineWidth(Width_t wid) {fLineWidth = wid;}
void SetLiveRangesUpdate(Bool_t);
void SetNentries(Long64_t n) {fNentries = n;}
void SetTree(TTree* tree) {fTree = tree;}
void SetVertDisplay(Bool_t vert=kTRUE);
void SetWeightCut(Int_t w=0) {fWeightCut = w;}
void UnzoomAll();
ClassDef(TParallelCoord,1);
};
#endif