1 #ifndef __SELECTOR_HH__
2 #define __SELECTOR_HH__
32 #include "fastjet/PseudoJet.hh"
33 #include "fastjet/RangeDefinition.hh"
37 FASTJET_BEGIN_NAMESPACE
69 virtual bool pass(
const PseudoJet & jet)
const = 0;
75 virtual void terminator(std::vector<const PseudoJet *> & jets)
const {
76 for (
unsigned i = 0; i < jets.size(); i++) {
77 if (jets[i] && !pass(*jets[i])) jets[i] = NULL;
85 virtual std::string
description()
const {
return "missing description";}
98 throw Error(
"set_reference(...) cannot be used for a selector worker that does not take a reference");
106 throw Error(
"this SelectorWorker has nothing to copy");
115 rapmax = std::numeric_limits<double>::infinity();
124 virtual bool has_finite_area()
const;
131 throw Error(
"this selector has no computable area");
168 if (!validated_worker()->applies_jet_by_jet()) {
169 throw Error(
"Cannot apply this selector to an individual jet");
171 return _worker->pass(jet);
183 unsigned int count(
const std::vector<PseudoJet> & jets)
const;
187 void sift(
const std::vector<PseudoJet> & jets,
188 std::vector<PseudoJet> & jets_that_pass,
189 std::vector<PseudoJet> & jets_that_fail)
const;
193 return validated_worker()->applies_jet_by_jet();
197 std::vector<PseudoJet> operator()(
const std::vector<PseudoJet> & jets)
const;
205 validated_worker()->terminator(jets);
210 return validated_worker()->get_rapidity_extent(rapmin, rapmax);
215 return validated_worker()->description();
221 return validated_worker()->is_geometric();
228 return validated_worker()->has_finite_area();
249 double area(
double ghost_area)
const;
263 return validated_worker()->takes_reference();
270 if (! validated_worker()->takes_reference()){
276 _copy_worker_if_needed();
278 _worker->set_reference(reference);
293 InvalidArea() :
Error(
"Attempt to obtain area from Selector for which this is not meaningful") {}
316 if (_worker.unique())
return;
320 _worker.reset(_worker->copy());
340 Selector SelectorIdentity();
353 Selector
operator ||(
const Selector & s1,
const Selector & s2);
363 Selector
operator&&(
const Selector & s1,
const Selector & s2);
373 Selector
operator*(
const Selector & s1,
const Selector & s2);
433 Selector
SelectorDoughnut(
const double & radius_in,
const double & radius_out);
442 Selector
SelectorRectangle(
const double & half_rap_width,
const double & half_phi_width);
463 FASTJET_END_NAMESPACE
465 #endif // __SELECTOR_HH__