11#ifndef CBM_ALGO_RecoSetup_h
12#define CBM_ALGO_RecoSetup_h 1
23#include <boost/serialization/access.hpp>
24#include <boost/serialization/split_free.hpp>
49 template<ECbmModuleId ModuleId>
76 template<
class Visitor>
79 kUnits.ForEachVariable(
this, std::forward<Visitor>(visitor));
85 template<
class Visitor>
88 kUnits.ForEachVariable(
this, std::forward<Visitor>(visitor));
94 template<
class Visitor>
97 kUnits.ForEachValue(
this, std::forward<Visitor>(visitor));
103 template<
class Visitor>
106 kUnits.ForEachValue(
this, std::forward<Visitor>(visitor));
111 template<ECbmModuleId ModuleId>
116 "Unsupported ECbmModuleId (SFINAE)");
152 template<ECbmModuleId ModuleId>
216 static void Store(
const RecoSetup& setup,
const std::string& filename);
219 std::optional<mvd::RecoSetupUnit>
fMvd{std::nullopt};
220 std::optional<sts::RecoSetupUnit>
fSts{std::nullopt};
221 std::optional<much::RecoSetupUnit>
fMuch{std::nullopt};
222 std::optional<trd::RecoSetupUnit>
fTrd{std::nullopt};
223 std::optional<tof::RecoSetupUnit>
fTof{std::nullopt};
238 template<
class Archive>
239 void load(Archive& ar,
const unsigned int )
245 using Unit_t =
typename std::remove_reference_t<
decltype(unit)>::value_type;
248 unit = std::make_optional(std::move(res));
257 template<
class Archive>
258 void save(Archive& ar,
const unsigned int )
const
261 if (unit.has_value()) {
272 template<
class Archive>
275 boost::serialization::split_member(ar, *
this, version);
ECbmModuleId
Enumerator for module Identifiers.
@ kMvd
Micro-Vertex Detector.
@ kTrd
Transition Radiation Detector.
@ kTof
Time-of-flight Detector.
@ kSts
Silicon Tracking System.
@ kMuch
Muon detection system.
A generic looper over selected variables of a struct/class.
Different metaprogramming utilities (type traits) for CBM experiment.
An instance of reconstruction setup unit interfaces for online/offline data reconstruction.
void ForEachUnit(Visitor &&visitor) const
A for-each method, which is applied to each unit, if it has a value (constant access)
void SetMvd(mvd::RecoSetupUnit mvd)
Defines STS reconstruction setup unit.
std::string ToString() const
Dumps contents to string.
const sts::RecoSetupUnit * GetSts() const
Access to STS reconstruction setup unit.
static RecoSetup Load(const std::string &filename)
Loads setup from a file.
static constexpr auto kUnits
A tuple of units (for loops)
std::optional< tof::RecoSetupUnit > fTof
TOF reconstruction setup unit.
void save(Archive &ar, const unsigned int) const
Serialization save method.
bool HasMvd() const
Checks, if the MVD reconstruction setup unit is available.
void SetTof(tof::RecoSetupUnit tof)
Defines TOF reconstruction setup unit.
std::optional< mvd::RecoSetupUnit > fMvd
MVD reconstruction setup unit.
bool HasTrd() const
Checks, if the TRD reconstruction setup unit is available.
void SetSts(sts::RecoSetupUnit sts)
Defines STS reconstruction setup unit.
const RecoSetupUnit_t< ModuleId > * Get() const
Access to a reconstruction setup unit.
std::optional< trd::RecoSetupUnit > fTrd
TRD reconstruction setup unit.
const mvd::RecoSetupUnit * GetMvd() const
Access to MVD reconstruction setup unit.
void ForEachOptUnit(Visitor &&visitor) const
A for-each method, which is applied to each unit as an std::optional<> (constant access)
void load(Archive &ar, const unsigned int)
Serialization load method.
void ForEachOptUnit(Visitor &&visitor)
A for-each method, which is applied to each unit as an std::optional<> (mutable access)
static void Store(const RecoSetup &setup, const std::string &filename)
Stores setup in a file.
bool HasTof() const
Checks, if the TOF reconstruction setup unit is available.
std::optional< sts::RecoSetupUnit > fSts
STS reconstruction setup unit.
bool Has() const
Checks, if a setup unit is available (compile-time)
const trd::RecoSetupUnit * GetTrd() const
Access to TRD reconstruction setup unit.
const much::RecoSetupUnit * GetMuch() const
Access to MuCh reconstruction setup unit.
friend class boost::serialization::access
void SetTrd(trd::RecoSetupUnit trd)
Defines TRD reconstruction setup unit.
const tof::RecoSetupUnit * GetTof() const
Access to TOF reconstruction setup unit.
bool HasMuch() const
Checks, if the MuCh reconstruction setup unit is available.
void SetMuch(much::RecoSetupUnit much)
Defines MuCh reconstruction setup unit.
RecoSetup()=default
Default constructor.
bool HasSts() const
Checks, if the STS reconstruction setup unit is available.
void ForEachUnit(Visitor &&visitor)
A for-each method, which is applied to each unit, if it has a value (mutable access)
void serialize(Archive &ar, const unsigned int version)
Serialization method.
std::optional< much::RecoSetupUnit > fMuch
MuCh reconstruction setup unit.
TOF detector representation in online/offline reconstruction.
An utility, which allows to apply a callable to selected variables of a class in a loop.
MuCh representation for tracking.
MVD representation for tracking.
std::variant< const mvd::RecoSetupUnit *, const sts::RecoSetupUnit *, const much::RecoSetupUnit *, const trd::RecoSetupUnit *, const tof::RecoSetupUnit * > RecoSetupUnitPtrVariant_t
typename detail::RecoSetupUnitMapper< ModuleId >::type RecoSetupUnit_t
constexpr bool is_in_sequence_v
STS representation for tracking.
TOF representation for tracking.
TRD representation for tracking.