rivet is hosted by Hepforge, IPPP Durham
ParticleUtils.cc
Go to the documentation of this file.
00001 #include "Rivet/Tools/ParticleUtils.hh"
00002 #include "Rivet/Tools/Cuts.hh"
00003 
00004 namespace Rivet {
00005 
00006 
00007   FirstParticleWith::FirstParticleWith(const Cut& c)
00008     : fn([&](const Particle& p){ return c->accept(p); }) { }
00009 
00010   FirstParticleWithout::FirstParticleWithout(const Cut& c)
00011     : fn([&](const Particle& p){ return c->accept(p); }) { }
00012 
00013   LastParticleWith::LastParticleWith(const Cut& c)
00014     : fn([&](const Particle& p){ return c->accept(p); }) { }
00015 
00016   LastParticleWithout::LastParticleWithout(const Cut& c)
00017     : fn([&](const Particle& p){ return c->accept(p); }) { }
00018 
00019 
00020   HasParticleAncestorWith::HasParticleAncestorWith(const Cut& c)
00021     : fn([&](const Particle& p){ return c->accept(p); }) { }
00022 
00023   HasParticleAncestorWithout::HasParticleAncestorWithout(const Cut& c)
00024     : fn([&](const Particle& p){ return c->accept(p); }) { }
00025 
00026   HasParticleParentWith::HasParticleParentWith(const Cut& c)
00027     : fn([&](const Particle& p){ return c->accept(p); }) { }
00028 
00029   HasParticleParentWithout::HasParticleParentWithout(const Cut& c)
00030     : fn([&](const Particle& p){ return c->accept(p); }) { }
00031 
00032   HasParticleChildWith::HasParticleChildWith(const Cut& c)
00033     : fn([&](const Particle& p){ return c->accept(p); }) { }
00034 
00035   HasParticleChildWithout::HasParticleChildWithout(const Cut& c)
00036     : fn([&](const Particle& p){ return c->accept(p); }) { }
00037 
00038   HasParticleDescendantWith::HasParticleDescendantWith(const Cut& c)
00039     : fn([&](const Particle& p){ return c->accept(p); }) { }
00040 
00041   HasParticleDescendantWithout::HasParticleDescendantWithout(const Cut& c)
00042     : fn([&](const Particle& p){ return c->accept(p); }) { }
00043 
00044 
00045   Particles& ifilter_select(Particles& particles, const Cut& c) {
00046     if (c == Cuts::OPEN) return particles;
00047     // return ifilter_select(particles, *c);
00048     return ifilter_select(particles, [&](const Particle& p){return c->accept(p);});
00049   }
00050 
00051   Particles& ifilter_discard(Particles& particles, const Cut& c) {
00052     if (c == Cuts::OPEN) { particles.clear(); return particles; }
00053     // return ifilter_discard(particles, *c);
00054     return ifilter_discard(particles, [&](const Particle& p){return c->accept(p);});
00055   }
00056 
00057 
00058 }