317 updateTimeDependentParams(pc);
336 auto pattIt = patterns.begin();
337 mITSClustersArray.clear();
338 mITSClustersArray.reserve(clusITS.size());
339#ifdef ENABLE_UPGRADES
353 std::vector<o2::MCCompLabel> matchLabelsITSTPC;
354 std::vector<o2::MCCompLabel> trdLabelsITSTPC;
355 std::vector<o2::MCCompLabel> matchLabelsTPC;
356 std::vector<o2::MCCompLabel> trdLabelsTPC;
357 gsl::span<const o2::MCCompLabel> tpcTrackLabels;
358 gsl::span<const o2::MCCompLabel> itstpcTrackLabels;
372 bool foundFilteredTrigger =
false;
375 foundFilteredTrigger =
true;
379 if (!foundFilteredTrigger && mTrigRecFilter) {
380 static bool warningSent =
false;
382 LOG(warning) <<
"Trigger filtering requested, but no TRD trigger is actually masked. Can be that none needed to be masked or that the setting was not active for the tracklet transformer";
385 }
else if (foundFilteredTrigger && !mTrigRecFilter) {
386 LOG(error) <<
"Trigger filtering is not requested, but masked TRD triggers are found. Rerun tracklet transformer without trigger filtering";
390 const auto& trackTune = TrackTuneParams::Instance();
391 LOG(
debug) <<
"Start loading input seeds into TRD tracker";
392 int nTracksLoadedITSTPC = 0;
393 int nTracksLoadedTPC = 0;
397 GPUTRDTracker::HelperTrackAttributes trkAttribs;
398 trkAttribs.mTime = trkITSTPC.getTimeMUS().getTimeStamp();
399 trkAttribs.mTimeAddMax = trkITSTPC.getTimeMUS().getTimeStampError() * mRec->
GetParam().
rec.trd.nSigmaTerrITSTPC + mRec->
GetParam().
rec.trd.addTimeRoadITSTPC;
400 trkAttribs.mTimeSubMax = trkITSTPC.getTimeMUS().getTimeStampError() * mRec->
GetParam().
rec.trd.nSigmaTerrITSTPC + mRec->
GetParam().
rec.trd.addTimeRoadITSTPC;
404 if (mTracker->LoadTrack(trkLoad, trackGID.getRaw(),
true, &trkAttribs)) {
407 ++nTracksLoadedITSTPC;
408 LOGF(
debug,
"Loaded ITS-TPC track %i with time %f. Window from %f to %f", nTracksLoadedITSTPC, trkAttribs.mTime, trkAttribs.mTime - trkAttribs.mTimeSubMax, trkAttribs.mTime + trkAttribs.mTimeAddMax);
417 GPUTRDTracker::HelperTrackAttributes trkAttribs;
418 trkAttribs.mTime = trkTpc.getTime0() * mTPCTBinMUS - mTPCTDriftOffset;
419 trkAttribs.mTimeAddMax = trkTpc.getDeltaTFwd() * mTPCTBinMUS;
420 trkAttribs.mTimeSubMax = trkTpc.getDeltaTBwd() * mTPCTBinMUS;
421 if (trkTpc.hasASideClustersOnly()) {
422 trkAttribs.mSide = -1;
423 }
else if (trkTpc.hasCSideClustersOnly()) {
424 trkAttribs.mSide = 1;
427 if (!trackTune.sourceLevelTPC) {
428 if (trackTune.useTPCOuterCorr) {
429 trkLoad.updateParams(trackTune.tpcParOuter);
431 if (trackTune.tpcCovOuterType != TrackTuneParams::AddCovType::Disable) {
432 trkLoad.updateCov(mCovDiagOuter, trackTune.tpcCovOuterType == TrackTuneParams::AddCovType::WithCorrelations);
436 if (mTracker->LoadTrack(trkLoad, trackGID.getRaw(),
true, &trkAttribs)) {
440 LOGF(
debug,
"Loaded TPC track %i with time %f. Window from %f to %f", nTracksLoadedTPC, trkAttribs.mTime, trkAttribs.mTime - trkAttribs.mTimeSubMax, trkAttribs.mTime + trkAttribs.mTimeAddMax);
442 LOGF(info,
"%i tracks are loaded into the TRD tracker. Out of those %i ITS-TPC tracks and %i TPC tracks", nTracksLoadedITSTPC + nTracksLoadedTPC, nTracksLoadedITSTPC, nTracksLoadedTPC);
448 uint32_t firstOrbit = 0;
449 for (
size_t ft0id = 0; ft0id < ft0recPoints.size(); ft0id++) {
450 const auto& f0rec = ft0recPoints[ft0id];
452 firstOrbit = f0rec.getInteractionRecord().orbit;
455 uint32_t currentOrbit = f0rec.getInteractionRecord().orbit;
456 mTriggeredBCFT0.push_back(f0rec.getInteractionRecord().bc + (currentOrbit - firstOrbit) * o2::constants::lhc::LHCMaxBunches);
461 mTracker->SetFT0TriggeredBC(mTriggeredBCFT0.data(), mTriggeredBCFT0.size());
469 std::vector<TrackTRD> tracksOutITSTPC;
470 std::vector<TrackTRD> tracksOutTPC;
471 std::vector<TrackTriggerRecord> trackTrigRecITSTPC;
472 std::vector<TrackTriggerRecord> trackTrigRecTPC;
474 std::vector<unsigned int> trackIdxArray(mTracker->NTracks());
475 std::iota(trackIdxArray.begin(), trackIdxArray.end(), 0);
476 std::sort(trackIdxArray.begin(), trackIdxArray.end(), [tracksOutRaw](
int lhs,
int rhs) { return tracksOutRaw[lhs].getCollisionId() < tracksOutRaw[rhs].getCollisionId(); });
478 std::vector<std::pair<uint8_t, uint8_t>> pileUpDist;
479 bool ft0Seen =
false;
481 long maxDiffFwd = mTracker->Param().rec.trd.pileupFwdNBC;
482 long maxDiffBwd = mTracker->Param().rec.trd.pileupBwdNBC;
484 auto trdTriggers = tmpInputContainer->mTriggerRecords;
485 ft0Seen = ft0recPoints.size() > 0;
486 pileUpDist.resize(trdTriggers.size(), {0, 0});
488 for (
size_t itrd = 0; itrd < trdTriggers.size(); itrd++) {
489 const auto& trig = trdTriggers[itrd];
490 uint8_t fwd = 0, bwd = 0;
491 for (
size_t ft0id = curFT0; ft0id < ft0recPoints.size(); ft0id++) {
492 const auto& f0rec = ft0recPoints[ft0id];
494 auto bcdiff = trig.getBCData().toLong() - f0rec.getInteractionRecord().toLong();
495 if (bcdiff > maxDiffBwd) {
501 bwd = uint8_t(bcdiff);
504 if (bcdiff < -maxDiffFwd) {
507 fwd = uint8_t(-bcdiff);
511 pileUpDist[itrd] = {bwd, fwd};
515 int nTrackletsAttached = 0;
516 int nTracksFailedTPCTRDRefit = 0;
517 int nTracksFailedITSTPCTRDRefit = 0;
518 for (
int iTrk = 0; iTrk < mTracker->NTracks(); ++iTrk) {
519 const auto& trdTrack = mTracker->Tracks()[trackIdxArray[iTrk]];
520 if (trdTrack.getCollisionId() < 0) {
524 if (mStrict && (trdTrack.getIsAmbiguous() || trdTrack.getReducedChi2() > mTracker->Param().rec.trd.chi2StrictCut)) {
528 if (trdTrack.getNtracklets() < mTracker->Param().rec.trd.nTrackletsMin) {
531 if (trdTrack.getChi2() / trdTrack.getNtracklets() > mTracker->Param().rec.trd.maxChi2Red) {
539 float sumCorr2 = 0.f;
541 for (
int iBC = 0; iBC < mTriggeredBCFT0.size(); iBC++) {
542 int deltaBC = roundf(mTriggeredBCFT0[iBC] - mChainTracking->
mIOPtrs.
trdTriggerTimes[trdTrack.getCollisionId()] / o2::constants::lhc::LHCBunchSpacingMUS);
543 if (deltaBC <= mRecoParam.getPileUpRangeBefore() || deltaBC >= mRecoParam.getPileUpRangeAfter()) {
547 std::array<int, 6> q0;
548 std::array<int, 6> q1;
549 for (
int iLy = 0; iLy < NLAYER; iLy++) {
550 int trkltId = trdTrack.getTrackletIndex(iLy);
555 q0[iLy] = mTrackletsRaw[trkltId].getQ0();
556 q1[iLy] = mTrackletsRaw[trkltId].getQ1();
560 float probBC = mRecoParam.getPileUpProbTrack(deltaBC, q0, q1);
561 sumCorr += probBC * deltaBC;
562 sumCorr2 += probBC * deltaBC * deltaBC;
564 if (probBC > maxProb) {
566 mTCorrPileUp = -deltaBC;
569 if (sumProb > 1e-6) {
570 mTErrPileUp2 = sumCorr2 / sumProb - 2 * mTCorrPileUp * sumCorr / sumProb + mTCorrPileUp * mTCorrPileUp;
573 nTrackletsAttached += trdTrack.getNtracklets();
574 auto trackGID = trdTrack.getRefGlobalTrackId();
577 tracksOutITSTPC.push_back(trdTrack);
579 tracksOutITSTPC.back().setPileUpDistance(pileUpDist[trdTrack.getCollisionId()].first, pileUpDist[trdTrack.getCollisionId()].second);
581 tracksOutITSTPC.back().setPileUpDistance(mTracker->Param().rec.trd.pileupBwdNBC, mTracker->Param().rec.trd.pileupFwdNBC);
584 tracksOutITSTPC.pop_back();
585 ++nTracksFailedITSTPCTRDRefit;
592 tracksOutITSTPC.back().setSignal(mBase->process(trdTrack, inputTracks,
false));
596 tracksOutTPC.push_back(trdTrack);
598 tracksOutTPC.back().setPileUpDistance(pileUpDist[trdTrack.getCollisionId()].first, pileUpDist[trdTrack.getCollisionId()].second);
600 tracksOutTPC.back().setPileUpDistance(mTracker->Param().rec.trd.pileupBwdNBC, mTracker->Param().rec.trd.pileupFwdNBC);
602 if (!
refitTPCTRDTrack(tracksOutTPC.back(), mChainTracking->
mIOPtrs.
trdTriggerTimes[trdTrack.getCollisionId()] - mTCorrPileUp * o2::constants::lhc::LHCBunchSpacingMUS, &inputTracks) || std::isnan(tracksOutTPC.back().getSnp())) {
603 tracksOutTPC.pop_back();
604 ++nTracksFailedTPCTRDRefit;
611 tracksOutTPC.back().setSignal(mBase->process(trdTrack, inputTracks,
true));
619 LOGF(info,
"The TRD tracker found %lu tracks from TPC seeds and %lu tracks from ITS-TPC seeds and attached in total %i tracklets out of %i",
620 tracksOutTPC.size(), tracksOutITSTPC.size(), nTrackletsAttached, mChainTracking->
mIOPtrs.
nTRDTracklets);
621 LOGF(info,
"Number of tracks failed in the refit: TPC-TRD (%i), ITS-TPC-TRD (%i)", nTracksFailedTPCTRDRefit, nTracksFailedITSTPCTRDRefit);
664 auto& outerParam = trk.getOuterParam();
666 int nCl = -1, clEntry = -1, nClRefit = 0, clRefs[14];
667 float chi2Out = 0, timeZErr = 0.;
668 bool pileUpOn = trk.hasPileUpInfo();
672 const auto& trkITS = mITSTracksArray[detRefs[
GTrackID::ITS]];
673 outerParam = trkITS.getParamOut();
674 outerParam.setPID(recoCont->
getTPCITSTrack(trk.getRefGlobalTrackId()).getPID(),
true);
675 nCl = trkITS.getNumberOfClusters();
676 clEntry = trkITS.getFirstClusterEntry();
677 chi2Out = trkITS.getChi2();
678 for (
int icl = 0; icl < nCl; icl++) {
679 clRefs[icl] = mITSTrackClusIdx[clEntry + icl];
683 nCl = trkITSABref.getNClusters();
684 clEntry = trkITSABref.getFirstEntry();
686 outerParam.resetCovariance(100);
688 for (
int icl = 0; icl < nCl; icl++) {
689 const auto& clus = mITSClustersArray[clRefs[nCl - icl - 1] = mITSABTrackClusIdx[clEntry + icl]];
690 if (!outerParam.rotate(geom->getSensorRefAlpha(clus.getSensorID())) ||
691 !propagator->propagateToX(outerParam, clus.getX(), propagator->getNominalBz(), o2::base::Propagator::MAX_SIN_PHI, o2::base::Propagator::MAX_STEP, matCorr)) {
694 chi2Out += outerParam.getPredictedChi2(clus);
695 if (!outerParam.update(clus)) {
700 if (nClRefit != nCl) {
701 LOG(
debug) <<
"ITS-AB refit outward failed";
708 !propagator->PropagateToXBxByBz(outerParam, xtogo, o2::base::Propagator::MAX_SIN_PHI, o2::base::Propagator::MAX_STEP, matCorr)) {
709 LOG(
debug) <<
"Propagation to inner TPC boundary X=" << xtogo <<
" failed, Xtr=" << outerParam.getX() <<
" snp=" << outerParam.getSnp();
712 int retVal = mTPCRefitter->RefitTrackAsTrackParCov(outerParam, mTPCTracksArray[detRefs[
GTrackID::TPC]].getClusterRef(), timeTRD * mTPCTBinMUSInv, &chi2Out,
true,
false);
714 LOG(
debug) <<
"TPC refit outwards failed";
719 LOG(
debug) <<
"TRD refit outwards failed";
726 LOG(
debug) <<
"TRD refit inwards failed";
729 auto posStart = trk.getXYZGlo();
730 retVal = mTPCRefitter->RefitTrackAsTrackParCov(trk, mTPCTracksArray[detRefs[
GTrackID::TPC]].getClusterRef(), timeTRD * mTPCTBinMUSInv, &chi2In,
false,
false);
732 LOG(
debug) <<
"TPC refit inwards failed";
737 !propagator->PropagateToXBxByBz(trk,
o2::constants::geom::XTPCInnerRef, o2::base::Propagator::MAX_SIN_PHI, o2::base::Propagator::MAX_STEP, o2::base::Propagator::MatCorrType::USEMatCorrNONE)) {
738 LOG(
debug) <<
"BACK-Propagationto inner boundary failed";
741 auto posEnd = trk.getXYZGlo();
742 auto lInt = propagator->estimateLTIncrement(trk, posStart, posEnd);
743 trk.getLTIntegralOut().addStep(lInt, trk.getQ2P2());
746 const auto& trackTune = TrackTuneParams::Instance();
747 if (trackTune.tpcCovInnerType != TrackTuneParams::AddCovType::Disable || trackTune.useTPCInnerCorr) {
748 if (!propagator->PropagateToXBxByBz(trk,
o2::constants::geom::XTPCInnerRef, o2::base::Propagator::MAX_SIN_PHI, o2::base::Propagator::MAX_STEP, matCorr, &trk.getLTIntegralOut())) {
749 LOG(
debug) <<
"Propagation to TPC inner reference X for ITS refit inwards failed";
752 if (!trackTune.useTPCInnerCorr) {
753 trk.updateParams(trackTune.tpcParInner);
755 if (trackTune.tpcCovInnerType != TrackTuneParams::AddCovType::Disable) {
756 trk.updateCov(mCovDiagInner, trackTune.tpcCovInnerType == TrackTuneParams::AddCovType::WithCorrelations);
761 for (
int icl = 0; icl < nCl; icl++) {
762 const auto& clus = mITSClustersArray[clRefs[icl]];
763 if (!trk.rotate(geom->getSensorRefAlpha(clus.getSensorID())) ||
767 !propagator->propagateToX(trk, clus.getX(), propagator->getNominalBz(), o2::base::Propagator::MAX_SIN_PHI, o2::base::Propagator::MAX_STEP, matCorr, &trk.getLTIntegralOut())) {
770 chi2In += trk.getPredictedChi2(clus);
771 if (!trk.update(clus)) {
776 if (nClRefit != nCl) {
777 LOG(
debug) <<
"ITS refit inwards failed";
785 if (!propagator->propagateToDCA(vtxDummy.getXYZ(), trkPar, propagator->getNominalBz(), o2::base::Propagator::MAX_STEP, matCorr,
nullptr, &trk.getLTIntegralOut())) {
786 LOG(error) <<
"LTOF integral might be incorrect";
796 auto& outerParam = trk.getOuterParam();
799 float chi2Out = 0, timeZErr = 0.;
800 bool pileUpOn = trk.hasPileUpInfo();
801 int retVal = mTPCRefitter->RefitTrackAsTrackParCov(outerParam, mTPCTracksArray[detRefs[
GTrackID::TPC]].getClusterRef(), timeTRD * mTPCTBinMUSInv, &chi2Out,
true,
false);
803 LOG(
debug) <<
"TPC refit outwards failed";
808 timeZErr = mTPCVdrift * mTPCVdrift * mTErrPileUp2;
812 LOG(
debug) <<
"TRD refit outwards failed";
819 LOG(
debug) <<
"TRD refit inwards failed";
822 auto posStart = trk.getXYZGlo();
823 retVal = mTPCRefitter->RefitTrackAsTrackParCov(trk, mTPCTracksArray[detRefs[
GTrackID::TPC]].getClusterRef(), timeTRD * mTPCTBinMUSInv, &chi2In,
false,
false);
825 LOG(
debug) <<
"TPC refit inwards failed";
833 !propagator->PropagateToXBxByBz(trk,
o2::constants::geom::XTPCInnerRef, o2::base::Propagator::MAX_SIN_PHI, o2::base::Propagator::MAX_STEP, o2::base::Propagator::MatCorrType::USEMatCorrNONE)) {
834 LOG(
debug) <<
"BACK-Propagationto inner boundary failed";
837 auto posEnd = trk.getXYZGlo();
838 auto lInt = propagator->estimateLTIncrement(trk, posStart, posEnd);
839 trk.getLTIntegralOut().addStep(lInt, trk.getQ2P2());
842 if (!propagator->PropagateToXBxByBz(trk,
o2::constants::geom::XTPCInnerRef, o2::base::Propagator::MAX_SIN_PHI, o2::base::Propagator::MAX_STEP, matCorr, &trk.getLTIntegralOut())) {
843 LOG(
debug) <<
"Final propagation to inner TPC radius failed (not removing the track because of this)";
846 const auto& trackTune = TrackTuneParams::Instance();
847 if (!trackTune.useTPCInnerCorr) {
848 trk.updateParams(trackTune.tpcParInner);
850 if (trackTune.tpcCovInnerType != TrackTuneParams::AddCovType::Disable) {
851 trk.updateCov(mCovDiagInner, trackTune.tpcCovInnerType == TrackTuneParams::AddCovType::WithCorrelations);
854 propagator->estimateLTFast(trk.getLTIntegralOut(), trk);
862 int lyStart = inwards ? NLAYER - 1 : 0;
863 int direction = inwards ? -1 : 1;
864 int lyEnd = inwards ? -1 : NLAYER;
871 tofL = &trk.getLTIntegralOut();
873 trkParam = &trk.getOuterParam();
874 trkParam->setUserField(trk.getUserField());
876 const auto& trackTune = TrackTuneParams::Instance();
877 if ((trackTune.useTPCOuterCorr || trackTune.tpcCovOuterType != TrackTuneParams::AddCovType::Disable) &&
878 (!tpcSA || !trackTune.sourceLevelTPC)) {
880 LOG(
debug) <<
"Propagation to TPC outer reference X for TRD outward refit failed";
883 if (trackTune.useTPCOuterCorr) {
884 trkParam->updateParams(trackTune.tpcParOuter);
886 if (trackTune.tpcCovOuterType != TrackTuneParams::AddCovType::Disable) {
887 trkParam->updateCov(mCovDiagOuter, trackTune.tpcCovOuterType == TrackTuneParams::AddCovType::WithCorrelations);
894 trkParam->resetCovariance(100);
896 for (
int iLy = lyStart; iLy != lyEnd; iLy += direction) {
897 int trkltId = trk.getTrackletIndex(iLy);
901 int trkltDet = mTrackletsRaw[trkltId].getDetector();
902 int trkltSec = trkltDet / (NLAYER * NSTACK);
905 LOGF(
debug,
"Track at alpha=%.2f could not be rotated in tracklet coordinate system with alpha=%.2f", trkParam->getAlpha(),
o2::math_utils::sector2Angle(trkltSec));
909 if (!propagator->PropagateToXBxByBz(*trkParam, mTrackletsCalib[trkltId].getX(), o2::base::Propagator::MAX_SIN_PHI, o2::base::Propagator::MAX_STEP, matCorr, tofL)) {
910 LOGF(
debug,
"Track propagation failed in layer %i (pt=%f, xTrk=%f, xToGo=%f)", iLy, trkParam->getPt(), trkParam->getX(), mTrackletsCalib[trkltId].getX());
914 float tilt = tan(TMath::DegToRad() * pad->getTiltingAngle());
916 float tiltCorrUp = tilt * (mTrackletsCalib[trkltId].getZ() - trkParam->getZ());
917 float zPosCorrUp = mTrackletsCalib[trkltId].getZ() + mRecoParam.getZCorrCoeffNRC() * trkParam->getTgl();
918 float padLength = pad->getRowSize(mTrackletsRaw[trkltId].getPadRow());
919 if (!((trkParam->getSigmaZ2() < (padLength * padLength / 12.f)) && (std::fabs(mTrackletsCalib[trkltId].getZ() - trkParam->getZ()) < padLength))) {
924 float slopeFactor = mTrackletsRaw[trkltId].getSlopeFloat() * pad->getWidthIPad() / 4.f;
925 float yCorrPileUp = mTCorrPileUp * slopeFactor;
926 float yAddErrPileUp2 = mTErrPileUp2 * slopeFactor * slopeFactor;
927 float yPosCorrUp = mTrackletsCalib[trkltId].getY() - tiltCorrUp + yCorrPileUp;
929 int nTrackletsChamber = mTracker->GetNtrackletsChamber(trk.getCollisionId(), trkltDet);
930 float angularPull = (mTrackletsCalib[trkltId].getDy() + dyTiltCorr - mRecoParam.convertAngleToDy(trkParam->getSnp())) / std::sqrt(mRecoParam.getDyRes(trkParam->getSnp(), nTrackletsChamber));
934 float corrPull = -angularPull * mRecoParam.getCorrYDy(trkParam->getSnp());
935 yPosCorrUp += corrPull;
938 std::array<float, 2> trkltPosUp{yPosCorrUp, zPosCorrUp};
939 std::array<float, 3> trkltCovUp;
940 mRecoParam.recalcTrkltCov(tilt, trkParam->getSnp(), pad->getRowSize(mTrackletsRaw[trkltId].getPadRow()), trkltCovUp, (mRec->
GetParam().
rec.trd.useAngularPull != 0 ? angularPull : 0.), nTrackletsChamber);
941 trkltCovUp[0] += yAddErrPileUp2;
943 chi2 += trkParam->getPredictedChi2(trkltPosUp, trkltCovUp);
944 if (!trkParam->update(trkltPosUp, trkltCovUp)) {
945 LOGF(
debug,
"Failed to update track with space point in layer %i", iLy);
952 if (!propagator->PropagateToXBxByBz(*trkParam,
o2::constants::geom::XTPCOuterRef, o2::base::Propagator::MAX_SIN_PHI, o2::base::Propagator::MAX_STEP, matCorr, tofL)) {
953 LOG(
debug) <<
"Propagation to TPC outer reference X after TRD inward refit failed";
960 !propagator->PropagateToXBxByBz(*trkParam,
o2::constants::geom::XTPCOuterRef, o2::base::Propagator::MAX_SIN_PHI, o2::base::Propagator::MAX_STEP, matCorr, tofL)) {
961 LOG(
debug) <<
"Propagation/rotation to TPC outer reference X after TRD inward refit failed " << trkParam->asString();
976 std::vector<OutputSpec> outputs;
978 std::shared_ptr<DataRequest> dataRequest = std::make_shared<DataRequest>();
980 dataRequest->setMatchingInputStrict();
985 dataRequest->requestTPCClusters(
false);
988#ifdef ENABLE_UPGRADES
990 dataRequest->requestIT3Clusters(
false);
992 dataRequest->requestITSClusters(
false);
995 dataRequest->requestITSClusters(
false);
999 dataRequest->requestTracks(trkSrc, useMC);
1000 auto& inputs = dataRequest->inputs;
1001 auto ggRequest = std::make_shared<o2::base::GRPGeomRequest>(
false,
1014 if (requestCTPLumi) {
1023 inputs.emplace_back(
"lq1dlut",
"TRD",
"LQ1D", 0, Lifetime::Condition,
ccdbParamSpec(
"TRD/PID/LQ1D"));
1026 inputs.emplace_back(
"lq2dlut",
"TRD",
"LQ2D", 0, Lifetime::Condition,
ccdbParamSpec(
"TRD/PID/LQ2D"));
1029 inputs.emplace_back(
"lq3dlut",
"TRD",
"LQ3D", 0, Lifetime::Condition,
ccdbParamSpec(
"TRD/PID/LQ3D"));
1031#ifdef TRDPID_WITH_ONNX
1032 case PIDPolicy::XGB:
1033 inputs.emplace_back(
"xgb",
"TRD",
"XGB", 0, Lifetime::Condition,
ccdbParamSpec(
"TRD_test/PID_new/xgb"));
1036 inputs.emplace_back(
"py",
"TRD",
"py", 0, Lifetime::Condition,
ccdbParamSpec(
"TRD_test/PID_new/py"));
1042 throw std::runtime_error(
"Unable to load requested PID policy data!");
1045 inputs.emplace_back(
"localgainfactors",
"TRD",
"LOCALGAINFACTORS", 0, Lifetime::Condition,
ccdbParamSpec(
"TRD/Calib/LocalGainFactor"));
1049 inputs.emplace_back(
"chamberstatus",
"TRD",
"CHAMBERSTATUS", 0, Lifetime::Condition,
ccdbParamSpec(
"TRD/Calib/DCSDPsFedChamberStatus"));
1070 if (trigRecFilterActive) {
1071 LOG(info) <<
"Matching to TPC-only tracks requested, but IRs without ITS contribution are filtered out (used strict matching mode to constrain TPC tracks before matching to ITS)";
1075 outputs.emplace_back(
"META",
"TRDTRACKER", 0, Lifetime::Sporadic);
1078 std::regex reg(
"[,\\[\\]]+");
1079 processorName = regex_replace(processorName, reg,
"_");
1085 AlgorithmSpec{adaptFromTask<TRDGlobalTracking>(useMC, withPID, policy, dataRequest, ggRequest,
src, trigRecFilterActive, strict, requestCTPLumi)},