Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion PWGDQ/Core/HistogramsLibrary.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
hm->AddHistogram(histClass, "MultFDDC", "MultFDDC", false, 1000, 0.0, 25000.0, VarManager::kMultFDDC);
hm->AddHistogram(histClass, "MultTracklets", "MultTracklets", false, 250, 0.0, 250.0, VarManager::kMultTracklets);
hm->AddHistogram(histClass, "VtxNContribReal", "Vtx n contributors", false, 150, 0.0, 150.0, VarManager::kVtxNcontribReal);
hm->AddHistogram(histClass, "kMultNtrkGlobal", "kMultNtrkGlobal", false, 150, 0.0, 150.0, VarManager::kMultNtrkGlobal);
hm->AddHistogram(histClass, "VtxNContrib", "Vtx n contributors", false, 100, 0.0, 100.0, VarManager::kVtxNcontrib);
hm->AddHistogram(histClass, "MultNTracksPVeta1", "MultNTracksPVeta1", false, 150, 0, 150.0, VarManager::kMultNTracksPVeta1);
hm->AddHistogram(histClass, "MultNTracksPVetaHalf", "MultNTracksPVetaHalf", false, 150, 0, 150.0, VarManager::kMultNTracksPVetaHalf);
Expand Down Expand Up @@ -163,7 +164,9 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
hm->AddHistogram(histClass, "MultNTracksPVetaHalf_MultMCNParticlesEta05", "MultNTracksPVetaHalf vs MultMCNParticlesEta05", false, 150, 0, 150.0, VarManager::kMultNTracksPVetaHalf, 150, 0, 150.0, VarManager::kMultMCNParticlesEta05);
hm->AddHistogram(histClass, "VtxNcontribReal_MultMCNParticlesEta08", "VtxNcontribReal vs MultMCNParticlesEta08", false, 150, 0, 150.0, VarManager::kVtxNcontribReal, 150, 0, 150.0, VarManager::kMultMCNParticlesEta08);
hm->AddHistogram(histClass, "MultNTracksPVeta1_MultMCNParticlesEta10", "MultNTracksPVeta1 vs MultMCNParticlesEta10", false, 150, 0, 150.0, VarManager::kMultNTracksPVeta1, 150, 0, 150.0, VarManager::kMultMCNParticlesEta10);

hm->AddHistogram(histClass, "MultNtrkGlobal_MultMCNParticlesEta05", "MultNtrkGlobal vs MultMCNParticlesEta05", false, 150, 0, 150.0, VarManager::kMultNtrkGlobal, 150, 0, 150.0, VarManager::kMultMCNParticlesEta05);
hm->AddHistogram(histClass, "MultNtrkGlobal_MultMCNParticlesEta08", "MultNtrkGlobal vs MultMCNParticlesEta08", false, 150, 0, 150.0, VarManager::kMultNtrkGlobal, 150, 0, 150.0, VarManager::kMultMCNParticlesEta08);
hm->AddHistogram(histClass, "MultNtrkGlobal_MultMCNParticlesEta10", "MultNtrkGlobal vs MultMCNParticlesEta10", false, 150, 0, 150.0, VarManager::kMultNtrkGlobal, 150, 0, 150.0, VarManager::kMultMCNParticlesEta10);
} else {
hm->AddHistogram(histClass, "MultTPC", "MultTPC", false, 200, 0.0, 50000.0, VarManager::kMultTPC);
hm->AddHistogram(histClass, "MultTPC_vsTimeSOR", "MultTPC vs time from SOR", true, 10000, 0.0, 1000.0, VarManager::kTimeFromSOR, 10, 0.0, 50000.0, VarManager::kMultTPC);
Expand All @@ -177,6 +180,7 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
hm->AddHistogram(histClass, "MultZNA_ZNC", "MultZNA vs ZNC", false, 400, 0.0, 400.0, VarManager::kMultZNA, 400, 0.0, 400.0, VarManager::kMultZNC);
hm->AddHistogram(histClass, "MultTracklets", "MultTracklets", false, 100, 0.0, 25000.0, VarManager::kMultTracklets);
hm->AddHistogram(histClass, "VtxNContribReal", "Vtx n contributors (real)", false, 100, 0.0, 5000.0, VarManager::kVtxNcontribReal);
hm->AddHistogram(histClass, "kMultNtrkGlobal", "kMultNtrkGlobal", false, 150, 0.0, 150.0, VarManager::kMultNtrkGlobal);
hm->AddHistogram(histClass, "VtxNContribReal_vsTimeSOR", "VtxNContribReal vs time from SOR", true, 10000, 0.0, 1000.0, VarManager::kTimeFromSOR, 10, 0.0, 5000.0, VarManager::kVtxNcontribReal);
hm->AddHistogram(histClass, "VtxNContrib", "Vtx n contributors", false, 100, 0.0, 20000.0, VarManager::kVtxNcontrib);
hm->AddHistogram(histClass, "MultTPC_MultFV0A", "MultTPC vs MultFV0A", false, 100, 0, 50000.0, VarManager::kMultTPC, 100, 0, 300000.0, VarManager::kMultFV0A);
Expand Down Expand Up @@ -1405,6 +1409,11 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
hm->AddHistogram(histClass, "Mass_VtxNcontribReal_VtxZ", "Mass vs VtxNcontribReal vs VtxZ", false, 200, 2.0, 5.0, VarManager::kMass, 150, 0, 150.0, VarManager::kVtxNcontribReal, 20, -10.0, 10.0, VarManager::kVtxZ);
hm->AddHistogram(histClass, "VtxZ_VtxNcontribReal", "VtxZ vs VtxNcontribReal", false, 240, -12.0, 12.0, VarManager::kVtxZ, 200, 0, 200.0, VarManager::kVtxNcontribReal);
}
if (subGroupStr.Contains("mult_global")) {
hm->AddHistogram(histClass, "Mass_MultGlobal", "Mass vs global tracks", false, 200, 0.0, 5.0, VarManager::kMass, 200, 0, 200.0, VarManager::kMultNtrkGlobal);
hm->AddHistogram(histClass, "Mass_MultGlobal_VtxZ", "Mass vs global tracks vs VtxZ", false, 200, 2.0, 5.0, VarManager::kMass, 150, 0, 150.0, VarManager::kMultNtrkGlobal, 20, -10.0, 10.0, VarManager::kVtxZ);
hm->AddHistogram(histClass, "VtxZ_MultGlobal", "VtxZ vs global tracks", false, 240, -12.0, 12.0, VarManager::kVtxZ, 200, 0, 200.0, VarManager::kMultNtrkGlobal);
}
if (subGroupStr.Contains("alice3barrel")) {
std::array<double, 21> pTBins = {
0.1, 0.5, 1.0, 1.25, 1.5, 2.0, 2.5, 3.0,
Expand Down
3 changes: 3 additions & 0 deletions PWGDQ/Core/VarManager.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -768,6 +768,8 @@ void VarManager::SetDefaultVarNames()
fgVariableUnits[kVtxNcontrib] = "";
fgVariableNames[kVtxNcontribReal] = "Real Vtx contrib.";
fgVariableUnits[kVtxNcontribReal] = "";
fgVariableNames[kMultNtrkGlobal] = "Global tracks";
fgVariableUnits[kMultNtrkGlobal] = "";
fgVariableNames[kVtxCovXX] = "Vtx covXX";
fgVariableUnits[kVtxCovXX] = "cm";
fgVariableNames[kVtxCovXY] = "Vtx covXY";
Expand Down Expand Up @@ -2123,6 +2125,7 @@ void VarManager::SetDefaultVarNames()
fgVarNamesMap["kVtxZ"] = kVtxZ;
fgVarNamesMap["kVtxNcontrib"] = kVtxNcontrib;
fgVarNamesMap["kVtxNcontribReal"] = kVtxNcontribReal;
fgVarNamesMap["kMultNtrkGlobal"] = kMultNtrkGlobal;
fgVarNamesMap["kVtxCovXX"] = kVtxCovXX;
fgVarNamesMap["kVtxCovXY"] = kVtxCovXY;
fgVarNamesMap["kVtxCovXZ"] = kVtxCovXZ;
Expand Down
6 changes: 6 additions & 0 deletions PWGDQ/Core/VarManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ class VarManager : public TObject
RapidityGapFilter = BIT(21),
Fit = BIT(22),
ReducedFit = BIT(23),
ReducedEventGlobalMult = BIT(24),
Track = BIT(0),
TrackCov = BIT(1),
TrackExtra = BIT(2),
Expand Down Expand Up @@ -251,6 +252,7 @@ class VarManager : public TObject
kVtxZ,
kVtxNcontrib,
kVtxNcontribReal,
kMultNtrkGlobal,
kVtxCovXX,
kVtxCovXY,
kVtxCovXZ,
Expand Down Expand Up @@ -2660,6 +2662,10 @@ void VarManager::FillEvent(T const& event, float* values)
FillZDC(event, values);
}

if constexpr ((fillMap & ReducedEventGlobalMult) > 0) {
values[kMultNtrkGlobal] = event.multNtrkGlobal();
}

if constexpr ((fillMap & ReducedFit) > 0) {
values[kAmplitudeFT0A] = event.amplitudeFT0A();
values[kAmplitudeFT0C] = event.amplitudeFT0C();
Expand Down
43 changes: 29 additions & 14 deletions PWGDQ/DataModel/ReducedInfoTables.h
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,14 @@ DECLARE_SOA_COLUMN(Psi2Random, psi2random, float); //! Event plane angle from r
DECLARE_SOA_COLUMN(Psi2A, psi2a, float); //! Event plane angle from Q-vector A
DECLARE_SOA_COLUMN(Psi2B, psi2b, float); //! Event plane angle from Q-vector B
DECLARE_SOA_COLUMN(Psi2C, psi2c, float); //! Event plane angle from Q-vector C

DECLARE_SOA_COLUMN(MultNtrkGlobal, multNtrkGlobal, int);

DECLARE_SOA_COLUMN(MultNtrkGlobalToward, multNtrkGlobalToward, int);
DECLARE_SOA_COLUMN(MultNtrkGlobalTransverseRight, multNtrkGlobalTransverseRight, int);
DECLARE_SOA_COLUMN(MultNtrkGlobalTransverseLeft, multNtrkGlobalTransverseLeft, int);
DECLARE_SOA_COLUMN(MultNtrkGlobalBackward, multNtrkGlobalBackward, int);

} // namespace reducedevent

DECLARE_SOA_TABLE_STAGED(ReducedEvents, "REDUCEDEVENT", //! Main event information table
Expand Down Expand Up @@ -184,6 +192,13 @@ DECLARE_SOA_TABLE(ReducedEventsMultPV_000, "AOD", "REMULTPV", //! Multiplicity
mult::MultNTracksITSOnly, mult::MultNTracksTPCOnly, mult::MultNTracksITSTPC,
evsel::NumTracksInTimeRange);

DECLARE_SOA_TABLE(ReducedEventsGlobalTrk, "AOD", "REGLOBALTRK",
reducedevent::MultNtrkGlobal);

DECLARE_SOA_TABLE(ReducedEventsMultAzimuth, "AOD", "REMULTAZIMUTH",
reducedevent::MultNtrkGlobalToward, reducedevent::MultNtrkGlobalTransverseRight,
reducedevent::MultNtrkGlobalTransverseLeft, reducedevent::MultNtrkGlobalBackward);

DECLARE_SOA_TABLE_VERSIONED(ReducedEventsMultPV_001, "AOD", "REMULTPV", 1, //! Multiplicity information for primary vertex
mult::MultNTracksHasITS, mult::MultNTracksHasTPC, mult::MultNTracksHasTOF, mult::MultNTracksHasTRD,
mult::MultNTracksITSOnly, mult::MultNTracksTPCOnly, mult::MultNTracksITSTPC,
Expand Down Expand Up @@ -873,21 +888,21 @@ DECLARE_SOA_COLUMN(BdtBackground, bdtBackground, float);
DECLARE_SOA_COLUMN(BdtPrompt, bdtPrompt, float); //! BDT output score for the prompt class
DECLARE_SOA_COLUMN(BdtNonprompt, bdtNonprompt, float); //! BDT output score for the nonprompt class
// DECLARE_SOA_INDEX_COLUMN(ReducedMuon, reducedmuon2); //!
DECLARE_SOA_COLUMN(CosThetaHE, costhetaHE, float); //! Cosine in the helicity frame
DECLARE_SOA_COLUMN(PhiHE, phiHe, float); //! Phi in the helicity frame
DECLARE_SOA_COLUMN(PhiTildeHE, phiTildeHe, float); //! Tilde Phi in the helicity frame
DECLARE_SOA_COLUMN(CosThetaCS, costhetaCS, float); //! Cosine in the Collins-Soper frame
DECLARE_SOA_COLUMN(PhiCS, phiCS, float); //! Phi in the Collins-Soper frame
DECLARE_SOA_COLUMN(PhiTildeCS, phiTildeCS, float); //! Tilde Phi in the Collins-Soper frame
DECLARE_SOA_COLUMN(CosThetaPP, costhetaPP, float); //! Cosine in the Production Plane frame
DECLARE_SOA_COLUMN(PhiPP, phiPP, float); //! Phi in the Production Plane frame
DECLARE_SOA_COLUMN(PhiTildePP, phiTildePP, float); //! Tilde Phi in the Production Plane frame
DECLARE_SOA_COLUMN(CosThetaRM, costhetaRM, float); //! Cosine in the Random frame
DECLARE_SOA_COLUMN(CosThetaStarTPC, costhetaStarTPC, float); //! global polarization, event plane reconstructed from TPC tracks
DECLARE_SOA_COLUMN(CosThetaStarFT0A, costhetaStarFT0A, float); //! global polarization, event plane reconstructed from FT0A tracks
DECLARE_SOA_COLUMN(CosThetaStarFT0C, costhetaStarFT0C, float); //! global polarization, event plane reconstructed from FT0C tracks
DECLARE_SOA_COLUMN(CosThetaHE, costhetaHE, float); //! Cosine in the helicity frame
DECLARE_SOA_COLUMN(PhiHE, phiHe, float); //! Phi in the helicity frame
DECLARE_SOA_COLUMN(PhiTildeHE, phiTildeHe, float); //! Tilde Phi in the helicity frame
DECLARE_SOA_COLUMN(CosThetaCS, costhetaCS, float); //! Cosine in the Collins-Soper frame
DECLARE_SOA_COLUMN(PhiCS, phiCS, float); //! Phi in the Collins-Soper frame
DECLARE_SOA_COLUMN(PhiTildeCS, phiTildeCS, float); //! Tilde Phi in the Collins-Soper frame
DECLARE_SOA_COLUMN(CosThetaPP, costhetaPP, float); //! Cosine in the Production Plane frame
DECLARE_SOA_COLUMN(PhiPP, phiPP, float); //! Phi in the Production Plane frame
DECLARE_SOA_COLUMN(PhiTildePP, phiTildePP, float); //! Tilde Phi in the Production Plane frame
DECLARE_SOA_COLUMN(CosThetaRM, costhetaRM, float); //! Cosine in the Random frame
DECLARE_SOA_COLUMN(CosThetaStarTPC, costhetaStarTPC, float); //! global polarization, event plane reconstructed from TPC tracks
DECLARE_SOA_COLUMN(CosThetaStarFT0A, costhetaStarFT0A, float); //! global polarization, event plane reconstructed from FT0A tracks
DECLARE_SOA_COLUMN(CosThetaStarFT0C, costhetaStarFT0C, float); //! global polarization, event plane reconstructed from FT0C tracks
DECLARE_SOA_COLUMN(CosThetaStarRandom, costhetaStarRandom, float); //! global polarization, event plane reconstructed from random tracks
DECLARE_SOA_DYNAMIC_COLUMN(Px, px, //!
DECLARE_SOA_DYNAMIC_COLUMN(Px, px, //!
[](float pt, float phi) -> float { return pt * std::cos(phi); });
DECLARE_SOA_DYNAMIC_COLUMN(Py, py, //!
[](float pt, float phi) -> float { return pt * std::sin(phi); });
Expand Down
6 changes: 6 additions & 0 deletions PWGDQ/TableProducer/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,9 @@ o2physics_add_dpl_workflow(generated-quarkonia-mc
REUSE_FROM DQAnalysisPCH
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2::DetectorsBase O2Physics::PWGDQCore
COMPONENT_NAME Analysis)

o2physics_add_dpl_workflow(global-track-estimator
SOURCES globalTrackEstimator.cxx
REUSE_FROM DQAnalysisPCH
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2::DetectorsBase O2Physics::PWGDQCore
COMPONENT_NAME Analysis)
156 changes: 156 additions & 0 deletions PWGDQ/TableProducer/globalTrackEstimator.cxx
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
// All rights not expressly granted are reserved.
//
// This software is distributed under the terms of the GNU General Public
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
//
// In applying this license CERN does not waive the privileges and immunities
// granted to it by virtue of its status as an Intergovernmental Organization
// or submit itself to any jurisdiction.
//
/// \author Alexander Tiekoetter <alexander.tiekoetter@cern.ch>, Muenster
/// \brief Global Track estimator with track-to-collision association
/// \file globalTrackEstimator.cxx

#include "PWGDQ/Core/AnalysisCompositeCut.h"
#include "PWGDQ/Core/AnalysisCut.h"
#include "PWGDQ/Core/CutsLibrary.h"
#include "PWGDQ/Core/HistogramManager.h"
#include "PWGDQ/Core/HistogramsLibrary.h"
#include "PWGDQ/Core/MCSignal.h"
#include "PWGDQ/Core/MCSignalLibrary.h"
#include "PWGDQ/Core/VarManager.h"

#include <Framework/ASoA.h>
#include <Framework/AnalysisDataModel.h>
#include <Framework/AnalysisHelpers.h>
#include <Framework/AnalysisTask.h>
#include <Framework/Configurable.h>
#include <Framework/InitContext.h>
#include <Framework/runDataProcessing.h>

#include <string>
#include <unordered_set>

using namespace o2;
using namespace o2::framework;
using namespace o2::framework::expressions;
using namespace o2::aod;

using MyEventsBasic = o2::soa::Join<o2::aod::ReducedEvents, o2::aod::ReducedEventsExtended>;
using MyBarrelTracks = o2::soa::Join<o2::aod::ReducedTracks, o2::aod::ReducedTracksBarrel, o2::aod::ReducedTracksBarrelCov, o2::aod::ReducedTracksBarrelPID>;

constexpr static uint32_t GkEventFillMap = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended;
constexpr static uint32_t GkTrackFillMap = VarManager::ObjTypes::ReducedTrackBarrel | VarManager::ObjTypes::ReducedTrackBarrelCov;

struct GlobalTrackEstimator {
Produces<o2::aod::ReducedEventsGlobalTrk> reducedEventsGlobalTrk;
Produces<o2::aod::ReducedEventsMultAzimuth> reducedEventsMultAzimuth;

Configurable<float> cfgMaxDCAxy{"cfgMaxDCAxy", 2.0, "Maximum DCAxy"};
Configurable<float> cfgMaxDCAz{"cfgMaxDCAz", 2.0, "Maximum DCAz"};
Configurable<float> cfgMinPt{"cfgMinPt", 0.1, "Minimum required pT"};
Configurable<float> cfgEtaRange{"cfgEtaRange", 0.8, "Pseudorapidity range"};
Configurable<float> cfgMinTPCCluster{"cfgMinTPCCluster", 70, "Minimum number of crossed TPC rows"};
Configurable<float> cfgRatioTPCClusterOverFindableCluster{"cfgRatioTPCClusterOverFindableCluster", 0.8, "Minimum ratio of crossed TPC rows over findable clusters"};
Configurable<float> cfgMaxChi2TPC{"cfgMaxChi2TPC", 4.0, "Maximum chi2 per cluster in TPC"};
Configurable<float> cfgMaxChi2ITS{"cfgMaxChi2ITS", 36.0, "Maximum chi2 per cluster in ITS"};
Configurable<bool> cfgRequireITSibAny{"cfgRequireITSibAny", true, "Pseudorapidity range"};

o2::framework::Preslice<o2::aod::ReducedTracksAssoc> preslice = o2::aod::reducedtrack_association::reducedeventId;

o2::framework::expressions::Filter trackFilter = (o2::aod::reducedtrack::pt >= cfgMinPt) && (nabs(o2::aod::reducedtrack::eta) <= cfgEtaRange) && (o2::aod::track::tpcChi2NCl <= cfgMaxChi2TPC) && (o2::aod::track::itsChi2NCl <= cfgMaxChi2ITS);

void init(InitContext& context)
{
LOGF(info, "Started global track counting");

bool isAnyProcessEnabled = context.mOptions.get<bool>("processGlobalTracksSkimmed") || context.mOptions.get<bool>("processGlobalTracksSkimmed");
bool isDummyEnabled = context.mOptions.get<bool>("processDummy");

if (isDummyEnabled) {
if (isAnyProcessEnabled) {
LOG(fatal) << "You have enabled both the dummy process and at least one normal process function! Check your config!";
}
return;
}

if (!isAnyProcessEnabled) {
return;
}
}

void processGlobalTracksSkimmed(MyEventsBasic const& events, o2::aod::ReducedTracksAssoc const& assocs, o2::soa::Filtered<MyBarrelTracks> const& tracks)
{
std::unordered_set<int64_t> selectedTrackIds;
selectedTrackIds.reserve(tracks.size());

for (auto const& track : tracks) {
selectedTrackIds.insert(track.globalIndex());
}

for (const auto& event : events) {
VarManager::ResetValues(0, VarManager::kNBarrelTrackVariables);
VarManager::FillEvent<GkEventFillMap>(event);

auto groupedAssocs = assocs.sliceBy(preslice, event.globalIndex());

int nTrkGlobal = 0;

for (auto const& assoc : groupedAssocs) {
if (selectedTrackIds.find(assoc.reducedtrackId()) == selectedTrackIds.end()) {
continue;
}

auto track = assoc.template reducedtrack_as<o2::soa::Filtered<MyBarrelTracks>>();

VarManager::FillTrack<GkTrackFillMap>(track);
VarManager::FillTrackCollision<GkTrackFillMap>(track, event);

const int nFindable = track.tpcNClsFindable();
const int nCrossedRows = track.tpcNClsCrossedRows();

if (nCrossedRows < static_cast<int>(cfgMinTPCCluster.value)) {
continue;
}

if (nFindable <= 0) {
continue;
}

const float crossedOverFindable = static_cast<float>(nCrossedRows) / static_cast<float>(nFindable);

if (crossedOverFindable < cfgRatioTPCClusterOverFindableCluster.value) {
continue;
}

if (cfgRequireITSibAny.value && ((track.itsClusterMap() & 0x7) == 0)) {
continue;
}

if (std::abs(VarManager::fgValues[VarManager::kTrackDCAxy]) > cfgMaxDCAxy.value || std::abs(VarManager::fgValues[VarManager::kTrackDCAz]) > cfgMaxDCAz.value) {
continue;
}

++nTrkGlobal;
}

reducedEventsGlobalTrk(nTrkGlobal);
}
}

PROCESS_SWITCH(GlobalTrackEstimator, processGlobalTracksSkimmed, "Count global tracks from skimmed data model", false);

void processDummy(MyEventsBasic const&)
{
// do nothing
}

PROCESS_SWITCH(GlobalTrackEstimator, processDummy, "Dummy process function", true);
};

WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
{
return WorkflowSpec{adaptAnalysisTask<GlobalTrackEstimator>(cfgc)};
}
Loading
Loading