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;
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