1 #ifndef __FASTJET_SELECTOR_HH__
2 #define __FASTJET_SELECTOR_HH__
34 #include "fastjet/PseudoJet.hh"
36 #include "fastjet/RangeDefinition.hh"
41 FASTJET_BEGIN_NAMESPACE
78 virtual bool pass(
const PseudoJet & jet)
const = 0;
84 virtual void terminator(std::vector<const PseudoJet *> & jets)
const {
85 for (
unsigned i = 0; i < jets.size(); i++) {
86 if (jets[i] && !pass(*jets[i])) jets[i] = NULL;
94 virtual std::string
description()
const {
return "missing description";}
107 throw Error(
"set_reference(...) cannot be used for a selector worker that does not take a reference");
115 throw Error(
"this SelectorWorker has nothing to copy");
124 rapmax = std::numeric_limits<double>::infinity();
133 virtual bool has_finite_area()
const;
140 throw Error(
"this selector has no computable area");
179 if (!validated_worker()->applies_jet_by_jet()) {
180 throw Error(
"Cannot apply this selector to an individual jet");
182 return _worker->pass(jet);
194 unsigned int count(
const std::vector<PseudoJet> & jets)
const;
200 PseudoJet sum(
const std::vector<PseudoJet> & jets)
const;
206 double scalar_pt_sum(
const std::vector<PseudoJet> & jets)
const;
210 void sift(
const std::vector<PseudoJet> & jets,
211 std::vector<PseudoJet> & jets_that_pass,
212 std::vector<PseudoJet> & jets_that_fail)
const;
216 return validated_worker()->applies_jet_by_jet();
220 std::vector<PseudoJet> operator()(
const std::vector<PseudoJet> & jets)
const;
228 validated_worker()->terminator(jets);
233 return validated_worker()->get_rapidity_extent(rapmin, rapmax);
238 return validated_worker()->description();
244 return validated_worker()->is_geometric();
251 return validated_worker()->has_finite_area();
273 double area(
double ghost_area)
const;
288 return validated_worker()->takes_reference();
295 if (! validated_worker()->takes_reference()){
301 _copy_worker_if_needed();
303 _worker->set_reference(reference);
318 InvalidArea() :
Error(
"Attempt to obtain area from Selector for which this is not meaningful") {}
341 if (_worker.unique())
return;
345 _worker.reset(_worker->copy());
365 Selector SelectorIdentity();
378 Selector
operator ||(
const Selector & s1,
const Selector & s2);
388 Selector
operator&&(
const Selector & s1,
const Selector & s2);
398 Selector
operator*(
const Selector & s1,
const Selector & s2);
467 Selector
SelectorRectangle(
const double half_rap_width,
const double half_phi_width);
490 FASTJET_END_NAMESPACE
492 #endif // __FASTJET_SELECTOR_HH__