7 #include "AthLinks/ElementLink.h"
22 class Pt final :
public MiniEvaluator {
31 class Eta final:
public MiniEvaluator {
40 class M
final:
public MiniEvaluator {
49 class D0 final:
public MiniEvaluator {
58 class ErrD0
final:
public MiniEvaluator {
63 return std::sqrt(trk.definingParametersCovMatrix()(0, 0));
67 class Z0 final :
public MiniEvaluator {
76 class ErrZ0
final :
public MiniEvaluator {
81 return std::sqrt(trk.definingParametersCovMatrix()(1, 1));
85 class Phi final :
public MiniEvaluator {
94 class ErrPhi
final :
public MiniEvaluator {
99 return std::sqrt(trk.definingParametersCovMatrix()(2, 2));
112 class ErrTheta
final :
public MiniEvaluator {
114 ErrTheta() =
default;
117 return std::sqrt(trk.definingParametersCovMatrix()(3, 3));
121 class QOverP
final :
public MiniEvaluator {
130 class ErrQOverP
final :
public MiniEvaluator {
132 ErrQOverP() =
default;
135 return std::sqrt(trk.definingParametersCovMatrix()(4, 4));
139 class ChiSq
final :
public MiniEvaluator {
144 return trk.chiSquared();
148 class RedChiSq
final :
public MiniEvaluator {
150 RedChiSq() =
default;
153 return (trk.chiSquared() / trk.numberDoF());
166 class DZ
final :
public MiniEvaluator {
171 return (trk.z0() + trk.vz() - vx.z());
175 class ErrDZ
final :
public MiniEvaluator {
180 return std::sqrt(trk.definingParametersCovMatrix()(1, 1) + vx.covariancePosition()(2, 2));
184 class DZSinTheta
final :
public MiniEvaluator {
186 DZSinTheta() =
default;
189 return (trk.z0() + trk.vz() - vx.z()) *
std::sin(trk.theta());
193 class ErrDZSinTheta
final :
public MiniEvaluator {
195 ErrDZSinTheta() =
default;
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) {
229 class FitWeight
final :
public MiniEvaluator {
231 FitWeight() =
default;
234 std::vector<const xAOD::TrackParticle*> fitTrks = toVector(vx.trackParticleLinks());
236 int pos = inVector(&trk, fitTrks);
244 class VxX
final :
public MiniEvaluator {
253 class ErrVxX
final :
public MiniEvaluator {
258 return std::sqrt(vx.covariancePosition()(0, 0));
262 class VxY
final :
public MiniEvaluator {
271 class ErrVxY
final :
public MiniEvaluator {
276 return std::sqrt(vx.covariancePosition()(1, 1));
280 class VxZ
final :
public MiniEvaluator {
289 class ErrVxZ
final :
public MiniEvaluator {
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);