Project
Loading...
Searching...
No Matches
PVertexer.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
15
16#ifndef O2_PVERTEXER_H
17#define O2_PVERTEXER_H
18
19#include <array>
20#include <utility>
26#include "MathUtils/Utils.h"
36#include "gsl/span"
37#include <numeric>
38#include <TTree.h>
39#include <TFile.h>
40#include <TStopwatch.h>
41
42//#define _PV_DEBUG_TREE_ // if enabled, produce dbscan and vertex comparison dump
43
44namespace o2
45{
46namespace vertexing
47{
48
49namespace o2d = o2::dataformats;
50
52{
53
54 public:
55 enum class FitStatus : int { Failure,
59 OK };
60 PVertexer();
61 void init();
62 void end();
63 template <typename TR>
64 int process(const TR& tracks, const gsl::span<o2d::GlobalTrackID> gids, const gsl::span<InteractionCandidate> intCand,
65 std::vector<PVertex>& vertices, std::vector<o2d::VtxTrackIndex>& vertexTrackIDs, std::vector<V2TRef>& v2tRefs,
66 const gsl::span<const o2::MCCompLabel> lblTracks, std::vector<o2::MCEventLabel>& lblVtx);
67 template <typename TR>
68 int process(const TR& tracks, const gsl::span<o2d::GlobalTrackID> gids, const gsl::span<o2::InteractionRecord> intRec,
69 std::vector<PVertex>& vertices, std::vector<o2d::VtxTrackIndex>& vertexTrackIDs, std::vector<V2TRef>& v2tRefs,
70 const gsl::span<const o2::MCCompLabel> lblTracks, std::vector<o2::MCEventLabel>& lblVtx);
71
72 int processFromExternalPool(const std::vector<TrackVF>& pool, std::vector<PVertex>& vertices, std::vector<o2d::VtxTrackIndex>& vertexTrackIDs, std::vector<V2TRef>& v2tRefs);
73
74 bool findVertex(const VertexingInput& input, PVertex& vtx);
75
76 void setStartIR(const o2::InteractionRecord& ir) { mStartIR = ir; }
77
78 void setTukey(float t)
79 {
80 mTukey2I = t > 0.f ? 1.f / (t * t) : 1.f / (PVertexerParams::kDefTukey * PVertexerParams::kDefTukey);
81 }
82 float getTukey() const;
83
84 bool setCompatibleIR(PVertex& vtx);
85
86 void setBunchFilling(const o2::BunchFilling& bf);
87
88 void setBz(float bz) { mBz = bz; }
90 void setValidateWithIR(bool v) { mValidateWithIR = v; }
91 bool getValidateWithIR() const { return mValidateWithIR; }
93
94 auto& getTracksPool() const { return mTracksPool; }
95 auto& getTimeZClusters() const { return mTimeZClusters; }
96
97 auto& getMeanVertex() const { return mMeanVertex; }
99 {
100 if (!v) {
101 return;
102 }
103 mMeanVertex = *v;
104 mMeanVertexSeed = *v;
106 }
107
109 {
110 mITSROFrameLengthMUS = v;
111 }
112
113 // special methods used to refit already found vertex skipping certain number of tracks.
114 template <typename TR>
115 bool prepareVertexRefit(const TR& tracks, const o2d::VertexBase& vtxSeed);
116
117 PVertex refitVertex(const std::vector<bool> useTrack, const o2d::VertexBase& vtxSeed);
118 PVertex refitVertexFull(const std::vector<bool> useTrack, const o2d::VertexBase& vtxSeed);
119 auto getNTZClusters() const { return mNTZClustersIni; }
120 auto getTotTrials() const { return mTotTrials; }
121 auto getMaxTrialsPerCluster() const { return mMaxTrialPerCluster; }
122 auto getLongestClusterMult() const { return mLongestClusterMult; }
123 auto getLongestClusterTimeMS() const { return mLongestClusterTimeMS; }
124 auto getNKilledBCValid() const { return mNKilledBCValid; }
125 auto getNKilledIntCand() const { return mNKilledIntCand; }
126 auto getNKilledDebris() const { return mNKilledDebris; }
127 auto getNKilledQuality() const { return mNKilledQuality; }
128 auto getNKilledITSOnly() const { return mNKilledITSOnly; }
129 auto getNIniFound() const { return mNIniFound; }
130
131 TStopwatch& getTimeDBScan() { return mTimeDBScan; }
132 TStopwatch& getTimeVertexing() { return mTimeVertexing; }
133 TStopwatch& getTimeDebris() { return mTimeDebris; }
134 TStopwatch& getTimeMADSel() { return mTimeMADSel; }
135 TStopwatch& getTimeReAttach() { return mTimeReAttach; }
136
137 void setPoolDumpDirectory(const std::string& d) { mPoolDumpDirectory = d; }
138
139 void printInpuTracksStatus(const VertexingInput& input) const;
141
142 private:
143 static constexpr int DBS_UNDEF = -2, DBS_NOISE = -1, DBS_INCHECK = -10;
144
145 SeedHistoTZ buildHistoTZ(const VertexingInput& input);
146 int runVertexing(gsl::span<o2d::GlobalTrackID> gids, const gsl::span<InteractionCandidate> intCand,
147 std::vector<PVertex>& vertices, std::vector<o2d::VtxTrackIndex>& vertexTrackIDs, std::vector<V2TRef>& v2tRefs,
148 gsl::span<const o2::MCCompLabel> lblTracks, std::vector<o2::MCEventLabel>& lblVtx);
149 void createMCLabels(gsl::span<const o2::MCCompLabel> lblTracks, const std::vector<uint32_t>& trackIDs, const std::vector<V2TRef>& v2tRefs, std::vector<o2::MCEventLabel>& lblVtx);
150 void reduceDebris(std::vector<PVertex>& vertices, std::vector<int>& timeSort, const std::vector<o2::MCEventLabel>& lblVtx);
151 FitStatus fitIteration(const VertexingInput& input, VertexSeed& vtxSeed);
152 void finalizeVertex(const VertexingInput& input, const PVertex& vtx, std::vector<PVertex>& vertices, std::vector<V2TRef>& v2tRefs, std::vector<uint32_t>& trackIDs, SeedHistoTZ* histo = nullptr);
153 void accountTrack(TrackVF& trc, VertexSeed& vtxSeed) const;
154 bool solveVertex(VertexSeed& vtxSeed) const;
155 FitStatus evalIterations(VertexSeed& vtxSeed, PVertex& vtx) const;
156 TimeEst timeEstimate(const VertexingInput& input) const;
157 float findZSeedHistoPeak() const;
158 void applyConstraint(VertexSeed& vtxSeed) const;
159 bool upscaleSigma(VertexSeed& vtxSeed) const;
160 bool relateTrackToMeanVertex(o2::track::TrackParCov& trc, float vtxErr2);
161 bool relateTrackToVertex(o2::track::TrackParCov& trc, const o2d::VertexBase& vtxSeed) const;
162 void applyMADSelection(std::vector<PVertex>& vertices, std::vector<int>& timeSort, const std::vector<V2TRef>& v2tRefs, const std::vector<uint32_t>& trackIDs);
163 void applITSOnlyFractionCut(std::vector<PVertex>& vertices, std::vector<int>& timeSort, const std::vector<V2TRef>& v2tRefs, const std::vector<uint32_t>& trackIDs);
164 void applInteractionValidation(std::vector<PVertex>& vertices, std::vector<int>& timeSort, const gsl::span<InteractionCandidate> intCand, int minContrib);
165
166 template <typename TR>
167 void createTracksPool(const TR& tracks, gsl::span<const o2d::GlobalTrackID> gids);
168
169 int findVertices(const VertexingInput& input, std::vector<PVertex>& vertices, std::vector<uint32_t>& trackIDs, std::vector<V2TRef>& v2tRefs);
170 void reAttach(std::vector<PVertex>& vertices, std::vector<int>& timeSort, std::vector<uint32_t>& trackIDs, std::vector<V2TRef>& v2tRefs);
171
172 std::pair<int, int> getBestIR(const PVertex& vtx, const gsl::span<InteractionCandidate> intCand, int& currEntry) const;
173
174 int dbscan_RangeQuery(int idxs, std::vector<int>& cand, std::vector<int>& status);
175 void dbscan_clusterize();
176 void doDBScanDump(const VertexingInput& input, gsl::span<const o2::MCCompLabel> lblTracks);
177 void doVtxDump(std::vector<PVertex>& vertices, std::vector<uint32_t> trackIDsLoc, std::vector<V2TRef>& v2tRefsLoc, gsl::span<const o2::MCCompLabel> lblTracks);
178 void doDBGPoolDump(gsl::span<const o2::MCCompLabel> lblTracks);
179 void dumpPool();
180
181 o2::BunchFilling mBunchFilling;
182 std::array<int16_t, o2::constants::lhc::LHCMaxBunches> mClosestBunchAbove{-1}; // closest filled bunch from above, 1st element -1 to disable usage by default
183 std::array<int16_t, o2::constants::lhc::LHCMaxBunches> mClosestBunchBelow{-1}; // closest filled bunch from below, 1st element -1 to disable usage by default
184 o2d::MeanVertexObject mMeanVertex{}; // calibrated mean vertex object
185 o2d::VertexBase mMeanVertexSeed{}; // mean vertex at particular Z (accounting for slopes
186 std::array<float, 3> mXYConstraintInvErr = {1.0f, 0.f, 1.0f};
187 //
188 std::vector<TrackVF> mTracksPool;
189 std::vector<TimeZCluster> mTimeZClusters;
190 float mITSROFrameLengthMUS = 0;
191 float mBz = 0.;
192 o2::base::Propagator::MatCorrType mMatCorr = o2::base::Propagator::MatCorrType::USEMatCorrLUT;
193 float mDBScanDeltaT = 0.;
194 float mDBSMaxZ2InvCorePoint = 0;
195 bool mValidateWithIR = false;
196 o2::InteractionRecord mStartIR{0, 0};
197 // structure for the vertex refit
198 o2d::VertexBase mVtxRefitOrig{};
199 std::vector<int> mRefitTrackIDs{};
200 //
201
203 GTrackID::mask_t mTrackSrc{};
204 std::vector<int> mSrcVec{};
205 const PVertexerParams* mPVParams = nullptr;
206 float mTukey2I = 0;
207 static constexpr float kDefTukey = 5.0f;
208 static constexpr float kHugeF = 1.e12;
209 static constexpr float kAlmost0F = 1e-12;
210 static constexpr double kAlmost0D = 1e-16;
211 int mNIniFound = 0;
212 int mNKilledBCValid = 0;
213 int mNKilledIntCand = 0;
214 int mNKilledDebris = 0;
215 int mNKilledQuality = 0;
216 int mNKilledITSOnly = 0;
217 size_t mNTZClustersIni = 0;
218 size_t mTotTrials = 0;
219 size_t mMaxTrialPerCluster = 0;
220 float mMaxTDiffDebris = 0;
221 float mMaxTDiffDebrisExtra = 0;
222 float mMaxTDiffDebrisFiducial = 0;
223 float mMaxZDiffDebrisFiducial = 0;
224 float mMaxMultRatDebrisFiducial = 0;
225 long mLongestClusterTimeMS = 0;
226 int mLongestClusterMult = 0;
227 bool mPoolDumpProduced = false;
228 bool mITSOnly = false;
229 TStopwatch mTimeDBScan;
230 TStopwatch mTimeVertexing;
231 TStopwatch mTimeDebris;
232 TStopwatch mTimeMADSel;
233 TStopwatch mTimeReAttach;
234 std::string mPoolDumpDirectory{};
235#ifdef _PV_DEBUG_TREE_
236 std::unique_ptr<TFile> mDebugDumpFile;
237 std::unique_ptr<TTree> mDebugDBScanTree;
238 std::unique_ptr<TTree> mDebugPoolTree;
239 std::unique_ptr<TTree> mDebugVtxTree;
240 std::unique_ptr<TTree> mDebugVtxCompTree;
241
242 std::vector<TrackVFDump> mDebugDumpDBSTrc;
243 std::vector<GTrackID> mDebugDumpDBSGID;
244 std::vector<o2::MCCompLabel> mDebugDumpDBSTrcMC;
245
246 PVertex mDebugDumpVtx;
247 std::vector<TrackVFDump> mDebugDumpVtxTrc;
248 std::vector<GTrackID> mDebugDumpVtxGID;
249 std::vector<o2::MCCompLabel> mDebugDumpVtxTrcMC;
250
251 std::vector<PVtxCompDump> mDebugDumpPVComp;
252 std::vector<o2::MCEventLabel> mDebugDumpPVCompLbl0; // for some reason the added as a class member
253 std::vector<o2::MCEventLabel> mDebugDumpPVCompLbl1; // gets stored as simple uint
254#endif
255};
256
257//___________________________________________________________________
258inline void PVertexer::applyConstraint(VertexSeed& vtxSeed) const
259{
260 // impose meanVertex constraint, i.e. account terms
261 // (V_i-Constrain_i)^2/sig2constr_i for i=X,Y in the fit chi2 definition
262 vtxSeed.cxx += mXYConstraintInvErr[0];
263 vtxSeed.cxy += mXYConstraintInvErr[1];
264 vtxSeed.cyy += mXYConstraintInvErr[2];
265 float xv = mMeanVertex.getXAtZ(vtxSeed.getZ()), yv = mMeanVertex.getYAtZ(vtxSeed.getZ());
266 vtxSeed.cx0 += mXYConstraintInvErr[0] * xv + mXYConstraintInvErr[1] * yv;
267 vtxSeed.cy0 += mXYConstraintInvErr[1] * xv + mXYConstraintInvErr[2] * yv;
268}
269
270//___________________________________________________________________
271inline bool PVertexer::upscaleSigma(VertexSeed& vtxSeed) const
272{
273 // scale upward the scaleSigma2 if needes
274 if (vtxSeed.scaleSigma2 < mPVParams->maxScale2) {
275 auto s = vtxSeed.scaleSigma2 * mPVParams->upscaleFactor;
276 vtxSeed.setScale(s > mPVParams->maxScale2 ? mPVParams->maxScale2 : s, mTukey2I);
277 return true;
278 }
279 return false;
280}
281
282//___________________________________________________________________
283template <typename TR>
284void PVertexer::createTracksPool(const TR& tracks, gsl::span<const o2d::GlobalTrackID> gids)
285{
286 // create pull of all candidate tracks in a global array ordered in time
287 mTracksPool.clear();
288 auto ntGlo = tracks.size();
289 std::vector<int> sortedTrackID(ntGlo);
290 mTracksPool.reserve(ntGlo);
291 std::iota(sortedTrackID.begin(), sortedTrackID.end(), 0);
292 std::sort(sortedTrackID.begin(), sortedTrackID.end(), [&tracks](int i, int j) {
293 return tracks[i].timeEst.getTimeStamp() < tracks[j].timeEst.getTimeStamp();
294 });
295
296 // check all containers
297 float vtxErr2 = 0.5 * (mMeanVertex.getSigmaX2() + mMeanVertex.getSigmaY2()) + mPVParams->meanVertexExtraErrSelection * mPVParams->meanVertexExtraErrSelection;
299
300 for (uint32_t i = 0; i < ntGlo; i++) {
301 int id = sortedTrackID[i];
303 trc.updateCov(mPVParams->sysErrY2, o2::track::kSigY2);
304 trc.updateCov(mPVParams->sysErrZ2, o2::track::kSigZ2);
305 if (!relateTrackToMeanVertex(trc, vtxErr2)) {
306 continue;
307 }
308 auto& tvf = mTracksPool.emplace_back(trc, tracks[id].getTimeMUS(), id, gids[id], mPVParams->addTimeSigma2, mPVParams->addZSigma2);
309 if (tvf.wghHisto < 0) {
310 mTracksPool.pop_back(); // discard bad track
311 continue;
312 }
313 if (gids[id].getSource() == GTrackID::ITSTPC) { // if the track was adjusted to ITS ROF boundary, flag it
314 float bcf = tvf.timeEst.getTimeStamp() / o2::constants::lhc::LHCBunchSpacingMUS + o2::constants::lhc::LHCMaxBunches;
315 int bcWrtROF = int(bcf - alpParams.roFrameBiasInBC) % alpParams.roFrameLengthInBC;
316 if (bcWrtROF == 0) {
317 float dbc = bcf - (int(bcf / alpParams.roFrameBiasInBC)) * alpParams.roFrameBiasInBC;
318 if (std::abs(dbc) < 1e-6) {
319 tvf.setITSTPCAdjusted();
320 LOGP(debug, "Adjusted t={} -> bcf={} dbc = {}", tvf.timeEst.getTimeStamp(), bcf, dbc);
321 }
322 }
323 }
324 }
325
326 if (mTracksPool.empty()) {
327 return;
328 }
329 //
330 auto tMin = mTracksPool.front().timeEst.getTimeStamp();
331 auto tMax = mTracksPool.back().timeEst.getTimeStamp();
332}
333
334//___________________________________________________________________
335template <typename TR>
336int PVertexer::process(const TR& tracks, const gsl::span<o2d::GlobalTrackID> gids, const gsl::span<InteractionCandidate> intCand,
337 std::vector<PVertex>& vertices, std::vector<o2d::VtxTrackIndex>& vertexTrackIDs, std::vector<V2TRef>& v2tRefs,
338 const gsl::span<const o2::MCCompLabel> lblTracks, std::vector<o2::MCEventLabel>& lblVtx)
339{
340 createTracksPool(tracks, gids);
341 return runVertexing(gids, intCand, vertices, vertexTrackIDs, v2tRefs, lblTracks, lblVtx);
342}
343
344//___________________________________________________________________
345template <typename TR>
346int PVertexer::process(const TR& tracks, const gsl::span<o2d::GlobalTrackID> gids, const gsl::span<o2::InteractionRecord> intRec,
347 std::vector<PVertex>& vertices, std::vector<o2d::VtxTrackIndex>& vertexTrackIDs, std::vector<V2TRef>& v2tRefs,
348 const gsl::span<const o2::MCCompLabel> lblTracks, std::vector<o2::MCEventLabel>& lblVtx)
349{
350 createTracksPool(tracks, gids);
351 static std::vector<InteractionCandidate> intCand;
352 intCand.clear();
353 intCand.reserve(intRec.size());
354 for (const auto& ir : intRec) {
355 intCand.emplace_back(InteractionCandidate{ir, float(ir.differenceInBC(mStartIR) * o2::constants::lhc::LHCBunchSpacingMUS), 0, 0});
356 }
357 return runVertexing(gids, intCand, vertices, vertexTrackIDs, v2tRefs, lblTracks, lblVtx);
358}
359
360//___________________________________________________________________
361template <typename TR>
362bool PVertexer::prepareVertexRefit(const TR& tracks, const o2d::VertexBase& vtxSeed)
363{
364 // Create pull of all tracks for the refitting starting from the tracks of already found vertex.
365 // This method should be called once before calling refitVertex method for given vtxSeed (which can be
366 // called multiple time with different useTrack request)
367 mTracksPool.clear();
368 mTracksPool.reserve(tracks.size());
369 for (uint32_t i = 0; i < tracks.size(); i++) {
370 o2::track::TrackParCov trc = tracks[i];
371 if (!relateTrackToVertex(trc, vtxSeed)) {
372 continue;
373 }
374 auto& tvf = mTracksPool.emplace_back(trc, TimeEst{0.f, 1.f}, i, GTrackID{}, 1., mPVParams->addZSigma2);
375 tvf.entry = i;
376 }
377 if (int(mTracksPool.size()) < mPVParams->minTracksPerVtx) {
378 return false;
379 }
380 mRefitTrackIDs.resize(tracks.size());
381 std::iota(mRefitTrackIDs.begin(), mRefitTrackIDs.end(), 0);
382 mVtxRefitOrig = vtxSeed;
383 return true;
384}
385
386} // namespace vertexing
387} // namespace o2
388#endif
General auxilliary methods.
Base track model for the Barrel, params only, w/o covariance.
std::ostringstream debug
int32_t i
Global index for barrel track: provides provenance (detectors combination), index in respective array...
Header to collect LHC related constants.
Primary vertex finder helper classes.
uint32_t j
Definition RawData.h:0
void setMatCorrType(o2::base::Propagator::MatCorrType type)
Definition PVertexer.h:89
void setTrackSources(GTrackID::mask_t s)
void setBz(float bz)
Definition PVertexer.h:88
auto getNIniFound() const
Definition PVertexer.h:129
int process(const TR &tracks, const gsl::span< o2d::GlobalTrackID > gids, const gsl::span< InteractionCandidate > intCand, std::vector< PVertex > &vertices, std::vector< o2d::VtxTrackIndex > &vertexTrackIDs, std::vector< V2TRef > &v2tRefs, const gsl::span< const o2::MCCompLabel > lblTracks, std::vector< o2::MCEventLabel > &lblVtx)
Definition PVertexer.h:336
auto getTotTrials() const
Definition PVertexer.h:120
void setStartIR(const o2::InteractionRecord &ir)
set InteractionRecods for the beginning of the TF
Definition PVertexer.h:76
auto getLongestClusterMult() const
Definition PVertexer.h:122
PVertex refitVertexFull(const std::vector< bool > useTrack, const o2d::VertexBase &vtxSeed)
bool getValidateWithIR() const
Definition PVertexer.h:91
auto & getTracksPool() const
Definition PVertexer.h:94
auto getLongestClusterTimeMS() const
Definition PVertexer.h:123
TStopwatch & getTimeDebris()
Definition PVertexer.h:133
bool prepareVertexRefit(const TR &tracks, const o2d::VertexBase &vtxSeed)
Definition PVertexer.h:362
auto & getTimeZClusters() const
Definition PVertexer.h:95
auto getMaxTrialsPerCluster() const
Definition PVertexer.h:121
auto getNKilledITSOnly() const
Definition PVertexer.h:128
TStopwatch & getTimeVertexing()
Definition PVertexer.h:132
auto & getMeanVertex() const
Definition PVertexer.h:97
TStopwatch & getTimeMADSel()
Definition PVertexer.h:134
void printInpuTracksStatus(const VertexingInput &input) const
auto getNKilledQuality() const
Definition PVertexer.h:127
bool findVertex(const VertexingInput &input, PVertex &vtx)
PVertex refitVertex(const std::vector< bool > useTrack, const o2d::VertexBase &vtxSeed)
void setPoolDumpDirectory(const std::string &d)
Definition PVertexer.h:137
auto getNTZClusters() const
Definition PVertexer.h:119
auto getNKilledDebris() const
Definition PVertexer.h:126
int processFromExternalPool(const std::vector< TrackVF > &pool, std::vector< PVertex > &vertices, std::vector< o2d::VtxTrackIndex > &vertexTrackIDs, std::vector< V2TRef > &v2tRefs)
void setBunchFilling(const o2::BunchFilling &bf)
bool setCompatibleIR(PVertex &vtx)
void setValidateWithIR(bool v)
Definition PVertexer.h:90
TStopwatch & getTimeReAttach()
Definition PVertexer.h:135
TStopwatch & getTimeDBScan()
Definition PVertexer.h:131
auto getNKilledBCValid() const
Definition PVertexer.h:124
void setTukey(float t)
Definition PVertexer.h:78
void setMeanVertex(const o2d::MeanVertexObject *v)
Definition PVertexer.h:98
void setITSROFrameLength(float v)
Definition PVertexer.h:108
auto getNKilledIntCand() const
Definition PVertexer.h:125
const GLdouble * v
Definition glcorearb.h:832
GLint GLint GLsizei GLint GLenum GLenum type
Definition glcorearb.h:275
GLuint id
Definition glcorearb.h:650
constexpr double LHCBunchSpacingMUS
constexpr int LHCMaxBunches
Definition of a container to keep/associate and arbitrary number of labels associated to an index wit...
TrackParCovF TrackParCov
Definition Track.h:33
struct o2::upgrades_utils::@469 tracks
structure to keep trigger-related info
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
int64_t differenceInBC(const InteractionRecord &other) const
float meanVertexExtraErrSelection
extra error to meanvertex sigma used when selecting tracks
int minTracksPerVtx
min N tracks per vertex
float sysErrY2
systematic error on track Y error
float addTimeSigma2
increment time error^2 by this amount when calculating histo weight
float maxScale2
max slaling factor^2
float addZSigma2
increment z error^2 by this amount when calculating histo weight
float sysErrZ2
systematic error on track Z error
static constexpr float kDefTukey
def.value for tukey constant
float upscaleFactor
factor for upscaling if not candidate is found
weights and scaling params for current vertex
o2::InteractionRecord ir(0, 0)