CbmRoot
Loading...
Searching...
No Matches
KfField.cxx
Go to the documentation of this file.
1/* Copyright (C) 2024 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Sergei Zharko [committer] */
4
9
10#include "KfField.h"
11
12#include <mutex>
13#include <sstream>
14#include <tuple>
15
20
21// ---------------------------------------------------------------------------------------------------------------------
22//
23template<typename T>
24std::string ConcreteField<T, EFieldMode::Interpolated>::ToString(int indentLevel, int verbose) const
25{
26 constexpr char IndentChar = '\t';
27 std::stringstream msg;
28 std::string indent(indentLevel, IndentChar);
29 msg << indent << "Interpolated magnetic field";
30 msg << "\n" << indent << "Field type: " << static_cast<int>(fFieldType);
31 msg << '\n' << indent << "Field in the primary vertex: " << fPrimVertexField.ToString();
32 msg << '\n' << indent << "Field slices:";
33 for (int iSlice = 0; iSlice < GetNofFieldSlices(); ++iSlice) {
34 const auto& fldSlice = fvFieldSlices[iSlice];
35 msg << '\n' << indent << iSlice << ") " << fldSlice.ToString(0, verbose);
36 }
37 return msg.str();
38}
39
40// ---------------------------------------------------------------------------------------------------------------------
41//
42template<typename T>
43std::string ConcreteField<T, EFieldMode::Original>::ToString(int indentLevel, int /*verbose*/) const
44{
45 constexpr char IndentChar = '\t';
46 std::stringstream msg;
47 std::string indent(indentLevel, IndentChar);
48 msg << indent << "Original field function";
49 msg << "\n" << indent << "Field type: " << static_cast<int>(fFieldType);
50 msg << "\n" << indent << "Field in the primary vertex: " << fPrimVertexField.ToString();
51 msg << "\n" << indent << "Field slice z-positions: ";
52 for (int iSlice = 0; iSlice < GetNofFieldSlices(); ++iSlice) {
53 msg << "\n " << indent << iSlice << ") " << fvFieldSliceZ[iSlice];
54 }
55 return msg.str();
56}
57
58// ---------------------------------------------------------------------------------------------------------------------
59//
60template<typename T>
61std::string Field<T>::ToString(int indentLevel, int verbose) const
62{
63 constexpr char IndentChar = '\t';
64 std::stringstream msg;
65 std::string indent(indentLevel, IndentChar);
66 kf::visit([&msg, indentLevel, verbose](const auto& v) { msg << v.ToString(indentLevel, verbose); }, fFieldVariant);
67 return msg.str();
68}
69
70namespace cbm::algo::kf
71{
72 template class Field<float>;
73 template class Field<double>;
74 template class Field<fvec>;
75} // namespace cbm::algo::kf
76
77
78// ---------------------------------------------------------------------------------------------------------------------
79//
80void FieldBuilder::AddSliceReference(double halfSizeX, double halfSizeY, double zRef)
81{
82 if (!fSliceReferences.emplace(halfSizeX, halfSizeY, zRef).second) {
83 std::stringstream msg;
84 msg << "FieldBuilder::AddReference: attempt of adding another slice reference with zRef = " << zRef
85 << "(halfSizeX = " << halfSizeX << ", halfSizeY = " << halfSizeY << ").\nThe next slice references were "
86 << "added:";
87 for (const auto& el : fSliceReferences) {
88 msg << "\n\t- halfSizeX = " << el.fHalfSizeX << ", halfSizeY = " << el.fHalfSizeY << ", zRef = " << el.fRefZ;
89 }
90 throw std::logic_error(msg.str());
91 }
92}
93
Magnetic field representation in KF (header)
fscal v[fmask::Size]
Definition KfSimdPseudo.h:4
void AddSliceReference(double halfSizeX, double halfSizeY, double refZ)
Adds a slice reference.
Definition KfField.cxx:80
std::string ToString(int indentLevel, int verbose) const
String representation of the class.
Definition KfField.cxx:61
A builder class for kf::Field.
Definition KfField.h:494
std::set< SliceRef > fSliceReferences
Set of slice references.
Definition KfField.h:568
Magnetic field manager class.
Definition KfField.h:272
FieldVariant_t fFieldVariant
Concrete field implementation.
Definition KfField.h:488
Data members of the Field class (primary template)
Definition KfField.h:37
EFieldMode
Enumiration for the magnetic field representation variants in the track fitting algorithm.
Definition KfDefs.h:108