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 ";
 
 
  537  return propagate(tr, pnt, maxStep, maxSnp, mt, 
nullptr, signCorr);
 
 
  545  return propagate(tr, pnt, maxStep, maxSnp, mt, tLT, signCorr);
 
 
  553    int dir = dx > 0.f ? 1 : -1;
 
  616    const double* corrDiag = &corrPar[pnt->
getMaxLocVarID() - nCorrPar]; 
 
  622    corr[
i] += detELoss[
i];
 
 
  638  const double snp = trPar.getSnp() + corr[
kParSnp];
 
  640  if (
Abs(snp) > algConf.maxSnp) {
 
  641    if (algConf.verbose > 2) {
 
  642      LOG(error) << 
"Snp is too large: " << snp;
 
  643      printf(
"DeltaPar: ");
 
  645        printf(
"%+.3e ", corr[
i]);
 
  653  trPar.updateParams(corr);
 
 
  670    const double* corrDiagP = &corrDiag[pnt->
getMaxLocVarID() - nCorrPar]; 
 
  675    corr[
i] += detELoss[
i];
 
  682  for (
int itr = ntr; itr--;) {
 
  684      if (algConf.verbose > 2) {
 
  685        LOGP(error, 
"Failed on clone {} materials", itr);
 
 
  703    return (4. * 
val[1] - 
val[0]) * (1. / 3);
 
  706    for (
int i = 0; 
i < ord; 
i++) {
 
 
  722    return (4. * 
val[1] - 
val[0]) * (1. / 3);
 
  724  double* buff = 
new double[ord + 1];
 
  725  memcpy(buff, 
val, (ord + 1) * 
sizeof(
double));
 
  727    for (
int i = 0; 
i < ord; 
i++) {
 
  728      buff[
i] = (4. * buff[
i + 1] - buff[
i]) * (1. / 3);
 
 
  742    double resYVP = 0, resYVN = 0, resZVP = 0, resZVN = 0;
 
  745    derRichY[icl] = 0.5 * (resYVP - resYVN) / delta[icl];                     
 
  746    derRichZ[icl] = 0.5 * (resZVP - resZVN) / delta[icl];
 
  750  if (TMath::IsNaN(derY) || TMath::IsNaN(derZ)) {
 
  751    LOGP(error, 
"NAN encounterd: DerY {}  : DerZ {}", derY, derZ);
 
 
  760  printf(
"%s ", 
isCosmic() ? 
"  Cosmic  " : 
"Collision ");
 
  761  trackParam_t::print();
 
  762  printf(
"N Free Par: %d (Kinem: %d) | Npoints: %d (Inner:%d) | Chi2Ini:%.1f Chi2: %.1f/%d",
 
  775  bool par = optS.Contains(
"lc");   
 
  776  bool paru = optS.Contains(
"lcu"); 
 
  779    printf(
"Ref.track corr: ");
 
  786  if (optS.Contains(
"p") || 
res || der) {
 
  793        printf(
"  Residuals  : %+.3e %+.3e -> Pulls: %+7.2f %+7.2f\n",
 
  798        for (
int ipar = 0; ipar < 
mNLocPar; ipar++) {
 
  805        printf(
"  Corr.Diag:  ");
 
  806        for (
int i = 0; 
i < nCorrPar; 
i++) {
 
  810        printf(
"  Corr.Pull:  ");
 
  813        for (
int i = 0; 
i < nCorrPar; 
i++) {
 
  818          double corr[5] = {0};
 
  821          printf(
"  Corr.Track: ");
 
  823            printf(
"%+.3e ", corr[
i]);
 
 
  836  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");
 
 
  853    setQ2Pt(
isCosmic() ? 1. / algConf.defPTB0Cosm : 1. / algConf.defPTB0Coll);
 
  863    if (algConf.verbose > 2) {
 
  864      LOG(warn) << 
"Failed fitLeg 0";
 
  876      if (algConf.verbose > 2) {
 
  877        LOG(warn) << 
"Failed fitLeg 1";
 
 
  917    if (algConf.verbose > 2) {
 
  918      LOG(error) << 
"Tracks must be defined at same reference X and Alpha";
 
  927  float dsnp = trcL.getSnp() - trcU.getSnp(), dTgl = trcL.getTgl() - trcU.getTgl();
 
  928  if (std::abs(dsnp) > algConf.cosmMaxDSnp || std::abs(dTgl) > algConf.cosmMaxDTgl) {
 
  929    if (algConf.verbose > 2) {
 
  930      LOGP(error, 
"Rejecting track with dSnp={} dTgl={}", dsnp, dTgl);
 
  931      LOGP(error, 
"CosmDn: {}", trcL.
asString());
 
  932      LOGP(error, 
"CosmUp: {}", trcU.
asString());
 
  940  TMatrixD matCL(mtSize, mtSize), matCLplCU(mtSize, mtSize);
 
  941  TVectorD vl(mtSize), vUmnvL(mtSize);
 
  946  for (
int i = mtSize; 
i--;) {
 
  947    vUmnvL[
i] = trcU.getParam(
i) - trcL.getParam(
i); 
 
  948    vl[
i] = trcL.getParam(
i);
 
  949    for (
int j = 
i + 1; 
j--;) {
 
  950      int indIJ = ((
i * (
i + 1)) >> 1) + 
j; 
 
  951      matCL(
i, 
j) = matCL(
j, 
i) = trcL.getCovarElem(
i, 
j);
 
  952      matCLplCU(
i, 
j) = matCLplCU(
j, 
i) = trcL.getCovarElem(
i, 
j) + trcU.getCovarElem(
i, 
j);
 
  956  if (!matCLplCU.IsValid()) {
 
  957    if (algConf.verbose > 2) {
 
  958      LOG(error) << 
"Failed to invert summed cov.matrix of cosmic track";
 
  963  TMatrixD matK(matCL, TMatrixD::kMult, matCLplCU); 
 
  964  TMatrixD matKdotCL(matK, TMatrixD::kMult, matCL); 
 
  965  TVectorD vlUp = matK * vUmnvL;                    
 
  966  for (
int i = mtSize; 
i--;) {
 
  967    trcL.updateParam(vlUp[
i], 
i); 
 
  968    for (
int j = 
i + 1; 
j--;) {
 
  969      trcL.updateCov(-matKdotCL(
i, 
j), 
i, 
j);
 
  975  for (
int i = mtSize; 
i--;) {
 
  976    for (
int j = mtSize; 
j--;) {
 
  977      chi2 += matCLplCU(
i, 
j) * vUmnvL[
i] * vUmnvL[
j];
 
 
  993  const int kMinNStep = 3;
 
  994  const double kErrSpace = 50.;
 
  995  const double kErrAng = 0.8;
 
  996  const double kErrRelPtI = 1.;
 
  998                         kErrSpace * kErrSpace,
 
  999                         0, kErrSpace * kErrSpace,
 
 1000                         0, 0, kErrAng * kErrAng,
 
 1001                         0, 0, 0, kErrAng * kErrAng,
 
 1002                         0, 0, 0, 0, kErrRelPtI * kErrRelPtI};
 
 1004  static int count = 0;
 
 1006  if (algConf.verbose > 2) {
 
 1007    LOGP(info, 
"FIT COUNT {}", 
count++);
 
 1011  double phi = trc.getPhi(), alp = p0->getAlphaSens();
 
 1014  double dphi = math_utils::detail::deltaPhiSmall(phi, alp); 
 
 1015  if (dphi > Pi() / 2.) {                
 
 1021    if (algConf.verbose > 2) {
 
 1022      LOGF(warn, 
"Failed on PropagateParamOnlyTo to %f", p0->getXTracking());
 
 1027  trc.setCov(kIniErr);
 
 1028  trc.setCov(16 * trc.getQ2Pt() * trc.getQ2Pt(), 4, 4); 
 
 1030  int pinc, signELoss = 0; 
 
 1043  for (
int ip = pFrom; ip != pTo; ip += pinc) { 
 
 1046      if (algConf.verbose > 2) {
 
 1047        LOGF(warn, 
"Failed on propagateToPoint %d (%d : %d) %f", ip, pFrom, pTo, pnt->
getXTracking());
 
 1058      double chi = trc.getPredictedChi2(yz, errYZ);
 
 1059      if (!trc.update(yz, errYZ)) {
 
 1060        if (algConf.verbose > 2) {
 
 1061          LOGF(warn, 
"Failed on Update %f,%f {%f,%f,%f}", yz[0], yz[1], errYZ[0], errYZ[1], errYZ[2]);
 
 1074  if (algConf.verbose > 2) {
 
 1075    LOGP(info, 
"Fitted leg with {} points, chi2: {}", pntCnt, 
mChi2);
 
 
 1088  const int kMinNStep = 3;
 
 1089  const double kErrSpace = 100.;
 
 1090  const double kErrAng = 0.7;
 
 1091  const double kErrRelPtI = 1.;
 
 1093                            kErrSpace * kErrSpace,
 
 1094                            0, kErrSpace * kErrSpace,
 
 1095                            0, 0, kErrAng * kErrAng,
 
 1096                            0, 0, 0, kErrAng * kErrAng,
 
 1097                            0, 0, 0, 0, kErrRelPtI * kErrRelPtI};
 
 1105  while (pID < nPnt && !(pnt = 
getPoint(pID))->containsMeasurement()) { 
 
 1114  double dphi = math_utils::detail::deltaPhiSmall(phi, alp);
 
 1115  if (dphi > Pi() / 2.) { 
 
 1120  if (!
propagateParamToPoint(trc, pnt, algConf.maxStep, algConf.maxSnp, MatCorrType::USEMatCorrNONE, 1)) {
 
 1121    if (algConf.verbose > 2) {
 
 1122      LOG(warn) << 
"Failed on propagateParamToPoint";
 
 1129  trc.setCov(kIniErr);
 
 1130  const double inwardQ2Pt2 = 4 * trc.getCovarElem(4, 4) * trc.getQ2Pt() * trc.getQ2Pt();
 
 1131  trc.setCov(inwardQ2Pt2, 4, 4); 
 
 1133  double chifwd = 0, chibwd = 0;
 
 1136  for (
int ip = pID; ip < nPnt; ip++) {
 
 1154    ws[2] = trc.getSigmaY2();
 
 1155    ws[3] = trc.getSigmaZY();
 
 1156    ws[4] = trc.getSigmaZ2();
 
 1157    double chi = trc.getPredictedChi2(yz, errYZ);
 
 1158    if (!trc.update(yz, errYZ)) {
 
 1159      if (algConf.verbose > 2) {
 
 1160        LOGF(warn, 
"Failed on Inward Update %f,%f {%f,%f,%f}", yz[0], yz[1], errYZ[0], errYZ[1], errYZ[2]);
 
 1171  trc.setCov(kIniErr);
 
 1172  const double outwardQ2Pt2 = 4 * trc.getCovarElem(4, 4) * trc.getQ2Pt() * trc.getQ2Pt();
 
 1173  trc.setCov(outwardQ2Pt2, 4, 4); 
 
 1175  for (
int ip = nPnt; ip--;) {
 
 1193    ws[2] = trc.getSigmaY2();
 
 1194    ws[3] = trc.getSigmaZY();
 
 1195    ws[4] = trc.getSigmaZ2();
 
 1196    double chi = trc.getPredictedChi2(yz, errYZ);
 
 1199    if (!trc.update(yz, errYZ)) {
 
 1200      if (algConf.verbose > 2) {
 
 1201        LOGF(warn, 
"Failed on Outward Update %f,%f {%f,%f,%f}", yz[0], yz[1], errYZ[0], errYZ[1], errYZ[2]);
 
 1211  for (
int ip = 0; ip < nPnt; ip++) {
 
 1218    double &yA = wsA[0], &zA = wsA[1], &sgAYY = wsA[2], &sgAYZ = wsA[3], &sgAZZ = wsA[4];
 
 1219    double &yB = wsB[0], &zB = wsB[1], &sgBYY = wsB[2], &sgBYZ = wsB[3], &sgBZZ = wsB[4];
 
 1221    double sgYY = sgAYY + sgBYY, sgYZ = sgAYZ + sgBYZ, sgZZ = sgAZZ + sgBZZ;
 
 1222    double detI = sgYY * sgZZ - sgYZ * sgYZ;
 
 1231    sgYZ = -sgYZ * detI;
 
 1232    double dy = yB - yA, dz = zB - zA;
 
 1233    double k00 = sgAYY * sgYY + sgAYZ * sgYZ, k01 = sgAYY * sgYZ + sgAYZ * sgZZ;
 
 1234    double k10 = sgAYZ * sgYY + sgAZZ * sgYZ, k11 = sgAYZ * sgYZ + sgAZZ * sgZZ;
 
 1235    double sgAYZt = sgAYZ;
 
 1236    yA += dy * k00 + dz * k01; 
 
 1237    zA += dy * k10 + dz * k11; 
 
 1238    sgAYY -= k00 * sgAYY + k01 * sgAYZ;
 
 1239    sgAYZ -= k00 * sgAYZt + k01 * sgAZZ;
 
 1240    sgAZZ -= k10 * sgAYZt + k11 * sgAZZ;
 
 
 1260    if (algConf.verbose > 2) {
 
 1261      LOG(error) << 
"Failed to process materials for leg along the track";
 
 1273      LOG(error) << 
"Failed to process materials for leg against the track";
 
 
 1285  const int kMinNStep = 3;
 
 1286  const double kErrSpcT = 1e-6;
 
 1287  const double kErrAngT = 1e-6;
 
 1288  const double kErrPtIT = 1e-12;
 
 1290                             kErrSpcT * kErrSpcT,
 
 1291                             0, kErrSpcT * kErrSpcT,
 
 1292                             0, 0, kErrAngT * kErrAngT,
 
 1293                             0, 0, 0, kErrAngT * kErrAngT,
 
 1294                             0, 0, 0, 0, kErrPtIT * kErrPtIT};
 
 1311  double dpar[5] = {0};
 
 1313  matTL.setTimeNotNeeded();
 
 1316  double minX2X0 = algConf.minScatteringAngleToAccount / 0.014 * trc.getPt();
 
 1320  int pinc, signELoss = 0;
 
 1331  for (
int ip = pFrom; ip != pTo; ip += pinc) { 
 
 1333    trc.setCov(kErrTiny); 
 
 1339      if (algConf.verbose > 2) {
 
 1340        LOG(error) << 
"Failed to take track to point" << ip << 
" (dir: " << pFrom << 
"->" << pTo << 
") with mat.corr.";
 
 1348    bool hasMaterial = matTL.getX2X0() > minX2X0;
 
 1349    if (!
propagateToPoint(tr0, pnt, algConf.maxStep, algConf.maxSnp, MatCorrType::USEMatCorrNONE, 
nullptr, signELoss)) { 
 
 1350      if (algConf.verbose > 2) {
 
 1351        LOG(error) << 
"Failed to take track to point" << ip << 
" (dir: " << pFrom << 
"->" << pTo << 
") with mat.corr.";
 
 1359    double *par0 = (
double*)tr0.getParams(), *par1 = (
double*)trc.getParams();
 
 1360    const covMat_t &cov0 = tr0.getCov(), &cov1 = trc.getCov();
 
 1361    for (
int l = 15; l--;) {
 
 1362      dcov[l] = cov1[l] - cov0[l];
 
 1365      dpar[l] = par1[l] - par0[l];
 
 1374      TMatrixDSym matCov(nParFree);
 
 1375      for (
int i = nParFree; 
i--;) {
 
 1376        for (
int j = 
i + 1; 
j--;) {
 
 1377          auto err2 = dcov[
j + ((
i * (
i + 1)) >> 1)];
 
 1378          if (
i == 
j && err2 < 1e-20) { 
 
 1379            LOGP(warn, 
"Material correction {}-th error too small: {}, declare no material despite x/X0={}", 
i, err2, matTL.getX2X0());
 
 1380            hasMaterial = 
false;
 
 1383          matCov(
i, 
j) = matCov(
j, 
i) = err2;
 
 1387        TMatrixDSymEigen matDiag(matCov); 
 
 1388        const TMatrixD& matEVec = matDiag.GetEigenVectors();
 
 1389        if (!matEVec.IsValid()) {
 
 1390          if (algConf.verbose > 2) {
 
 1391            LOG(error) << 
"Failed to diagonalize covariance of material correction";
 
 1396        for (
int ix = 0; ix < matDiag.GetEigenValues().GetNrows(); ix++) {
 
 1397          if (matDiag.GetEigenValues()[ix] < 1e-18) {
 
 1398            LOG(warn) << 
"Too small " << ix << 
"-th eignevalue " << matDiag.GetEigenValues()[ix] << 
" for cov.matrix !!!";
 
 1399            LOG(warn) << 
"Track with mat.corr: " << trc.
asString();
 
 1400            LOG(warn) << 
"Track w/o  mat.corr: " << tr0.
asString();
 
 1402            matDiag.GetEigenValues().Print();
 
 1403            hasMaterial = 
false;
 
 1413          pnt->
setX2X0(matTL.getX2X0());
 
 1422      if (!trc.update(yz, errYZ)) {
 
 1423        if (algConf.verbose > 2) {
 
 1424          LOGF(warn, 
"Failed on Update %f,%f {%f,%f,%f}", yz[0], yz[1], errYZ[0], errYZ[1], errYZ[2]);
 
 
 1454    auto xa = 
a->getXTracking(), xb = 
b->getXTracking();
 
 1455    if (!
a->isInvDir()) {   
 
 1456      if (!
b->isInvDir()) { 
 
 1462      if (
b->isInvDir()) {
 
 1474    for (
int ip = np; ip--;) {
 
 
 1519  std::memset(rhs, 0, 
sizeof(
double) * 
mNLocPar);
 
 1520  for (
int ip = npnt; ip--;) {
 
 1521    if (
mPoints[ip]->containsMeasurement()) {
 
 1522      for (
int idim = 2; idim--;) {                       
 
 1523        auto sg2inv = 1. / 
mPoints[ip]->getErrDiag(idim); 
 
 1525        for (
int parI = 0; parI < 
mNLocPar; parI++) {
 
 1526          rhs[parI] -= deriv[parI] * 
mResid[idim][ip] * sg2inv;
 
 1527          for (
int parJ = parI; parJ < 
mNLocPar; parJ++) {
 
 1528            mat[parI][parJ] += deriv[parI] * deriv[parJ] * sg2inv;
 
 1534    if (
mPoints[ip]->containsMaterial()) { 
 
 1535      int npm = 
mPoints[ip]->getNMatPar();
 
 1537      const auto expMatCov = 
mPoints[ip]->getMatCorrCov(); 
 
 1538      int offs = 
mPoints[ip]->getMaxLocVarID() - npm;
 
 1539      for (
int ipar = 0; ipar < npm; ipar++) {
 
 1540        int parI = offs + ipar;
 
 1543        mat[parI][parI] += 1. / expMatCov[ipar]; 
 
 1551      solver.
A(
i, 
j) = mat[
i][
j];
 
 1553    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)
bool propagateToPoint(trackParam_t &tr, const AlignmentPoint *pnt, double maxStep, double maxSnp=0.95, MatCorrType mt=MatCorrType::USEMatCorrLUT, track::TrackLTIntegral *tLT=nullptr, int signCorr=0)
void setKalmanDone(bool v=true)
void richardsonDeriv(const trackParam_t *trSet, const double *delta, const AlignmentPoint *pnt, double &derY, double &derZ)
std::vector< AlignmentPoint * > mPoints
virtual void dumpCoordinates() const
void setParams(trackParam_t &tr, double x, double alp, const double *par, bool add)
bool getResidDone() const
double getResidual(int dim, int pntID) const
bool applyMatCorr(trackParam_t &trPar, const double *corrDiag, const AlignmentPoint *pnt)
AlignmentPoint * getPoint(int i)
bool calcResiduals(const double *params=nullptr)
void modParam(trackParam_t &tr, int par, double delta)
std::vector< double > mDResDGlo[2]
bool calcResidDeriv(double *params=nullptr)
bool getDerivDone() const
bool propagateParamToPoint(trackParam_t &tr, const AlignmentPoint *pnt, double maxStep=3, double maxSnp=0.95, MatCorrType mt=MatCorrType::USEMatCorrLUT, int signCorr=0)
void checkExpandDerGloBuffer(unsigned int minSize)
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)
const double * getDResDLoc(int dim, int pntID) const
void copyFrom(const o2::track::TrackParametrizationWithError< P > &trc)
void Print(Option_t *opt="") const final
std::vector< double > mResid[2]
static double richardsonExtrap(double *val, int ord=1)
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
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"