AmpGen 2.1
Loading...
Searching...
No Matches
ASTResolver.h
Go to the documentation of this file.
1#ifndef AMPGEN_ASTRESOLVER_H
2#define AMPGEN_ASTRESOLVER_H
3#include <memory>
4#include <stddef.h>
5#include <iosfwd>
6#include <map>
7#include <memory>
8#include <string>
9#include <utility>
10#include <vector>
11#include <unordered_map>
12#include <future>
13
14#include "AmpGen/Expression.h"
16#include "AmpGen/Spline.h"
17
18namespace AmpGen {
19 class MinuitParameter;
21 class MinuitProxy;
22
31 public:
32 ASTResolver(const std::map<std::string, unsigned> &evtMap = {}, const MinuitParameterSet *mps = nullptr);
33 std::vector<std::pair<uint64_t, Expression>> getOrderedSubExpressions(const Expression &expression);
34
35 template <class TYPE> void resolve(const TYPE &obj) {}
36 template <class TYPE, class... ARGS> size_t addCacheFunction(const std::string &name, const ARGS &...args) {
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 false; }
45 bool enableAVX() const { return m_enableAVX; }
46 void setEnableAVX() { m_enableAVX = true; }
47 std::map<std::string, std::shared_ptr<CacheTransfer>> cacheFunctions() const;
48 void addResolvedParameter(const IExpression *param, const std::string &thing);
49 void addResolvedParameter(const IExpression *param, const size_t &address, const size_t &arg = 0);
50 std::string resolvedVariable(const IExpression *param) const;
51
52 void clear();
53
54 std::map<const IExpression *, std::string> parameters() const { return m_resolvedParameters; }
55 std::vector<Variable> unresolvedVariables() const { return m_unresolvedVariables; }
56
57 private:
58 std::vector<Variable> m_unresolvedVariables;
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{0};
66 bool m_enableAVX{false};
67 };
68
69 template <> void ASTResolver::resolve<Variable>(const Variable &obj);
70 template <> void ASTResolver::resolve<SubTree>(const SubTree &obj);
71 template <> void ASTResolver::resolve<Spline>(const Spline &obj);
72 template <> void ASTResolver::resolve<MinuitProxy>(const MinuitProxy &obj);
74}
75
76#endif
size_t addCacheFunction(const std::string &name, const ARGS &...args)
Definition ASTResolver.h:36
std::string resolvedVariable(const IExpression *param) const
void addResolvedParameter(const IExpression *param, const std::string &thing)
bool enableAVX() const
Definition ASTResolver.h:45
std::vector< Variable > unresolvedVariables() const
Definition ASTResolver.h:55
bool enableCuda() const
Definition ASTResolver.h:44
size_t nParams() const
Definition ASTResolver.h:43
void resolve(const TYPE &obj)
Definition ASTResolver.h:35
std::map< const IExpression *, std::string > parameters() const
Definition ASTResolver.h:54
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)
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:213
Free parameter for expression.
Definition Expression.h:180