CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
Qjets Class Reference

#include <Qjets.h>

Public Member Functions

void Cluster (fastjet::ClusterSequence &cs)
 
 Qjets (double zcut, double dcut_fctr, double exp_min, double exp_max, double rigidity, double truncation_fctr, CLHEP::HepRandomEngine *rnEngine)
 
void SetRandSeed (unsigned int seed)
 

Private Member Functions

void ComputeAllDistances (const std::vector< fastjet::PseudoJet > &inp)
 
void computeDCut (fastjet::ClusterSequence &cs)
 
double ComputeMinimumDistance ()
 
void ComputeNewDistanceMeasures (fastjet::ClusterSequence &cs, unsigned int new_jet)
 
double ComputeNormalization (double dmin)
 
double d_ij (const fastjet::PseudoJet &v1, const fastjet::PseudoJet &v2) const
 
JetDistance GetNextDistance ()
 
bool JetsUnmerged (const JetDistance &jd) const
 
bool JetUnmerged (int num) const
 
bool Prune (JetDistance &jd, fastjet::ClusterSequence &cs)
 
double Rand ()
 
bool Same (const JetDistance &lhs, const JetDistance &rhs)
 

Private Attributes

double _dcut
 
double _dcut_fctr
 
std::priority_queue< JetDistance, std::vector< JetDistance >, JetDistanceCompare_distances
 
double _exp_max
 
double _exp_min
 
std::map< int, bool > _merged_jets
 
bool _rand_seed_set
 
double _rigidity
 
CLHEP::HepRandomEngine * _rnEngine
 
unsigned int _seed
 
double _truncation_fctr
 
double _zcut
 
double omega
 

Detailed Description

Definition at line 28 of file Qjets.h.

Constructor & Destructor Documentation

Qjets::Qjets ( double  zcut,
double  dcut_fctr,
double  exp_min,
double  exp_max,
double  rigidity,
double  truncation_fctr,
CLHEP::HepRandomEngine *  rnEngine 
)
inline

Definition at line 53 of file Qjets.h.

References fwrapper::cs, and SurveyInfoScenario_cff::seed.

53  : _rand_seed_set(false),
54  _zcut(zcut),
55  _dcut(-1.),
56  _dcut_fctr(dcut_fctr),
57  _exp_min(exp_min),
58  _exp_max(exp_max),
60  _truncation_fctr(truncation_fctr),
61  _rnEngine(rnEngine)
62  {};
double _zcut
Definition: Qjets.h:33
double _dcut
Definition: Qjets.h:33
double _dcut_fctr
Definition: Qjets.h:33
double _exp_max
Definition: Qjets.h:33
double _exp_min
Definition: Qjets.h:33
bool _rand_seed_set
Definition: Qjets.h:31
double _truncation_fctr
Definition: Qjets.h:33
double _rigidity
Definition: Qjets.h:33
CLHEP::HepRandomEngine * _rnEngine
Definition: Qjets.h:36

Member Function Documentation

void Qjets::Cluster ( fastjet::ClusterSequence &  cs)

Definition at line 62 of file Qjets.cc.

References QjetsBaseExtras::_wij, and mps_fire::i.

Referenced by QjetsPlugin::run_clustering().

62  {
63  omega = 1.;
64  QjetsBaseExtras * extras = new QjetsBaseExtras();
65  computeDCut(cs);
66 
67  // Populate all the distances
68  ComputeAllDistances(cs.jets());
70 
71  while(!_distances.empty() && jd.dij != -1.){
72  if(!Prune(jd,cs)){
73  // _merged_jets.push_back(jd.j1);
74  // _merged_jets.push_back(jd.j2);
75  _merged_jets[jd.j1] = true;
76  _merged_jets[jd.j2] = true;
77 
78  int new_jet=-1;
79  cs.plugin_record_ij_recombination(jd.j1, jd.j2, 1., new_jet);
80  if(!JetUnmerged(new_jet))
81  edm::LogError("QJets Clustering") << "Problem with FastJet::plugin_record_ij_recombination";
83  } else {
84  double j1pt = cs.jets()[jd.j1].perp();
85  double j2pt = cs.jets()[jd.j2].perp();
86  if(j1pt>j2pt){
87  // _merged_jets.push_back(jd.j2);
88  _merged_jets[jd.j2] = true;
89  cs.plugin_record_iB_recombination(jd.j2, 1.);
90  } else {
91  // _merged_jets.push_back(jd.j1);
92  _merged_jets[jd.j1] = true;
93  cs.plugin_record_iB_recombination(jd.j1, 1.);
94  }
95  }
96  jd = GetNextDistance();
97  }
98 
99  extras->_wij = omega;
100  cs.plugin_associate_extras(extras);
101 
102  // merge remaining jets with beam
103  int num_merged_final(0);
104  for(unsigned int i = 0 ; i < cs.jets().size(); i++)
105  if(JetUnmerged(i)){
106  num_merged_final++;
107  cs.plugin_record_iB_recombination(i,1.);
108  }
109 
110  if(!(num_merged_final < 2))
111  edm::LogError("QJets Clustering") << "More than 1 jet remains after reclustering";
112 }
void ComputeNewDistanceMeasures(fastjet::ClusterSequence &cs, unsigned int new_jet)
Definition: Qjets.cc:147
double _wij
Definition: Qjets.h:77
bool JetUnmerged(int num) const
Definition: Qjets.cc:10
unique_ptr< ClusterSequence > cs
bool Prune(JetDistance &jd, fastjet::ClusterSequence &cs)
Definition: Qjets.cc:122
void computeDCut(fastjet::ClusterSequence &cs)
Definition: Qjets.cc:114
JetDistance GetNextDistance()
Definition: Qjets.cc:18
double omega
Definition: Qjets.h:30
void ComputeAllDistances(const std::vector< fastjet::PseudoJet > &inp)
Definition: Qjets.cc:132
std::priority_queue< JetDistance, std::vector< JetDistance >, JetDistanceCompare > _distances
Definition: Qjets.h:35
std::map< int, bool > _merged_jets
Definition: Qjets.h:34
void Qjets::ComputeAllDistances ( const std::vector< fastjet::PseudoJet > &  inp)
private

Definition at line 132 of file Qjets.cc.

References JetDistance::dij, mps_fire::i, JetDistance::j1, and JetDistance::j2.

132  {
133  for(unsigned int i = 0 ; i < inp.size()-1; i++){
134  // jet-jet distances
135  for(unsigned int j = i+1 ; j < inp.size(); j++){
136  JetDistance jd;
137  jd.j1 = i;
138  jd.j2 = j;
139  if(jd.j1 != jd.j2){
140  jd.dij = d_ij(inp[i],inp[j]);
141  _distances.push(jd);
142  }
143  }
144  }
145 }
double dij
Definition: Qjets.h:17
int j2
Definition: Qjets.h:19
double d_ij(const fastjet::PseudoJet &v1, const fastjet::PseudoJet &v2) const
Definition: Qjets.cc:159
std::priority_queue< JetDistance, std::vector< JetDistance >, JetDistanceCompare > _distances
Definition: Qjets.h:35
int j1
Definition: Qjets.h:18
void Qjets::computeDCut ( fastjet::ClusterSequence &  cs)
private

Definition at line 114 of file Qjets.cc.

114  {
115  // assume all jets in cs form a single jet. compute mass and pt
116  fastjet::PseudoJet sum(0.,0.,0.,0.);
117  for(vector<fastjet::PseudoJet>::const_iterator it = cs.jets().begin(); it != cs.jets().end(); it++)
118  sum += (*it);
119  _dcut = 2. * _dcut_fctr * sum.m()/sum.perp();
120 }
unique_ptr< ClusterSequence > cs
double _dcut
Definition: Qjets.h:33
double _dcut_fctr
Definition: Qjets.h:33
double Qjets::ComputeMinimumDistance ( )
private
void Qjets::ComputeNewDistanceMeasures ( fastjet::ClusterSequence &  cs,
unsigned int  new_jet 
)
private

Definition at line 147 of file Qjets.cc.

References JetDistance::dij, mps_fire::i, JetDistance::j1, and JetDistance::j2.

147  {
148  // jet-jet distances
149  for(unsigned int i = 0; i < cs.jets().size(); i++)
150  if(JetUnmerged(i) && i != new_jet){
151  JetDistance jd;
152  jd.j1 = new_jet;
153  jd.j2 = i;
154  jd.dij = d_ij(cs.jets()[jd.j1], cs.jets()[jd.j2]);
155  _distances.push(jd);
156  }
157 }
bool JetUnmerged(int num) const
Definition: Qjets.cc:10
unique_ptr< ClusterSequence > cs
double dij
Definition: Qjets.h:17
int j2
Definition: Qjets.h:19
double d_ij(const fastjet::PseudoJet &v1, const fastjet::PseudoJet &v2) const
Definition: Qjets.cc:159
std::priority_queue< JetDistance, std::vector< JetDistance >, JetDistanceCompare > _distances
Definition: Qjets.h:35
int j1
Definition: Qjets.h:18
double Qjets::ComputeNormalization ( double  dmin)
private
double Qjets::d_ij ( const fastjet::PseudoJet &  v1,
const fastjet::PseudoJet &  v2 
) const
private

Definition at line 159 of file Qjets.cc.

References edm::isNotFinite(), SiStripPI::max, min(), p1, p2, and funct::pow().

159  {
160  double p1 = v1.perp();
161  double p2 = v2.perp();
162  double ret = pow(min(p1,p2),_exp_min) * pow(max(p1,p2),_exp_max) * v1.squared_distance(v2);
163  if(edm::isNotFinite(ret))
164  edm::LogError("QJets Clustering") << "d_ij is not finite";
165  return ret;
166 }
constexpr bool isNotFinite(T x)
Definition: isFinite.h:9
double _exp_max
Definition: Qjets.h:33
double _exp_min
Definition: Qjets.h:33
T min(T a, T b)
Definition: MathUtil.h:58
double p2[4]
Definition: TauolaWrapper.h:90
double p1[4]
Definition: TauolaWrapper.h:89
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
JetDistance Qjets::GetNextDistance ( )
private

Definition at line 18 of file Qjets.cc.

References JetDistance::dij, JetChargeProducer_cfi::exp, JetDistance::j1, JetDistance::j2, rand(), and mps_merge::weight.

18  {
19  vector< pair<JetDistance, double> > popped_distances;
20  double norm(0.);
21  JetDistance ret;
22  ret.j1 = -1;
23  ret.j2 = -1;
24  ret.dij = -1.;
25  bool dmin_set(false);
26  double dmin(0.);
27 
28  while(!_distances.empty()){
29  JetDistance dist = _distances.top();
30  _distances.pop();
31  if(JetsUnmerged(dist)){
32  if(!dmin_set){
33  dmin = dist.dij;
34  dmin_set = true;
35  }
36  double weight = exp(-_rigidity * (dist.dij-dmin) /dmin);
37  popped_distances.push_back(make_pair(dist,weight));
38  norm += weight;
39  if(weight/norm < _truncation_fctr)
40  break;
41  }
42  }
43 
44  double rand(Rand()), tot_weight(0.);
45  for(vector<pair<JetDistance, double> >::iterator it = popped_distances.begin(); it != popped_distances.end(); it++){
46  tot_weight += (*it).second/norm;
47  if(tot_weight >= rand){
48  ret = (*it).first;
49  omega *= ((*it).second);
50  break;
51  }
52  }
53 
54  // repopulate in reverse (maybe quicker?)
55  for(vector<pair<JetDistance, double> >::reverse_iterator it = popped_distances.rbegin(); it != popped_distances.rend(); it++)
56  if(JetsUnmerged((*it).first))
57  _distances.push((*it).first);
58 
59  return ret;
60 }
double dij
Definition: Qjets.h:17
int j2
Definition: Qjets.h:19
Definition: weight.py:1
double omega
Definition: Qjets.h:30
double _truncation_fctr
Definition: Qjets.h:33
double _rigidity
Definition: Qjets.h:33
double Rand()
Definition: Qjets.cc:168
std::priority_queue< JetDistance, std::vector< JetDistance >, JetDistanceCompare > _distances
Definition: Qjets.h:35
Signal rand(Signal arg)
Definition: vlib.cc:442
int j1
Definition: Qjets.h:18
bool JetsUnmerged(const JetDistance &jd) const
Definition: Qjets.cc:14
bool Qjets::JetsUnmerged ( const JetDistance jd) const
private

Definition at line 14 of file Qjets.cc.

References JetDistance::j1, and JetDistance::j2.

14  {
15  return JetUnmerged(jd.j1) && JetUnmerged(jd.j2);
16 }
bool JetUnmerged(int num) const
Definition: Qjets.cc:10
int j2
Definition: Qjets.h:19
int j1
Definition: Qjets.h:18
bool Qjets::JetUnmerged ( int  num) const
private

Definition at line 10 of file Qjets.cc.

10  {
11  return _merged_jets.find(num) == _merged_jets.end();
12 }
std::map< int, bool > _merged_jets
Definition: Qjets.h:34
bool Qjets::Prune ( JetDistance jd,
fastjet::ClusterSequence &  cs 
)
private

Definition at line 122 of file Qjets.cc.

References JetDistance::j1, JetDistance::j2, min(), hiDetachedQuadStep_cff::pt1, and hiDetachedQuadStep_cff::pt2.

122  {
123  double pt1 = cs.jets()[jd.j1].perp();
124  double pt2 = cs.jets()[jd.j2].perp();
125  fastjet::PseudoJet sum_jet = cs.jets()[jd.j1]+cs.jets()[jd.j2];
126  double sum_pt = sum_jet.perp();
127  double z = min(pt1,pt2)/sum_pt;
128  double d2 = cs.jets()[jd.j1].plain_distance(cs.jets()[jd.j2]);
129  return (d2 > _dcut*_dcut) && (z < _zcut);
130 }
double _zcut
Definition: Qjets.h:33
unique_ptr< ClusterSequence > cs
double _dcut
Definition: Qjets.h:33
int j2
Definition: Qjets.h:19
T min(T a, T b)
Definition: MathUtil.h:58
int j1
Definition: Qjets.h:18
double Qjets::Rand ( )
private

Definition at line 168 of file Qjets.cc.

168  {
169  double ret = 0.;
170  //if(_rand_seed_set)
171  // ret = rand_r(&_seed)/(double)RAND_MAX;
172  //else
173  //ret = rand()/(double)RAND_MAX;
174  ret = _rnEngine->flat();
175  return ret;
176 }
CLHEP::HepRandomEngine * _rnEngine
Definition: Qjets.h:36
bool Qjets::Same ( const JetDistance lhs,
const JetDistance rhs 
)
private
void Qjets::SetRandSeed ( unsigned int  seed)

Definition at line 5 of file Qjets.cc.

References SurveyInfoScenario_cff::seed.

Referenced by QjetsPlugin::run_clustering().

5  {
6  _rand_seed_set = true;
7  _seed = seed;
8 }
unsigned int _seed
Definition: Qjets.h:32
bool _rand_seed_set
Definition: Qjets.h:31

Member Data Documentation

double Qjets::_dcut
private

Definition at line 33 of file Qjets.h.

double Qjets::_dcut_fctr
private

Definition at line 33 of file Qjets.h.

std::priority_queue<JetDistance, std::vector<JetDistance>, JetDistanceCompare> Qjets::_distances
private

Definition at line 35 of file Qjets.h.

double Qjets::_exp_max
private

Definition at line 33 of file Qjets.h.

double Qjets::_exp_min
private

Definition at line 33 of file Qjets.h.

std::map<int,bool> Qjets::_merged_jets
private

Definition at line 34 of file Qjets.h.

bool Qjets::_rand_seed_set
private

Definition at line 31 of file Qjets.h.

double Qjets::_rigidity
private

Definition at line 33 of file Qjets.h.

CLHEP::HepRandomEngine* Qjets::_rnEngine
private

Definition at line 36 of file Qjets.h.

unsigned int Qjets::_seed
private

Definition at line 32 of file Qjets.h.

double Qjets::_truncation_fctr
private

Definition at line 33 of file Qjets.h.

double Qjets::_zcut
private

Definition at line 33 of file Qjets.h.

double Qjets::omega
private

Definition at line 30 of file Qjets.h.