Rivet  1.8.0
InvMassFinalState.hh
00001 // -*- C++ -*-
00002 #ifndef RIVET_InvMassFinalState_HH
00003 #define RIVET_InvMassFinalState_HH
00004 
00005 #include "Rivet/Projections/FinalState.hh"
00006 
00007 namespace Rivet {
00008 
00009 
00011   class InvMassFinalState : public FinalState {
00012   public:
00013 
00015     InvMassFinalState(const FinalState& fsp,
00016                       const std::pair<PdgId, PdgId>& idpair, // pair of decay products
00017                       double minmass, // min inv mass
00018                       double maxmass, // max inv mass
00019                       double masstarget=-1.0);
00020 
00021 
00023     InvMassFinalState(const FinalState& fsp,
00024                       const std::vector<std::pair<PdgId, PdgId> >& idpairs,  // vector of pairs of decay products
00025                       double minmass, // min inv mass
00026                       double maxmass, // max inv mass
00027                       double masstarget=-1.0);
00028 
00029 
00031     InvMassFinalState(const std::pair<PdgId, PdgId>& idpair, // pair of decay products
00032                       double minmass, // min inv mass
00033                       double maxmass, // max inv mass
00034                       double masstarget=-1.0);
00035     InvMassFinalState(const std::vector<std::pair<PdgId, PdgId> >& idpairs,  // vector of pairs of decay products
00036                       double minmass, // min inv mass
00037                       double maxmass, // max inv mass
00038                       double masstarget=-1.0);
00039 
00040 
00042     virtual const Projection* clone() const {
00043         return new InvMassFinalState(*this);
00044     }
00045 
00046 
00047   public:
00048 
00050     const std::vector<std::pair<Particle, Particle> >& particlePairs() const;
00051 
00052 
00054     void useTransverseMass(bool usetrans=true) {
00055       _useTransverseMass = usetrans;
00056     }
00057 
00059     void calc(const ParticleVector& inparticles);
00060 
00061 
00062   protected:
00063 
00065     void project(const Event& e);
00066 
00068     int compare(const Projection& p) const;
00069 
00070 
00071   private:
00072 
00074     std::vector<PdgIdPair> _decayids;
00075 
00077     std::vector<std::pair<Particle, Particle> > _particlePairs;
00078 
00080     double _minmass;
00081 
00083     double _maxmass;
00084 
00086     double _masstarget;
00087 
00089     bool _useTransverseMass;
00090   };
00091 
00092 
00093 }
00094 
00095 
00096 #endif