BPHMassFitSelect

fit_type

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 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
#ifndef HeavyFlavorAnalysis_SpecificDecay_BPHMassFitSelect_h
#define HeavyFlavorAnalysis_SpecificDecay_BPHMassFitSelect_h
/** \class BPHMassFitSelect
 *
 *  Description: 
 *     Class for candidate selection by invariant mass (at kinematic fit level)
 *
 *  \author Paolo Ronchese INFN Padova
 *
 */

//----------------------
// Base Class Headers --
//----------------------
#include "HeavyFlavorAnalysis/RecoDecay/interface/BPHFitSelect.h"
#include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHMassCuts.h"

//------------------------------------
// Collaborating Class Declarations --
//------------------------------------
#include "HeavyFlavorAnalysis/RecoDecay/interface/BPHKinematicFit.h"
#include "RecoVertex/KinematicFitPrimitives/interface/KinematicConstraint.h"
#include "RecoVertex/KinematicFitPrimitives/interface/MultiTrackKinematicConstraint.h"

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

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

class BPHMassFitSelect : public BPHFitSelect, public BPHMassCuts {
public:
  /** Constructor
   */
  BPHMassFitSelect(double minMass, double maxMass) : BPHMassCuts(minMass, maxMass) { setFitConstraint(); }

  BPHMassFitSelect(const std::string& name, double mass, double sigma, double minMass, double maxMass)
      : BPHMassCuts(minMass, maxMass) {
    setFitConstraint(name, mass, sigma);
  }

  BPHMassFitSelect(const std::string& name, double mass, double minMass, double maxMass)
      : BPHMassCuts(minMass, maxMass) {
    setFitConstraint(name, mass);
  }

  BPHMassFitSelect(const std::string& name, KinematicConstraint* c, double minMass, double maxMass)
      : BPHMassCuts(minMass, maxMass) {
    setFitConstraint(name, c);
  }

  BPHMassFitSelect(const std::string& name, MultiTrackKinematicConstraint* c, double minMass, double maxMass)
      : BPHMassCuts(minMass, maxMass) {
    setFitConstraint(name, c);
  }

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

  /** Destructor
   */
  ~BPHMassFitSelect() override = default;

  /** Operations
   */
  /// select particle
  bool accept(const BPHKinematicFit& cand) const override {
    switch (type) {
      default:
      case none:
        break;
      case mcss:
        cand.kinematicTree(cName, cMass, cSigma);
        break;
      case mcst:
        cand.kinematicTree(cName, cMass);
        break;
      case kf:
        cand.kinematicTree(cName, kc);
        break;
      case mtkf:
        cand.kinematicTree(cName, mtkc);
        break;
    }
    double mass = cand.p4().mass();
    return ((mass >= mMin) && (mass <= mMax));
  }

  /// set fit constraint
  void setFitConstraint() {
    type = none;
    cName = "";
    cMass = -1.0;
    cSigma = -1.0;
    kc = nullptr;
    mtkc = nullptr;
  }
  void setFitConstraint(const std::string& name, double mass) {
    type = mcst;
    cName = name;
    cMass = mass;
    cSigma = -1.0;
    kc = nullptr;
    mtkc = nullptr;
  }
  void setFitConstraint(const std::string& name, double mass, double sigma) {
    type = mcss;
    cName = name;
    cMass = mass;
    cSigma = sigma;
    kc = nullptr;
    mtkc = nullptr;
  }
  void setFitConstraint(const std::string& name, KinematicConstraint* c) {
    type = kf;
    cName = name;
    cMass = -1.0;
    cSigma = -1.0;
    kc = c;
    mtkc = nullptr;
  }
  void setFitConstraint(const std::string& name, MultiTrackKinematicConstraint* c) {
    type = mtkf;
    cName = name;
    cMass = -1.0;
    cSigma = -1.0;
    kc = nullptr;
    mtkc = c;
  }

  /// get fit constraint
  const std::string& getConstrainedName() const { return cName; }
  double getMass() const { return cMass; }
  double getSigma() const { return cSigma; }
  KinematicConstraint* getKC() const { return kc; }
  MultiTrackKinematicConstraint* getMultiTrackKC() const { return mtkc; }

private:
  enum fit_type { none, mcss, mcst, kf, mtkf };

  fit_type type;
  std::string cName;
  double cMass;
  double cSigma;
  KinematicConstraint* kc;
  MultiTrackKinematicConstraint* mtkc;
};

#endif