Skip to content

Commit cf7694b

Browse files
Merge branch 'dev' into ngt-ci-pipeline
2 parents a6ccfbc + 38e8f24 commit cf7694b

File tree

113 files changed

+2309
-1056
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

113 files changed

+2309
-1056
lines changed

CCDB/include/CCDB/BasicCCDBManager.h

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,16 +108,20 @@ class CCDBManagerInstance
108108

109109
/// retrieve an object of type T from CCDB as stored under path, timestamp and metaData
110110
template <typename T>
111-
T* getSpecific(std::string const& path, long timestamp = -1, MD metaData = MD())
111+
T* getSpecific(std::string const& path, long timestamp = -1, MD metaData = MD(), std::map<std::string, std::string>* headers = nullptr)
112112
{
113113
// TODO: add some error info/handling when failing
114114
mMetaData = metaData;
115-
return getForTimeStamp<T>(path, timestamp);
115+
auto obj = getForTimeStamp<T>(path, timestamp);
116+
if (headers) {
117+
*headers = mHeaders;
118+
}
119+
return obj;
116120
}
117121

118122
/// retrieve an object of type T from CCDB as stored under path and using the timestamp in the middle of the run + metadata. The run number is provided separately to conform to typical analysis use (in which case metadata does not include runNumber)
119123
template <typename T>
120-
T* getSpecificForRun(std::string const& path, int runNumber, MD metaData = MD());
124+
T* getSpecificForRun(std::string const& path, int runNumber, MD const& metaData = MD());
121125

122126
/// detect online processing modes (i.e. CCDB objects may be updated in the lifetime of the manager)
123127
bool isOnline() const { return mDeplMode == o2::framework::DeploymentMode::OnlineAUX || mDeplMode == o2::framework::DeploymentMode::OnlineDDS || mDeplMode == o2::framework::DeploymentMode::OnlineECS; }
@@ -129,6 +133,9 @@ class CCDBManagerInstance
129133
return getForTimeStamp<T>(path, mTimestamp);
130134
}
131135

136+
// gain access to underlaying CCDB layer (to allow for more complex queries without need to reinit another API)
137+
CcdbApi& getCCDBAccessor() { return mCCDBAccessor; }
138+
132139
bool isHostReachable() const { return mCCDBAccessor.isHostReachable(); }
133140

134141
/// clear all entries in the cache
@@ -230,11 +237,12 @@ class CCDBManagerInstance
230237
template <typename T>
231238
T* CCDBManagerInstance::getForTimeStamp(std::string const& path, long timestamp)
232239
{
240+
mHeaders.clear(); // we clear at the beginning; to allow to retrieve the header information in a subsequent call
233241
T* ptr = nullptr;
234242
mQueries++;
235243
auto start = std::chrono::system_clock::now();
236244
if (!isCachingEnabled()) {
237-
ptr = mCCDBAccessor.retrieveFromTFileAny<T>(path, mMetaData, timestamp, nullptr, "",
245+
ptr = mCCDBAccessor.retrieveFromTFileAny<T>(path, mMetaData, timestamp, &mHeaders, "",
238246
mCreatedNotAfter ? std::to_string(mCreatedNotAfter) : "",
239247
mCreatedNotBefore ? std::to_string(mCreatedNotBefore) : "");
240248
if (!ptr) {
@@ -305,7 +313,6 @@ T* CCDBManagerInstance::getForTimeStamp(std::string const& path, long timestamp)
305313
} else {
306314
cached.cacheValidUntil = -1;
307315
}
308-
mHeaders.clear();
309316
mMetaData.clear();
310317
if (!ptr) {
311318
if (mFatalWhenNull) {
@@ -328,7 +335,7 @@ T* CCDBManagerInstance::getForRun(std::string const& path, int runNumber, bool s
328335
}
329336

330337
template <typename T>
331-
T* CCDBManagerInstance::getSpecificForRun(std::string const& path, int runNumber, MD metaData)
338+
T* CCDBManagerInstance::getSpecificForRun(std::string const& path, int runNumber, MD const& metaData)
332339
{
333340
auto [start, stop] = getRunDuration(runNumber, mFatalWhenNull);
334341
if (start < 0 || stop < 0) {

CODEOWNERS

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@
2828
/DataFormats/Detectors/Common @shahor02
2929
/DataFormats/Detectors/CPV @peressounko @kharlov
3030
/DataFormats/Detectors/CTP @lietava
31-
/DataFormats/Detectors/EMCAL @mfasDa @jokonig
31+
/DataFormats/Detectors/EMCAL @nstrangm @jokonig
3232
/DataFormats/Detectors/FIT @jotwinow @afurs @andreasmolander @sahilupadhyaya92
33-
/DataFormats/Detectors/FOCAL @maxrauch @mfasDa @iarsene @matthiasrichter
33+
/DataFormats/Detectors/FOCAL @maxrauch @iarsene @matthiasrichter
3434
/DataFormats/Detectors/GlobalTracking @shahor02
3535
/DataFormats/Detectors/GlobalTrackingWorkflow @shahor02
3636
/DataFormats/Detectors/HMPID @gvolpe79
@@ -58,9 +58,9 @@
5858
/Detectors/Base @sawenzel @shahor02
5959
/Detectors/Calibration @chiarazampolli @shahor02
6060
/Detectors/CPV @peressounko @kharlov
61-
/Detectors/EMCAL @mfasDa @jokonig
61+
/Detectors/EMCAL @nstrangm @jokonig
6262
/Detectors/FIT @jotwinow @afurs @andreasmolander @sahilupadhyaya92
63-
/Detectors/FOCAL @maxrauch @mfasDa @iarsene @matthiasrichter
63+
/Detectors/FOCAL @maxrauch @iarsene @matthiasrichter
6464
/Detectors/Geometry @sawenzel @shahor02
6565
/Detectors/GlobalTracking @shahor02
6666
/Detectors/GlobalTrackingWorkflow @shahor02

Common/Utils/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ o2_add_library(CommonUtils
2626
src/DebugStreamer.cxx
2727
src/DLLoaderBase.cxx
2828
PUBLIC_LINK_LIBRARIES ROOT::Hist ROOT::Tree Boost::iostreams O2::CommonDataFormat O2::Headers
29-
FairLogger::FairLogger O2::MathUtils TBB::tbb)
29+
FairLogger::FairLogger O2::MathUtils TBB::tbb O2::GPUCommon)
3030

3131
o2_target_root_dictionary(CommonUtils
3232
HEADERS include/CommonUtils/TreeStream.h

Common/Utils/include/CommonUtils/StringUtils.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020
#include <sstream>
2121
#include <vector>
2222
#include <algorithm>
23-
#include <fmt/format.h>
24-
#include <Rtypes.h>
23+
#include "GPUCommonRtypes.h"
2524

2625
namespace o2
2726
{

Common/Utils/src/StringUtils.cxx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@
1212
#include "CommonUtils/StringUtils.h"
1313
#include <cstdlib>
1414
#include <filesystem>
15+
#ifndef GPUCA_STANDALONE
1516
#include <TGrid.h>
17+
#include <fmt/format.h>
18+
#endif
1619
#include <unistd.h>
1720

1821
using namespace o2::utils;
@@ -77,6 +80,7 @@ std::string Str::getFullPath(const std::string_view p)
7780
return std::filesystem::canonical(std::string{p}).string();
7881
}
7982

83+
#ifndef GPUCA_STANDALONE
8084
std::string Str::rectifyDirectory(const std::string_view p)
8185
{
8286
std::string dir(p);
@@ -104,6 +108,7 @@ std::string Str::rectifyDirectory(const std::string_view p)
104108
}
105109
return dir;
106110
}
111+
#endif
107112

108113
// Create unique non-existing path name starting with prefix. Loose equivalent of boost::filesystem::unique_path()
109114
// The prefix can be either existing directory or just a string to add in front of the random part

DataFormats/Parameters/include/DataFormatsParameters/AggregatedRunInfo.h

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,35 @@ struct AggregatedRunInfo {
3232
int runNumber = 0; // run number
3333
int64_t sor = 0; // best known timestamp for the start of run
3434
int64_t eor = 0; // best known timestamp for end of run
35-
int64_t orbitsPerTF = 0; // number of orbits per TF
35+
int64_t orbitsPerTF = 0; // number of orbits per TF (takes precedence over that in GRPECS)
3636
int64_t orbitReset = 0; // timestamp of orbit reset before run
3737
int64_t orbitSOR = 0; // orbit when run starts after orbit reset
3838
int64_t orbitEOR = 0; // orbit when run ends after orbit reset
3939

4040
// we may have pointers to actual data source objects GRPECS, ...
4141
const o2::parameters::GRPECSObject* grpECS = nullptr; // pointer to GRPECSobject (fetched during struct building)
4242

43-
// fills and returns AggregatedRunInfo for a given run number.
44-
static AggregatedRunInfo buildAggregatedRunInfo(o2::ccdb::CCDBManagerInstance& ccdb, int runnumber);
4543
static AggregatedRunInfo buildAggregatedRunInfo(int runnumber, long sorMS, long eorMS, long orbitResetMUS, const o2::parameters::GRPECSObject* grpecs, const std::vector<Long64_t>* ctfFirstRunOrbitVec);
44+
45+
// fills and returns AggregatedRunInfo for a given data run number.
46+
static AggregatedRunInfo buildAggregatedRunInfo_DATA(o2::ccdb::CCDBManagerInstance& ccdb, int runnumber);
47+
48+
// Returns the meta-data (MCProdInfo) associated to production lpm_prod_tag (performed by username)
49+
static std::map<std::string, std::string> getMCProdInfo(o2::ccdb::CCDBManagerInstance& ccdb, int runnumber,
50+
std::string const& lpm_prod_tag, std::string const& username = "aliprod");
51+
52+
// function that adjusts with values from MC
53+
void adjust_from_MC(o2::ccdb::CCDBManagerInstance& ccdb, int run_number, std::string const& lpm_prod_tag, std::string const& username = "aliprod");
54+
55+
// Fills and returns AggregatedRunInfo for a given run number.
56+
// If a non-empty lpm_prod_tag is given, it will potentially override values with specifics from a
57+
// MC production identified by that tag and username.
58+
static AggregatedRunInfo buildAggregatedRunInfo(o2::ccdb::CCDBManagerInstance& ccdb,
59+
int runnumber,
60+
std::string const& lpm_prod_tag = "",
61+
std::string const& username = "aliprod");
62+
63+
ClassDefNV(AggregatedRunInfo, 1);
4664
};
4765

4866
} // namespace o2::parameters

DataFormats/Parameters/src/AggregatedRunInfo.cxx

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
using namespace o2::parameters;
2323

24-
o2::parameters::AggregatedRunInfo AggregatedRunInfo::buildAggregatedRunInfo(o2::ccdb::CCDBManagerInstance& ccdb, int runnumber)
24+
o2::parameters::AggregatedRunInfo AggregatedRunInfo::buildAggregatedRunInfo_DATA(o2::ccdb::CCDBManagerInstance& ccdb, int runnumber)
2525
{
2626
// TODO: could think about caching results per runnumber to
2727
// avoid going to CCDB multiple times ---> but should be done inside the CCDBManagerInstance
@@ -83,3 +83,67 @@ o2::parameters::AggregatedRunInfo AggregatedRunInfo::buildAggregatedRunInfo(int
8383
}
8484
return AggregatedRunInfo{runnumber, sorMS, eorMS, nOrbitsPerTF, orbitResetMUS, orbitSOR, orbitEOR, grpecs};
8585
}
86+
87+
namespace
88+
{
89+
90+
// get path where to find MC production info
91+
std::string getFullPath_MC(std::string const& username, std::string const& lpm_prod_tag)
92+
{
93+
// construct the path where to lookup
94+
std::string path = "/Users/" + std::string(1, username[0]) + "/" + username;
95+
std::string fullpath = path + "/" + "MCProdInfo/" + lpm_prod_tag;
96+
return fullpath;
97+
}
98+
99+
} // namespace
100+
101+
std::map<std::string, std::string> AggregatedRunInfo::getMCProdInfo(o2::ccdb::CCDBManagerInstance& ccdb,
102+
int run_number,
103+
std::string const& lpm_prod_tag,
104+
std::string const& username)
105+
{
106+
std::map<std::string, std::string> metaDataFilter;
107+
metaDataFilter["LPMProductionTag"] = lpm_prod_tag;
108+
109+
// fetch the meta information for MC productions
110+
auto header_data = ccdb.getCCDBAccessor().retrieveHeaders(getFullPath_MC(username, lpm_prod_tag), metaDataFilter, run_number);
111+
return header_data;
112+
}
113+
114+
void AggregatedRunInfo::adjust_from_MC(o2::ccdb::CCDBManagerInstance& ccdb,
115+
int run_number,
116+
std::string const& lpm_prod_tag,
117+
std::string const& username)
118+
{
119+
auto header_data = AggregatedRunInfo::getMCProdInfo(ccdb, run_number, lpm_prod_tag, username);
120+
121+
// adjust timeframe length if we find entry for MC production
122+
auto iter = header_data.find("OrbitsPerTF");
123+
if (iter != header_data.end()) {
124+
auto mc_orbitsPerTF = std::stoi(iter->second);
125+
if (mc_orbitsPerTF != orbitsPerTF) {
126+
LOG(info) << "Adjusting OrbitsPerTF from " << orbitsPerTF << " to " << mc_orbitsPerTF << " based on differing MC info";
127+
orbitsPerTF = mc_orbitsPerTF;
128+
}
129+
} else {
130+
LOG(warn) << "No OrbitsPerTF information found for MC production " << lpm_prod_tag << " and run number " << run_number;
131+
}
132+
}
133+
134+
AggregatedRunInfo AggregatedRunInfo::buildAggregatedRunInfo(o2::ccdb::CCDBManagerInstance& ccdb, int run_number, std::string const& lpm_prod_tag, std::string const& username)
135+
{
136+
// (a) lookup the AggregatedRunInfo for the data run
137+
// (b) modify/overwrite the info object with MC specific settings if lpm_prod_tag is given
138+
139+
auto original_info = buildAggregatedRunInfo_DATA(ccdb, run_number);
140+
141+
if (lpm_prod_tag.size() == 0) {
142+
return original_info;
143+
}
144+
145+
// in this case we adjust the info from MC
146+
original_info.adjust_from_MC(ccdb, run_number, lpm_prod_tag, username);
147+
148+
return original_info;
149+
}

DataFormats/Parameters/src/GRPLHCIFData.cxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ using namespace o2::constants::lhc;
2828
const std::unordered_map<unsigned int, unsigned int> GRPLHCIFData::mZtoA =
2929
{
3030
{1, 1},
31+
{8, 16},
32+
{10, 20},
3133
{82, 208}};
3234

3335
//_______________________________________________

DataFormats/Reconstruction/include/ReconstructionDataFormats/TrackFwd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ class TrackParCovFwd : public TrackParFwd
161161
void propagateToZquadratic(double zEnd, double zField);
162162
void propagateToZhelix(double zEnd, double zField);
163163
void propagateToZ(double zEnd, double zField); // Parameters: helix; errors: quadratic
164+
void propagateToDCAhelix(double zField, const std::array<double, 3>& p, std::array<double, 3>& dca);
164165

165166
// Add Multiple Coulomb Scattering effects
166167
void addMCSEffect(double x2X0);

DataFormats/Reconstruction/include/ReconstructionDataFormats/Vertex.h

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,13 @@
1818

1919
#include "CommonDataFormat/TimeStamp.h"
2020
#ifndef GPUCA_GPUCODE_DEVICE
21-
#include <iosfwd>
22-
#include <string>
2321
#include <type_traits>
2422
#include <array>
23+
#ifndef GPUCA_NO_FMT
24+
#include <sstream>
25+
#include <string>
26+
#include <fmt/format.h>
27+
#endif
2528
#endif
2629

2730
namespace o2
@@ -135,6 +138,11 @@ class Vertex : public VertexBase
135138
{
136139
}
137140

141+
#if !defined(GPUCA_NO_FMT) && !defined(GPUCA_GPUCODE_DEVICE)
142+
void print() const;
143+
std::string asString() const;
144+
#endif
145+
138146
GPUd() ushort getNContributors() const { return mNContributors; }
139147
GPUd() void setNContributors(ushort v) { mNContributors = v; }
140148
GPUd() void addContributor() { mNContributors++; }
@@ -162,6 +170,49 @@ class Vertex : public VertexBase
162170

163171
#if !defined(GPUCA_GPUCODE_DEVICE) && !defined(GPUCA_NO_FMT)
164172
std::ostream& operator<<(std::ostream& os, const o2::dataformats::VertexBase& v);
173+
174+
namespace detail
175+
{
176+
template <typename T>
177+
concept Streamable = requires(std::ostream& os, const T& a) {
178+
{ os << a } -> std::same_as<std::ostream&>;
179+
};
180+
181+
template <typename T>
182+
concept HasFormattableTimeStamp = requires(const T& t) {
183+
{ fmt::format("{}", t.getTimeStamp()) } -> std::convertible_to<std::string>;
184+
};
185+
} // namespace detail
186+
187+
template <typename Stamp>
188+
inline std::string Vertex<Stamp>::asString() const
189+
{
190+
const std::string stamp = [&]() -> std::string {
191+
if constexpr (detail::Streamable<Stamp>) {
192+
std::ostringstream oss;
193+
oss << mTimeStamp;
194+
return oss.str();
195+
} else if constexpr (detail::HasFormattableTimeStamp<Stamp>) {
196+
return fmt::format("{}", mTimeStamp.getTimeStamp());
197+
} else {
198+
return "X";
199+
}
200+
}();
201+
return fmt::format("{} NContrib:{} Chi2:{:.2f} Flags:{:b} Stamp:{}", VertexBase::asString(), mNContributors, mChi2, mBits, stamp);
202+
}
203+
204+
template <typename Stamp>
205+
inline std::ostream& operator<<(std::ostream& os, const o2::dataformats::Vertex<Stamp>& v)
206+
{
207+
os << v.asString();
208+
return os;
209+
}
210+
211+
template <typename Stamp>
212+
inline void Vertex<Stamp>::print() const
213+
{
214+
std::cout << *this << '\n';
215+
}
165216
#endif
166217

167218
} // namespace dataformats

0 commit comments

Comments
 (0)