29 #include "fastjet/ClusterSequenceStructure.hh" 30 #include "fastjet/Error.hh" 31 #include "fastjet/PseudoJet.hh" 32 #include "fastjet/ClusterSequence.hh" 34 #include "fastjet/ClusterSequenceAreaBase.hh" 38 FASTJET_BEGIN_NAMESPACE
42 ClusterSequenceStructure::~ClusterSequenceStructure(){
43 if (_associated_cs != NULL
44 && _associated_cs->will_delete_self_when_unused()) {
53 _associated_cs->signal_imminent_self_deletion();
54 delete _associated_cs;
65 bool ClusterSequenceStructure::has_valid_cluster_sequence()
const{
66 return (_associated_cs != NULL);
71 const ClusterSequence* ClusterSequenceStructure::associated_cluster_sequence()
const{
72 return _associated_cs;
83 throw Error(
"you requested information about the internal structure of a jet, but its associated ClusterSequence has gone out of scope.");
84 return _associated_cs;
98 bool ClusterSequenceStructure::has_partner(
const PseudoJet &reference,
PseudoJet &partner)
const{
99 return validated_cs()->has_partner(reference, partner);
109 return validated_cs()->has_child(reference, child);
119 return validated_cs()->has_parents(reference, parent1, parent2);
127 bool ClusterSequenceStructure::object_in_jet(
const PseudoJet &reference,
const PseudoJet &jet)
const{
129 throw Error(
"you requested information about the internal structure of a jet, but it is not associated with a ClusterSequence or its associated ClusterSequence has gone out of scope.");
133 return validated_cs()->object_in_jet(reference, jet);
141 bool ClusterSequenceStructure::has_constituents()
const{
142 if (!has_associated_cluster_sequence())
143 throw Error(
"you requested information about the internal structure of a jet, but it is not associated with a ClusterSequence or its associated ClusterSequence has gone out of scope.");
151 vector<PseudoJet> ClusterSequenceStructure::constituents(
const PseudoJet &reference)
const{
152 return validated_cs()->constituents(reference);
159 bool ClusterSequenceStructure::has_exclusive_subjets()
const{
160 if (!has_associated_cluster_sequence())
161 throw Error(
"you requested information about the internal structure of a jet, but it is not associated with a ClusterSequence or its associated ClusterSequence has gone out of scope.");
177 std::vector<PseudoJet> ClusterSequenceStructure::exclusive_subjets (
const PseudoJet &reference,
const double & dcut)
const {
178 return validated_cs()->exclusive_subjets(reference, dcut);
187 int ClusterSequenceStructure::n_exclusive_subjets(
const PseudoJet &reference,
const double & dcut)
const {
188 return validated_cs()->n_exclusive_subjets(reference, dcut);
199 std::vector<PseudoJet> ClusterSequenceStructure::exclusive_subjets_up_to (
const PseudoJet &reference,
int nsub)
const {
200 return validated_cs()->exclusive_subjets_up_to(reference, nsub);
208 double ClusterSequenceStructure::exclusive_subdmerge(
const PseudoJet &reference,
int nsub)
const {
209 return validated_cs()->exclusive_subdmerge(reference, nsub);
218 double ClusterSequenceStructure::exclusive_subdmerge_max(
const PseudoJet &reference,
int nsub)
const {
219 return validated_cs()->exclusive_subdmerge_max(reference, nsub);
232 bool ClusterSequenceStructure::has_pieces(
const PseudoJet &reference)
const{
234 return has_parents(reference, dummy1, dummy2);
242 vector<PseudoJet> ClusterSequenceStructure::pieces(
const PseudoJet &reference)
const{
244 vector<PseudoJet> res;
245 if (has_parents(reference, j1, j2)){
264 if (csab == NULL)
throw Error(
"you requested jet-area related information, but the PseudoJet does not have associated area information.");
269 bool ClusterSequenceStructure::has_area()
const{
270 if (! has_associated_cluster_sequence())
return false;
271 return (dynamic_cast<const ClusterSequenceAreaBase*>(_associated_cs) != NULL);
276 double ClusterSequenceStructure::area(
const PseudoJet &reference)
const{
277 return validated_csab()->
area(reference);
283 double ClusterSequenceStructure::area_error(
const PseudoJet &reference)
const{
284 return validated_csab()->area_error(reference);
295 bool ClusterSequenceStructure::is_pure_ghost(
const PseudoJet &reference)
const{
303 FASTJET_END_NAMESPACE
virtual PseudoJet area_4vector() const
return the jet 4-vector area.
bool has_associated_cluster_sequence() const
returns true if this PseudoJet has an associated ClusterSequence.
virtual double area(const PseudoJet &) const
return the area associated with the given jet; this base class returns 0.
virtual bool is_pure_ghost() const
true if this jet is made exclusively of ghosts.
base class that sets interface for extensions of ClusterSequence that provide information about the a...
base class corresponding to errors that can be thrown by FastJet
const ClusterSequence * associated_cluster_sequence() const
get a (const) pointer to the parent ClusterSequence (NULL if inexistent)
Class to contain pseudojets, including minimal information of use to jet-clustering routines...