AmpGen 2.1
Loading...
Searching...
No Matches
ASTResolver.h
Go to the documentation of this file.
1#include <memory>
2#include <stddef.h>
3#include <iosfwd>
4#include <map>
5#include <memory>
6#include <string>
7#include <utility>
8#include <vector>
9#include <unordered_map>
10#include <future>
11
12#include "AmpGen/Expression.h"
14#include "AmpGen/Spline.h"
15
16namespace AmpGen {
17 class MinuitParameter;
20
29 {
30 public:
31 ASTResolver(const std::map<std::string, unsigned>& evtMap = {} , const MinuitParameterSet* mps = nullptr );
32 std::vector<std::pair<uint64_t,Expression>> getOrderedSubExpressions( const Expression& expression);
33
34 template <class TYPE> void resolve( const TYPE& obj ){}
35 template <class TYPE, class ...ARGS> size_t addCacheFunction( const std::string& name, const ARGS&... args )
36 {
37 auto it = m_cacheFunctions.find(name);
38 if( it != m_cacheFunctions.end() ) return it->second->address();
39 m_cacheFunctions[name] = std::make_shared<TYPE>(m_nParameters, name, args... );
40 m_nParameters += m_cacheFunctions[name]->size();
41 return m_nParameters - m_cacheFunctions[name]->size();
42 }
43 size_t nParams() const { return m_nParameters ; }
44 bool enableCuda() const { return m_enable_cuda ; }
45 bool enableAVX() const { return m_enable_avx; }
46 bool enableCompileConstants() const { return m_enable_compileTimeConstants ;}
47 void setEnableAVX(){ m_enable_avx = true ; }
48 std::map<std::string, std::shared_ptr<CacheTransfer>> cacheFunctions() const;
49 void addResolvedParameter(const IExpression* param, const std::string& thing);
50 void addResolvedParameter(const IExpression* param, const size_t& address, const size_t& arg=0);
51 std::string resolvedParameter( const IExpression* param ) const;
52
53 void clear();
54
55 std::map<const IExpression*, std::string> parameters() const { return m_resolvedParameters; }
56 std::vector<Parameter> unresolvedParameters() const { return m_unresolvedParameters; }
57 private:
58 std::vector<Parameter> m_unresolvedParameters;
59 std::map<const IExpression*, std::string> m_resolvedParameters;
60 std::map<std::string, std::shared_ptr<CacheTransfer>> m_cacheFunctions;
61 std::map<std::string, unsigned> m_evtMap;
62 std::map<std::string, std::string> m_parameterMapping;
63 const MinuitParameterSet* m_mps;
64 std::map<const IExpression*, const SubTree*> m_tempTrees;
65 unsigned int m_nParameters;
66 bool m_enable_cuda {false};
67 bool m_enable_compileTimeConstants {false};
68 bool m_enable_avx {false};
69 bool m_check_hashes {false};
70 };
71
72 template <> void ASTResolver::resolve<Parameter>( const Parameter& obj );
73 template <> void ASTResolver::resolve<SubTree> ( const SubTree & obj );
74 template <> void ASTResolver::resolve<Spline> ( const Spline & obj );
77}
size_t addCacheFunction(const std::string &name, const ARGS &... args)
Definition ASTResolver.h:35
bool enableCompileConstants() const
Definition ASTResolver.h:46
void addResolvedParameter(const IExpression *param, const std::string &thing)
bool enableAVX() const
Definition ASTResolver.h:45
bool enableCuda() const
Definition ASTResolver.h:44
size_t nParams() const
Definition ASTResolver.h:43
void resolve(const TYPE &obj)
Definition ASTResolver.h:34
std::vector< Parameter > unresolvedParameters() const
Definition ASTResolver.h:56
std::map< const IExpression *, std::string > parameters() const
Definition ASTResolver.h:55
std::map< std::string, std::shared_ptr< CacheTransfer > > cacheFunctions() const
std::vector< std::pair< uint64_t, Expression > > getOrderedSubExpressions(const Expression &expression)
ASTResolver(const std::map< std::string, unsigned > &evtMap={}, const MinuitParameterSet *mps=nullptr)
std::string resolvedParameter(const IExpression *param) const
void addResolvedParameter(const IExpression *param, const size_t &address, const size_t &arg=0)
Wrapper class for shared_ptrs to virtual expressions for use in conjunction with operators to build e...
Definition Expression.h:135
Virtual base class for other expression tree components.
Definition Expression.h:116
Parameter that the value of which is given by some arbitrary C++ function.
Definition Expression.h:214
Free parameter for expression.
Definition Expression.h:181