1515#include " ITS3Workflow/TrackerSpec.h"
1616#include " ITS3Workflow/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,35 @@ 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.runITS3Tracking = true ;
50+ cfg.itsTriggerType = useTrig;
51+ cfg.itsOverrBeamEst = overrideBeamPosition;
52+ cfg.processITSMC = useMC;
53+ Inputs ggInputs;
54+ auto ggRequest = std::make_shared<o2::base::GRPGeomRequest>(false , true , false , true , true ,
55+ useGeom ? o2::base::GRPGeomRequest::Aligned : o2::base::GRPGeomRequest::None,
56+ ggInputs, true );
57+ if (!useGeom) {
58+ ggRequest->addInput ({" itsTGeo" , " ITS" , " GEOMTGEO" , 0 , Lifetime::Condition, framework::ccdbParamSpec (" ITS/Config/Geometry" )}, ggInputs);
59+ }
60+
61+ auto task = std::make_shared<o2::gpu::GPURecoWorkflowSpec>(&gPolicyData , cfg, std::vector<int >(), 0 , ggRequest);
62+ gTask = task;
63+ Inputs taskInputs = task->inputs ();
64+ Options taskOptions = task->options ();
65+ std::move (ggInputs.begin (), ggInputs.end (), std::back_inserter (taskInputs));
4266
67+ specs.emplace_back (DataProcessorSpec{
68+ " its3-gpu-tracker" ,
69+ taskInputs,
70+ task->outputs (),
71+ AlgorithmSpec{adoptTask<o2::gpu::GPURecoWorkflowSpec>(task)},
72+ taskOptions});
73+ } else {
74+ specs.emplace_back (o2::its3::getTrackerSpec (useMC, useGeom, useTrig, trmode, overrideBeamPosition, dtype));
75+ }
4376 if (!disableRootOutput) {
4477 specs.emplace_back (o2::its3::getTrackWriterSpec (useMC));
4578 }
0 commit comments