Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:15:35

0001 #ifndef HeavyFlavorAnalysis_SpecificDecay_BPHDecayToTkpTknSymChargeBuilder_h
0002 #define HeavyFlavorAnalysis_SpecificDecay_BPHDecayToTkpTknSymChargeBuilder_h
0003 /** \class BPHDecayToTkpTknSymChargeBuilder
0004  *
0005  *  Description: 
0006  *     Class to build a decay to an oppositely charged particle pair
0007  *     with different masses, choosing the best mass assignment on
0008  *     the reconstructed mass basis
0009  *
0010  *  \author Paolo Ronchese INFN Padova
0011  *
0012  */
0013 
0014 //----------------------
0015 // Base Class Headers --
0016 //----------------------
0017 #include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHDecayGenericBuilderBase.h"
0018 #include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHDecayGenericBuilder.h"
0019 
0020 //------------------------------------
0021 // Collaborating Class Declarations --
0022 //------------------------------------
0023 #include "HeavyFlavorAnalysis/RecoDecay/interface/BPHRecoBuilder.h"
0024 #include "HeavyFlavorAnalysis/RecoDecay/interface/BPHRecoCandidate.h"
0025 #include "HeavyFlavorAnalysis/RecoDecay/interface/BPHPlusMinusCandidate.h"
0026 
0027 class BPHEventSetupWrapper;
0028 class BPHParticlePtSelect;
0029 class BPHParticleEtaSelect;
0030 class BPHChi2Select;
0031 class BPHMassSelect;
0032 
0033 //---------------
0034 // C++ Headers --
0035 //---------------
0036 #include <string>
0037 #include <vector>
0038 
0039 //              ---------------------
0040 //              -- Class Interface --
0041 //              ---------------------
0042 
0043 class BPHDecayToTkpTknSymChargeBuilder : public virtual BPHDecayGenericBuilderBase,
0044                                          public virtual BPHDecayGenericBuilder<BPHPlusMinusCandidate> {
0045 public:
0046   /** Constructor
0047    */
0048   BPHDecayToTkpTknSymChargeBuilder(const BPHEventSetupWrapper& es,
0049                                    const std::string& daug1Name,
0050                                    double daug1Mass,
0051                                    double daug1Sigma,
0052                                    const std::string& daug2Name,
0053                                    double daug2Mass,
0054                                    double daug2Sigma,
0055                                    const BPHRecoBuilder::BPHGenericCollection* posCollection,
0056                                    const BPHRecoBuilder::BPHGenericCollection* negCollection,
0057                                    double expectedMass);
0058 
0059   // deleted copy constructor and assignment operator
0060   BPHDecayToTkpTknSymChargeBuilder(const BPHDecayToTkpTknSymChargeBuilder& x) = delete;
0061   BPHDecayToTkpTknSymChargeBuilder& operator=(const BPHDecayToTkpTknSymChargeBuilder& x) = delete;
0062 
0063   /** Destructor
0064    */
0065   ~BPHDecayToTkpTknSymChargeBuilder() override = default;
0066 
0067   /** Operations
0068    */
0069 
0070   /// set cuts
0071   void setTrk1PtMin(double pt);
0072   void setTrk2PtMin(double pt);
0073   void setTrk1EtaMax(double eta);
0074   void setTrk2EtaMax(double eta);
0075   void setDzMax(double dz);
0076 
0077   /// get current cuts
0078   double getTrk1PtMin() const { return pt1Min; }
0079   double getTrk2PtMin() const { return pt2Min; }
0080   double getTrk1EtaMax() const { return eta1Max; }
0081   double getTrk2EtaMax() const { return eta2Max; }
0082   double getDzMax() const { return dzMax; }
0083 
0084 private:
0085   std::string d1Name;
0086   double d1Mass;
0087   double d1Sigma;
0088   std::string d2Name;
0089   double d2Mass;
0090   double d2Sigma;
0091   double eMass;
0092 
0093   const BPHRecoBuilder::BPHGenericCollection* pCollection;
0094   const BPHRecoBuilder::BPHGenericCollection* nCollection;
0095 
0096   double pt1Min;
0097   double pt2Min;
0098   double eta1Max;
0099   double eta2Max;
0100   double dzMax;
0101 
0102   class Particle {
0103   public:
0104     Particle(const reco::Candidate* c, const reco::Track* tk, double x, double y, double z, double f, double g)
0105         : cand(c), track(tk), px(x), py(y), pz(z), e1(f), e2(g) {}
0106     const reco::Candidate* cand;
0107     const reco::Track* track;
0108     double px;
0109     double py;
0110     double pz;
0111     double e1;
0112     double e2;
0113   };
0114   void addParticle(const BPHRecoBuilder::BPHGenericCollection* collection, int charge, std::vector<Particle*>& list);
0115 
0116   /// build candidates
0117   void fillRecList() override;
0118 };
0119 
0120 #endif