|
fastjet 2.4.3
|
CMSIterativeConePlugin is a plugin for fastjet (v2.4 upwards) More...
#include <CMSIterativeConePlugin.hh>


Public Member Functions | |
| CMSIterativeConePlugin (double ConeRadius, double SeedThreshold=1.0) | |
| Main constructor for the CMSIterativeCone Plugin class. | |
| CMSIterativeConePlugin (const CMSIterativeConePlugin &plugin) | |
| copy constructor | |
| virtual std::string | description () const |
| return a textual description of the jet-definition implemented in this plugin | |
| virtual void | run_clustering (ClusterSequence &) const |
given a ClusterSequence that has been filled up with initial particles, the following function should fill up the rest of the ClusterSequence, using the following member functions of ClusterSequence:
| |
| virtual double | R () const |
| the plugin mechanism's standard way of accessing the jet radius here we return the R of the last alg in the list | |
| virtual double | seed_threshold () const |
| get the seed threshold | |
Private Attributes | |
| double | theConeRadius |
| cone radius | |
| double | theSeedThreshold |
| seed threshold | |
CMSIterativeConePlugin is a plugin for fastjet (v2.4 upwards)
Definition at line 47 of file CMSIterativeConePlugin.hh.
| CMSIterativeConePlugin::CMSIterativeConePlugin | ( | double | ConeRadius, |
| double | SeedThreshold = 1.0 |
||
| ) | [inline] |
Main constructor for the CMSIterativeCone Plugin class.
The arguments are ConeRadius the radius of the cone SeedThreshold a threshold for the seeds to iterate from
NOTE: to be more coherent with all other fastjet plugins, we've put the radius before the seed threshold. CMS does the opposite. In this way, we also put a default value of 0 for the seed threshold.
Definition at line 60 of file CMSIterativeConePlugin.hh.
:
theConeRadius(ConeRadius), theSeedThreshold(SeedThreshold){}
| CMSIterativeConePlugin::CMSIterativeConePlugin | ( | const CMSIterativeConePlugin & | plugin | ) | [inline] |
| string CMSIterativeConePlugin::description | ( | ) | const [virtual] |
return a textual description of the jet-definition implemented in this plugin
Implements JetDefinition::Plugin.
Definition at line 68 of file CMSIterativeConePlugin.cc.
{
ostringstream desc;
desc << "CMSIterativeCone plugin with R = " << theConeRadius << " and seed threshold = " << theSeedThreshold;
return desc.str();
}
| virtual double CMSIterativeConePlugin::R | ( | ) | const [inline, virtual] |
the plugin mechanism's standard way of accessing the jet radius here we return the R of the last alg in the list
Implements JetDefinition::Plugin.
Definition at line 74 of file CMSIterativeConePlugin.hh.
References theConeRadius.
{return theConeRadius;}
| void CMSIterativeConePlugin::run_clustering | ( | ClusterSequence & | ) | const [virtual] |
given a ClusterSequence that has been filled up with initial particles, the following function should fill up the rest of the ClusterSequence, using the following member functions of ClusterSequence:
Implements JetDefinition::Plugin.
Definition at line 74 of file CMSIterativeConePlugin.cc.
References deltaR2(), ClusterSequence::jets(), M_PI, d0::inline_maths::phi(), ClusterSequence::plugin_record_iB_recombination(), and ClusterSequence::plugin_record_ij_recombination().
{
// This code is adapted from CMSIterativeConeAlgorithms.cc from the
// CMSSW software.
// The adaptation is just meant to use
// - the FastJet 4-vectors instead of the CMS ones
// - the FastJet clustering history structures instead of the
// ProtoJet one used by CMS.
//make a list of input objects ordered by ET
//cout << "copying the list of particles" << endl;
list<PseudoJet> input;
for (unsigned int i=0 ; i<clust_seq.jets().size() ; i++) {
input.push_back(clust_seq.jets()[i]);
}
NumericSafeGreaterByEt<PseudoJet> compCandidate;
//cout << "sorting" << endl;
input.sort(compCandidate);
//find jets
//cout << "launching the main loop" << endl;
while( !input.empty() && (input.front().Et() > theSeedThreshold )) {
//cone centre
double eta0=input.front().eta();
double phi0=input.front().phi();
//protojet properties
double eta=0;
double phi=0;
double et=0;
//list of towers in cone
list< list<PseudoJet>::iterator> cone;
for(int iteration=0;iteration<100;iteration++){
//cout << "iterating" << endl;
cone.clear();
eta=0;
phi=0;
et=0;
for(list<PseudoJet>::iterator inp=input.begin();
inp!=input.end();inp++){
const PseudoJet tower = *inp;
if( deltaR2(eta0,phi0,tower.eta(),tower.phi()) <
theConeRadius*theConeRadius) {
double tower_et = tower.Et();
cone.push_back(inp);
eta+= tower_et*tower.eta();
double dphi=tower.phi()-phi0;
if(dphi>M_PI) dphi-=2*M_PI;
else if(dphi<=-M_PI) dphi+=2*M_PI;
phi+=tower_et*dphi;
et +=tower_et;
}
}
eta=eta/et;
phi=phi0+phi/et;
if(phi>M_PI)phi-=2*M_PI;
else if(phi<=-M_PI)phi+=2*M_PI;
if(fabs(eta-eta0)<.001 && fabs(phi-phi0)<.001) break;//stable cone found
eta0=eta;
phi0=phi;
}
//cout << "make the jet final" << endl;
//make a final jet and remove the jet constituents from the input list
// InputCollection jetConstituents;
// list< list<InputItem>::iterator>::const_iterator inp;
// for(inp=cone.begin();inp!=cone.end();inp++) {
// jetConstituents.push_back(**inp);
// input.erase(*inp);
// }
// fOutput->push_back (ProtoJet (jetConstituents));
//
// IMPORTANT NOTE:
// while the stability of the stable cone is tested using the Et
// scheme recombination, the final jet uses E-scheme
// recombination.
//
// The technique used here is the same as what we already used for
// SISCone except that we act on the 'cone' list.
// We successively merge the particles that make up the cone jet
// until we have all particles in it. We start off with the zeroth
// particle.
list< list<PseudoJet>::iterator>::const_iterator inp;
inp = cone.begin();
int jet_k = (*inp)->cluster_hist_index();
// gps tmp
//float px=(*inp)->px(), py=(*inp)->py(), pz=(*inp)->pz(), E = (*inp)->E();
// remove the particle from the list and jump to the next one
input.erase(*inp);
inp++;
// now loop over the remaining particles
while (inp != cone.end()){
// take the last result of the merge
int jet_i = jet_k;
// and the next element of the jet
int jet_j = (*inp)->cluster_hist_index();
// and merge them (with a fake dij)
double dij = 0.0;
// create the new jet by hand so that we can adjust its user index
// Note again the use of the E-scheme recombination here!
PseudoJet newjet = clust_seq.jets()[jet_i] + clust_seq.jets()[jet_j];
// gps tmp to try out floating issues
//px+=(*inp)->px(), py+=(*inp)->py(), pz+=(*inp)->pz(), E += (*inp)->E();
//PseudoJet newjet(px,py,pz,E);
clust_seq.plugin_record_ij_recombination(jet_i, jet_j, dij, newjet, jet_k);
// remove the particle from the list and jump to the next one
input.erase(*inp);
inp++;
}
// we have merged all the jet's particles into a single object, so now
// "declare" it to be a beam (inclusive) jet.
// [NB: put a sensible looking d_iB just to be nice...]
double d_iB = clust_seq.jets()[jet_k].perp2();
clust_seq.plugin_record_iB_recombination(jet_k, d_iB);
} //loop over seeds ended
}
| virtual double CMSIterativeConePlugin::seed_threshold | ( | ) | const [inline, virtual] |
get the seed threshold
Definition at line 77 of file CMSIterativeConePlugin.hh.
References theSeedThreshold.
{return theSeedThreshold;}
double CMSIterativeConePlugin::theConeRadius [private] |
double CMSIterativeConePlugin::theSeedThreshold [private] |
seed threshold
Definition at line 81 of file CMSIterativeConePlugin.hh.
Referenced by seed_threshold().
1.7.3