1515#include " ITSWorkflow/ClusterWriterSpec.h"
1616#include " ITSWorkflow/TrackWriterSpec.h"
1717#include " ITS3Workflow/DigitReaderSpec.h"
18- #include " Framework/Logger.h"
18+ #include " GPUWorkflow/GPUWorkflowSpec.h"
19+ #include " Framework/CCDBParamSpec.h"
20+
21+ // Dummy pointers
22+ using CompletionPolicyData = std::vector<InputSpec>;
23+ static CompletionPolicyData gPolicyData ;
24+ static std::shared_ptr<o2::gpu::GPURecoWorkflowSpec> gTask ;
1925
2026namespace o2 ::its3::reco_workflow
2127{
2228
23- framework::WorkflowSpec getWorkflow (bool useMC, const std::string& trmode, o2::gpu::GPUDataTypes::DeviceType dtype,
29+ framework::WorkflowSpec getWorkflow (bool useMC, const std::string& trmode, o2::gpu::GPUDataTypes::DeviceType dtype, bool useGPUWorkflow,
2430 bool upstreamDigits, bool upstreamClusters, bool disableRootOutput, bool useGeom, int useTrig, bool overrideBeamPosition)
2531{
2632 framework::WorkflowSpec specs;
@@ -38,8 +44,36 @@ framework::WorkflowSpec getWorkflow(bool useMC, const std::string& trmode, o2::g
3844 }
3945
4046 if (trmode != " off" ) {
41- specs.emplace_back (o2::its3::getTrackerSpec (useMC, useGeom, useTrig, trmode, overrideBeamPosition, dtype));
47+ if (useGPUWorkflow) {
48+ o2::gpu::GPURecoWorkflowSpec::Config cfg;
49+ cfg.runITSTracking = true ;
50+ cfg.isITS3 = true ;
51+ cfg.itsTriggerType = useTrig;
52+ cfg.itsOverrBeamEst = overrideBeamPosition;
53+ cfg.processMC = useMC;
54+ Inputs ggInputs;
55+ auto ggRequest = std::make_shared<o2::base::GRPGeomRequest>(false , true , false , true , true ,
56+ useGeom ? o2::base::GRPGeomRequest::Aligned : o2::base::GRPGeomRequest::None,
57+ ggInputs, true );
58+ if (!useGeom) {
59+ ggRequest->addInput ({" itsTGeo" , " ITS" , " GEOMTGEO" , 0 , Lifetime::Condition, framework::ccdbParamSpec (" ITS/Config/Geometry" )}, ggInputs);
60+ }
61+
62+ auto task = std::make_shared<o2::gpu::GPURecoWorkflowSpec>(&gPolicyData , cfg, std::vector<int >(), 0 , ggRequest);
63+ gTask = task;
64+ Inputs taskInputs = task->inputs ();
65+ Options taskOptions = task->options ();
66+ std::move (ggInputs.begin (), ggInputs.end (), std::back_inserter (taskInputs));
4267
68+ specs.emplace_back (DataProcessorSpec{
69+ " its3-gpu-tracker" ,
70+ taskInputs,
71+ task->outputs (),
72+ AlgorithmSpec{adoptTask<o2::gpu::GPURecoWorkflowSpec>(task)},
73+ taskOptions});
74+ } else {
75+ specs.emplace_back (o2::its3::getTrackerSpec (useMC, useGeom, useTrig, trmode, overrideBeamPosition, dtype));
76+ }
4377 if (!disableRootOutput) {
4478 specs.emplace_back (o2::its::getTrackWriterSpec (useMC));
4579 }
0 commit comments