#ifndef BDT_Reg__HH
#define BDT_Reg__HH
#include <iostream>
#include <iomanip>
#include <fstream>

#include "TMVA/tmvaglob.h"

#include "RQ_OBJECT.h"

#include "TROOT.h"
#include "TStyle.h"
#include "TPad.h"
#include "TCanvas.h"
#include "TLine.h"
#include "TFile.h"
#include "TColor.h"
#include "TPaveText.h"
#include "TObjString.h"
#include "TControlBar.h"

#include "TGWindow.h"
#include "TGButton.h"
#include "TGLabel.h"
#include "TGNumberEntry.h"

#include "TMVA/DecisionTree.h"
#include "TMVA/Tools.h"
#include "TXMLEngine.h"
#include "TMVA/BDT.h"
// Uncomment this only if the link problem is solved. The include statement tends
// to use the ROOT classes rather than the local TMVA release
// #include "TMVA/DecisionTree.h"
// #include "TMVA/DecisionTreeNode.h"

namespace TMVA{



   class StatDialogBDTReg {  

      RQ_OBJECT("StatDialogBDTReg")

   public:

      StatDialogBDTReg( const TGWindow* p, TString wfile = "weights/TMVARegression_BDT.weights.xml", 
                     TString methName = "BDT", Int_t itree = 0 );
      virtual ~StatDialogBDTReg() {
         TMVA::DecisionTreeNode::fgIsTraining=false;
         fThis = 0;
         fMain->CloseWindow();
         fMain->Cleanup();
         if(gROOT->GetListOfCanvases()->FindObject(fCanvas))
            delete fCanvas; 
      }
   
      // draw method
      void DrawTree( Int_t itree );

      void RaiseDialog() { if (fMain) { fMain->RaiseWindow(); fMain->Layout(); fMain->MapWindow(); } }
   
   private:
   
      TGMainFrame *fMain;
      Int_t        fItree;
      Int_t        fNtrees;
      TCanvas*     fCanvas;

      TGNumberEntry* fInput;

      TGHorizontalFrame* fButtons;
      TGTextButton* fDrawButton;
      TGTextButton* fCloseButton;

      void UpdateCanvases();

      // draw methods
      TMVA::DecisionTree* ReadTree( TString * &vars, Int_t itree );
      void                DrawNode( TMVA::DecisionTreeNode *n, 
                                    Double_t x, Double_t y, Double_t xscale,  Double_t yscale, TString* vars );
      void GetNtrees();

      TString fWfile;
      TString fMethName;

   public:

      // static function for external deletion
      static void Delete() { if (fThis != 0) { delete fThis; fThis = 0; } }

      // slots
      void SetItree(); //*SIGNAL*
      void Redraw(); //*SIGNAL*
      void Close(); //*SIGNAL*

   private:

      static StatDialogBDTReg* fThis;

   };
   
   // ========================================================================================
   
   static std::vector<TControlBar*> BDTReg_Global__cbar;
   
   // intermediate GUI
   void BDT_Reg( const TString& fin = "TMVAReg.root" );
   void BDTReg_DeleteTBar(int i);
                              
   void BDT_Reg( Int_t itree, TString wfile = "weights/TMVARegression_BDT.weights.xml", TString methName = "BDT", Bool_t useTMVAStyle = kTRUE ); 


}
#endif
 BDT_Reg.h:1
 BDT_Reg.h:2
 BDT_Reg.h:3
 BDT_Reg.h:4
 BDT_Reg.h:5
 BDT_Reg.h:6
 BDT_Reg.h:7
 BDT_Reg.h:8
 BDT_Reg.h:9
 BDT_Reg.h:10
 BDT_Reg.h:11
 BDT_Reg.h:12
 BDT_Reg.h:13
 BDT_Reg.h:14
 BDT_Reg.h:15
 BDT_Reg.h:16
 BDT_Reg.h:17
 BDT_Reg.h:18
 BDT_Reg.h:19
 BDT_Reg.h:20
 BDT_Reg.h:21
 BDT_Reg.h:22
 BDT_Reg.h:23
 BDT_Reg.h:24
 BDT_Reg.h:25
 BDT_Reg.h:26
 BDT_Reg.h:27
 BDT_Reg.h:28
 BDT_Reg.h:29
 BDT_Reg.h:30
 BDT_Reg.h:31
 BDT_Reg.h:32
 BDT_Reg.h:33
 BDT_Reg.h:34
 BDT_Reg.h:35
 BDT_Reg.h:36
 BDT_Reg.h:37
 BDT_Reg.h:38
 BDT_Reg.h:39
 BDT_Reg.h:40
 BDT_Reg.h:41
 BDT_Reg.h:42
 BDT_Reg.h:43
 BDT_Reg.h:44
 BDT_Reg.h:45
 BDT_Reg.h:46
 BDT_Reg.h:47
 BDT_Reg.h:48
 BDT_Reg.h:49
 BDT_Reg.h:50
 BDT_Reg.h:51
 BDT_Reg.h:52
 BDT_Reg.h:53
 BDT_Reg.h:54
 BDT_Reg.h:55
 BDT_Reg.h:56
 BDT_Reg.h:57
 BDT_Reg.h:58
 BDT_Reg.h:59
 BDT_Reg.h:60
 BDT_Reg.h:61
 BDT_Reg.h:62
 BDT_Reg.h:63
 BDT_Reg.h:64
 BDT_Reg.h:65
 BDT_Reg.h:66
 BDT_Reg.h:67
 BDT_Reg.h:68
 BDT_Reg.h:69
 BDT_Reg.h:70
 BDT_Reg.h:71
 BDT_Reg.h:72
 BDT_Reg.h:73
 BDT_Reg.h:74
 BDT_Reg.h:75
 BDT_Reg.h:76
 BDT_Reg.h:77
 BDT_Reg.h:78
 BDT_Reg.h:79
 BDT_Reg.h:80
 BDT_Reg.h:81
 BDT_Reg.h:82
 BDT_Reg.h:83
 BDT_Reg.h:84
 BDT_Reg.h:85
 BDT_Reg.h:86
 BDT_Reg.h:87
 BDT_Reg.h:88
 BDT_Reg.h:89
 BDT_Reg.h:90
 BDT_Reg.h:91
 BDT_Reg.h:92
 BDT_Reg.h:93
 BDT_Reg.h:94
 BDT_Reg.h:95
 BDT_Reg.h:96
 BDT_Reg.h:97
 BDT_Reg.h:98
 BDT_Reg.h:99
 BDT_Reg.h:100
 BDT_Reg.h:101
 BDT_Reg.h:102
 BDT_Reg.h:103
 BDT_Reg.h:104
 BDT_Reg.h:105
 BDT_Reg.h:106
 BDT_Reg.h:107
 BDT_Reg.h:108
 BDT_Reg.h:109
 BDT_Reg.h:110
 BDT_Reg.h:111
 BDT_Reg.h:112
 BDT_Reg.h:113
 BDT_Reg.h:114