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
|
#ifndef HeavyFlavorAnalysis_SpecificDecay_BPHDecayToResTrkTrkSameMassBuilder_h
#define HeavyFlavorAnalysis_SpecificDecay_BPHDecayToResTrkTrkSameMassBuilder_h
/** \class BPHDecayToResTrkTrkSameMassBuilder
*
* Description:
* Class to build a particle decaying to a resonance, decaying itself
* to an opposite charged particles pair,
* and two additional opposite charged particles pair
*
* \author Paolo Ronchese INFN Padova
*
*/
//----------------------
// Base Class Headers --
//----------------------
#include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHDecayConstrainedBuilder.h"
#include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHDecayToResTrkTrkSameMassBuilderBase.h"
//------------------------------------
// Collaborating Class Declarations --
//------------------------------------
#include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHParticlePtSelect.h"
#include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHParticleEtaSelect.h"
#include "HeavyFlavorAnalysis/RecoDecay/interface/BPHRecoBuilder.h"
#include "HeavyFlavorAnalysis/RecoDecay/interface/BPHRecoCandidate.h"
#include "HeavyFlavorAnalysis/RecoDecay/interface/BPHPlusMinusCandidate.h"
#include "FWCore/Framework/interface/EventSetup.h"
class BPHEventSetupWrapper;
class BPHParticleNeutralVeto;
//---------------
// C++ Headers --
//---------------
#include <string>
#include <vector>
// ---------------------
// -- Class Interface --
// ---------------------
template <class ProdType, class ResType>
class BPHDecayToResTrkTrkSameMassBuilder : public BPHDecayToResTrkTrkSameMassBuilderBase,
public BPHDecayConstrainedBuilder<ProdType, ResType> {
public:
using typename BPHDecayGenericBuilder<ProdType>::prod_ptr;
using typename BPHDecayConstrainedBuilder<ProdType, ResType>::res_ptr;
/** Constructor
*/
BPHDecayToResTrkTrkSameMassBuilder(const BPHEventSetupWrapper& es,
const std::string& resName,
double resMass,
double resWidth,
const std::vector<res_ptr>& resCollection,
const std::string& posName,
const std::string& negName,
double trkMass,
double trkSigma,
const BPHRecoBuilder::BPHGenericCollection* posCollection,
const BPHRecoBuilder::BPHGenericCollection* negCollection)
: BPHDecayGenericBuilderBase(es, nullptr),
BPHDecayConstrainedBuilderBase(resName, resMass, resWidth),
BPHDecayToResTrkTrkSameMassBuilderBase(posName, negName, trkMass, trkSigma, posCollection, negCollection),
BPHDecayConstrainedBuilder<ProdType, ResType>(resCollection) {}
// deleted copy constructor and assignment operator
BPHDecayToResTrkTrkSameMassBuilder(const BPHDecayToResTrkTrkSameMassBuilder& x) = delete;
BPHDecayToResTrkTrkSameMassBuilder& operator=(const BPHDecayToResTrkTrkSameMassBuilder& x) = delete;
/** Destructor
*/
~BPHDecayToResTrkTrkSameMassBuilder() override = default;
protected:
BPHDecayToResTrkTrkSameMassBuilder(const std::vector<res_ptr>& resCollection,
const std::string& posName,
const std::string& negName,
double trkMass,
double trkSigma,
const BPHRecoBuilder::BPHGenericCollection* posCollection,
const BPHRecoBuilder::BPHGenericCollection* negCollection)
: BPHDecayToResTrkTrkSameMassBuilderBase(posName, negName, trkMass, trkSigma, posCollection, negCollection),
BPHDecayConstrainedBuilder<ProdType, ResType>(resCollection) {}
void fillRecList() override {
std::vector<res_ptr> resList;
int nRes = this->rCollection->size();
int iRes;
resList.reserve(nRes);
for (iRes = 0; iRes < nRes; ++iRes) {
const res_ptr& rCand = this->rCollection->at(iRes);
if (this->resoSel->accept(*rCand))
resList.push_back(rCand);
}
if (resList.empty())
return;
nRes = resList.size();
fillTrkTrkList();
if (ttPairs.empty())
return;
int nPair = ttPairs.size();
int iPair;
for (iPair = 0; iPair < nPair; ++iPair) {
const BPHPlusMinusConstCandPtr tt = ttPairs[iPair];
for (iRes = 0; iRes < nRes; ++iRes) {
ProdType* cand = new ProdType(evSetup);
prod_ptr cPtr(cand);
cand->add(rName, resList[iRes]);
cand->add(pName, tt->originalReco(tt->getDaug(pName)), tMass, tSigma);
cand->add(nName, tt->originalReco(tt->getDaug(nName)), tMass, tSigma);
if (!massSel->accept(*cand))
continue;
if ((chi2Sel != nullptr) && !chi2Sel->accept(*cand))
continue;
if (!mFitSel->accept(*cand))
continue;
this->recList.push_back(cPtr);
}
}
ttPairs.clear();
return;
}
};
#endif
|