28 #ifndef __SPLIT_MERGE_H__
29 #define __SPLIT_MERGE_H__
81 bool jets_pt_less(
const Cjet &j1,
const Cjet &j2);
91 enum Esplit_merge_scale {
102 std::string split_merge_scale_name(Esplit_merge_scale sms);
122 std::vector<double> *
pt;
164 typedef std::multiset<siscone::Cjet,Csplit_merge_ptcomparison>::iterator cjet_iterator;
167 typedef std::vector<siscone::Cjet>::iterator jet_iterator;
196 int init(std::vector<Cmomentum> &_particles, std::vector<Cmomentum> *protocones,
double R2,
double ptmin=0.0);
222 use_pt_weighted_splitting = _use_pt_weighted_splitting;
257 int add_protocones(std::vector<Cmomentum> *protocones,
double R2,
double ptmin=0.0);
268 int perform(
double overlap_tshold,
double ptmin=0.0);
285 std::vector<double>
pt;
336 bool get_overlap(
const Cjet &j1,
const Cjet &j2,
double *v);
350 bool split(cjet_iterator &it_j1, cjet_iterator &it_j2);
360 bool merge(cjet_iterator &it_j1, cjet_iterator &it_j2);
368 bool insert(
Cjet &jet);
376 double get_sm_var2(
Cmomentum &v,
double &pt_tilde);
380 std::auto_ptr<std::multiset<Cjet,Csplit_merge_ptcomparison> > candidates;
390 bool use_pt_weighted_splitting;
392 #ifdef ALLOW_MERGE_IDENTICAL_PROTOCONES
393 std::set<Creference> cand_refs;
int n_left
numer of particles that does not belong to any jet
std::vector< Cmomentum > particles
list of particles
comparison of jets for split–merge ordering
double SM_var2_hardest_cut_off
stop split–merge when the SM_var of the hardest protojet is below this cut-off.
std::vector< Cjet > jets
list of jets
bool merge_identical_protocones
The following flag indicates that identical protocones are to be merged automatically each time aroun...
double stable_cone_soft_pt2_cutoff
pt cutoff for the particles to put in p_uncol_hard this is meant to allow removing soft particles in ...
int * indices
maximal size array for indices works
base class for dynamic coordinates management
int perform(double overlap_tshold, double ptmin=0.0)
really do the splitting and merging At the end, the vector jets is filled with the jets found...
int merge_collinear_and_remove_soft()
build the list 'p_uncol_hard' from p_remain by clustering collinear particles and removing particles ...
std::vector< Cmomentum > p_remain
list of particles remaining to deal with
int pass
pass at which the jet has been found It starts at 0 (first pass), -1 means infinite rapidity ...
int init_particles(std::vector< Cmomentum > &_particles)
initialisation function for particle list
int save_contents(FILE *flux)
save final jets
int init_pleft()
build initial list of left particles
std::vector< double > pt
list of particles' pt
Csplit_merge_ptcomparison()
default ctor
int add_protocones(std::vector< Cmomentum > *protocones, double R2, double ptmin=0.0)
add a list of protocones
Csplit_merge_ptcomparison ptcomparison
member used for detailed comparisons of pt's
std::vector< Cmomentum > p_uncol_hard
list of particles remaining with collinear clustering
double sm_var2
ordering variable used for ordering and overlap in the split–merge.
int idx_size
number of elements in indices1
class for holding a covering range in eta-phi
int full_clear()
full clearance
int set_pt_weighted_splitting(bool _use_pt_weighted_splitting)
use a pt-dependent boundary for splitting When called with true, the criterium for splitting two prot...
int partial_clear()
partial clearance
std::vector< Cmomentum > * particles
pointer to the list of particles
bool operator()(const Cjet &jet1, const Cjet &jet2) const
comparison between 2 jets
Class used to split and merge jets.
double pt_tilde
p-scheme pt
Esplit_merge_scale split_merge_scale
the following parameter controls the variable we're using for the split-merge process i...
int show()
show jets/candidates status
int init(std::vector< Cmomentum > &_particles, std::vector< Cmomentum > *protocones, double R2, double ptmin=0.0)
initialisation function
void get_difference(const Cjet &j1, const Cjet &j2, Cmomentum *v, double *pt_tilde) const
get the difference between 2 jets, calculated such that rounding errors will not affect the result ev...
Csplit_merge()
default ctor
~Csplit_merge()
default dtor
std::string SM_scale_name() const
return the name corresponding to the SM scale variable
int n_pass
index of the run
Ceta_phi_range range
covered range in eta-phi
double most_ambiguous_split
minimal difference in squared distance between a particle and two overlapping protojets when doing a ...
std::vector< double > * pt
pointer to the pt of the particles
std::vector< int > contents
particle contents (list of indices)
int n
number of particles inside