4#ifndef ANALYSISTREE_SIMPLECUT_H
5#define ANALYSISTREE_SIMPLECUT_H
13#include "Constants.hpp"
15#include "Variable.hpp"
25 SimpleCut() =
default;
26 SimpleCut(
const SimpleCut& cut) =
default;
27 SimpleCut(SimpleCut&& cut) =
default;
28 SimpleCut& operator=(SimpleCut&&) =
default;
29 SimpleCut& operator=(
const SimpleCut& cut) =
default;
30 virtual ~SimpleCut() =
default;
37 SimpleCut(std::vector<std::string> vars, std::function<
bool(std::vector<double>&)> lambda, std::string title =
"") : title_(std::move(title)),
39 std::transform(vars.begin(), vars.end(),
40 std::back_inserter(vars_),
41 [](
const std::string& arg_name) { return Variable::FromString(arg_name); });
47 SimpleCut(
const std::vector<Variable>& vars, std::function<
bool(std::vector<double>&)> lambda, std::string title =
"") : title_(std::move(title)),
49 for (
auto& var : vars) {
50 vars_.emplace_back(var);
62 friend SimpleCut
RangeCut(
const std::string& variable_name,
double lo,
double hi,
const std::string& title);
69 friend SimpleCut
EqualsCut(
const std::string& variable_name,
int value,
const std::string& title);
77 friend SimpleCut
RangeCut(
const Variable& var,
double lo,
double hi,
const std::string& title);
84 friend SimpleCut
EqualsCut(
const Variable& var,
int value,
const std::string& title);
92 friend SimpleCut
OpenCut(
const std::string& branchName,
const std::string& title);
102 std::vector<double> variables;
103 variables.reserve(vars_.size());
104 for (
const auto& var : vars_) {
105 variables.emplace_back(var.GetValue(
object));
110 bool Apply(std::vector<const BranchChannel*>& bch, std::vector<size_t>&
id)
const;
115 void SetTitle(
const std::string& title) { title_ = title; }
116 const std::string& GetTitle()
const {
return title_; }
118 std::vector<Variable>& Variables() {
return vars_; }
119 ANALYSISTREE_ATTR_NODISCARD
const std::vector<Variable>& GetVariables()
const {
return vars_; }
120 ANALYSISTREE_ATTR_NODISCARD
const std::set<std::string>& GetBranches()
const {
return branch_names_; }
122 friend bool operator==(
const SimpleCut& that,
const SimpleCut& other);
125 SimpleCut(
const Variable& var,
double min,
double max, std::string title =
"");
126 SimpleCut(
const Variable& var,
int value, std::string title =
"");
128 void FillBranchNames();
131 std::vector<Variable> vars_{};
132 std::set<std::string> branch_names_{};
133 std::function<bool(std::vector<double>&)>
lambda_;
136 ClassDef(SimpleCut, 1);
138SimpleCut RangeCut(
const std::string& variable_name,
double lo,
double hi,
const std::string& title =
"");
139SimpleCut EqualsCut(
const std::string& variable_name,
int value,
const std::string& title =
"");
142SimpleCut OpenCut(
const std::string& branchName,
const std::string& title =
"alwaysTrue");
Definition BranchChannel.hpp:19
SimpleCut keeps predicate (lambda function with vector of arguments) and list of Variables.
Definition SimpleCut.hpp:22
SimpleCut(std::vector< std::string > vars, std::function< bool(std::vector< double > &)> lambda, std::string title="")
Definition SimpleCut.hpp:37
std::function< bool(std::vector< double > &)> lambda_
function used to evaluate the cut.
Definition SimpleCut.hpp:133
friend SimpleCut OpenCut(const std::string &branchName, const std::string &title)
Definition SimpleCut.cpp:48
friend SimpleCut RangeCut(const std::string &variable_name, double lo, double hi, const std::string &title)
Definition SimpleCut.cpp:32
bool Apply(const T &object) const
Evaluates cut.
Definition SimpleCut.hpp:101
friend SimpleCut EqualsCut(const std::string &variable_name, int value, const std::string &title)
Definition SimpleCut.cpp:36
Variable is a wrapper object for Field. In contrary to Field Variable is not bound to the data....
Definition Variable.hpp:23
Cuts keep list of SimpleCuts. Logical AND is applied for all SimpleCut in the Cuts object.
Definition BranchConfig.cpp:10
SimpleCut EqualsCut(const std::string &variable_name, int value, const std::string &title)
Definition SimpleCut.cpp:36
SimpleCut RangeCut(const std::string &variable_name, double lo, double hi, const std::string &title)
Definition SimpleCut.cpp:32
SimpleCut OpenCut(const std::string &branchName, const std::string &title)
Definition SimpleCut.cpp:48