43 virtual void serialize( std::ostream& stream )
const = 0;
44 virtual void visit(
const std::function<
void(
INode* )>& visit_function ) = 0;
52 void serialize( std::ostream& stream )
const override;
53 unsigned int voxNumber()
const {
return m_voxNumber; }
54 unsigned int binNumber()
const {
return m_binNumber; }
56 void visit(
const std::function<
void(
INode*)>& visit_function )
override { visit_function(
this ); }
59 unsigned int m_voxNumber;
60 unsigned int m_binNumber;
66 Decision(
const unsigned int& index,
const double& value, std::shared_ptr<INode> left =
nullptr,
67 std::shared_ptr<INode> right =
nullptr );
69 void serialize( std::ostream& stream )
const override;
70 void setChildren( std::shared_ptr<INode> l, std::shared_ptr<INode> r );
71 void visit(
const std::function<
void(
INode*)>& visit_function )
override;
76 std::shared_ptr<INode> m_left;
77 std::shared_ptr<INode> m_right;
83 template <
class... ARGS>
87 template <
class... ARGS>
96 template <
class iterator_type,
106 std::shared_ptr<INode>
top() {
return m_top; }
110 unsigned int getBin(
const double* evt )
const;
115 void setQueueOrdering(
const std::vector<unsigned>& queueOrdering ){ m_queueOrdering = queueOrdering ; }
116 std::vector<std::shared_ptr<EndNode>>&
nodes() {
return m_endNodes; }
117 const std::vector<std::shared_ptr<EndNode>>&
const_nodes()
const {
return m_endNodes; }
118 std::vector<std::shared_ptr<EndNode>>::iterator
begin() {
return m_endNodes.begin(); }
119 std::vector<std::shared_ptr<EndNode>>::iterator
end() {
return m_endNodes.end(); }
122 void refreshQueue(
const std::vector<double*>&, std::queue<unsigned>&,
const unsigned&);
123 template <
class iterator_type>
126 std::vector<double> data( m_dim * (
end-
begin) );
127 std::vector<double*> addresses(
end-
begin );
129 for (
auto evt =
begin; evt !=
end; ++evt )
131 auto val = m_functors( *evt );
132 for (
unsigned int i = 0; i < m_dim; ++i ) data[m_dim * counter + i] = val[i];
133 addresses[counter] = &( data[m_dim * counter] );
138 std::shared_ptr<INode>
makeNodes(
const std::vector<double*>&, std::queue<unsigned>,
const unsigned&);
139 std::shared_ptr<INode>
makeNodes(
const std::vector<double*>&);
140 std::shared_ptr<INode>
makeNodes(
const std::vector<double*>&,
const std::vector<double*>&);
141 std::shared_ptr<INode>
makeNodes(std::vector<double*>, std::vector<double*>, std::queue<unsigned>,
const unsigned&);
142 void setFunctor(
const std::function<std::vector<double>(
const Event& )>& functors) { m_functors = functors; }
144 std::shared_ptr<INode> m_top = {
nullptr};
145 unsigned m_dim = {0};
146 unsigned m_minEvents = {0};
147 unsigned m_maxDepth = {0};
148 std::vector<unsigned> m_queueOrdering = {};
149 std::vector<std::shared_ptr<EndNode>> m_endNodes = {};
150 std::function<std::vector<double>(
const Event&)> m_functors = {};
151 double getBestPost(
const std::vector<double*>& source,
const std::vector<double*>& target,
int index,
bool verbose =
false );
#define DECLARE_ARGUMENT(X, Y)
Container for a set of arguments Contains a set of arguments packed from a variadic constructor,...
Decision(const unsigned int &index, const double &value, std::shared_ptr< INode > left=nullptr, std::shared_ptr< INode > right=nullptr)
void visit(const std::function< void(INode *)> &visit_function) override
const EndNode * operator()(const double *evt) const override
void serialize(std::ostream &stream) const override
void setChildren(std::shared_ptr< INode > l, std::shared_ptr< INode > r)
const EndNode * operator()(const double *evt) const override
void serialize(std::ostream &stream) const override
void visit(const std::function< void(INode *)> &visit_function) override
unsigned int binNumber() const
unsigned int voxNumber() const
EndNode(const unsigned int &no, const unsigned int &binNumber=999)
void setBinNumber(const unsigned int &binNumber)
virtual const EndNode * operator()(const double *evt) const =0
virtual void visit(const std::function< void(INode *)> &visit_function)=0
virtual void serialize(std::ostream &stream) const =0
void serialize(std::ofstream &output)
std::shared_ptr< INode > makeNodes(std::vector< double * >, std::vector< double * >, std::queue< unsigned >, const unsigned &)
std::shared_ptr< INode > makeNodes(const iterator_type &begin, const iterator_type &end)
void refreshQueue(const std::vector< double * > &, std::queue< unsigned > &, const unsigned &)
unsigned int getBin(const double *evt) const
unsigned int getBinNumber(const double *evt) const
unsigned int getBin(const Event &evt) const
const std::vector< std::shared_ptr< EndNode > > & const_nodes() const
std::vector< std::shared_ptr< EndNode > >::iterator begin()
void readFromStream(std::istream &stream)
std::shared_ptr< INode > makeNodes(const std::vector< double * > &, const std::vector< double * > &)
void serialize(const std::string &filename)
std::vector< std::shared_ptr< EndNode > >::iterator end()
unsigned int getBinNumber(const Event &evt) const
void setQueueOrdering(const std::vector< unsigned > &queueOrdering)
BinDT(const EventList &events, const ArgumentPack &args)
std::shared_ptr< INode > top()
std::shared_ptr< INode > makeNodes(const std::vector< double * > &, std::queue< unsigned >, const unsigned &)
void setFunctor(const std::function< std::vector< double >(const Event &)> &functors)
BinDT(const std::vector< double * > &addr, const ARGS &... args)
std::function< std::vector< double >(const Event &)> makeDefaultFunctors()
unsigned int size() const
BinDT(const iterator_type &begin, const iterator_type &end, const ARGS &... args)
BinDT(const ArgumentPack &args)
BinDT(const ARGS &... args)
std::shared_ptr< INode > makeNodes(const std::vector< double * > &)
std::vector< std::shared_ptr< EndNode > > & nodes()
BinDT(const EventList &events, const ARGS &... args)
Encapsulates the final state particles of a single event.
std::vector< Event >::iterator begin()
std::vector< Event >::iterator end()