35 #include "container.hpp" 40 typedef std::map<std::string, GenContainer*> ContainerSet;
53 INFO(GenValue::summary());
54 INFO(GenFunction::summary());
57 Value<int>* current_event_number;
60 ContainerSet containers;
61 virtual bool load_next() = 0;
62 virtual int get_events() = 0;
63 virtual int get_current_event() = 0;
65 std::map<std::string,std::string> get_container_name_value_map(){
66 std::map<std::string, std::string> value_map;
67 for(
auto container : containers)
68 value_map[container.first] = container.second->get_value_name();
72 std::map<std::string,std::string> get_function_name_impl_map(){
73 std::map<std::string, std::string> impl_map;
75 if (fn.second !=
nullptr){
82 auto& event_check = GenFunction::register_function<int()>(
"event_number",
84 return ds->get_current_event();
86 current_event_number =
new BoundValue<int>(event_check);
89 void process(
bool silent=
false){
90 int events, current_event;
92 events = get_events();
93 if (!silent) std::cout << std::endl;
95 current_event = get_current_event();
96 if (!silent) std::cout <<
"\rprocessing event: " << current_event+1 <<
"/" << events << std::flush;
98 for(
auto con : containers){
102 if (!silent) std::cout <<
" Finished!" << std::endl;
105 virtual void save_all(){
106 for(
auto container : containers)
107 container.second->save();
110 template<
typename C,
typename... ArgTypes>
111 C* register_container(ArgTypes... args){
112 C* container =
new C(args...);
113 if (containers[container->get_name()] !=
nullptr){
114 CRITICAL(
"Container with name \""+container->get_name()+
"\" already exists.", -1);
116 containers[container->get_name()] = container;
120 void cut_set(GenContainer* base_container, std::vector<std::pair<Value<bool>*, std::string>> filters){
121 for(
auto p : filters){
123 std::string new_name;
124 std::tie(filter, new_name) = p;
125 if (containers[new_name] !=
nullptr){
126 CRITICAL(
"Container with name \""<<new_name<<
"\" already exists.", -1);
128 auto new_container = base_container->clone_as(new_name);
129 new_container->add_filter(filter);
130 containers[new_container->get_name()] = new_container;
134 GenContainer* get_container(std::string container_name){
135 GenContainer* c = containers[container_name];
137 CRITICAL(
"Request for container \"" << container_name <<
"\" failed. Doesn't exist.", -1);
142 Value<int>* get_current_event_number(){
143 return current_event_number;
147 #endif // dataset_hpp The namespace containing all filval classes and functions.
static std::string format_code(const std::string &code)
Attempt to invoke clang-format for the purpose of printing out nicely formatted functions to the log ...
static std::map< const std::string, GenFunction * > function_registry
Static mapping of functions from their name to the object wrapper of the function.