Skip to content

Commit 78cb51a

Browse files
committed
[ALICE3] Add ACTS tracking integration
- Integrate seeding in the reco workflow
1 parent 2cec687 commit 78cb51a

6 files changed

Lines changed: 41 additions & 8 deletions

File tree

Detectors/Upgrades/ALICE3/TRK/reconstruction/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ o2_add_library(TRKReconstruction
1818
SOURCES src/TimeFrame.cxx
1919
src/Clusterer.cxx
2020
$<$<BOOL:${Acts_FOUND}>:src/ClustererACTS.cxx>
21+
$<$<BOOL:${Acts_FOUND}>:src/TrackerACTS.cxx>
2122
PUBLIC_LINK_LIBRARIES
2223
O2::ITStracking
2324
O2::GPUCommon
@@ -45,7 +46,8 @@ set(dictHeaders include/TRKReconstruction/TimeFrame.h
4546
include/TRKReconstruction/Clusterer.h)
4647

4748
if(Acts_FOUND)
48-
list(APPEND dictHeaders include/TRKReconstruction/ClustererACTS.h)
49+
list(APPEND dictHeaders include/TRKReconstruction/ClustererACTS.h
50+
include/TRKReconstruction/TrackerACTS.h)
4951
endif()
5052

5153
o2_target_root_dictionary(TRKReconstruction

Detectors/Upgrades/ALICE3/TRK/reconstruction/include/TRKReconstruction/ClustererACTS.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,12 @@
99
// granted to it by virtue of its status as an Intergovernmental Organization
1010
// or submit itself to any jurisdiction.
1111

12+
///
1213
/// \file ClustererACTS.h
1314
/// \brief Definition of the TRK cluster finder
15+
/// \author Nicolò Jacazio, Università del Piemonte Orientale (IT)
16+
/// \since 2026-03-01
17+
///
1418

1519
#ifndef ALICEO2_TRK_CLUSTERERACTS_H
1620
#define ALICEO2_TRK_CLUSTERERACTS_H

Detectors/Upgrades/ALICE3/TRK/reconstruction/src/ClustererACTS.cxx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,12 @@
99
// granted to it by virtue of its status as an Intergovernmental Organization
1010
// or submit itself to any jurisdiction.
1111

12+
///
1213
/// \file ClustererACTS.cxx
1314
/// \brief Implementation of the TRK cluster finder with the ACTS
15+
/// \author Nicolò Jacazio, Università del Piemonte Orientale (IT)
16+
/// \since 2026-03-01
17+
///
1418

1519
#include "TRKReconstruction/ClustererACTS.h"
1620
#include "TRKBase/GeometryTGeo.h"

Detectors/Upgrades/ALICE3/TRK/workflow/include/TRKWorkflow/ClustererSpec.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,9 @@ class ClustererDPL : public o2::framework::Task
3232
private:
3333
bool mUseMC = true;
3434
int mNThreads = 1;
35-
#ifdef O2_WITH_ACTS
36-
bool mUseACTS = false;
37-
#endif
3835
o2::trk::Clusterer mClusterer;
3936
#ifdef O2_WITH_ACTS
37+
bool mUseACTS = false;
4038
o2::trk::ClustererACTS mClustererACTS;
4139
#endif
4240
};

Detectors/Upgrades/ALICE3/TRK/workflow/include/TRKWorkflow/TrackerSpec.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ class TrackerDPL : public framework::Task
5858
std::shared_ptr<tbb::task_arena> mTaskArena;
5959
nlohmann::json mHitRecoConfig;
6060
TStopwatch mTimer;
61+
#ifdef O2_WITH_ACTS
62+
bool mUseACTS = false;
63+
#endif
6164
};
6265

6366
framework::DataProcessorSpec getTrackerSpec(bool useMC, const std::string& hitRecoConfig, gpu::gpudatatypes::DeviceType dType = gpu::gpudatatypes::DeviceType::CPU);

Detectors/Upgrades/ALICE3/TRK/workflow/src/TrackerSpec.cxx

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@
2929
#include "TRKWorkflow/TrackerSpec.h"
3030
#include <TGeoGlobalMagField.h>
3131

32+
#ifdef O2_WITH_ACTS
33+
#include "TRKReconstruction/TrackerACTS.h"
34+
#endif
35+
3236
#include <TFile.h>
3337
#include <TTree.h>
3438

@@ -61,6 +65,10 @@ void TrackerDPL::init(InitContext& ic)
6165
// mITSTrackingInterface.setTraitsFromProvider(mChainITS->GetITSVertexerTraits(),
6266
// mChainITS->GetITSTrackerTraits(),
6367
// mChainITS->GetITSTimeframe());
68+
69+
#ifdef O2_WITH_ACTS
70+
mUseACTS = ic.options().get<bool>("useACTS");
71+
#endif
6472
}
6573

6674
void TrackerDPL::stop()
@@ -276,14 +284,13 @@ void TrackerDPL::run(ProcessingContext& pc)
276284
itsTrackerTraits.setMemoryPool(mMemoryPool);
277285
itsTrackerTraits.setNThreads(mTaskArena->max_concurrency(), mTaskArena);
278286
itsTrackerTraits.adoptTimeFrame(static_cast<o2::its::TimeFrame<11>*>(&timeFrame));
279-
itsTracker.adoptTimeFrame(timeFrame);
280287
itsTrackerTraits.setBz(mHitRecoConfig["geometry"]["bz"].get<float>());
281288
auto field = new field::MagneticField("ALICE3Mag", "ALICE 3 Magnetic Field", mHitRecoConfig["geometry"]["bz"].get<float>() / 5.f, 0.0, o2::field::MagFieldParam::k5kGUniform);
282289
TGeoGlobalMagField::Instance()->SetField(field);
283290
TGeoGlobalMagField::Instance()->Lock();
291+
itsTracker.adoptTimeFrame(timeFrame);
284292

285-
int nRofs = timeFrame.loadROFsFromHitTree(hitsTree, gman, mHitRecoConfig);
286-
293+
const int nRofs = timeFrame.loadROFsFromHitTree(hitsTree, gman, mHitRecoConfig);
287294
const int inROFpileup{mHitRecoConfig.contains("inROFpileup") ? mHitRecoConfig["inROFpileup"].get<int>() : 1};
288295

289296
// Add primary vertices from MC headers for each ROF
@@ -293,6 +300,16 @@ void TrackerDPL::run(ProcessingContext& pc)
293300

294301
itsTrackerTraits.updateTrackingParameters(trackingParams);
295302

303+
#ifdef O2_WITH_ACTS
304+
if (mUseACTS) {
305+
LOG(info) << "Running the tracking with ACTS";
306+
o2::trk::TrackerACTS<11> actsTracker;
307+
actsTracker.setBz(mHitRecoConfig["geometry"]["bz"].get<float>());
308+
actsTracker.adoptTimeFrame(timeFrame);
309+
actsTracker.clustersToTracks();
310+
}
311+
#endif
312+
296313
const auto trackingLoopStart = std::chrono::steady_clock::now();
297314
for (size_t iter{0}; iter < trackingParams.size(); ++iter) {
298315
LOGP(info, "{}", trackingParams[iter].asString());
@@ -391,7 +408,12 @@ DataProcessorSpec getTrackerSpec(bool useMC, const std::string& hitRecoConfig, o
391408
useMC,
392409
hitRecoConfig,
393410
dType)},
394-
Options{ConfigParamSpec{"max-loops", VariantType::Int, 1, {"max number of loops"}}}};
411+
Options{ConfigParamSpec{"max-loops", VariantType::Int, 1, {"max number of loops"}}
412+
#ifdef O2_WITH_ACTS
413+
,
414+
{"useACTS", o2::framework::VariantType::Bool, false, {"Use ACTS for tracking"}}
415+
#endif
416+
}};
395417
}
396418

397419
inputs.emplace_back("dummy", "TRK", "DUMMY", 0, Lifetime::Timeframe);

0 commit comments

Comments
 (0)