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
|