RAPIDO
Repeatable Analysis Programming for Interpretability, Durability, and Organization
Loading...
Searching...
No Matches
cutflow.h
1#ifndef CUTFLOW_H
2#define CUTFLOW_H
3
4#include <fstream>
5#include <iostream>
6#include <functional>
7#include <string>
8#include <vector>
9#include <map>
10#include <chrono>
11
12#include "utilities.h"
13
14enum Direction
15{
16 Left,
17 Right
18};
19typedef std::vector<Direction> Directions;
20
24class Cut
25{
26public:
28 std::string name;
36 int n_pass;
38 int n_fail;
45
51 Cut(std::string new_name);
52
57 virtual ~Cut();
58
64 virtual Cut* clone(std::string new_name);
65
70 void print();
71
76 virtual bool evaluate();
77
82 bool getResult();
83
88 virtual double weight();
94 double getWeight();
95};
96
101class LambdaCut : public Cut
102{
103public:
105 std::function<bool()> evaluate_lambda;
107 std::function<double()> weight_lambda;
108
115 LambdaCut(std::string new_name, std::function<bool()> new_evaluate_lambda);
116
124 LambdaCut(std::string new_name, std::function<bool()> new_evaluate_lambda,
125 std::function<double()> new_weight_lambda);
126
132 LambdaCut* clone(std::string new_name);
133
138 bool evaluate();
139
144 double weight();
145};
146
151{
152protected:
156 std::map<std::string, Cut*> cut_record;
158 std::function<void(Cut*)> debugger;
161
167 Cut* getCut(std::string cut_name);
168
175 bool recursiveSearchProgeny(Cut* cut, Cut* target_cut);
176
183
192 void recursivePrint(std::string tabs, Cut* cut, Direction direction, bool show_timing = false);
193
201 void recursiveWrite(Cut* cut, std::ofstream& ofstream, std::string output_cflow);
202
212 void recursiveWriteCSV(std::string output_dir, Cut* cut, Direction direction, int csv_idx,
213 Utilities::CSVFiles csv_files);
214
222 void recursiveWriteMermaid(Cut* cut, std::ofstream& ofstream, std::string output_mmd);
223
229 virtual bool recursiveEvaluate(Cut* cut);
230
236 void recursiveDelete(Cut* cut);
237
238public:
240 std::string name;
243
248 Cutflow();
249
255 Cutflow(std::string new_name);
256
263 Cutflow(std::string new_name, Cut* new_root);
264
269 ~Cutflow();
270
276 void setRoot(Cut* new_root);
277
285 void insert(std::string target_cut_name, Cut* new_cut, Direction direction);
286
294 void insert(Cut* target_cut, Cut* new_cut, Direction direction);
295
302 void replace(std::string target_cut_name, Cut* new_cut);
303
310 void replace(Cut* target_cut, Cut* new_cut);
311
318 void remove(std::string target_cut_name);
319
326 void remove(Cut* target_cut);
327
332 virtual bool run();
333
340 bool run(Cut* target_cut);
341
348 bool run(std::string target_cut_name);
349
356 std::vector<bool> run(std::vector<Cut*> target_cuts);
357
364 std::vector<bool> run(std::vector<std::string> target_cuts);
365
374 bool isProgeny(std::string parent_cut_name, std::string target_cut_name, Direction direction);
375
384 bool isProgeny(Cut* parent_cut, Cut* target_cut, Direction direction);
385
391 Cut* findTerminus(std::string starting_cut_name);
392
398 Cut* findTerminus(Cut* starting_cut);
399
405 void print(bool show_timing = false);
406
412 void write(std::string output_dir = "");
413
419 void writeCSV(std::string output_dir = "");
420
427 void writeMermaid(std::string output_dir = "", std::string orientation = "TD");
428
434 void setDebugLambda(std::function<void(Cut*)> new_debugger);
435};
436
437#endif
Definition cutflow.h:25
int n_pass
Definition cutflow.h:36
double n_pass_weighted
Definition cutflow.h:40
Cut * right
Definition cutflow.h:32
Cut * left
Definition cutflow.h:34
virtual bool evaluate()
Definition cutflow.cc:43
virtual double weight()
Definition cutflow.cc:61
virtual Cut * clone(std::string new_name)
Definition cutflow.cc:18
Utilities::RunningStat runtimes
Definition cutflow.h:44
bool getResult()
Definition cutflow.cc:48
virtual ~Cut()
Definition cutflow.cc:16
void print()
Definition cutflow.cc:23
Cut * parent
Definition cutflow.h:30
std::string name
Definition cutflow.h:28
Cut(std::string new_name)
Definition cutflow.cc:3
double n_fail_weighted
Definition cutflow.h:42
double getWeight()
Definition cutflow.cc:66
int n_fail
Definition cutflow.h:38
Definition cutflow.h:151
Cut * findTerminus(std::string starting_cut_name)
Definition cutflow.cc:373
void print(bool show_timing=false)
Definition cutflow.cc:384
void setDebugLambda(std::function< void(Cut *)> new_debugger)
Definition cutflow.cc:653
Cutflow()
Definition cutflow.cc:116
Cut * getCut(std::string cut_name)
Definition cutflow.cc:434
void recursiveWriteMermaid(Cut *cut, std::ofstream &ofstream, std::string output_mmd)
Definition cutflow.cc:620
std::string name
Definition cutflow.h:240
void replace(std::string target_cut_name, Cut *new_cut)
Definition cutflow.cc:200
virtual bool recursiveEvaluate(Cut *cut)
Definition cutflow.cc:517
void recursiveWriteCSV(std::string output_dir, Cut *cut, Direction direction, int csv_idx, Utilities::CSVFiles csv_files)
Definition cutflow.cc:581
void write(std::string output_dir="")
Definition cutflow.cc:391
void writeCSV(std::string output_dir="")
Definition cutflow.cc:399
void recursivePrint(std::string tabs, Cut *cut, Direction direction, bool show_timing=false)
Definition cutflow.cc:469
void recursiveWrite(Cut *cut, std::ofstream &ofstream, std::string output_cflow)
Definition cutflow.cc:557
Cut * recursiveFindTerminus(Cut *cut)
Definition cutflow.cc:463
Utilities::Variables globals
Definition cutflow.h:242
std::map< std::string, Cut * > cut_record
Definition cutflow.h:156
void insert(std::string target_cut_name, Cut *new_cut, Direction direction)
Definition cutflow.cc:156
virtual bool run()
Definition cutflow.cc:292
Cut * root
Definition cutflow.h:154
bool isProgeny(std::string parent_cut_name, std::string target_cut_name, Direction direction)
Definition cutflow.cc:348
bool recursiveSearchProgeny(Cut *cut, Cut *target_cut)
Definition cutflow.cc:448
std::function< void(Cut *)> debugger
Definition cutflow.h:158
void writeMermaid(std::string output_dir="", std::string orientation="TD")
Definition cutflow.cc:416
void setRoot(Cut *new_root)
Definition cutflow.cc:142
void remove(std::string target_cut_name)
Definition cutflow.cc:243
~Cutflow()
Definition cutflow.cc:140
void recursiveDelete(Cut *cut)
Definition cutflow.cc:546
bool debugger_is_set
Definition cutflow.h:160
Definition cutflow.h:102
LambdaCut * clone(std::string new_name)
Definition cutflow.cc:101
std::function< bool()> evaluate_lambda
Definition cutflow.h:105
std::function< double()> weight_lambda
Definition cutflow.h:107
bool evaluate()
Definition cutflow.cc:106
double weight()
Definition cutflow.cc:111
LambdaCut(std::string new_name, std::function< bool()> new_evaluate_lambda)
Definition cutflow.cc:86
Definition utilities.h:21
Definition utilities.h:216