31#include "fastjet/tools/CASubJetTagger.hh" 
   32#include "fastjet/ClusterSequence.hh" 
   40FASTJET_BEGIN_NAMESPACE
 
   43LimitedWarning CASubJetTagger::_non_ca_warnings;
 
   47string CASubJetTagger::description()
 const{
 
   49  oss << 
"CASubJetTagger with z_threshold=" << _z_threshold ;
 
   50  if (_absolute_z_cut) oss << 
" (defined wrt original jet)";
 
   51  oss << 
" and scale choice ";
 
   52  switch (_scale_choice) {
 
   53  case kt2_distance:         oss << 
"kt2_distance";         
break;
 
   54  case jade_distance:        oss << 
"jade_distance";        
break;
 
   55  case jade2_distance:       oss << 
"jade2_distance";       
break;
 
   56  case plain_distance:       oss << 
"plain_distance";       
break;
 
   57  case mass_drop_distance:   oss << 
"mass_drop_distance";   
break;
 
   58  case dot_product_distance: oss << 
"dot_product_distance"; 
break;
 
   60    throw Error(
"unrecognized scale choice");
 
   72    _non_ca_warnings.warn(
"CASubJetTagger should only be applied on jets from a Cambridge/Aachen clustering; use it with other algorithms at your own risk");
 
   77  aux.aux_distance = -numeric_limits<double>::max();
 
   80  _recurse_through_jet(jet, aux, jet); 
 
   87  if (result_local == 
PseudoJet()) 
return result_local;
 
  115  switch (_scale_choice) {
 
  132  case mass_drop_distance:
 
  134    dist = jet.
m() - std::max(parent1.
m(),parent2.
m());
 
  136  case dot_product_distance:
 
  143    throw Error(
"unrecognized scale choice");
 
  152  if (parent1.
perp2() < parent2.
perp2()) std::swap(parent1,parent2);
 
  154  if (_absolute_z_cut) {
 
  155    z2    = parent2.
perp() / original_jet.
perp();
 
  156    zcut1 = parent1.
perp() / original_jet.
perp() >= _z_threshold;
 
  160  zcut2 = z2 >= _z_threshold;
 
  163    if (dist > aux.aux_distance){
 
  165      aux.aux_distance = dist;
 
  171  if (zcut1) _recurse_through_jet(parent1, aux, original_jet);
 
  172  if (zcut2) _recurse_through_jet(parent2, aux, original_jet);
 
the structure returned by a CASubJetTagger
bool _absolute_z
whether z is computed wrt to the original jet or not
CASubJetTagger::ScaleChoice _scale_choice
the user scale choice
double _z
the transverse momentum fraction
double _distance
the maximal distance associated with the result
class that contains the result internally
const JetDefinition & jet_def() const
return a reference to the jet definition
base class corresponding to errors that can be thrown by FastJet
JetAlgorithm jet_algorithm() const
return information about the definition...
Class to contain pseudojets, including minimal information of use to jet-clustering routines.
double squared_distance(const PseudoJet &other) const
returns squared cylinder (rap-phi) distance between this jet and another
double perp() const
returns the scalar transverse momentum
double perp2() const
returns the squared transverse momentum
double kt_distance(const PseudoJet &other) const
returns kt distance (R=1) between this jet and another
virtual bool has_parents(PseudoJet &parent1, PseudoJet &parent2) const
check if it is the product of a recombination, in which case return the 2 parents through the 'parent...
void set_structure_shared_ptr(const SharedPtr< PseudoJetStructureBase > &structure_in)
set the associated structure
double m() const
returns the invariant mass (If m2() is negative then -sqrt(-m2()) is returned, as in CLHEP)
const ClusterSequence * validated_cs() const
shorthand for validated_cluster_sequence()
An implementation of shared pointers that is broadly similar to C++11 shared_ptr (https://en....
@ cambridge_algorithm
the longitudinally invariant variant of the cambridge algorithm (aka Aachen algoithm).
double dot_product(const PseudoJet &a, const PseudoJet &b)
returns the 4-vector dot product of a and b