#include <ClusterSequenceActiveAreaExplicitGhosts.hh>
Inheritance diagram for fastjet::ClusterSequenceActiveAreaExplicitGhosts:


Public Member Functions | |
| template<class L> | |
| ClusterSequenceActiveAreaExplicitGhosts (const std::vector< L > &pseudojets, const JetDefinition &jet_def, const GhostedAreaSpec &area_spec, const bool &writeout_combinations=false) | |
| constructor using a GhostedAreaSpec to specify how the area is to be measured | |
| template<class L> | |
| ClusterSequenceActiveAreaExplicitGhosts (const std::vector< L > &pseudojets, const JetDefinition &jet_def, const std::vector< L > &ghosts, double ghost_area, const bool &writeout_combinations=false) | |
| template<class L> | |
| void | _initialise (const std::vector< L > &pseudojets, const JetDefinition &jet_def, const GhostedAreaSpec *area_spec, const std::vector< L > *ghosts, double ghost_area, const bool &writeout_combinations) |
| does the actual work of initialisation | |
| unsigned int | n_hard_particles () const |
| returns the number of hard particles (i.e. those supplied by the user). | |
| virtual double | area (const PseudoJet &jet) const |
| returns the area of a jet | |
| virtual PseudoJet | area_4vector (const PseudoJet &jet) const |
| returns a four vector corresponding to the sum (E-scheme) of the ghost four-vectors composing the jet area, normalised such that for a small contiguous area the p_t of the extended_area jet is equal to area of the jet. | |
| virtual bool | is_pure_ghost (const PseudoJet &jet) const |
| true if a jet is made exclusively of ghosts | |
| bool | is_pure_ghost (int history_index) const |
| true if the entry in the history index corresponds to a ghost; if hist_ix does not correspond to an actual particle (i.e. | |
| virtual double | empty_area (const RangeDefinition &range) const |
| return the total area, up to |y|<maxrap, that consists of unclustered ghosts | |
| double | total_area () const |
| returns the total area under study | |
| double | max_ghost_perp2 () const |
| returns the largest squared transverse momentum among all ghosts | |
| bool | has_dangerous_particles () const |
| returns true if there are any particles whose transverse momentum if so low that there's a risk of the ghosts having modified the clustering sequence | |
Private Member Functions | |
| void | _add_ghosts (const GhostedAreaSpec &area_spec) |
| template<class L> | |
| void | _add_ghosts (const std::vector< L > &ghosts, double ghost_area) |
| add an explicitly specified bunch of ghosts | |
| void | _post_process () |
| routine to be called after the processing is done so as to establish summary information on all the jets (areas, whether pure ghost, etc. | |
Private Attributes | |
| int | _n_ghosts |
| double | _ghost_area |
| std::vector< bool > | _is_pure_ghost |
| std::vector< double > | _areas |
| std::vector< PseudoJet > | _area_4vectors |
| double | _max_ghost_perp2 |
| bool | _has_dangerous_particles |
| unsigned int | _initial_hard_n |
Static Private Attributes | |
| static LimitedWarning | _warnings |
| allow for warnings | |
.. Figure out what to do about seeds later...)
Definition at line 48 of file ClusterSequenceActiveAreaExplicitGhosts.hh.
|
||||||||||||||||||||||||
|
constructor using a GhostedAreaSpec to specify how the area is to be measured
Definition at line 54 of file ClusterSequenceActiveAreaExplicitGhosts.hh. 00058 : ClusterSequenceAreaBase() { 00059 std::vector<L> * ghosts = NULL; 00060 _initialise(pseudojets,jet_def,&area_spec,ghosts,0.0, 00061 writeout_combinations); }
|
|
||||||||||||||||||||||||||||
|
Definition at line 64 of file ClusterSequenceActiveAreaExplicitGhosts.hh. 00069 : ClusterSequenceAreaBase() { 00070 const GhostedAreaSpec * area_spec = NULL; 00071 _initialise(pseudojets,jet_def,area_spec,&ghosts,ghost_area, 00072 writeout_combinations); }
|
|
||||||||||||||||
|
add an explicitly specified bunch of ghosts
Definition at line 215 of file ClusterSequenceActiveAreaExplicitGhosts.hh. References _ghost_area, _is_pure_ghost, fastjet::ClusterSequence::_jets, and _n_ghosts. 00217 {
00218
00219
00220 for (unsigned i = 0; i < ghosts.size(); i++) {
00221 _is_pure_ghost.push_back(true);
00222 _jets.push_back(ghosts[i]);
00223 }
00224 // and record some info about ghosts
00225 _ghost_area = ghost_area;
00226 _n_ghosts = ghosts.size();
00227 }
|
|
|
Definition at line 46 of file ClusterSequenceActiveAreaExplicitGhosts.cc. References _ghost_area, _initial_hard_n, _is_pure_ghost, fastjet::ClusterSequence::_jets, _n_ghosts, fastjet::GhostedAreaSpec::actual_ghost_area(), fastjet::GhostedAreaSpec::add_ghosts(), and fastjet::GhostedAreaSpec::n_ghosts(). 00047 {
00048
00049 // add the ghosts to the jets
00050 area_spec.add_ghosts(_jets);
00051
00052 // now add labelling...
00053 for (unsigned i = _initial_hard_n; i < _jets.size(); i++) {
00054 //_jets[i].set_user_index(1);
00055 _is_pure_ghost.push_back(true);
00056 }
00057
00058 // and record some info from the area_spec
00059 _ghost_area = area_spec.actual_ghost_area();
00060 _n_ghosts = area_spec.n_ghosts();
00061 }
|
|
||||||||||||||||||||||||||||||||
|
does the actual work of initialisation
Definition at line 162 of file ClusterSequenceActiveAreaExplicitGhosts.hh. 00167 {
00168 // don't reserve space yet -- will be done below
00169
00170 // insert initial jets this way so that any type L that can be
00171 // converted to a pseudojet will work fine (basically PseudoJet
00172 // and any type that has [] subscript access to the momentum
00173 // components, such as CLHEP HepLorentzVector).
00174 for (unsigned int i = 0; i < pseudojets.size(); i++) {
00175 PseudoJet mom(pseudojets[i]);
00176 //mom.set_user_index(0); // for user's particles (user index now lost...)
00177 _jets.push_back(mom);
00178 _is_pure_ghost.push_back(false);
00179 }
00180
00181 _initial_hard_n = _jets.size();
00182
00183 if (area_spec != NULL) {
00184 _add_ghosts(*area_spec);
00185 } else {
00186 _add_ghosts(*ghosts, ghost_area);
00187 }
00188
00189 if (writeout_combinations) {
00190 std::cout << "# Printing particles including ghosts\n";
00191 for (unsigned j = 0; j < _jets.size(); j++) {
00192 printf("%5u %20.13f %20.13f %20.13e\n",
00193 j,_jets[j].rap(),_jets[j].phi_02pi(),_jets[j].kt2());
00194 }
00195 std::cout << "# Finished printing particles including ghosts\n";
00196 }
00197
00198 // this will ensure that we can still point to jets without
00199 // difficulties arising!
00200 _jets.reserve(_jets.size()*2);
00201
00202 // run the clustering
00203 _initialise_and_run(jet_def,writeout_combinations);
00204
00205 // set up all other information
00206 _post_process();
00207 }
|
|
|
routine to be called after the processing is done so as to establish summary information on all the jets (areas, whether pure ghost, etc. ) Definition at line 110 of file ClusterSequenceActiveAreaExplicitGhosts.cc. References _area_4vectors, _areas, _ghost_area, _has_dangerous_particles, fastjet::ClusterSequence::_history, fastjet::ClusterSequence::_initial_n, _is_pure_ghost, fastjet::ClusterSequence::_jet_def, fastjet::ClusterSequence::_jets, _max_ghost_perp2, _warnings, fastjet::ClusterSequence::BeamJet, fastjet::JetDefinition::recombiner(), and LimitedWarning::warn(). 00110 {
00111
00112 // first check for danger signals.
00113 // Establish largest ghost transverse momentum
00114 _max_ghost_perp2 = 0.0;
00115 for (int i = 0; i < _initial_n; i++) {
00116 if (_is_pure_ghost[i] && _jets[i].perp2() > _max_ghost_perp2)
00117 _max_ghost_perp2 = _jets[i].perp2();
00118 }
00119
00120 // now find out if any of the particles are close to danger
00121 double danger_ratio = numeric_limits<double>::epsilon();
00122 danger_ratio = danger_ratio * danger_ratio;
00123 _has_dangerous_particles = false;
00124 for (int i = 0; i < _initial_n; i++) {
00125 if (!_is_pure_ghost[i] &&
00126 danger_ratio * _jets[i].perp2() <= _max_ghost_perp2) {
00127 _has_dangerous_particles = true;
00128 break;
00129 }
00130 }
00131
00132 if (_has_dangerous_particles) _warnings.warn("ClusterSequenceActiveAreaExplicitGhosts: \n ghosts not sufficiently soft wrt some of the input particles\n a common cause is (unphysical?) input particles with pt=0 but finite rapidity");
00133
00134 // sort out sizes
00135 _areas.resize(_history.size());
00136 _area_4vectors.resize(_history.size());
00137 _is_pure_ghost.resize(_history.size());
00138
00139 // First set up areas for the initial particles (ghost=_ghost_area,
00140 // real particles = 0); recall that _initial_n here is the number of
00141 // particles including ghosts
00142 for (int i = 0; i < _initial_n; i++) {
00143 if (_is_pure_ghost[i]) {
00144 _areas[i] = _ghost_area;
00145 // normalise pt to be _ghost_area (NB we make use of fact that
00146 // for initial particles, jet and clust_hist index are the same).
00147 _area_4vectors[i] = (_ghost_area/_jets[i].perp()) * _jets[i];
00148 } else {
00149 _areas[i] = 0;
00150 _area_4vectors[i] = PseudoJet(0.0,0.0,0.0,0.0);
00151 }
00152 }
00153
00154 // next follow the branching through and set up the areas
00155 // and ghost-nature at each step of the clustering (rather than
00156 // each jet).
00157 for (unsigned i = _initial_n; i < _history.size(); i++) {
00158 if (_history[i].parent2 == BeamJet) {
00159 _is_pure_ghost[i] = _is_pure_ghost[_history[i].parent1];
00160 _areas[i] = _areas[_history[i].parent1];
00161 _area_4vectors[i] = _area_4vectors[_history[i].parent1];
00162 } else {
00163 _is_pure_ghost[i] = _is_pure_ghost[_history[i].parent1] &&
00164 _is_pure_ghost[_history[i].parent2] ;
00165 _areas[i] = _areas[_history[i].parent1] +
00166 _areas[_history[i].parent2] ;
00167 _jet_def.recombiner()->recombine(_area_4vectors[_history[i].parent1],
00168 _area_4vectors[_history[i].parent2],
00169 _area_4vectors[i]);
00170 // _area_4vectors[i] = _area_4vectors[_history[i].parent1] +
00171 // _area_4vectors[_history[i].parent2] ;
00172 }
00173
00174 }
00175
00176 }
|
|
|
returns the area of a jet
Reimplemented from fastjet::ClusterSequenceAreaBase. Definition at line 66 of file ClusterSequenceActiveAreaExplicitGhosts.cc. References _areas. Referenced by fastjet::ClusterSequenceActiveArea::_transfer_areas(), and empty_area(). 00066 {
00067 return _areas[jet.cluster_hist_index()];
00068 }
|
|
|
returns a four vector corresponding to the sum (E-scheme) of the ghost four-vectors composing the jet area, normalised such that for a small contiguous area the p_t of the extended_area jet is equal to area of the jet.
Reimplemented from fastjet::ClusterSequenceAreaBase. Definition at line 80 of file ClusterSequenceActiveAreaExplicitGhosts.cc. References _area_4vectors, and fastjet::PseudoJet::cluster_hist_index(). Referenced by fastjet::ClusterSequenceActiveArea::_transfer_areas(). 00080 {
00081 return _area_4vectors[jet.cluster_hist_index()];
00082 }
|
|
|
return the total area, up to |y|<maxrap, that consists of unclustered ghosts
Reimplemented from fastjet::ClusterSequenceAreaBase. Definition at line 97 of file ClusterSequenceActiveAreaExplicitGhosts.cc. References _ghost_area, area(), fastjet::RangeDefinition::is_in_range(), is_pure_ghost(), and fastjet::ClusterSequence::unclustered_particles(). 00097 {
00098 vector<PseudoJet> unclust = unclustered_particles();
00099 double area = 0.0;
00100 for (unsigned iu = 0; iu < unclust.size(); iu++) {
00101 if (is_pure_ghost(unclust[iu]) && range.is_in_range(unclust[iu])) {
00102 area += _ghost_area;
00103 }
00104 }
00105 return area;
00106 }
|
|
|
returns true if there are any particles whose transverse momentum if so low that there's a risk of the ghosts having modified the clustering sequence
Definition at line 120 of file ClusterSequenceActiveAreaExplicitGhosts.hh. Referenced by fastjet::ClusterSequenceActiveArea::_run_AA(), and fastjet::ClusterSequenceActiveArea::_throw_unless_jets_have_same_perp_or_E(). 00120 {return _has_dangerous_particles;}
|
|
|
true if the entry in the history index corresponds to a ghost; if hist_ix does not correspond to an actual particle (i.e. hist_ix < 0), then the result is false. Definition at line 91 of file ClusterSequenceActiveAreaExplicitGhosts.cc. References _is_pure_ghost. 00092 {
00093 return hist_ix >= 0 ? _is_pure_ghost[hist_ix] : false;
00094 }
|
|
|
true if a jet is made exclusively of ghosts
Reimplemented from fastjet::ClusterSequenceAreaBase. Definition at line 85 of file ClusterSequenceActiveAreaExplicitGhosts.cc. References _is_pure_ghost, and fastjet::PseudoJet::cluster_hist_index(). Referenced by fastjet::ClusterSequenceActiveArea::_transfer_areas(), and empty_area(). 00086 {
00087 return _is_pure_ghost[jet.cluster_hist_index()];
00088 }
|
|
|
returns the largest squared transverse momentum among all ghosts
Definition at line 115 of file ClusterSequenceActiveAreaExplicitGhosts.hh. 00115 {return _max_ghost_perp2;}
|
|
|
returns the number of hard particles (i.e. those supplied by the user).
Definition at line 210 of file ClusterSequenceActiveAreaExplicitGhosts.hh. References _initial_hard_n. 00210 {return _initial_hard_n;}
|
|
|
returns the total area under study
Definition at line 73 of file ClusterSequenceActiveAreaExplicitGhosts.cc. References _ghost_area, and _n_ghosts. 00073 {
00074 return _n_ghosts * _ghost_area;
00075 }
|
|
|
Definition at line 128 of file ClusterSequenceActiveAreaExplicitGhosts.hh. Referenced by _post_process(), and area_4vector(). |
|
|
Definition at line 127 of file ClusterSequenceActiveAreaExplicitGhosts.hh. Referenced by _post_process(), and area(). |
|
|
Definition at line 125 of file ClusterSequenceActiveAreaExplicitGhosts.hh. Referenced by _add_ghosts(), _post_process(), empty_area(), and total_area(). |
|
|
Definition at line 132 of file ClusterSequenceActiveAreaExplicitGhosts.hh. Referenced by _post_process(). |
|
|
Definition at line 139 of file ClusterSequenceActiveAreaExplicitGhosts.hh. Referenced by _add_ghosts(), and n_hard_particles(). |
|
|
Definition at line 126 of file ClusterSequenceActiveAreaExplicitGhosts.hh. Referenced by _add_ghosts(), _post_process(), and is_pure_ghost(). |
|
|
Definition at line 131 of file ClusterSequenceActiveAreaExplicitGhosts.hh. Referenced by _post_process(). |
|
|
Definition at line 124 of file ClusterSequenceActiveAreaExplicitGhosts.hh. Referenced by _add_ghosts(), and total_area(). |
|
|
allow for warnings
Reimplemented from fastjet::ClusterSequenceAreaBase. Definition at line 42 of file ClusterSequenceActiveAreaExplicitGhosts.cc. Referenced by _post_process(). |
1.4.2