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
/*
 *  See header file for a description of this class.
 *
 *  \author Paolo Ronchese INFN Padova
 *
 */

//-----------------------
// This Class' Header --
//-----------------------
#include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHDecayToResTrkBuilderBase.h"

//-------------------------------
// Collaborating Class Headers --
//-------------------------------
#include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHDecayGenericBuilderBase.h"
#include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHParticleNeutralVeto.h"
#include "HeavyFlavorAnalysis/RecoDecay/interface/BPHRecoBuilder.h"
#include "HeavyFlavorAnalysis/RecoDecay/interface/BPHPlusMinusCandidate.h"
#include "HeavyFlavorAnalysis/RecoDecay/interface/BPHRecoCandidate.h"

//---------------
// C++ Headers --
//---------------
using namespace std;

//-------------------
// Initializations --
//-------------------

//----------------
// Constructors --
//----------------
BPHDecayToResTrkBuilderBase::BPHDecayToResTrkBuilderBase(const BPHEventSetupWrapper& es,
                                                         const string& resName,
                                                         double resMass,
                                                         double resWidth,
                                                         const string& trkName,
                                                         double trkMass,
                                                         double trkSigma,
                                                         const BPHRecoBuilder::BPHGenericCollection* trkCollection)
    : BPHDecayGenericBuilderBase(es, nullptr),
      BPHDecayConstrainedBuilderBase(resName, resMass, resWidth),
      tName(trkName),
      tMass(trkMass),
      tSigma(trkSigma),
      tCollection(trkCollection),
      tknVeto(new BPHParticleNeutralVeto),
      ptSel(new BPHParticlePtSelect(0.0)),
      etaSel(new BPHParticleEtaSelect(100.0)) {}

BPHDecayToResTrkBuilderBase::BPHDecayToResTrkBuilderBase(const string& trkName,
                                                         double trkMass,
                                                         double trkSigma,
                                                         const BPHRecoBuilder::BPHGenericCollection* trkCollection)
    : tName(trkName),
      tMass(trkMass),
      tSigma(trkSigma),
      tCollection(trkCollection),
      tknVeto(new BPHParticleNeutralVeto),
      ptSel(new BPHParticlePtSelect(0.0)),
      etaSel(new BPHParticleEtaSelect(100.0)) {}

//--------------
// Destructor --
//--------------
BPHDecayToResTrkBuilderBase::~BPHDecayToResTrkBuilderBase() {
  delete tknVeto;
  delete ptSel;
  delete etaSel;
}

//--------------
// Operations --
//--------------

/// set cuts
void BPHDecayToResTrkBuilderBase::setTrkPtMin(double pt) {
  outdated = true;
  ptSel->setPtMin(pt);
  return;
}

void BPHDecayToResTrkBuilderBase::setTrkEtaMax(double eta) {
  outdated = true;
  etaSel->setEtaMax(eta);
  return;
}

/// build candidates
void BPHDecayToResTrkBuilderBase::fill(BPHRecoBuilder& brb, void* parameters) {
  brb.setMinPDiffererence(minPDiff);
  addResCollection(brb);
  int i;
  int n = tCollection->size();
  tCollectSel1.clear();
  tCollectSel1.reserve(n);
  for (i = 0; i < n; ++i) {
    const reco::Candidate& cand = tCollection->get(i);
    if (cand.charge() != 0)
      tCollectSel1.push_back(&cand);
  }
  vector<const reco::Candidate*>* dv = &tCollectSel1;
  vector<const reco::Candidate*>* sv = &tCollectSel2;
  if (ptSel->getPtMin() >= 0.0) {
    swap(sv, dv);
    filter(sv, dv, ptSel);
  }
  if (etaSel->getEtaMax() >= 0.0) {
    swap(sv, dv);
    filter(sv, dv, etaSel);
  }
  brb.add(tName, BPHRecoBuilder::createCollection(*dv, this->tCollection->searchList()), tMass, tSigma);

  if (massSel->getMassMax() >= 0.0)
    brb.filter(*massSel);
  if (chi2Sel->getProbMin() >= 0.0)
    brb.filter(*chi2Sel);
  if (mFitSel->getMassMax() >= 0.0)
    brb.filter(*mFitSel);

  setup(parameters);

  return;
}