BPHOniaToMuMuBuilder

OniaParameters

oniaType

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
#ifndef HeavyFlavorAnalysis_SpecificDecay_BPHOniaToMuMuBuilder_h
#define HeavyFlavorAnalysis_SpecificDecay_BPHOniaToMuMuBuilder_h
/** \class BPHOniaToMuMuBuilder
 *
 *  Description: 
 *     Class to build Psi(1,2) and Upsilon(1,2,3) candidates
 *
 *  \author Paolo Ronchese INFN Padova
 *
 */

//----------------------
// Base Class Headers --
//----------------------
#include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHDecayGenericBuilderBase.h"
#include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHDecayGenericBuilder.h"

//------------------------------------
// Collaborating Class Declarations --
//------------------------------------
#include "HeavyFlavorAnalysis/RecoDecay/interface/BPHRecoBuilder.h"
#include "HeavyFlavorAnalysis/RecoDecay/interface/BPHRecoCandidate.h"
#include "HeavyFlavorAnalysis/RecoDecay/interface/BPHPlusMinusCandidate.h"

class BPHEventSetupWrapper;
class BPHMuonPtSelect;
class BPHMuonEtaSelect;
class BPHChi2Select;
class BPHMassSelect;
class BPHRecoSelect;
class BPHMomentumSelect;
class BPHVertexSelect;

//---------------
// C++ Headers --
//---------------
#include <string>
#include <vector>
#include <map>

//              ---------------------
//              -- Class Interface --
//              ---------------------

class BPHOniaToMuMuBuilder : public virtual BPHDecayGenericBuilderBase,
                             public virtual BPHDecayGenericBuilder<BPHPlusMinusCandidate> {
public:
  enum oniaType { NRes, Phi, Psi1, Psi2, Ups, Ups1, Ups2, Ups3 };

  /** Constructor
   */
  BPHOniaToMuMuBuilder(const BPHEventSetupWrapper& es,
                       const BPHRecoBuilder::BPHGenericCollection* muPosCollection,
                       const BPHRecoBuilder::BPHGenericCollection* muNegCollection);

  // deleted copy constructor and assignment operator
  BPHOniaToMuMuBuilder(const BPHOniaToMuMuBuilder& x) = delete;
  BPHOniaToMuMuBuilder& operator=(const BPHOniaToMuMuBuilder& x) = delete;

  /** Destructor
   */
  ~BPHOniaToMuMuBuilder() override;

  /** Operations
   */
  /// build resonance candidates
  void fillRecList() override;

  /// extract list of candidates of specific type
  /// candidates are rebuilt applying corresponding mass constraint
  std::vector<BPHPlusMinusConstCandPtr> getList(oniaType type,
                                                BPHRecoSelect* dSel = nullptr,
                                                BPHMomentumSelect* mSel = nullptr,
                                                BPHVertexSelect* vSel = nullptr,
                                                BPHFitSelect* kSel = nullptr);

  /// retrieve original candidate from a copy with the same daughters
  /// obtained through "getList"
  BPHPlusMinusConstCandPtr getOriginalCandidate(const BPHRecoCandidate& cand);

  /// set cuts
  void setPtMin(oniaType type, double pt);
  void setEtaMax(oniaType type, double eta);
  void setMassMin(oniaType type, double m);
  void setMassMax(oniaType type, double m);
  void setProbMin(oniaType type, double p);
  void setConstr(oniaType type, double mass, double sigma);

  /// get current cuts
  double getPtMin(oniaType type) const;
  double getEtaMax(oniaType type) const;
  double getMassMin(oniaType type) const;
  double getMassMax(oniaType type) const;
  double getProbMin(oniaType type) const;
  double getConstrMass(oniaType type) const;
  double getConstrSigma(oniaType type) const;

private:
  std::string muPosName;
  std::string muNegName;

  const BPHRecoBuilder::BPHGenericCollection* posCollection;
  const BPHRecoBuilder::BPHGenericCollection* negCollection;

  struct OniaParameters {
    BPHMuonPtSelect* ptSel;
    BPHMuonEtaSelect* etaSel;
    BPHMassSelect* massSel;
    BPHChi2Select* chi2Sel;
    double mass;
    double sigma;
    bool outdated;
  };

  std::map<oniaType, OniaParameters> oniaPar;
  std::map<oniaType, std::vector<BPHPlusMinusConstCandPtr> > oniaList;

  void setNotUpdated();
  void setParameters(oniaType type,
                     double ptMin,
                     double etaMax,
                     double massMin,
                     double massMax,
                     double probMin,
                     double mass,
                     double sigma);
  void extractList(oniaType type);
};

#endif