rivet is hosted by Hepforge, IPPP Durham
IdentifiedFinalState.cc
Go to the documentation of this file.
00001 // -*- C++ -*-
00002 #include "Rivet/Projections/IdentifiedFinalState.hh"
00003 
00004 namespace Rivet {
00005 
00006 
00007   IdentifiedFinalState::IdentifiedFinalState(const FinalState& fsp, const vector<PdgId>& pids) {
00008     setName("IdentifiedFinalState");
00009     addProjection(fsp, "FS");
00010     acceptIds(pids);
00011   }
00012 
00013   IdentifiedFinalState::IdentifiedFinalState(const vector<PdgId>& pids, const FinalState& fsp) {
00014     setName("IdentifiedFinalState");
00015     addProjection(fsp, "FS");
00016     acceptIds(pids);
00017   }
00018 
00019   IdentifiedFinalState::IdentifiedFinalState(const FinalState& fsp, PdgId pid) {
00020     setName("IdentifiedFinalState");
00021     addProjection(fsp, "FS");
00022     acceptId(pid);
00023   }
00024 
00025   IdentifiedFinalState::IdentifiedFinalState(PdgId pid, const FinalState& fsp) {
00026     setName("IdentifiedFinalState");
00027     addProjection(fsp, "FS");
00028     acceptId(pid);
00029   }
00030 
00031 
00032   IdentifiedFinalState::IdentifiedFinalState(const Cut& c, const vector<PdgId>& pids) {
00033     setName("IdentifiedFinalState");
00034     addProjection(FinalState(c), "FS");
00035     acceptIds(pids);
00036   }
00037 
00038   IdentifiedFinalState::IdentifiedFinalState(const vector<PdgId>& pids, const Cut& c) {
00039     setName("IdentifiedFinalState");
00040     addProjection(FinalState(c), "FS");
00041     acceptIds(pids);
00042   }
00043 
00044   IdentifiedFinalState::IdentifiedFinalState(const Cut& c, PdgId pid) {
00045     setName("IdentifiedFinalState");
00046     addProjection(FinalState(c), "FS");
00047     acceptId(pid);
00048   }
00049 
00050   IdentifiedFinalState::IdentifiedFinalState(PdgId pid, const Cut& c) {
00051     setName("IdentifiedFinalState");
00052     addProjection(FinalState(c), "FS");
00053     acceptId(pid);
00054   }
00055 
00056 
00057   IdentifiedFinalState::IdentifiedFinalState(double etamin, double etamax, double ptMin)
00058     // : FinalState(etamin, etamax, ptMin)
00059   {
00060     setName("IdentifiedFinalState");
00061     addProjection(FinalState(etamin, etamax, ptMin), "FS");
00062   }
00063 
00064 
00065 
00066   int IdentifiedFinalState::compare(const Projection& p) const {
00067     const PCmp fscmp = mkNamedPCmp(p, "FS");
00068     if (fscmp != EQUIVALENT) return fscmp;
00069 
00070     const IdentifiedFinalState& other = dynamic_cast<const IdentifiedFinalState&>(p);
00071     int pidssize = cmp(_pids.size(), other._pids.size());
00072     if (pidssize != EQUIVALENT) return pidssize;
00073     return cmp(_pids, other._pids);
00074   }
00075 
00076 
00077   void IdentifiedFinalState::project(const Event& e) {
00078     const FinalState& fs = applyProjection<FinalState>(e, "FS");
00079     _theParticles.clear();
00080     _theParticles.reserve(fs.particles().size());
00081     _remainingParticles.clear();
00082     _remainingParticles.reserve(fs.particles().size());
00083     foreach (const Particle& p, fs.particles()) {
00084       if (acceptedIds().find(p.pid()) != acceptedIds().end()) {
00085         _theParticles.push_back(p);       // Identified
00086       }
00087       else {
00088         _remainingParticles.push_back(p); // Remaining
00089       }
00090     }
00091   }
00092 
00093 
00094 }