27#include <TMatrixDSymEigen.h>
101 for (
int i = 0;
i < 2;
i++) {
136 if (algConf.verbose > 2) {
137 LOG(warn) <<
"Failed on derivatives calculation 0";
144 if (algConf.verbose > 2) {
145 LOG(warn) <<
"Failed on derivatives calculation 0";
173 const int kInvElem[
kNKinParBON] = {-1, 1, 1, -1, -1};
175 const double kDelta[
kNKinParBON] = {0.02, 0.02, 0.001, 0.001, 0.01};
179 delta[
i] = kDelta[
i];
185 int pinc, signELoss = 0;
205 double del = delta[ipar];
209 modParam(probD[(icl << 1) + 0], ipar, del);
210 modParam(probD[(icl << 1) + 1], ipar, -del);
214 for (
int ip = pFrom; ip != pTo; ip += pinc) {
226 if (
invert && kInvElem[ipar] < 0) {
234 for (
int ip = pFrom; ip != pTo; ip += pinc) {
238 if (algConf.verbose > 2) {
239 LOGF(warn,
"Failed on global derivatives calculation at point %d", ip);
256 for (
int ipar = 0; ipar < nParFreeI; ipar++) {
258 deltaMatD[ipar] = d > 0. ?
Sqrt(d) * 5 : delta[ipar];
265 for (
int ipar = 0; ipar < nParFreeI; ipar++) {
266 double del = deltaMatD[ipar];
274 int offsIP = offsI + ipar;
279 double parOrig = extendedParams[offsIP];
280 extendedParams[offsIP] += del;
283 if (!
applyMatCorr(probD[(icl << 1) + 0], extendedParams, pnt)) {
288 extendedParams[offsIP] = parOrig - del;
289 if (!
applyMatCorr(probD[(icl << 1) + 1], extendedParams, pnt)) {
293 extendedParams[offsIP] = parOrig;
297 int offsDerIP = ip *
mNLocPar + offsIP;
303 for (
int jp = ip + pinc; jp != pTo; jp += pinc) {
319 int offsDerJ = jp *
mNLocPar + offsIP;
343 double cspi = 1. /
Sqrt((1 - snp) * (1 + snp)), slpY = snp * cspi, slpZ = tgl * cspi;
360 double* dXYZ = &deriv[ip * 3];
384 for (
int idf = 0; idf < ndof; idf++) {
417 if (!extendedParams) {
418 extendedParams =
mLocPar.data();
427 if (algConf.verbose > 2) {
428 LOG(warn) <<
"Failed on residuals calculation 0";
435 if (algConf.verbose > 2) {
436 LOG(warn) <<
"Failed on residuals calculation 1";
461 setParams(probe, getX(), getAlpha(), extendedParams,
true);
465 int pinc, signELoss = 0;
478 for (
int ip = pFrom; ip != pTo; ip += pinc) {
480 if (!
propagateParamToPoint(probe, pnt, algConf.maxStep, algConf.maxSnp, MatCorrType::USEMatCorrNONE, signELoss)) {
505 for (
int i = 0;
i < nCorrPar;
i++) {
520 for (
int itr = nTr; itr--;) {
522 if (algConf.verbose > 2) {
523 LOG(error) <<
"Failed on clone " << itr <<
" propagation ";
524 tr[itr].printParam();
537 return propagate(tr, pnt, maxStep, maxSnp, mt,
nullptr, signCorr);
545 return propagate(tr,
linRef, pnt, maxStep, maxSnp, mt, tLT, signCorr);
553 int dir = dx > 0.f ? 1 : -1;
557 return PropagatorD::Instance()->propagateToAlphaX(track,
linRef, pnt->
getAlphaSens(), pnt->
getXTracking(), pnt->
getUseBzOnly(), maxSnp, maxStep, 2, mt, tLT, signCorr);
565 int dir = dx > 0.f ? 1 : -1;
628 const double* corrDiag = &corrPar[pnt->
getMaxLocVarID() - nCorrPar];
634 corr[
i] += detELoss[
i];
650 const double snp = trPar.getSnp() + corr[
kParSnp];
652 if (
Abs(snp) > algConf.maxSnp) {
653 if (algConf.verbose > 2) {
654 LOG(error) <<
"Snp is too large: " << snp;
655 printf(
"DeltaPar: ");
657 printf(
"%+.3e ", corr[
i]);
665 trPar.updateParams(corr);
682 const double* corrDiagP = &corrDiag[pnt->
getMaxLocVarID() - nCorrPar];
687 corr[
i] += detELoss[
i];
694 for (
int itr = ntr; itr--;) {
696 if (algConf.verbose > 2) {
697 LOGP(error,
"Failed on clone {} materials", itr);
698 trSet[itr].printParam();
715 return (4. *
val[1] -
val[0]) * (1. / 3);
718 for (
int i = 0;
i < ord;
i++) {
734 return (4. *
val[1] -
val[0]) * (1. / 3);
736 double* buff =
new double[ord + 1];
737 memcpy(buff,
val, (ord + 1) *
sizeof(
double));
739 for (
int i = 0;
i < ord;
i++) {
740 buff[
i] = (4. * buff[
i + 1] - buff[
i]) * (1. / 3);
754 double resYVP = 0, resYVN = 0, resZVP = 0, resZVN = 0;
757 derRichY[icl] = 0.5 * (resYVP - resYVN) / delta[icl];
758 derRichZ[icl] = 0.5 * (resZVP - resZVN) / delta[icl];
762 if (TMath::IsNaN(derY) || TMath::IsNaN(derZ)) {
763 LOGP(error,
"NAN encounterd: DerY {} : DerZ {}", derY, derZ);
772 printf(
"%s ",
isCosmic() ?
" Cosmic " :
"Collision ");
773 trackParam_t::print();
774 printf(
"N Free Par: %d (Kinem: %d) | Npoints: %d (Inner:%d) | Chi2Ini:%.1f Chi2: %.1f/%d",
787 bool par = optS.Contains(
"lc");
788 bool paru = optS.Contains(
"lcu");
791 printf(
"Ref.track corr: ");
798 if (optS.Contains(
"p") ||
res || der) {
805 printf(
" Residuals : %+.3e %+.3e -> Pulls: %+7.2f %+7.2f\n",
810 for (
int ipar = 0; ipar <
mNLocPar; ipar++) {
817 printf(
" Corr.Diag: ");
818 for (
int i = 0;
i < nCorrPar;
i++) {
822 printf(
" Corr.Pull: ");
825 for (
int i = 0;
i < nCorrPar;
i++) {
830 double corr[5] = {0};
833 printf(
" Corr.Track: ");
835 printf(
"%+.3e ", corr[
i]);
848 printf(
"gpx/D:gpy/D:gpz/D:gtxb/D:gtyb/D:gtzb/D:gtxa/D:gtya/D:gtza/D:alp/D:px/D:py/D:pz/D:tyb/D:tzb/D:tya/D:tza/D:ey/D:ez/D\n");
865 setQ2Pt(
isCosmic() ? 1. / algConf.defPTB0Cosm : 1. / algConf.defPTB0Coll);
875 if (algConf.verbose > 2) {
876 LOG(warn) <<
"Failed fitLeg 0";
888 if (algConf.verbose > 2) {
889 LOG(warn) <<
"Failed fitLeg 1";
929 if (algConf.verbose > 2) {
930 LOG(error) <<
"Tracks must be defined at same reference X and Alpha";
939 float dsnp = trcL.getSnp() - trcU.getSnp(), dTgl = trcL.getTgl() - trcU.getTgl();
940 if (std::abs(dsnp) > algConf.cosmMaxDSnp || std::abs(dTgl) > algConf.cosmMaxDTgl) {
941 if (algConf.verbose > 2) {
942 LOGP(error,
"Rejecting track with dSnp={} dTgl={}", dsnp, dTgl);
943 LOGP(error,
"CosmDn: {}", trcL.
asString());
944 LOGP(error,
"CosmUp: {}", trcU.
asString());
952 TMatrixD matCL(mtSize, mtSize), matCLplCU(mtSize, mtSize);
953 TVectorD vl(mtSize), vUmnvL(mtSize);
958 for (
int i = mtSize;
i--;) {
959 vUmnvL[
i] = trcU.getParam(
i) - trcL.getParam(
i);
960 vl[
i] = trcL.getParam(
i);
961 for (
int j =
i + 1;
j--;) {
962 int indIJ = ((
i * (
i + 1)) >> 1) +
j;
963 matCL(
i,
j) = matCL(
j,
i) = trcL.getCovarElem(
i,
j);
964 matCLplCU(
i,
j) = matCLplCU(
j,
i) = trcL.getCovarElem(
i,
j) + trcU.getCovarElem(
i,
j);
968 if (!matCLplCU.IsValid()) {
969 if (algConf.verbose > 2) {
970 LOG(error) <<
"Failed to invert summed cov.matrix of cosmic track";
975 TMatrixD matK(matCL, TMatrixD::kMult, matCLplCU);
976 TMatrixD matKdotCL(matK, TMatrixD::kMult, matCL);
977 TVectorD vlUp = matK * vUmnvL;
978 for (
int i = mtSize;
i--;) {
979 trcL.updateParam(vlUp[
i],
i);
980 for (
int j =
i + 1;
j--;) {
981 trcL.updateCov(-matKdotCL(
i,
j),
i,
j);
987 for (
int i = mtSize;
i--;) {
988 for (
int j = mtSize;
j--;) {
989 chi2 += matCLplCU(
i,
j) * vUmnvL[
i] * vUmnvL[
j];
1005 const int kMinNStep = 3;
1006 const double kErrSpace = 50.;
1007 const double kErrAng = 0.8;
1008 const double kErrRelPtI = 1.;
1010 kErrSpace * kErrSpace,
1011 0, kErrSpace * kErrSpace,
1012 0, 0, kErrAng * kErrAng,
1013 0, 0, 0, kErrAng * kErrAng,
1014 0, 0, 0, 0, kErrRelPtI * kErrRelPtI};
1016 static int count = 0;
1018 if (algConf.verbose > 2) {
1019 LOGP(info,
"FIT COUNT {}",
count++);
1023 double phi = trc.getPhi(), alp = p0->getAlphaSens();
1026 double dphi = math_utils::detail::deltaPhiSmall(phi, alp);
1027 if (dphi > Pi() / 2.) {
1033 if (algConf.verbose > 2) {
1034 LOGF(warn,
"Failed on PropagateParamOnlyTo to %f", p0->getXTracking());
1040 trc.setCov(kIniErr);
1041 trc.setCov(16 * trc.getQ2Pt() * trc.getQ2Pt(), 4, 4);
1043 int pinc, signELoss = 0;
1056 for (
int ip = pFrom; ip != pTo; ip += pinc) {
1059 if (algConf.verbose > 2) {
1060 LOGF(warn,
"Failed on propagateToPoint %d (%d : %d) %f", ip, pFrom, pTo, pnt->
getXTracking());
1071 double chi = trc.getPredictedChi2(yz, errYZ);
1072 if (!trc.update(yz, errYZ)) {
1073 if (algConf.verbose > 2) {
1074 LOGF(warn,
"Failed on Update %f,%f {%f,%f,%f}", yz[0], yz[1], errYZ[0], errYZ[1], errYZ[2]);
1087 if (algConf.verbose > 2) {
1088 LOGP(info,
"Fitted leg with {} points, chi2: {}", pntCnt,
mChi2);
1101 const int kMinNStep = 3;
1102 const double kErrSpace = 100.;
1103 const double kErrAng = 0.7;
1104 const double kErrRelPtI = 1.;
1106 kErrSpace * kErrSpace,
1107 0, kErrSpace * kErrSpace,
1108 0, 0, kErrAng * kErrAng,
1109 0, 0, 0, kErrAng * kErrAng,
1110 0, 0, 0, 0, kErrRelPtI * kErrRelPtI};
1118 while (pID < nPnt && !(pnt =
getPoint(pID))->containsMeasurement()) {
1127 double dphi = math_utils::detail::deltaPhiSmall(phi, alp);
1128 if (dphi > Pi() / 2.) {
1133 if (!
propagateParamToPoint(trc, pnt, algConf.maxStep, algConf.maxSnp, MatCorrType::USEMatCorrNONE, 1)) {
1134 if (algConf.verbose > 2) {
1135 LOG(warn) <<
"Failed on propagateParamToPoint";
1142 trc.setCov(kIniErr);
1143 const double inwardQ2Pt2 = 4 * trc.getCovarElem(4, 4) * trc.getQ2Pt() * trc.getQ2Pt();
1144 trc.setCov(inwardQ2Pt2, 4, 4);
1146 double chifwd = 0, chibwd = 0;
1149 for (
int ip = pID; ip < nPnt; ip++) {
1167 ws[2] = trc.getSigmaY2();
1168 ws[3] = trc.getSigmaZY();
1169 ws[4] = trc.getSigmaZ2();
1170 double chi = trc.getPredictedChi2(yz, errYZ);
1171 if (!trc.update(yz, errYZ)) {
1172 if (algConf.verbose > 2) {
1173 LOGF(warn,
"Failed on Inward Update %f,%f {%f,%f,%f}", yz[0], yz[1], errYZ[0], errYZ[1], errYZ[2]);
1184 trc.setCov(kIniErr);
1185 const double outwardQ2Pt2 = 4 * trc.getCovarElem(4, 4) * trc.getQ2Pt() * trc.getQ2Pt();
1186 trc.setCov(outwardQ2Pt2, 4, 4);
1188 for (
int ip = nPnt; ip--;) {
1206 ws[2] = trc.getSigmaY2();
1207 ws[3] = trc.getSigmaZY();
1208 ws[4] = trc.getSigmaZ2();
1209 double chi = trc.getPredictedChi2(yz, errYZ);
1212 if (!trc.update(yz, errYZ)) {
1213 if (algConf.verbose > 2) {
1214 LOGF(warn,
"Failed on Outward Update %f,%f {%f,%f,%f}", yz[0], yz[1], errYZ[0], errYZ[1], errYZ[2]);
1224 for (
int ip = 0; ip < nPnt; ip++) {
1231 double &yA = wsA[0], &zA = wsA[1], &sgAYY = wsA[2], &sgAYZ = wsA[3], &sgAZZ = wsA[4];
1232 double &yB = wsB[0], &zB = wsB[1], &sgBYY = wsB[2], &sgBYZ = wsB[3], &sgBZZ = wsB[4];
1234 double sgYY = sgAYY + sgBYY, sgYZ = sgAYZ + sgBYZ, sgZZ = sgAZZ + sgBZZ;
1235 double detI = sgYY * sgZZ - sgYZ * sgYZ;
1244 sgYZ = -sgYZ * detI;
1245 double dy = yB - yA, dz = zB - zA;
1246 double k00 = sgAYY * sgYY + sgAYZ * sgYZ, k01 = sgAYY * sgYZ + sgAYZ * sgZZ;
1247 double k10 = sgAYZ * sgYY + sgAZZ * sgYZ, k11 = sgAYZ * sgYZ + sgAZZ * sgZZ;
1248 double sgAYZt = sgAYZ;
1249 yA += dy * k00 + dz * k01;
1250 zA += dy * k10 + dz * k11;
1251 sgAYY -= k00 * sgAYY + k01 * sgAYZ;
1252 sgAYZ -= k00 * sgAYZt + k01 * sgAZZ;
1253 sgAZZ -= k10 * sgAYZt + k11 * sgAZZ;
1273 if (algConf.verbose > 2) {
1274 LOG(error) <<
"Failed to process materials for leg along the track";
1286 LOG(error) <<
"Failed to process materials for leg against the track";
1298 const int kMinNStep = 3;
1299 const double kErrSpcT = 1e-6;
1300 const double kErrAngT = 1e-6;
1301 const double kErrPtIT = 1e-12;
1303 kErrSpcT * kErrSpcT,
1304 0, kErrSpcT * kErrSpcT,
1305 0, 0, kErrAngT * kErrAngT,
1306 0, 0, 0, kErrAngT * kErrAngT,
1307 0, 0, 0, 0, kErrPtIT * kErrPtIT};
1324 double dpar[5] = {0};
1326 matTL.setTimeNotNeeded();
1329 double minX2X0 = algConf.minScatteringAngleToAccount / 0.014 * trc.getPt();
1333 int pinc, signELoss = 0;
1344 for (
int ip = pFrom; ip != pTo; ip += pinc) {
1346 trc.setCov(kErrTiny);
1352 if (algConf.verbose > 2) {
1353 LOG(error) <<
"Failed to take track to point" << ip <<
" (dir: " << pFrom <<
"->" << pTo <<
") with mat.corr.";
1361 bool hasMaterial = matTL.getX2X0() > minX2X0;
1362 if (!
propagateToPoint(tr0,
nullptr, pnt, algConf.maxStep, algConf.maxSnp, MatCorrType::USEMatCorrNONE,
nullptr, signELoss)) {
1363 if (algConf.verbose > 2) {
1364 LOG(error) <<
"Failed to take track to point" << ip <<
" (dir: " << pFrom <<
"->" << pTo <<
") with mat.corr.";
1372 double *par0 = (
double*)tr0.getParams(), *par1 = (
double*)trc.getParams();
1373 const covMat_t &cov0 = tr0.getCov(), &cov1 = trc.getCov();
1374 for (
int l = 15; l--;) {
1375 dcov[l] = cov1[l] - cov0[l];
1378 dpar[l] = par1[l] - par0[l];
1387 TMatrixDSym matCov(nParFree);
1388 for (
int i = nParFree;
i--;) {
1389 for (
int j =
i + 1;
j--;) {
1390 auto err2 = dcov[
j + ((
i * (
i + 1)) >> 1)];
1391 if (
i ==
j && err2 < 1e-20) {
1392 LOGP(warn,
"Material correction {}-th error too small: {}, declare no material despite x/X0={}",
i, err2, matTL.getX2X0());
1393 hasMaterial =
false;
1396 matCov(
i,
j) = matCov(
j,
i) = err2;
1400 TMatrixDSymEigen matDiag(matCov);
1401 const TMatrixD& matEVec = matDiag.GetEigenVectors();
1402 if (!matEVec.IsValid()) {
1403 if (algConf.verbose > 2) {
1404 LOG(error) <<
"Failed to diagonalize covariance of material correction";
1409 for (
int ix = 0; ix < matDiag.GetEigenValues().GetNrows(); ix++) {
1410 if (matDiag.GetEigenValues()[ix] < 1e-18) {
1411 LOG(warn) <<
"Too small " << ix <<
"-th eignevalue " << matDiag.GetEigenValues()[ix] <<
" for cov.matrix !!!";
1412 LOG(warn) <<
"Track with mat.corr: " << trc.
asString();
1413 LOG(warn) <<
"Track w/o mat.corr: " << tr0.
asString();
1415 matDiag.GetEigenValues().Print();
1416 hasMaterial =
false;
1426 pnt->
setX2X0(matTL.getX2X0());
1435 if (!trc.update(yz, errYZ)) {
1436 if (algConf.verbose > 2) {
1437 LOGF(warn,
"Failed on Update %f,%f {%f,%f,%f}", yz[0], yz[1], errYZ[0], errYZ[1], errYZ[2]);
1467 auto xa =
a->getXTracking(), xb =
b->getXTracking();
1468 if (!
a->isInvDir()) {
1469 if (!
b->isInvDir()) {
1475 if (
b->isInvDir()) {
1487 for (
int ip = np; ip--;) {
1532 std::memset(rhs, 0,
sizeof(
double) *
mNLocPar);
1533 for (
int ip = npnt; ip--;) {
1534 if (
mPoints[ip]->containsMeasurement()) {
1535 for (
int idim = 2; idim--;) {
1536 auto sg2inv = 1. /
mPoints[ip]->getErrDiag(idim);
1538 for (
int parI = 0; parI <
mNLocPar; parI++) {
1539 rhs[parI] -= deriv[parI] *
mResid[idim][ip] * sg2inv;
1540 for (
int parJ = parI; parJ <
mNLocPar; parJ++) {
1541 mat[parI][parJ] += deriv[parI] * deriv[parJ] * sg2inv;
1547 if (
mPoints[ip]->containsMaterial()) {
1548 int npm =
mPoints[ip]->getNMatPar();
1550 const auto expMatCov =
mPoints[ip]->getMatCorrCov();
1551 int offs =
mPoints[ip]->getMaxLocVarID() - npm;
1552 for (
int ipar = 0; ipar < npm; ipar++) {
1553 int parI = offs + ipar;
1556 mat[parI][parI] += 1. / expMatCov[ipar];
1564 solver.
A(
i,
j) = mat[
i][
j];
1566 solver.
B(
i, 0) = rhs[
i];
Configuration file for global alignment.
Base class for detector: wrapper for set of volumes.
End-chain alignment volume in detector branch, where the actual measurement is done.
Base class of alignable volume.
Track model for the alignment.
Definition of SymMatrixSolver class.
General auxilliary methods.
Collection of auxillary methods.
bool isFreeDOF(int dof) const
virtual void dPosTraDParCalib(const AlignmentPoint *pnt, double *deriv, int calibID, const AlignableVolume *parent=nullptr) const
AlignableDetector * getDetector() const
virtual void dPosTraDParGeom(const AlignmentPoint *pnt, double *deriv, const AlignableVolume *parent=nullptr) const
bool isFreeDOF(int dof) const
AlignableVolume * getParent() const
void setXTimesRho(double v)
float * getMatCorrCov() const
virtual void dumpCoordinates() const
bool getELossVaried() const
bool getUseBzOnly() const
void updatePointByTrackInfo(const trackParam_t *t)
void setMinLocVarID(int id)
double getErrDiag(int i) const
void setMatCorrExp(double *p)
double * getTrParamWSB() const
void diagonalizeResiduals(double rY, double rZ, double &resU, double &resV) const
void setContainsMaterial(bool v=true)
void setTrParamWSA(const double *param)
int getMaxLocVarID() const
void setMatCovDiagElem(int i, double err2)
double * getTrParamWSA() const
double getAlphaSens() const
void print(uint16_t opt=0) const
void setMatCovDiag(const TVectorD &v)
const AlignableSensor * getSensor() const
float * getMatCorrExp() const
void getResidualsDiag(const double *pos, double &resU, double &resV) const
bool containsMaterial() const
const double * getYZErrTracking() const
bool getNeedUpdateFromTrack() const
double getXTracking() const
void setMatCovDiagonalizationMatrix(const TMatrixD &d)
bool containsMeasurement() const
const double * getYZTracking() const
void setTrParamWSB(const double *param)
void unDiagMatCorr(const double *diag, double *nodiag) const
void setMaxLocVarID(int id)
void addLocPars(const double *pars)
void setKalmanDone(bool v=true)
std::vector< AlignmentPoint * > mPoints
virtual void dumpCoordinates() const
bool getResidDone() const
double getResidual(int dim, int pntID) const
AlignmentPoint * getPoint(int i)
bool calcResiduals(const double *params=nullptr)
std::vector< double > mDResDGlo[2]
bool calcResidDeriv(double *params=nullptr)
bool getDerivDone() const
void checkExpandDerGloBuffer(unsigned int minSize)
bool propagateToPoint(trackParam_t &tr, trackPar_t *linRef, const AlignmentPoint *pnt, double maxStep, double maxSnp=0.95, MatCorrType mt=MatCorrType::USEMatCorrLUT, track::TrackLTIntegral *tLT=nullptr, int signCorr=0)
bool fitLeg(trackParam_t &trc, int pFrom, int pTo, bool &inv)
std::vector< double > mDResDLoc[2]
std::vector< AlignmentPoint > mDetPoints
std::vector< double > mLocPar
void setDerivDone(bool v=true)
void setLocPars(const double *pars)
int getInnerPointID() const
bool calcResidDerivGlo(AlignmentPoint *pnt)
void Clear(Option_t *opt="") final
void suppressLastPoints(int n)
bool combineTracks(trackParam_t &trcL, const trackParam_t &trcU)
std::vector< int > mGloParID
void setResidDone(bool v=true)
bool applyMatCorr(trackPar_t &trPar, const double *corrDiag, const AlignmentPoint *pnt)
const double * getDResDLoc(int dim, int pntID) const
void copyFrom(const o2::track::TrackParametrizationWithError< P > &trc)
void setParams(trackPar_t &tr, double x, double alp, const double *par, bool add)
void Print(Option_t *opt="") const final
void modParam(trackPar_t &tr, int par, double delta)
bool propagateParamToPoint(trackPar_t &tr, const AlignmentPoint *pnt, double maxStep=3, double maxSnp=0.95, MatCorrType mt=MatCorrType::USEMatCorrLUT, int signCorr=0)
std::vector< double > mResid[2]
static double richardsonExtrap(double *val, int ord=1)
void richardsonDeriv(const trackPar_t *trSet, const double *delta, const AlignmentPoint *pnt, double &derY, double &derZ)
int getParGloID(int par) const
int getNCalibDOFsFree() const
int getNCalibDOFs() const
GPUd() value_type estimateLTFast(o2 static GPUd() float estimateLTIncrement(const o2 PropagatorImpl * Instance(bool uninitialized=false)
static const AlignConfig & Instance()
double & A(int i, int j)
access to A elements
double & B(int i, int j)
access to B elements
value_t const params_t & par
std::array< value_t, kCovMatSize > covMat_t
TrackParametrization< value_T > & linRef
std::string asString() const
value_t value_t DirType dir
GLboolean GLboolean GLboolean b
GLenum const GLfloat * params
GLboolean GLboolean GLboolean GLboolean a
constexpr double TinyDist
typename track::TrackParametrizationWithError< double > trackParam_t
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"