@@ -247,9 +247,9 @@ void GPURecoWorkflowSpec::init(InitContext& ic)
247247 // initialize TPC calib objects
248248 initFunctionTPCCalib (ic);
249249
250- mConfig ->configCalib .fastTransform = mFastTransformHelper ->getCorrMap ();
251- mConfig ->configCalib .fastTransformRef = mFastTransformHelper ->getCorrMapRef ();
252- mConfig ->configCalib .fastTransformHelper = mFastTransformHelper .get ();
250+ mConfig ->configCalib .fastTransform = mCalibObjects . mFastTransformHelper ->getCorrMap ();
251+ mConfig ->configCalib .fastTransformRef = mCalibObjects . mFastTransformHelper ->getCorrMapRef ();
252+ mConfig ->configCalib .fastTransformHelper = mCalibObjects . mFastTransformHelper .get ();
253253 if (mConfig ->configCalib .fastTransform == nullptr ) {
254254 throw std::invalid_argument (" GPU workflow: initialization of the TPC transformation failed" );
255255 }
@@ -501,14 +501,20 @@ int GPURecoWorkflowSpec::runMain(o2::framework::ProcessingContext* pc, GPUTracki
501501 }
502502 }
503503
504- cleanOldCalibsTPCPtrs (); // setting TPC calibration objects
505-
506504 if (!mSpecConfig .enableDoublePipeline ) { // TODO: Why is this needed for double-pipeline?
507505 mGPUReco ->Clear (false , threadIndex); // clean non-output memory used by GPU Reconstruction
508506 }
509507 return retVal;
510508}
511509
510+ void GPURecoWorkflowSpec::cleanOldCalibsTPCPtrs (calibObjectStruct& oldCalibObjects)
511+ {
512+ if (mOldCalibObjects .size () > 0 ) {
513+ mOldCalibObjects .pop ();
514+ }
515+ mOldCalibObjects .emplace (std::move (oldCalibObjects));
516+ }
517+
512518void GPURecoWorkflowSpec::run (ProcessingContext& pc)
513519{
514520 constexpr static size_t NSectors = o2::tpc::Sector::MAXSECTOR;
@@ -746,7 +752,8 @@ void GPURecoWorkflowSpec::run(ProcessingContext& pc)
746752
747753 const auto & holdData = o2::tpc::TPCTrackingDigitsPreCheck::runPrecheck (&ptrs, mConfig .get ());
748754
749- doCalibUpdates (pc);
755+ calibObjectStruct oldCalibObjects;
756+ doCalibUpdates (pc, oldCalibObjects);
750757
751758 lockDecodeInput.reset ();
752759
@@ -784,6 +791,7 @@ void GPURecoWorkflowSpec::run(ProcessingContext& pc)
784791 if (retVal != 0 ) {
785792 debugTFDump = true ;
786793 }
794+ cleanOldCalibsTPCPtrs (oldCalibObjects);
787795
788796 o2::utils::DebugStreamer::instance ()->flush (); // flushing debug output to file
789797
@@ -959,7 +967,7 @@ void GPURecoWorkflowSpec::run(ProcessingContext& pc)
959967 LOG (info) << " GPU Reoncstruction time for this TF " << mTimer ->CpuTime () - cput << " s (cpu), " << mTimer ->RealTime () - realt << " s (wall)" ;
960968}
961969
962- void GPURecoWorkflowSpec::doCalibUpdates (o2::framework::ProcessingContext& pc)
970+ void GPURecoWorkflowSpec::doCalibUpdates (o2::framework::ProcessingContext& pc, calibObjectStruct& oldCalibObjects )
963971{
964972 GPUCalibObjectsConst newCalibObjects;
965973 GPUNewCalibValues newCalibValues;
@@ -1011,7 +1019,7 @@ void GPURecoWorkflowSpec::doCalibUpdates(o2::framework::ProcessingContext& pc)
10111019 mTRDGeometryCreated = true ;
10121020 }
10131021 }
1014- needCalibUpdate = fetchCalibsCCDBTPC (pc, newCalibObjects) || needCalibUpdate;
1022+ needCalibUpdate = fetchCalibsCCDBTPC (pc, newCalibObjects, oldCalibObjects ) || needCalibUpdate;
10151023 if (mSpecConfig .runITSTracking ) {
10161024 needCalibUpdate = fetchCalibsCCDBITS (pc) || needCalibUpdate;
10171025 }
@@ -1069,7 +1077,7 @@ Inputs GPURecoWorkflowSpec::inputs()
10691077 inputs.emplace_back (" tpcthreshold" , gDataOriginTPC , " PADTHRESHOLD" , 0 , Lifetime::Condition, ccdbParamSpec (" TPC/Config/FEEPad" ));
10701078 o2::tpc::VDriftHelper::requestCCDBInputs (inputs);
10711079 Options optsDummy;
1072- mFastTransformHelper ->requestCCDBInputs (inputs, optsDummy, mSpecConfig .requireCTPLumi , mSpecConfig .lumiScaleMode ); // option filled here is lost
1080+ mCalibObjects . mFastTransformHelper ->requestCCDBInputs (inputs, optsDummy, mSpecConfig .requireCTPLumi , mSpecConfig .lumiScaleMode ); // option filled here is lost
10731081 }
10741082 if (mSpecConfig .decompressTPC ) {
10751083 inputs.emplace_back (InputSpec{" input" , ConcreteDataTypeMatcher{gDataOriginTPC , mSpecConfig .decompressTPCFromROOT ? o2::header::DataDescription (" COMPCLUSTERS" ) : o2::header::DataDescription (" COMPCLUSTERSFLAT" )}, Lifetime::Timeframe});
0 commit comments