7#include "AthLinks/ElementLink.h"
22class Pt
final :
public MiniEvaluator {
25 ~Pt() override final = default;
26 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& , const xAOD::EventInfo& ) const override final {
31class Eta
final:
public MiniEvaluator {
34 ~Eta() override final = default;
35 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& , const xAOD::EventInfo& ) const override final {
40class M
final:
public MiniEvaluator {
43 ~M() override final = default;
44 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& , const xAOD::EventInfo& ) const override final {
49class D0
final:
public MiniEvaluator {
52 ~D0() override final = default;
53 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& , const xAOD::EventInfo& ) const override final {
58class ErrD0
final:
public MiniEvaluator {
61 ~ErrD0() override final = default;
62 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& , const xAOD::EventInfo& ) const override final {
63 return std::sqrt(trk.definingParametersCovMatrix()(0, 0));
67class Z0
final :
public MiniEvaluator {
70 ~Z0() override final = default;
71 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& , const xAOD::EventInfo& ) const override final {
76class ErrZ0
final :
public MiniEvaluator {
79 ~ErrZ0() override final = default;
80 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& , const xAOD::EventInfo& ) const override final {
81 return std::sqrt(trk.definingParametersCovMatrix()(1, 1));
85class Phi
final :
public MiniEvaluator {
88 ~Phi() override final = default;
89 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& , const xAOD::EventInfo& ) const override final {
94class ErrPhi
final :
public MiniEvaluator {
97 ~ErrPhi() override final = default;
98 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& , const xAOD::EventInfo& ) const override final {
99 return std::sqrt(trk.definingParametersCovMatrix()(2, 2));
103class Theta
final :
public MiniEvaluator {
106 ~Theta() override final = default;
107 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& , const xAOD::EventInfo& ) const override final {
112class ErrTheta
final :
public MiniEvaluator {
114 ErrTheta() =
default;
115 ~ErrTheta() override final = default;
116 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& , const xAOD::EventInfo& ) const override final {
117 return std::sqrt(trk.definingParametersCovMatrix()(3, 3));
121class QOverP
final :
public MiniEvaluator {
124 ~QOverP() override final = default;
125 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& , const xAOD::EventInfo& ) const override final {
130class ErrQOverP
final :
public MiniEvaluator {
132 ErrQOverP() =
default;
133 ~ErrQOverP() override final = default;
134 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& , const xAOD::EventInfo& ) const override final {
135 return std::sqrt(trk.definingParametersCovMatrix()(4, 4));
139class ChiSq
final :
public MiniEvaluator {
142 ~ChiSq() override final = default;
143 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& , const xAOD::EventInfo& ) const override final {
144 return trk.chiSquared();
148class RedChiSq
final :
public MiniEvaluator {
150 RedChiSq() =
default;
151 ~RedChiSq() override final = default;
152 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& , const xAOD::EventInfo& ) const override final {
153 return (trk.chiSquared() / trk.numberDoF());
157class D0Sig
final :
public MiniEvaluator {
160 ~D0Sig() override final = default;
161 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& , const xAOD::EventInfo& evt) const override final {
166class DZ
final :
public MiniEvaluator {
169 ~DZ() override final = default;
170 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& vx, const xAOD::EventInfo& ) const override final {
171 return (trk.z0() + trk.vz() - vx.z());
175class ErrDZ
final :
public MiniEvaluator {
178 ~ErrDZ() override final = default;
179 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& vx, const xAOD::EventInfo& ) const override final {
180 return std::sqrt(trk.definingParametersCovMatrix()(1, 1) + vx.covariancePosition()(2, 2));
184class DZSinTheta
final :
public MiniEvaluator {
186 DZSinTheta() =
default;
187 ~DZSinTheta() override final = default;
188 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& vx, const xAOD::EventInfo& ) const override final {
189 return (trk.z0() + trk.vz() - vx.z()) * std::sin(trk.theta());
193class ErrDZSinTheta
final :
public MiniEvaluator {
195 ErrDZSinTheta() =
default;
196 ~ErrDZSinTheta() override final = default;
197 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& vx, const xAOD::EventInfo& ) const override final {
198 float dz = (trk.z0() + trk.vz() - vx.z());
199 float sinTheta = std::sin(trk.theta());
200 float cosTheta = std::cos(trk.theta());
201 float errSqDZ = trk.definingParametersCovMatrix()(1, 1) + vx.covariancePosition()(2, 2);
202 float errSqTheta = trk.definingParametersCovMatrix()(3, 3);
203 float covZ0Theta = trk.definingParametersCovMatrix()(1, 3);
204 return std::sqrt(errSqDZ * std::pow(sinTheta, 2) + std::pow(dz * cosTheta, 2) * errSqTheta + 2 * sinTheta * dz * cosTheta * covZ0Theta);
209 std::vector<const xAOD::TrackParticle*> outTrks;
210 for (
const auto& trkLink : inTrks) {
211 if (trkLink.isValid()) {
220 for (
const auto& ele :
vec) {
229class FitWeight
final :
public MiniEvaluator {
231 FitWeight() =
default;
232 ~FitWeight() override final = default;
233 virtual
float eval(const xAOD::TrackParticle& trk, const xAOD::
Vertex& vx, const xAOD::EventInfo& ) const override final {
234 std::vector<const xAOD::TrackParticle*> fitTrks = toVector(vx.trackParticleLinks());
236 int pos = inVector(&trk, fitTrks);
238 weight = vx.trackWeights().at(pos);
244class VxX
final :
public MiniEvaluator {
247 ~VxX() override final = default;
248 virtual
float eval(const xAOD::TrackParticle& , const xAOD::
Vertex& vx, const xAOD::EventInfo& ) const override final {
253class ErrVxX
final :
public MiniEvaluator {
256 ~ErrVxX() override final = default;
257 virtual
float eval(const xAOD::TrackParticle& , const xAOD::
Vertex& vx, const xAOD::EventInfo& ) const override final {
258 return std::sqrt(vx.covariancePosition()(0, 0));
262class VxY
final :
public MiniEvaluator {
265 ~VxY() override final = default;
266 virtual
float eval(const xAOD::TrackParticle& , const xAOD::
Vertex& vx, const xAOD::EventInfo& ) const override final {
271class ErrVxY
final :
public MiniEvaluator {
274 ~ErrVxY() override final = default;
275 virtual
float eval(const xAOD::TrackParticle& , const xAOD::
Vertex& vx, const xAOD::EventInfo& ) const override final {
276 return std::sqrt(vx.covariancePosition()(1, 1));
280class VxZ
final :
public MiniEvaluator {
283 ~VxZ() override final = default;
284 virtual
float eval(const xAOD::TrackParticle& , const xAOD::
Vertex& vx, const xAOD::EventInfo& ) const override final {
289class ErrVxZ
final :
public MiniEvaluator {
292 ~ErrVxZ() override final = default;
293 virtual
float eval(const xAOD::TrackParticle& , const xAOD::
Vertex& vx, const xAOD::EventInfo& ) const override final {
294 return std::sqrt(vx.covariancePosition()(2, 2));
309 if (
name == kv.first) {
310 throw std::runtime_error(
"ERROR in CP::MVAInputEvaluator::add : input name is already present in map: " +
name);
346 case Input::ErrPhi: {
354 case Input::ErrTheta: {
358 case Input::QOverP: {
362 case Input::ErrQOverP: {
370 case Input::RedChiSq: {
386 case Input::DZSinTheta: {
390 case Input::ErrDZSinTheta: {
394 case Input::FitWeight: {
402 case Input::ErrVxX: {
410 case Input::ErrVxY: {
418 case Input::ErrVxZ: {
423 throw std::runtime_error(
"ERROR in CP::MVAInputEvaluator::add : unknown input enum: " + std::to_string(
type));
431 add(kv.first, kv.second);
438 input[kv.first] = kv.second->eval(trk, vx, evt);
std::vector< size_t > vec
ElementLink implementation for ROOT usage.
const std::string selection
Select isolated Photons, Electrons and Muons.
double d0significance(const xAOD::TrackParticle *tp, double d0_uncert_beam_spot_2)
EventInfo_v1 EventInfo
Definition of the latest event info version.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.