31 #include "fastjet/ClusterSequenceStructure.hh"
32 #include "fastjet/Error.hh"
33 #include "fastjet/PseudoJet.hh"
34 #include "fastjet/ClusterSequence.hh"
36 #include "fastjet/ClusterSequenceAreaBase.hh"
40 FASTJET_BEGIN_NAMESPACE
44 ClusterSequenceStructure::~ClusterSequenceStructure(){
45 if (_associated_cs != NULL
46 && _associated_cs->will_delete_self_when_unused()) {
55 _associated_cs->signal_imminent_self_deletion();
56 delete _associated_cs;
67 bool ClusterSequenceStructure::has_valid_cluster_sequence()
const{
68 return (_associated_cs != NULL);
73 const ClusterSequence* ClusterSequenceStructure::associated_cluster_sequence()
const{
74 return _associated_cs;
85 throw Error(
"you requested information about the internal structure of a jet, but its associated ClusterSequence has gone out of scope.");
86 return _associated_cs;
101 return validated_cs()->has_partner(reference, partner);
111 return validated_cs()->has_child(reference, child);
121 return validated_cs()->has_parents(reference, parent1, parent2);
129 bool ClusterSequenceStructure::object_in_jet(
const PseudoJet &reference,
const PseudoJet &jet)
const{
131 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.");
135 return validated_cs()->object_in_jet(reference, jet);
143 bool ClusterSequenceStructure::has_constituents()
const{
144 if (!has_associated_cluster_sequence())
145 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.");
153 vector<PseudoJet> ClusterSequenceStructure::constituents(
const PseudoJet &reference)
const{
154 return validated_cs()->constituents(reference);
161 bool ClusterSequenceStructure::has_exclusive_subjets()
const{
162 if (!has_associated_cluster_sequence())
163 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.");
179 std::vector<PseudoJet> ClusterSequenceStructure::exclusive_subjets (
const PseudoJet &reference,
const double & dcut)
const {
180 return validated_cs()->exclusive_subjets(reference, dcut);
189 int ClusterSequenceStructure::n_exclusive_subjets(
const PseudoJet &reference,
const double & dcut)
const {
190 return validated_cs()->n_exclusive_subjets(reference, dcut);
201 std::vector<PseudoJet> ClusterSequenceStructure::exclusive_subjets_up_to (
const PseudoJet &reference,
int nsub)
const {
202 return validated_cs()->exclusive_subjets_up_to(reference, nsub);
210 double ClusterSequenceStructure::exclusive_subdmerge(
const PseudoJet &reference,
int nsub)
const {
211 return validated_cs()->exclusive_subdmerge(reference, nsub);
220 double ClusterSequenceStructure::exclusive_subdmerge_max(
const PseudoJet &reference,
int nsub)
const {
221 return validated_cs()->exclusive_subdmerge_max(reference, nsub);
234 bool ClusterSequenceStructure::has_pieces(
const PseudoJet &reference)
const{
236 return has_parents(reference, dummy1, dummy2);
244 vector<PseudoJet> ClusterSequenceStructure::pieces(
const PseudoJet &reference)
const{
246 vector<PseudoJet> res;
247 if (has_parents(reference, j1, j2)){
266 if (csab == NULL)
throw Error(
"you requested jet-area related information, but the PseudoJet does not have associated area information.");
271 bool ClusterSequenceStructure::has_area()
const{
272 if (! has_associated_cluster_sequence())
return false;
273 return (dynamic_cast<const ClusterSequenceAreaBase*>(_associated_cs) != NULL);
278 double ClusterSequenceStructure::area(
const PseudoJet &reference)
const{
279 return validated_csab()->
area(reference);
285 double ClusterSequenceStructure::area_error(
const PseudoJet &reference)
const{
286 return validated_csab()->area_error(reference);
297 bool ClusterSequenceStructure::is_pure_ghost(
const PseudoJet &reference)
const{
305 FASTJET_END_NAMESPACE