10Qjets::Qjets(
double zcut,
double dcut_fctr,
double exp_min,
double exp_max,
double rigidity,
double truncation_fctr)
35 vector< pair<jet_distance, double> > popped_distances;
53 popped_distances.emplace_back(dist,weight);
60 double rand(
Rand()), tot_weight(0.);
61 if (!popped_distances.empty()) {
62 const double inv_norm = norm == 0 ? 1 : 1. / norm;
63 for(vector<pair<jet_distance, double> >::iterator it = popped_distances.begin(); it != popped_distances.end(); ++it){
64 tot_weight += (*it).second * inv_norm;
65 if(tot_weight >= rand){
73 for(vector<pair<jet_distance, double> >::reverse_iterator it = popped_distances.rbegin(); it != popped_distances.rend(); ++it)
95 cs.plugin_record_ij_recombination(jd.
j1, jd.
j2, 1., new_jet);
99 double j1pt = cs.jets()[jd.
j1].perp();
100 double j2pt = cs.jets()[jd.
j2].perp();
104 cs.plugin_record_iB_recombination(jd.
j2, 1.);
108 cs.plugin_record_iB_recombination(jd.
j1, 1.);
115 [[maybe_unused]]
int num_merged_final(0);
117 for(
unsigned int i = 0 ; i < cs.jets().size(); i++)
120 cs.plugin_record_iB_recombination(i,1.);
123 assert(num_merged_final < 2);
128 fastjet::PseudoJet sum(0.,0.,0.,0.);
129 for(vector<fastjet::PseudoJet>::const_iterator it = cs.jets().begin(); it != cs.jets().end(); ++it)
135 double pt1 = cs.jets()[jd.
j1].perp();
136 double pt2 = cs.jets()[jd.
j2].perp();
137 fastjet::PseudoJet sum_jet = cs.jets()[jd.
j1]+cs.jets()[jd.
j2];
138 double sum_pt = sum_jet.perp();
139 double z =
min(pt1,pt2)/sum_pt;
140 double d = sqrt(cs.jets()[jd.
j1].plain_distance(cs.jets()[jd.
j2]));
145 for(
unsigned int i = 0 ; i < inp.size()-1; i++){
147 for(
unsigned int j = i+1 ; j < inp.size(); j++){
161 for(
unsigned int i = 0; i < cs.jets().size(); i++)
171double Qjets::d_ij(
const fastjet::PseudoJet& v1,
const fastjet::PseudoJet& v2)
const{
172 double p1 = v1.perp();
173 double p2 = v2.perp();
175 assert(!std::isnan(ret));
constexpr int pow(int base, int exp) noexcept
void ComputeNewDistanceMeasures(fastjet::ClusterSequence &cs, int new_jet)
double d_ij(const fastjet::PseudoJet &v1, const fastjet::PseudoJet &v2) const
void SetRandSeed(unsigned int seed)
void ComputeAllDistances(const std::vector< fastjet::PseudoJet > &inp)
bool JetsUnmerged(const jet_distance &jd) const
std::priority_queue< jet_distance, std::vector< jet_distance >, JetDistanceCompare > m_distances
bool JetUnmerged(int num) const
jet_distance GetNextDistance()
std::map< int, bool > m_merged_jets
void ComputeDCut(fastjet::ClusterSequence &cs)
void Cluster(fastjet::ClusterSequence &cs)
bool Prune(jet_distance &jd, fastjet::ClusterSequence &cs)
Qjets(double zcut, double dcut_fctr, double exp_min, double exp_max, double rigidity, double truncation_fctr)