29 #include "fastjet/ClusterSequenceStructure.hh"
30 #include "fastjet/Error.hh"
31 #include "fastjet/PseudoJet.hh"
32 #include "fastjet/ClusterSequence.hh"
33 #include "fastjet/ClusterSequenceAreaBase.hh"
36 FASTJET_BEGIN_NAMESPACE
40 ClusterSequenceStructure::~ClusterSequenceStructure(){
41 if (_associated_cs != NULL
42 && _associated_cs->will_delete_self_when_unused()) {
51 _associated_cs->signal_imminent_self_deletion();
52 delete _associated_cs;
63 bool ClusterSequenceStructure::has_valid_cluster_sequence()
const{
64 return (_associated_cs != NULL);
69 const ClusterSequence* ClusterSequenceStructure::associated_cluster_sequence()
const{
70 return _associated_cs;
81 throw Error(
"you requested information about the internal structure of a jet, but its associated ClusterSequence has gone out of scope.");
82 return _associated_cs;
96 bool ClusterSequenceStructure::has_partner(
const PseudoJet &reference,
PseudoJet &partner)
const{
97 return validated_cs()->has_partner(reference, partner);
107 return validated_cs()->has_child(reference, child);
117 return validated_cs()->has_parents(reference, parent1, parent2);
125 bool ClusterSequenceStructure::object_in_jet(
const PseudoJet &reference,
const PseudoJet &jet)
const{
127 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.");
131 return validated_cs()->object_in_jet(reference, jet);
139 bool ClusterSequenceStructure::has_constituents()
const{
140 if (!has_associated_cluster_sequence())
141 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.");
149 vector<PseudoJet> ClusterSequenceStructure::constituents(
const PseudoJet &reference)
const{
150 return validated_cs()->constituents(reference);
157 bool ClusterSequenceStructure::has_exclusive_subjets()
const{
158 if (!has_associated_cluster_sequence())
159 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.");
175 std::vector<PseudoJet> ClusterSequenceStructure::exclusive_subjets (
const PseudoJet &reference,
const double & dcut)
const {
176 return validated_cs()->exclusive_subjets(reference, dcut);
185 int ClusterSequenceStructure::n_exclusive_subjets(
const PseudoJet &reference,
const double & dcut)
const {
186 return validated_cs()->n_exclusive_subjets(reference, dcut);
197 std::vector<PseudoJet> ClusterSequenceStructure::exclusive_subjets_up_to (
const PseudoJet &reference,
int nsub)
const {
198 return validated_cs()->exclusive_subjets_up_to(reference, nsub);
206 double ClusterSequenceStructure::exclusive_subdmerge(
const PseudoJet &reference,
int nsub)
const {
207 return validated_cs()->exclusive_subdmerge(reference, nsub);
216 double ClusterSequenceStructure::exclusive_subdmerge_max(
const PseudoJet &reference,
int nsub)
const {
217 return validated_cs()->exclusive_subdmerge_max(reference, nsub);
230 bool ClusterSequenceStructure::has_pieces(
const PseudoJet &reference)
const{
232 return has_parents(reference, dummy1, dummy2);
240 vector<PseudoJet> ClusterSequenceStructure::pieces(
const PseudoJet &reference)
const{
242 vector<PseudoJet> res;
243 if (has_parents(reference, j1, j2)){
261 if (csab == NULL)
throw Error(
"you requested jet-area related information, but the PseudoJet does not have associated area information.");
267 bool ClusterSequenceStructure::has_area()
const{
268 if (! has_associated_cluster_sequence())
return false;
269 return (dynamic_cast<const ClusterSequenceAreaBase*>(_associated_cs) != NULL);
274 double ClusterSequenceStructure::area(
const PseudoJet &reference)
const{
275 return validated_csab()->
area(reference);
281 double ClusterSequenceStructure::area_error(
const PseudoJet &reference)
const{
282 return validated_csab()->area_error(reference);
293 bool ClusterSequenceStructure::is_pure_ghost(
const PseudoJet &reference)
const{
299 FASTJET_END_NAMESPACE