Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
BinarySearchTreeNode.h
Go to the documentation of this file.
1 // @(#)root/tmva $Id$
2 // Author: Andreas Hoecker, Joerg Stelzer, Helge Voss, Kai Voss
3 
4 /**********************************************************************************
5  * Project: TMVA - a Root-integrated toolkit for multivariate data analysis *
6  * Package: TMVA *
7  * Classes: Node, NodeID *
8  * Web : http://tmva.sourceforge.net *
9  * *
10  * Description: *
11  * Node for the BinarySearch *
12  * *
13  * Authors (alphabetical): *
14  * Andreas Hoecker <Andreas.Hocker@cern.ch> - CERN, Switzerland *
15  * Helge Voss <Helge.Voss@cern.ch> - MPI-K Heidelberg, Germany *
16  * Kai Voss <Kai.Voss@cern.ch> - U. of Victoria, Canada *
17  * *
18  * Copyright (c) 2005: *
19  * CERN, Switzerland *
20  * U. of Victoria, Canada *
21  * MPI-K Heidelberg, Germany *
22  * LAPP, Annecy, France *
23  * *
24  * Redistribution and use in source and binary forms, with or without *
25  * modification, are permitted according to the terms listed in LICENSE *
26  * (http://tmva.sourceforge.net/LICENSE) *
27  **********************************************************************************/
28 
29 #ifndef ROOT_TMVA_BinarySearchTreeNode
30 #define ROOT_TMVA_BinarySearchTreeNode
31 
32 //////////////////////////////////////////////////////////////////////////
33 // //
34 // BinarySearchTreeNode //
35 // //
36 // Node for the BinarySearch Tree //
37 // //
38 //////////////////////////////////////////////////////////////////////////
39 
40 #include <iosfwd>
41 #include <vector>
42 #include "Rtypes.h"
43 
44 #include "TMVA/Node.h"
45 
46 namespace TMVA {
47 
48  class Event;
49 
50  // a class used to identify a Node; (needed for recursive reading from text file)
51  // (currently it is NOT UNIQUE... but could eventually made it
52  // a node in the tree structure
53  class BinarySearchTreeNode : public Node {
54 
55  public:
56 
57  // constructor of a node for the search tree
58  BinarySearchTreeNode( const Event* e = NULL, UInt_t signalClass=0 );
59 
60  // constructor of a daughter node as a daughter of 'p'
61  BinarySearchTreeNode( BinarySearchTreeNode* parent, char pos );
62 
63  // copy constructor
64  BinarySearchTreeNode ( const BinarySearchTreeNode &n,
65  BinarySearchTreeNode* parent = NULL);
66 
67  // destructor
68  virtual ~BinarySearchTreeNode ();
69 
70  virtual Node* CreateNode() const { return new BinarySearchTreeNode(); }
71 
72  // test event if it decends the tree at this node to the right
73  virtual Bool_t GoesRight( const Event& ) const;
74  // test event if it decends the tree at this node to the left
75 
76  virtual Bool_t GoesLeft ( const Event& ) const;
77  // test event if it is equal to the event that "makes the node" (just for the "search tree"
78 
79  virtual Bool_t EqualsMe ( const Event& ) const;
80 
81  // set index of variable used for discrimination at this node
82  inline void SetSelector( Short_t i) { fSelector = i; }
83  // return index of variable used for discrimination at this node
84  inline Short_t GetSelector() const { return fSelector; }
85 
86  const std::vector<Float_t> & GetEventV() const { return fEventV; }
87  Float_t GetWeight() const { return fWeight; }
88  UInt_t GetClass() const { return fClass; }
89  // Bool_t IsSignal() const { return (fClass == fSignalClass); }
90 
91  const std::vector<Float_t> & GetTargets() const { return fTargets; }
92 
93 
94  // printout of the node
95  virtual void Print( std::ostream& os ) const;
96 
97  // recursive printout of the node and it daughters
98  virtual void PrintRec( std::ostream& os ) const;
99 
100  virtual void AddAttributesToNode(void* node) const;
101  virtual void AddContentToNode(std::stringstream& s) const;
102 
103  // Read the data block
104  virtual Bool_t ReadDataRecord( std::istream& is, UInt_t tmva_Version_Code = TMVA_VERSION_CODE );
105  virtual void ReadAttributes(void* node, UInt_t tmva_Version_Code = TMVA_VERSION_CODE );
106  virtual void ReadContent(std::stringstream& s);
107 
108  private:
109  std::vector<Float_t> fEventV;
110  std::vector<Float_t> fTargets;
111 
112  Float_t fWeight;
113  UInt_t fClass;
114 
115  Short_t fSelector; // index of variable used in node selection (decision tree)
116 
117  ClassDef(BinarySearchTreeNode,0); // Node for the BinarySearchTree
118  };
119 
120 } // namespace TMVA
121 
122 #endif