31 #include "fastjet/tools/Filter.hh"
32 #include "fastjet/tools/Recluster.hh"
33 #include <fastjet/ClusterSequenceActiveAreaExplicitGhosts.hh>
42 FASTJET_BEGIN_NAMESPACE
49 string Filter::description()
const {
51 return "uninitialised Filter";
55 ostr <<
"Filter with subjet_def = ";
57 ostr <<
"Cambridge/Aachen algorithm with dynamic Rfilt"
58 <<
" (recomb. scheme deduced from jet, or E-scheme if not unique)";
59 }
else if (_Rfilt > 0) {
60 ostr <<
"Cambridge/Aachen algorithm with Rfilt = "
62 <<
" (recomb. scheme deduced from jet, or E-scheme if not unique)";
64 ostr << _subjet_def.description();
66 ostr<<
", selection " << _selector.description();
68 ostr <<
", subtractor: " << _subtractor->description();
69 }
else if (_rho != 0) {
70 ostr <<
", subtracting with rho = " << _rho;
84 throw Error(
"uninitialised Filter");
91 vector<PseudoJet> subjets;
93 bool ca_optimised = _set_filtered_elements(jet, subjets);
97 subjets = (*_subtractor)(subjets);
99 if (subjets.size()>0){
101 for (
unsigned int i=0;i<subjets.size();i++){
108 vector<PseudoJet> kept, rejected;
113 selector_copy.
sift(subjets, kept, rejected);
116 return _finalise(jet, kept, rejected, ca_optimised);
124 bool Filter::_set_filtered_elements(
const PseudoJet & jet,
125 vector<PseudoJet> & filtered_elements)
const {
128 if ((_Rfilt>=0) || (_Rfiltfunc))
129 recluster =
Recluster(cambridge_algorithm, (_Rfiltfunc) ? (*_Rfiltfunc)(jet) : _Rfilt, Recluster::keep_all);
131 recluster =
Recluster(_subjet_def,
false, Recluster::keep_all);
140 PseudoJet Filter::_finalise(
const PseudoJet & ,
141 vector<PseudoJet> & kept,
142 vector<PseudoJet> & rejected,
143 bool ca_optimisation_used)
const {
144 PseudoJet filtered_jet;
146 if (kept.size()+rejected.size()>0){
148 const JetDefinition::Recombiner &rec = (kept.size()>0)
149 ? *(kept[0].associated_cs()->jet_def().recombiner())
150 : *(rejected[0].associated_cs()->jet_def().recombiner());
153 filtered_jet = join<StructureType>(kept, rec);
155 filtered_jet = join<StructureType>(kept);
157 StructureType *fs = (StructureType*) filtered_jet.structure_non_const_ptr();
158 fs->_rejected = rejected;
164 if ((ca_optimisation_used) && (kept.size()+rejected.size()>0)){
165 bool has_non_explicit_ghost_area = (kept.size()>0)
166 ? (kept[0].has_area() && kept[0].validated_csab()->has_explicit_ghosts())
167 : (rejected[0].has_area() && rejected[0].validated_csab()->has_explicit_ghosts());
168 if (has_non_explicit_ghost_area)
176 FASTJET_END_NAMESPACE