82 mTPCCorrMapsLoader.
init(ic);
93 static bool initOnceDone =
false;
100 geo->createPadPlaneArray();
101 geo->createClusterMatrixArray();
102 mFlatGeo = std::make_unique<GeometryFlat>(*geo);
105 cfgRecoStep.
steps = GPUDataTypes::RecoStep::NoRecoStep;
122 LOG(error) <<
"Strict matching mode requested, but tracks with another close hypothesis will not be rejected. Please set trdNCandidates to at least 3.";
124 mTracker->SetProcessPerTimeFrame(
true);
125 mTracker->SetGenerateSpacePoints(
false);
130 LOG(fatal) <<
"GPUReconstruction could not be initialized";
136 LOG(info) <<
"Strict matching mode is " << ((mStrict) ?
"ON" :
"OFF");
137 LOGF(info,
"The search road in time for ITS-TPC tracks is set to %.1f sigma and %.2f us are added to it on top",
147 bool updateCalib =
false;
152 const auto& trackTune = TrackTuneParams::Instance();
153 float scale = mTPCCorrMapsLoader.getInstLumiCTP();
157 mCovDiagInner = trackTune.getCovInnerTotal(scale);
158 mCovDiagOuter = trackTune.getCovOuterTotal(scale);
162 mTPCTBinMUS = elParam.ZbinWidth;
163 mTPCTBinMUSInv = 1. / mTPCTBinMUS;
165 mTPCVdrift = vd.getVDrift();
166 mTPCTDriftOffset = vd.getTimeOffset();
167 LOGP(info,
"Updating TPC VDrift factor of {} wrt reference {} and DriftTimeOffset correction {} wrt {} from source {}",
168 vd.corrFact, vd.refVDrift, vd.timeOffsetCorr, vd.refTimeOffset, mTPCVDriftHelper.
getSourceName());
169 mTracker->SetTPCVdrift(mTPCVdrift);
170 mTracker->SetTPCTDriftOffset(mTPCTDriftOffset);
176 mTPCCorrMapsLoader.
updateVDrift(vd.corrFact, vd.refVDrift, vd.getTimeOffset());
192 LOG(info) <<
"cluster dictionary updated";
196#ifdef ENABLE_UPGRADES
198 LOG(info) <<
"it3 cluster dictionary updated";
213 LOG(
debug) <<
"Checking seed with label: " << lblSeed;
214 std::unordered_map<o2::MCCompLabel, unsigned int> labelCounter;
215 int maxOccurences = 0;
217 auto trkltIndex = trk.getTrackletIndex(iLy);
218 if (trkltIndex == -1) {
222 const auto& lblsTrklt = trkltLabels->
getLabels(trkltIndex);
223 for (
const auto lblTrklt : lblsTrklt) {
224 int nOcc = ++labelCounter[lblTrklt];
225 if (nOcc > maxOccurences) {
226 maxOccurences = nOcc;
231 for (
const auto& [lbl,
count] : labelCounter) {
232 LOG(
debug) <<
"Label " << lbl <<
" occured " <<
count <<
" times.";
233 if (
count == maxOccurences) {
234 if (lblSeed == lbl) {
236 mostFrequentLabel = lbl;
237 mostFrequentLabel.
setFakeFlag(maxOccurences != trk.getNtracklets());
238 lblContainerTrd.push_back(mostFrequentLabel);
239 lblContainerMatch.push_back(lblSeed);
243 mostFrequentLabel = lbl;
247 mostFrequentLabel.
setFakeFlag(maxOccurences != trk.getNtracklets());
248 lblContainerTrd.push_back(mostFrequentLabel);
250 lblContainerMatch.push_back(lblSeed);
260 int prevCollisionID = -1;
262 for (
size_t iTrk = 0; iTrk < tracks.size(); ++iTrk) {
263 const auto& trk = tracks[iTrk];
264 auto collisionID = trk.getCollisionId();
266 prevCollisionID = collisionID;
268 if (collisionID != prevCollisionID) {
270 trigRec.emplace_back(trackletTrigRec[prevCollisionID].getBCData(), iTrackFirst, nTracksCurr);
271 iTrackFirst += nTracksCurr;
272 prevCollisionID = collisionID;
277 if (nTracksCurr > 0) {
279 trigRec.emplace_back(trackletTrigRec[tracks.back().getCollisionId()].getBCData(), iTrackFirst, nTracksCurr);
288 updateTimeDependentParams(pc);
293 mTPCRefitter->setTrackReferenceX(900);
307 auto pattIt = patterns.begin();
308 mITSClustersArray.clear();
309 mITSClustersArray.reserve(clusITS.size());
310#ifdef ENABLE_UPGRADES
324 std::vector<o2::MCCompLabel> matchLabelsITSTPC;
325 std::vector<o2::MCCompLabel> trdLabelsITSTPC;
326 std::vector<o2::MCCompLabel> matchLabelsTPC;
327 std::vector<o2::MCCompLabel> trdLabelsTPC;
328 gsl::span<const o2::MCCompLabel> tpcTrackLabels;
329 gsl::span<const o2::MCCompLabel> itstpcTrackLabels;
343 bool foundFilteredTrigger =
false;
346 foundFilteredTrigger =
true;
350 if (!foundFilteredTrigger && mTrigRecFilter) {
351 static bool warningSent =
false;
353 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";
356 }
else if (foundFilteredTrigger && !mTrigRecFilter) {
357 LOG(error) <<
"Trigger filtering is not requested, but masked TRD triggers are found. Rerun tracklet transformer without trigger filtering";
361 const auto& trackTune = TrackTuneParams::Instance();
362 LOG(
debug) <<
"Start loading input seeds into TRD tracker";
363 int nTracksLoadedITSTPC = 0;
364 int nTracksLoadedTPC = 0;
368 GPUTRDTracker::HelperTrackAttributes trkAttribs;
369 trkAttribs.mTime = trkITSTPC.getTimeMUS().getTimeStamp();
370 trkAttribs.mTimeAddMax = trkITSTPC.getTimeMUS().getTimeStampError() * mRec->
GetParam().
rec.trd.nSigmaTerrITSTPC + mRec->
GetParam().
rec.trd.addTimeRoadITSTPC;
371 trkAttribs.mTimeSubMax = trkITSTPC.getTimeMUS().getTimeStampError() * mRec->
GetParam().
rec.trd.nSigmaTerrITSTPC + mRec->
GetParam().
rec.trd.addTimeRoadITSTPC;
375 if (mTracker->LoadTrack(trkLoad, trackGID.getRaw(),
true, &trkAttribs)) {
378 ++nTracksLoadedITSTPC;
379 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);
388 GPUTRDTracker::HelperTrackAttributes trkAttribs;
389 trkAttribs.mTime = trkTpc.getTime0() * mTPCTBinMUS - mTPCTDriftOffset;
390 trkAttribs.mTimeAddMax = trkTpc.getDeltaTFwd() * mTPCTBinMUS;
391 trkAttribs.mTimeSubMax = trkTpc.getDeltaTBwd() * mTPCTBinMUS;
392 if (trkTpc.hasASideClustersOnly()) {
393 trkAttribs.mSide = -1;
394 }
else if (trkTpc.hasCSideClustersOnly()) {
395 trkAttribs.mSide = 1;
398 if (!trackTune.sourceLevelTPC) {
399 if (trackTune.useTPCOuterCorr) {
400 trkLoad.updateParams(trackTune.tpcParOuter);
402 if (trackTune.tpcCovOuterType != TrackTuneParams::AddCovType::Disable) {
403 trkLoad.updateCov(mCovDiagOuter, trackTune.tpcCovOuterType == TrackTuneParams::AddCovType::WithCorrelations);
407 if (mTracker->LoadTrack(trkLoad, trackGID.getRaw(),
true, &trkAttribs)) {
411 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);
413 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);
421 std::vector<TrackTRD> tracksOutITSTPC;
422 std::vector<TrackTRD> tracksOutTPC;
423 std::vector<TrackTriggerRecord> trackTrigRecITSTPC;
424 std::vector<TrackTriggerRecord> trackTrigRecTPC;
426 std::vector<unsigned int> trackIdxArray(mTracker->NTracks());
427 std::iota(trackIdxArray.begin(), trackIdxArray.end(), 0);
428 std::sort(trackIdxArray.begin(), trackIdxArray.end(), [tracksOutRaw](
int lhs,
int rhs) { return tracksOutRaw[lhs].getCollisionId() < tracksOutRaw[rhs].getCollisionId(); });
430 std::vector<std::pair<uint8_t, uint8_t>> pileUpDist;
431 bool ft0Seen =
false;
433 long maxDiffFwd = mTracker->Param().rec.trd.pileupFwdNBC;
434 long maxDiffBwd = mTracker->Param().rec.trd.pileupBwdNBC;
436 auto trdTriggers = tmpInputContainer->mTriggerRecords;
437 ft0Seen = ft0recPoints.size() > 0;
438 pileUpDist.resize(trdTriggers.size(), {0, 0});
440 for (
size_t itrd = 0; itrd < trdTriggers.size(); itrd++) {
441 const auto& trig = trdTriggers[itrd];
442 uint8_t fwd = 0, bwd = 0;
443 for (
size_t ft0id = curFT0; ft0id < ft0recPoints.size(); ft0id++) {
444 const auto& f0rec = ft0recPoints[ft0id];
446 auto bcdiff = trig.getBCData().toLong() - f0rec.getInteractionRecord().toLong();
447 if (bcdiff > maxDiffBwd) {
453 bwd = uint8_t(bcdiff);
456 if (bcdiff < -maxDiffFwd) {
459 fwd = uint8_t(-bcdiff);
463 pileUpDist[itrd] = {bwd, fwd};
467 int nTrackletsAttached = 0;
468 int nTracksFailedTPCTRDRefit = 0;
469 int nTracksFailedITSTPCTRDRefit = 0;
470 for (
int iTrk = 0; iTrk < mTracker->NTracks(); ++iTrk) {
471 const auto& trdTrack = mTracker->Tracks()[trackIdxArray[iTrk]];
472 if (trdTrack.getCollisionId() < 0) {
476 if (mStrict && (trdTrack.getIsAmbiguous() || trdTrack.getReducedChi2() > mTracker->Param().rec.trd.chi2StrictCut)) {
480 if (trdTrack.getNtracklets() < mTracker->Param().rec.trd.nTrackletsMin) {
483 if (trdTrack.getChi2() / trdTrack.getNtracklets() > mTracker->Param().rec.trd.maxChi2Red) {
486 nTrackletsAttached += trdTrack.getNtracklets();
487 auto trackGID = trdTrack.getRefGlobalTrackId();
490 tracksOutITSTPC.push_back(trdTrack);
492 tracksOutITSTPC.back().setPileUpDistance(pileUpDist[trdTrack.getCollisionId()].first, pileUpDist[trdTrack.getCollisionId()].second);
494 tracksOutITSTPC.back().setPileUpDistance(mTracker->Param().rec.trd.pileupBwdNBC, mTracker->Param().rec.trd.pileupFwdNBC);
497 tracksOutITSTPC.pop_back();
498 ++nTracksFailedITSTPCTRDRefit;
505 tracksOutITSTPC.back().setSignal(mBase->process(trdTrack, inputTracks,
false));
509 tracksOutTPC.push_back(trdTrack);
511 tracksOutTPC.back().setPileUpDistance(pileUpDist[trdTrack.getCollisionId()].first, pileUpDist[trdTrack.getCollisionId()].second);
513 tracksOutTPC.back().setPileUpDistance(mTracker->Param().rec.trd.pileupBwdNBC, mTracker->Param().rec.trd.pileupFwdNBC);
516 tracksOutTPC.pop_back();
517 ++nTracksFailedTPCTRDRefit;
524 tracksOutTPC.back().setSignal(mBase->process(trdTrack, inputTracks,
true));
532 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",
533 tracksOutTPC.size(), tracksOutITSTPC.size(), nTrackletsAttached, mChainTracking->
mIOPtrs.
nTRDTracklets);
534 LOGF(info,
"Number of tracks failed in the refit: TPC-TRD (%i), ITS-TPC-TRD (%i)", nTracksFailedTPCTRDRefit, nTracksFailedITSTPCTRDRefit);
562 auto& outerParam = trk.getOuterParam();
564 int nCl = -1, clEntry = -1, nClRefit = 0, clRefs[14];
565 float chi2Out = 0, timeZErr = 0.;
566 bool pileUpOn = trk.hasPileUpInfo();
570 const auto& trkITS = mITSTracksArray[detRefs[
GTrackID::ITS]];
571 outerParam = trkITS.getParamOut();
572 outerParam.setPID(recoCont->
getTPCITSTrack(trk.getRefGlobalTrackId()).getPID(),
true);
573 nCl = trkITS.getNumberOfClusters();
574 clEntry = trkITS.getFirstClusterEntry();
575 chi2Out = trkITS.getChi2();
576 for (
int icl = 0; icl < nCl; icl++) {
577 clRefs[icl] = mITSTrackClusIdx[clEntry + icl];
581 nCl = trkITSABref.getNClusters();
582 clEntry = trkITSABref.getFirstEntry();
584 outerParam.resetCovariance(100);
586 for (
int icl = 0; icl < nCl; icl++) {
587 const auto& clus = mITSClustersArray[clRefs[nCl - icl - 1] = mITSABTrackClusIdx[clEntry + icl]];
588 if (!outerParam.rotate(geom->getSensorRefAlpha(clus.getSensorID())) ||
592 chi2Out += outerParam.getPredictedChi2(clus);
593 if (!outerParam.update(clus)) {
598 if (nClRefit != nCl) {
599 LOG(
debug) <<
"ITS-AB refit outward failed";
607 LOG(
debug) <<
"Propagation to inner TPC boundary X=" << xtogo <<
" failed, Xtr=" << outerParam.getX() <<
" snp=" << outerParam.getSnp();
610 int retVal = mTPCRefitter->RefitTrackAsTrackParCov(outerParam, mTPCTracksArray[detRefs[
GTrackID::TPC]].getClusterRef(), timeTRD * mTPCTBinMUSInv, &chi2Out,
true,
false);
612 LOG(
debug) <<
"TPC refit outwards failed";
617 LOG(
debug) <<
"TRD refit outwards failed";
624 LOG(
debug) <<
"TRD refit inwards failed";
627 auto posStart = trk.getXYZGlo();
628 retVal = mTPCRefitter->RefitTrackAsTrackParCov(trk, mTPCTracksArray[detRefs[
GTrackID::TPC]].getClusterRef(), timeTRD * mTPCTBinMUSInv, &chi2In,
false,
false);
630 LOG(
debug) <<
"TPC refit inwards failed";
636 LOG(
debug) <<
"BACK-Propagationto inner boundary failed";
639 auto posEnd = trk.getXYZGlo();
640 auto lInt = propagator->estimateLTIncrement(trk, posStart, posEnd);
641 trk.getLTIntegralOut().addStep(lInt, trk.getQ2P2());
644 const auto& trackTune = TrackTuneParams::Instance();
645 if (trackTune.tpcCovInnerType != TrackTuneParams::AddCovType::Disable || trackTune.useTPCInnerCorr) {
647 LOG(
debug) <<
"Propagation to TPC inner reference X for ITS refit inwards failed";
650 if (!trackTune.useTPCInnerCorr) {
651 trk.updateParams(trackTune.tpcParInner);
653 if (trackTune.tpcCovInnerType != TrackTuneParams::AddCovType::Disable) {
654 trk.updateCov(mCovDiagInner, trackTune.tpcCovInnerType == TrackTuneParams::AddCovType::WithCorrelations);
659 for (
int icl = 0; icl < nCl; icl++) {
660 const auto& clus = mITSClustersArray[clRefs[icl]];
661 if (!trk.rotate(geom->getSensorRefAlpha(clus.getSensorID())) ||
668 chi2In += trk.getPredictedChi2(clus);
669 if (!trk.update(clus)) {
674 if (nClRefit != nCl) {
675 LOG(
debug) <<
"ITS refit inwards failed";
683 if (!propagator->propagateToDCA(vtxDummy.getXYZ(), trkPar, propagator->getNominalBz(),
o2::base::Propagator::MAX_STEP, matCorr,
nullptr, &trk.getLTIntegralOut())) {
684 LOG(error) <<
"LTOF integral might be incorrect";
694 auto& outerParam = trk.getOuterParam();
697 float chi2Out = 0, timeZErr = 0.;
698 bool pileUpOn = trk.hasPileUpInfo();
699 int retVal = mTPCRefitter->RefitTrackAsTrackParCov(outerParam, mTPCTracksArray[detRefs[
GTrackID::TPC]].getClusterRef(), timeTRD * mTPCTBinMUSInv, &chi2Out,
true,
false);
701 LOG(
debug) <<
"TPC refit outwards failed";
705 timeZErr = mTPCVdrift * trk.getPileUpTimeErrorMUS();
709 LOG(
debug) <<
"TRD refit outwards failed";
716 LOG(
debug) <<
"TRD refit inwards failed";
719 auto posStart = trk.getXYZGlo();
720 retVal = mTPCRefitter->RefitTrackAsTrackParCov(trk, mTPCTracksArray[detRefs[
GTrackID::TPC]].getClusterRef(), timeTRD * mTPCTBinMUSInv, &chi2In,
false,
false);
722 LOG(
debug) <<
"TPC refit inwards failed";
731 LOG(
debug) <<
"BACK-Propagationto inner boundary failed";
734 auto posEnd = trk.getXYZGlo();
735 auto lInt = propagator->estimateLTIncrement(trk, posStart, posEnd);
736 trk.getLTIntegralOut().addStep(lInt, trk.getQ2P2());
740 LOG(
debug) <<
"Final propagation to inner TPC radius failed (not removing the track because of this)";
743 const auto& trackTune = TrackTuneParams::Instance();
744 if (!trackTune.useTPCInnerCorr) {
745 trk.updateParams(trackTune.tpcParInner);
747 if (trackTune.tpcCovInnerType != TrackTuneParams::AddCovType::Disable) {
748 trk.updateCov(mCovDiagInner, trackTune.tpcCovInnerType == TrackTuneParams::AddCovType::WithCorrelations);
751 propagator->estimateLTFast(trk.getLTIntegralOut(), trk);
759 int lyStart = inwards ?
NLAYER - 1 : 0;
760 int direction = inwards ? -1 : 1;
761 int lyEnd = inwards ? -1 :
NLAYER;
768 tofL = &trk.getLTIntegralOut();
770 trkParam = &trk.getOuterParam();
771 trkParam->setUserField(trk.getUserField());
773 const auto& trackTune = TrackTuneParams::Instance();
774 if ((trackTune.useTPCOuterCorr || trackTune.tpcCovOuterType != TrackTuneParams::AddCovType::Disable) &&
775 (!tpcSA || !trackTune.sourceLevelTPC)) {
777 LOG(
debug) <<
"Propagation to TPC outer reference X for TRD outward refit failed";
780 if (trackTune.useTPCOuterCorr) {
781 trkParam->updateParams(trackTune.tpcParOuter);
783 if (trackTune.tpcCovOuterType != TrackTuneParams::AddCovType::Disable) {
784 trkParam->updateCov(mCovDiagOuter, trackTune.tpcCovOuterType == TrackTuneParams::AddCovType::WithCorrelations);
791 trkParam->resetCovariance(100);
793 for (
int iLy = lyStart; iLy != lyEnd; iLy += direction) {
794 int trkltId = trk.getTrackletIndex(iLy);
798 int trkltDet = mTrackletsRaw[trkltId].getDetector();
802 LOGF(
debug,
"Track at alpha=%.2f could not be rotated in tracklet coordinate system with alpha=%.2f", trkParam->getAlpha(),
o2::math_utils::sector2Angle(trkltSec));
807 LOGF(
debug,
"Track propagation failed in layer %i (pt=%f, xTrk=%f, xToGo=%f)", iLy, trkParam->getPt(), trkParam->getX(), mTrackletsCalib[trkltId].getX());
811 float tilt = tan(TMath::DegToRad() * pad->getTiltingAngle());
812 float tiltCorrUp = tilt * (mTrackletsCalib[trkltId].getZ() - trkParam->getZ());
813 float zPosCorrUp = mTrackletsCalib[trkltId].getZ() + mRecoParam.
getZCorrCoeffNRC() * trkParam->getTgl();
814 float padLength = pad->getRowSize(mTrackletsRaw[trkltId].getPadRow());
815 if (!((trkParam->getSigmaZ2() < (padLength * padLength / 12.f)) && (std::fabs(mTrackletsCalib[trkltId].getZ() - trkParam->getZ()) < padLength))) {
819 std::array<float, 2> trkltPosUp{mTrackletsCalib[trkltId].getY() - tiltCorrUp, zPosCorrUp};
820 std::array<float, 3> trkltCovUp;
821 mRecoParam.
recalcTrkltCov(tilt, trkParam->getSnp(), pad->getRowSize(mTrackletsRaw[trkltId].getPadRow()), trkltCovUp);
823 chi2 += trkParam->getPredictedChi2(trkltPosUp, trkltCovUp);
824 if (!trkParam->update(trkltPosUp, trkltCovUp)) {
825 LOGF(
debug,
"Failed to update track with space point in layer %i", iLy);
833 LOG(
debug) <<
"Propagation to TPC outer reference X after TRD inward refit failed";
841 LOG(
debug) <<
"Propagation/rotation to TPC outer reference X after TRD inward refit failed " << trkParam->asString();
850 LOGF(info,
"TRD global tracking total timing: Cpu: %.3e Real: %.3e s in %d slots",
851 mTimer.CpuTime(), mTimer.RealTime(), mTimer.Counter() - 1);
856 std::vector<OutputSpec> outputs;
858 std::shared_ptr<DataRequest> dataRequest = std::make_shared<DataRequest>();
860 dataRequest->setMatchingInputStrict();
865 dataRequest->requestTPCClusters(
false);
868#ifdef ENABLE_UPGRADES
870 dataRequest->requestIT3Clusters(
false);
872 dataRequest->requestITSClusters(
false);
875 dataRequest->requestITSClusters(
false);
879 dataRequest->requestTracks(trkSrc, useMC);
880 auto& inputs = dataRequest->inputs;
881 auto ggRequest = std::make_shared<o2::base::GRPGeomRequest>(
false,
898 inputs.emplace_back(
"lq1dlut",
"TRD",
"LQ1D", 0, Lifetime::Condition,
ccdbParamSpec(
"TRD/PID/LQ1D"));
901 inputs.emplace_back(
"lq2dlut",
"TRD",
"LQ2D", 0, Lifetime::Condition,
ccdbParamSpec(
"TRD/PID/LQ2D"));
904 inputs.emplace_back(
"lq3dlut",
"TRD",
"LQ3D", 0, Lifetime::Condition,
ccdbParamSpec(
"TRD/PID/LQ3D"));
906#ifdef TRDPID_WITH_ONNX
908 inputs.emplace_back(
"xgb",
"TRD",
"XGB", 0, Lifetime::Condition,
ccdbParamSpec(
"TRD_test/PID_new/xgb"));
911 inputs.emplace_back(
"py",
"TRD",
"py", 0, Lifetime::Condition,
ccdbParamSpec(
"TRD_test/PID_new/py"));
917 throw std::runtime_error(
"Unable to load requested PID policy data!");
920 inputs.emplace_back(
"localgainfactors",
"TRD",
"LOCALGAINFACTORS", 0, Lifetime::Condition,
ccdbParamSpec(
"TRD/Calib/LocalGainFactor"));
941 if (trigRecFilterActive) {
942 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)";
947 std::regex reg(
"[,\\[\\]]+");
948 processorName = regex_replace(processorName, reg,
"_");
954 AlgorithmSpec{adaptFromTask<TRDGlobalTracking>(useMC, withPID, policy, dataRequest, ggRequest, sclOpts,
src, trigRecFilterActive, strict)},
Definition of the ITS/MFT clusterer settings.
Definition of the Names Generator class.
Definition of the GeometryManager class.
TRD Tracklet word for GPU tracker - 32bit tracklet info + half chamber ID + index.
Some ALICE geometry constants of common interest.
Definition of the GeometryTGeo class.
Definition of the parameter class for the detector electronics.
Declarations of the helper class for clusters / roadwidth matching.
Result of refitting TPC-ITS matched track.
Configurable params for tracks ad hoc tuning.
Helper class to obtain TPC clusters / digits / labels from DPL.
void setFakeFlag(bool v=true)
void checkUpdates(o2::framework::ProcessingContext &pc)
static GRPGeomHelper & instance()
void setRequest(std::shared_ptr< GRPGeomRequest > req)
static constexpr float MAX_SIN_PHI
static constexpr float MAX_STEP
GPUd() value_type estimateLTFast(o2 static GPUd() float estimateLTIncrement(const o2 PropagatorImpl * Instance(bool uninitialized=false)
static const ParameterElectronics & Instance()
void snapshot(const Output &spec, T const &object)
DataAllocator & outputs()
The data allocator is used to allocate memory for the output data.
InputRecord & inputs()
The inputs associated with this processing context.
void SetTRDGeometry(std::unique_ptr< o2::trd::GeometryFlat > &&geo)
void SetO2Propagator(const o2::base::Propagator *prop)
int32_t DoTRDGPUTracking(T *externalInstance=nullptr)
GPUTrackingInOutPointers & mIOPtrs
static float getNominalGPUBz(T &src)
void SetupGPUProcessor(T *proc, bool allocate)
void RegisterGPUProcessor(T *proc, bool deviceSlave)
void SetSettings(float solenoidBzNominalGPU, const GPURecoStepConfiguration *workflow=nullptr)
T * AddChain(Args... args)
static GPUReconstruction * CreateInstance(const GPUSettingsDeviceBackend &cfg)
const GPUParam & GetParam() const
const GPUSettingsProcessing & GetProcessingSettings() const
void PrintSettings() const
void SetNCandidates(int32_t n)
static std::shared_ptr< const tmpDataContainer > fillIOPtr(GPUTrackingInOutPointers &ioPtr, const o2::globaltracking::RecoContainer &recoCont, bool useMC, const GPUCalibObjectsConst *calib=nullptr, GID::mask_t maskCl=GID::MASK_ALL, GID::mask_t maskTrk=GID::MASK_ALL, GID::mask_t maskMatch=GID::MASK_ALL)
static GeometryTGeo * Instance()
void fillMatrixCache(int mask) override
void extractCCDBInputs(o2::framework::ProcessingContext &pc)
void updateVDrift(float vdriftCorr, float vdrifRef, float driftTimeOffset=0)
bool accountCCDBInputs(const o2::framework::ConcreteDataMatcher &matcher, void *obj)
static void requestCCDBInputs(std::vector< o2::framework::InputSpec > &inputs, std::vector< o2::framework::ConfigParamSpec > &options, const CorrectionMapsLoaderGloOpts &gloOpts)
recalculate inverse correction
void init(o2::framework::InitContext &ic)
static void requestCCDBInputs(std::vector< o2::framework::InputSpec > &inputs, bool laser=true, bool itstpcTgl=true)
void extractCCDBInputs(o2::framework::ProcessingContext &pc, bool laser=true, bool itstpcTgl=true)
const VDriftCorrFact & getVDriftObject() const
bool accountCCDBInputs(const o2::framework::ConcreteDataMatcher &matcher, void *obj)
static std::string_view getSourceName(Source s)
static Geometry * instance()
void recalcTrkltCov(const float tilt, const float snp, const float rowSize, std::array< float, 3 > &cov) const
Recalculate tracklet covariance based on phi angle of related track.
float getZCorrCoeffNRC() const
Get tracklet z correction coefficient for track-eta based corraction.
void setBfield(float bz)
Load parameterization for given magnetic field.
void fillMCTruthInfo(const TrackTRD &trk, o2::MCCompLabel lblSeed, std::vector< o2::MCCompLabel > &lblContainerTrd, std::vector< o2::MCCompLabel > &lblContainerMatch, const o2::dataformats::MCTruthContainer< o2::MCCompLabel > *trkltLabels) const
void finaliseCCDB(o2::framework::ConcreteDataMatcher &matcher, void *obj) final
void endOfStream(o2::framework::EndOfStreamContext &ec) final
This is invoked whenever we have an EndOfStream event.
void run(o2::framework::ProcessingContext &pc) final
bool refitTRDTrack(TrackTRD &trk, float &chi2, bool inwards, bool tpcSA)
void init(o2::framework::InitContext &ic) final
bool refitITSTPCTRDTrack(TrackTRD &trk, float timeTRD, o2::globaltracking::RecoContainer *recoCont)
void fillTrackTriggerRecord(const std::vector< TrackTRD > &tracks, std::vector< TrackTriggerRecord > &trigRec, const gsl::span< const o2::trd::TriggerRecord > &trackletTrigRec) const
bool refitTPCTRDTrack(TrackTRD &trk, float timeTRD, o2::globaltracking::RecoContainer *recoCont)
constexpr o2::header::DataOrigin gDataOriginTRD
constexpr float XTPCOuterRef
reference radius to propagate outer TPC track
constexpr float XTPCInnerRef
reference radius at which TPC provides the tracks
Defining PrimaryVertex explicitly as messageable.
std::vector< ConfigParamSpec > ccdbParamSpec(std::string const &path, int runDependent, std::vector< CCDBMetadata > metadata={}, int qrate=0)
std::vector< ConfigParamSpec > Options
GPUTRDTracker_t< GPUTRDTrack, GPUTRDPropagator > GPUTRDTracker
void convertCompactClusters(gsl::span< const itsmft::CompClusterExt > clusters, gsl::span< const unsigned char >::iterator &pattIt, std::vector< o2::BaseCluster< float > > &output, const its3::TopologyDictionary *dict)
convert compact clusters to 3D spacepoints
void convertCompactClusters(gsl::span< const itsmft::CompClusterExt > clusters, gsl::span< const unsigned char >::iterator &pattIt, std::vector< o2::BaseCluster< float > > &output, const itsmft::TopologyDictionary *dict)
convert compact clusters to 3D spacepoints
int angle2Sector(float phi)
float sector2Angle(int sect)
constexpr int NLAYER
the number of layers
constexpr int NSTACK
the number of stacks per sector
std::unique_ptr< PIDBase > getTRDPIDPolicy(PIDPolicy policy)
Factory function to create a PID policy.
PIDPolicy
Option for available PID policies.
@ LQ3D
3-Dimensional Likelihood model
@ LQ2D
2-Dimensional Likelihood model
@ Dummy
Dummy object outputting -1.f.
@ LQ1D
1-Dimensional Likelihood model
auto getRecoInputContainer(o2::framework::ProcessingContext &pc, o2::gpu::GPUTrackingInOutPointers *ptrs, const o2::globaltracking::RecoContainer *inputTracks, bool mc=false)
framework::DataProcessorSpec getTRDGlobalTrackingSpec(bool useMC, o2::dataformats::GlobalTrackID::mask_t src, bool trigRecFilterActive, bool strict, bool withPID, PIDPolicy policy, const o2::tpc::CorrectionMapsLoaderGloOpts &sclOpts)
create a processor spec
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
auto getITSTracks() const
GlobalIDSet getSingleDetectorRefs(GTrackID gidx) const
gsl::span< const o2::trd::CalibratedTracklet > getTRDCalibratedTracklets() const
auto getITSTracksClusterRefs() const
auto getITSABRefs() const
auto getTPCTracksClusterRefs() const
auto getITSClustersPatterns() const
const o2::dataformats::MCTruthContainer< o2::MCCompLabel > * getTRDTrackletsMCLabels() const
gsl::span< const unsigned char > clusterShMapTPC
externally set TPC clusters sharing map
const o2::dataformats::TrackTPCITS & getTPCITSTrack(GTrackID gid) const
void collectData(o2::framework::ProcessingContext &pc, const DataRequest &request)
auto getTPCTracksMCLabels() const
auto getFT0RecPoints() const
std::unique_ptr< o2::tpc::internal::getWorkflowTPCInput_ret > inputsTPCclusters
auto getTPCTracks() const
gsl::span< const unsigned int > occupancyMapTPC
externally set TPC clusters occupancy map
auto getITSABClusterRefs() const
auto getITSClusters() const
auto getTPCITSTracksMCLabels() const
gsl::span< const o2::trd::Tracklet64 > getTRDTracklets() const
GPUSettingsProcessing configProcessing
GPUSettingsO2 ReadConfigurableParam()
GPUSettingsRec configReconstruction
GPUDataTypes::InOutTypeField outputs
GPUDataTypes::RecoStepField steps
GPUDataTypes::InOutTypeField inputs
float solenoidBzNominalGPU
const o2::dataformats::TrackTPCITS * tracksTPCITSO2
uint32_t nOutputTracksTPCO2
const o2::tpc::TrackTPC * outputTracksTPCO2
const float * trdTriggerTimes
const uint8_t * trdTrigRecMask
uint32_t nTRDTriggerRecords
static std::string concat_string(Ts const &... ts)
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"