Project
Loading...
Searching...
No Matches
CAWorkflowOptions.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
13
14#include <stdexcept>
19#include "Framework/Logger.h"
22
23namespace o2::mft::ca
24{
26{
27 using namespace o2::itsmft;
28 if (input.upstreamDigits && input.upstreamClusters) {
29 throw std::invalid_argument("--digits-from-upstream conflicts with --clusters-from-upstream; choose one input stage");
30 }
31 if (input.mode < TrackingMode::Unset || input.mode > TrackingMode::Off ||
32 aliases.mode < TrackingMode::Unset || aliases.mode > TrackingMode::Off) {
33 throw std::invalid_argument("Invalid --tracking-mode or MFTCATrackerParam.trackingMode");
34 }
35 if (input.nThreads <= 0 || aliases.nThreads <= 0) {
36 throw std::invalid_argument("--nThreads and MFTCATrackerParam.nThreads must both be > 0");
37 }
38 if (!input.runTracking && (input.assessment || input.tracksToRecords)) {
39 throw std::invalid_argument("--disable-tracking conflicts with --run-assessment/--run-tracks2records");
40 }
42 result.kind = input.kind;
49 result.tracker.useMC = input.useMC;
51 result.tracker.mode = aliases.mode == TrackingMode::Unset ? input.mode : static_cast<TrackingMode::Type>(aliases.mode);
52 if (result.tracker.mode == TrackingMode::Unset) {
53 result.tracker.mode = TrackingMode::Sync;
54 }
55 result.tracker.nThreads = aliases.nThreads;
56 result.tracker.filterIRFrames = aliases.filterIRFrames;
57 if (input.useIRFrames || aliases.filterIRFrames) {
59 }
60 result.staggering = input.staggering;
61 result.runTracking = input.runTracking;
62 result.assessment = input.assessment;
63 result.processGenerated = input.processGenerated;
64 result.tracksToRecords = input.tracksToRecords;
65 if (aliases.mode != TrackingMode::Unset && input.mode != result.tracker.mode) {
66 result.diagnostics.push_back("MFTCATrackerParam.trackingMode=" + TrackingMode::toString(result.tracker.mode) +
67 " overrides --tracking-mode=" + TrackingMode::toString(input.mode));
68 }
69 if (input.nThreads != aliases.nThreads) {
70 result.diagnostics.push_back("MFTCATrackerParam.nThreads=" + std::to_string(aliases.nThreads) +
71 " overrides --nThreads=" + std::to_string(input.nThreads));
72 }
73 if (!input.runTracking && (input.useIRFrames || aliases.filterIRFrames)) {
74 result.diagnostics.push_back("--disable-tracking: --use-irframes/MFTTrackingParam.irFramesOnly have no tracker consumer");
75 result.tracker.irFrames = IRFrameSource::None;
76 }
77 if (input.clusterROFsOnly && input.disableRootOutput) {
78 result.diagnostics.push_back("--cluster-rof-branch-only overrides --disable-root-output for the cluster ROF branch");
79 }
80 return result;
81}
82
84{
85 const auto& options = context.options();
87 (void)Param::Instance();
89 input.kind = kind;
90 input.nThreads = options.get<int>("nThreads");
91 // Apply the CLI alias first, then let explicit parameter keys override it.
92 o2::conf::ConfigurableParam::setValue<int>("MFTCATrackerParam", "nThreads", input.nThreads);
93 o2::conf::ConfigurableParam::updateFromString(options.get<std::string>("configKeyValues"));
94 input.mode = o2::itsmft::TrackingMode::fromString(options.get<std::string>("tracking-mode"));
95 input.useMC = !options.get<bool>("disable-mc");
96 input.disableRootOutput = options.get<bool>("disable-root-output");
97 input.fullGeometry = options.get<bool>("use-geom") || options.get<bool>("use-full-geometry");
98
99 input.useIRFrames = options.get<bool>("use-irframes");
101 input.upstreamDigits = options.get<bool>("digits-from-upstream");
102 input.upstreamClusters = options.get<bool>("clusters-from-upstream");
103 input.clusterROFsOnly = options.get<bool>("cluster-rof-branch-only");
104 input.runTracking = !options.get<bool>("disable-tracking");
105 input.assessment = options.get<bool>("run-assessment");
106 input.processGenerated = !options.get<bool>("disable-process-gen");
107 input.tracksToRecords = options.get<bool>("run-tracks2records");
109 }
110 const auto& params = Param::Instance();
111 auto result = resolveWorkflowOptions(input, {params.trackingMode, params.nThreads, MFTTrackingParam::Instance().irFramesOnly});
112 for (const auto& diagnostic : result.diagnostics) {
113 LOGP(info, "{}", diagnostic);
114 }
115 const auto inputName = result.input == InputStage::DigitsFile ? "digits file" : result.input == InputStage::UpstreamDigits ? "upstream digits"
116 : "upstream clusters+patterns+ROFs (and labels if MC enabled)";
117 const auto irName = result.tracker.irFrames == IRFrameSource::None ? "none" : result.tracker.irFrames == IRFrameSource::File ? "file"
118 : "upstream ITS IR frames";
119 const auto outputName = result.kind == WorkflowKind::TrackerOnly ? (result.output == OutputPolicy::None ? "none" : "tracks") : result.output == OutputPolicy::All ? "tracks+clusters"
120 : result.output == OutputPolicy::TracksAndClusterROFs ? "tracks+cluster ROFs"
121 : result.output == OutputPolicy::ClusterROFs ? "cluster ROFs"
122 : "none";
123 LOGP(info, "MFT CA resolved: mode={} threads={} tracking={} input={} geometry={} IR source={} filter={} ROOT output={} MC={}",
124 o2::itsmft::TrackingMode::toString(result.tracker.mode), result.tracker.nThreads,
125 !result.runTracking ? "disabled" : result.tracker.mode == o2::itsmft::TrackingMode::Off ? "inactive"
126 : "active",
127 inputName, result.tracker.geometry == GeometrySource::Full ? "full" : "MFT", irName, result.tracker.filterIRFrames, outputName, result.tracker.useMC);
128 return result;
129}
130} // namespace o2::mft::ca
static void updateFromString(std::string const &)
ConfigParamRegistry & options() const
GLuint64EXT * result
Definition glcorearb.h:5662
GLenum const GLfloat * params
Definition glcorearb.h:272
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
std::string toString(Type mode)
Type fromString(std::string_view str)
TrackerParamConfig< o2::detectors::DetID::MFT > MFTCATrackerParam
WorkflowOptions resolveWorkflowOptions(const WorkflowOptionInput &, const TrackerOptionAliases &)
WorkflowOptions readWorkflowOptions(const o2::framework::ConfigContext &, WorkflowKind)
std::string to_string(gsl::span< T, Size > span)
Definition common.h:52
static bool isMFTStaggeringEnabled(o2::framework::ConfigContext const &cfgc)
o2::itsmft::TrackingMode::Type mode