28 constexpr
float mvaVal[3] = {-.5, .5, 1.};
30 template <
typename T,
typename Comp>
32 for (
int i = 2;
i >= 0; --
i) {
33 if (
comp(val, cuts[
i]))
42 return (tk.
pt() != 0. ? float(tk.
ptError()) /
float(tk.
pt()) : 9999999.);
49 inline int n3DLayers(
reco::Track const& tk,
bool isHLT) {
78 inline void dzCut_par1(
reco::Track const& trk,
int& nLayers,
const float* par,
const int*
exp,
float dzCut[]) {
80 for (
int i = 2;
i >= 0; --
i) {
81 dzCut[
i] = powN(par[
i] * nLayers, exp[
i]) * dzE;
84 inline void drCut_par1(
reco::Track const& trk,
int& nLayers,
const float* par,
const int* exp,
float drCut[]) {
86 for (
int i = 2;
i >= 0; --
i) {
87 drCut[
i] = powN(par[
i] * nLayers, exp[
i]) * drE;
96 const float* d0err_par,
98 float pt = float(trk.
pt());
99 float p = float(trk.
p());
101 for (
int i = 2;
i >= 0; --
i) {
103 float nomd0E =
sqrt(d0err[
i] * d0err[
i] + (d0err_par[
i] / pt) * (d0err_par[
i] / pt));
105 float nomdzE = nomd0E * (p /
pt);
107 dzCut[
i] = powN(par[
i] * nLayers, exp[
i]) * nomdzE;
115 const float* d0err_par,
119 for (
int i = 2;
i >= 0; --
i) {
121 float nomd0E =
sqrt(d0err[
i] * d0err[
i] + (d0err_par[
i] / pt) * (d0err_par[
i] / pt));
123 drCut[
i] = powN(par[
i] * nLayers, exp[
i]) * nomd0E;
127 inline void dzCut_wPVerror_par(
reco::Track const& trk,
131 Point const& bestVertexError,
134 float zPVerr = bestVertexError.z();
136 float dzErrPV =
std::sqrt(dzE * dzE + zPVerr * zPVerr);
137 for (
int i = 2;
i >= 0; --
i) {
138 dzCut[
i] = par[
i] * dzErrPV;
140 dzCut[
i] *=
pow(nLayers, exp[
i]);
144 inline void drCut_wPVerror_par(
reco::Track const& trk,
148 Point const& bestVertexError,
152 float rPVerr =
sqrt(bestVertexError.x() * bestVertexError.y());
154 float drErrPV =
std::sqrt(drE * drE + rPVerr * rPVerr);
155 for (
int i = 2;
i >= 0; --
i) {
156 drCut[
i] = par[
i] * drErrPV;
158 drCut[
i] *=
pow(nLayers, exp[
i]);
165 fillArrayF(minNdof, cfg,
"minNdof");
166 fillArrayF(
maxChi2, cfg,
"maxChi2");
167 fillArrayF(maxChi2n, cfg,
"maxChi2n");
168 fillArrayI(minHits4pass, cfg,
"minHits4pass");
169 fillArrayI(
minHits, cfg,
"minHits");
171 fillArrayI(min3DLayers, cfg,
"min3DLayers");
172 fillArrayI(minLayers, cfg,
"minLayers");
173 fillArrayI(maxLostLayers, cfg,
"maxLostLayers");
174 fillArrayF(maxRelPtErr, cfg,
"maxRelPtErr");
176 fillArrayF(maxDz, cfg,
"maxDz");
177 fillArrayF(maxDzWrtBS, cfg,
"maxDzWrtBS");
178 fillArrayF(maxDr, cfg,
"maxDr");
180 fillArrayI(dz_exp, dz_par,
"dz_exp");
181 fillArrayF(
dz_par1, dz_par,
"dz_par1");
182 fillArrayF(
dz_par2, dz_par,
"dz_par2");
183 fillArrayF(dzWPVerr_par, dz_par,
"dzWPVerr_par");
185 fillArrayI(dr_exp, dr_par,
"dr_exp");
186 fillArrayF(dr_par1, dr_par,
"dr_par1");
187 fillArrayF(dr_par2, dr_par,
"dr_par2");
188 fillArrayF(d0err, dr_par,
"d0err");
189 fillArrayF(d0err_par, dr_par,
"d0err_par");
190 fillArrayF(drWPVerr_par, dr_par,
"drWPVerr_par");
193 void beginStream() {}
202 ret =
std::min(ret,
cut(
nHits(trk), minHits4pass, std::greater_equal<int>()));
208 ret =
std::min(ret,
cut(relPtErr(trk), maxRelPtErr, std::less_equal<float>()));
213 ret =
std::min(ret,
cut(
float(trk.
ndof()), minNdof, std::greater_equal<float>()));
218 ret =
std::min(ret,
cut(nLayers, minLayers, std::greater_equal<int>()));
222 ret =
std::min(ret,
cut(
chi2n(trk) /
float(nLayers), maxChi2n, std::less_equal<float>()));
230 ret =
std::min(ret,
cut(n3DLayers(trk, isHLT), min3DLayers, std::greater_equal<int>()));
242 ret =
std::min(ret,
cut(lostLayers(trk), maxLostLayers, std::less_equal<int>()));
253 if (bestVertex.z() < -99998.) {
257 ret =
std::min(ret,
cut(
dr(trk, bestVertex), maxDr, std::less<float>()));
261 ret =
std::min(ret,
cut(
dz(trk, bestVertex), maxDzcut, std::less<float>()));
268 Point bestVertexError(-1., -1., -1.);
274 dzCut_wPVerror_par(trk, nLayers, dzWPVerr_par, dz_exp, bestVertexError, maxDz_par);
275 drCut_wPVerror_par(trk, nLayers, drWPVerr_par, dr_exp, bestVertexError, maxDr_par);
277 ret =
std::min(ret,
cut(
dr(trk, bestVertex), maxDr_par, std::less<float>()));
281 ret =
std::min(ret,
cut(
dz(trk, bestVertex), maxDr_par, std::less<float>()));
290 dzCut_par1(trk, nLayers,
dz_par1, dz_exp, maxDz_par1);
291 drCut_par1(trk, nLayers, dr_par1, dr_exp, maxDr_par1);
302 dzCut_par2(trk, nLayers,
dz_par2, dz_exp, d0err, d0err_par, maxDz_par2);
303 drCut_par2(trk, nLayers, dr_par2, dr_exp, d0err, d0err_par, maxDr_par2);
305 for (
int i = 2;
i >= 0; --
i) {
306 if (maxDr_par2[
i] < maxDr_par[
i])
307 maxDr_par[
i] = maxDr_par2[
i];
308 if (maxDz_par2[i] < maxDz_par[i])
309 maxDz_par[
i] = maxDz_par2[
i];
314 if (bestVertex.z() < -99998.) {
318 ret =
std::min(ret,
cut(
dz(trk, bestVertex), maxDz_par, std::less<float>()));
321 ret =
std::min(ret,
cut(
dr(trk, bestVertex), maxDr_par, std::less<float>()));
331 static const char*
name() {
return "TrackCutClassifier"; }
334 desc.
add<
bool>(
"isHLT",
false);
335 desc.
add<std::vector<int>>(
338 desc.
add<std::vector<int>>(
"minHits", {0, 0, 1});
339 desc.
add<std::vector<int>>(
"minPixelHits", {0, 0, 1});
340 desc.
add<std::vector<int>>(
"minLayers", {3, 4, 5});
341 desc.
add<std::vector<int>>(
"min3DLayers", {1, 2, 3});
342 desc.
add<std::vector<int>>(
"maxLostLayers", {99, 3, 3});
343 desc.
add<std::vector<double>>(
346 desc.
add<std::vector<double>>(
"minNdof", {-1., -1., -1.});
347 desc.
add<std::vector<double>>(
"maxChi2", {9999., 25., 16.});
348 desc.
add<std::vector<double>>(
"maxChi2n", {9999., 1.0, 0.4});
350 desc.
add<
int>(
"minNVtxTrk", 2);
352 desc.
add<std::vector<double>>(
356 desc.
add<std::vector<double>>(
361 dz_par.
add<std::vector<int>>(
"dz_exp",
365 dz_par.add<std::vector<double>>(
"dz_par1",
369 dz_par.add<std::vector<double>>(
"dz_par2",
373 dz_par.add<std::vector<double>>(
"dzWPVerr_par",
380 dr_par.
add<std::vector<int>>(
"dr_exp",
384 dr_par.add<std::vector<double>>(
"dr_par1",
388 dr_par.add<std::vector<double>>(
"dr_par2",
392 dr_par.add<std::vector<double>>(
"d0err", {0.003, 0.003, 0.003});
393 dr_par.add<std::vector<double>>(
"d0err_par", {0.001, 0.001, 0.001});
394 dr_par.add<std::vector<double>>(
"drWPVerr_par",
402 float maxRelPtErr[3];
411 int maxLostLayers[3];
419 float dzWPVerr_par[3];
425 float drWPVerr_par[3];
double p() const
momentum vector magnitude
virtual int dimension() const =0
tuple ret
prodAgent to be discontinued
double d0Error() const
error on d0
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
#define DEFINE_FWK_MODULE(type)
std::vector< Vertex > VertexCollection
collection of Vertex objects
Exp< T >::type exp(const T &t)
int pixelLayersWithMeasurement() const
int trackerLayersWithMeasurement() const
Point getBestVertex_withError(reco::Track const &trk, reco::VertexCollection const &vertices, Point &error, const size_t minNtracks=2)
TkSoA const *__restrict__ CAHitNtupletGeneratorKernelsGPU::QualityCuts cuts
int numberOfValidStripLayersWithMonoAndStereo(uint16_t stripdet, uint16_t layer) const
double ndof() const
number of degrees of freedom of the fit
double pt() const
track transverse momentum
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
Abs< T >::type abs(const T &t)
uint16_t const *__restrict__ x
unsigned short numberOfValidHits() const
number of valid hits found
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
ParameterDescriptionBase * add(U const &iLabel, T const &value)
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
double dzError() const
error on dz
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
T getParameter(std::string const &) const
caConstants::TupleMultiplicity const CAHitNtupletGeneratorKernelsGPU::HitToTuple const cms::cuda::AtomicPairCounter GPUCACell const *__restrict__ uint32_t const *__restrict__ gpuPixelDoublets::CellNeighborsVector const gpuPixelDoublets::CellTracksVector const GPUCACell::OuterHitOfCell const int32_t nHits
int trackerLayersWithoutMeasurement(HitCategory category) const
Structure Point Contains parameters of Gaussian fits to DMRs.
Point getBestVertex(reco::Track const &trk, reco::VertexCollection const &vertices, const size_t minNtracks=2)
int numberOfValidPixelHits() const
bool isFromDetOrFast(TrackingRecHit const &hit)
const Point & position() const
position
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
Power< A, B >::type pow(const A &a, const B &b)
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.