ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Database
APR
StorageSvc
StorageSvc
APRDefaults.h
Go to the documentation of this file.
1
// Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2
3
#ifndef APRDEFAULTS_H
4
#define APRDEFAULTS_H
5
6
#include "
CxxUtils/checker_macros.h
"
7
8
#include <atomic>
9
#include <map>
10
#include <mutex>
11
#include <optional>
12
#include <shared_mutex>
13
#include <string>
14
#include <string_view>
15
16
namespace
APRDefaults
{
17
18
// The write configuration namespace encapsulates all logic that is related to the naming scheme of containers in the output file
19
namespace
WriteConfig
{
20
// Container naming scheme
21
enum class
NamingScheme
{
22
Historical
,
// Traditional TTree-based names (CollectionTree, POOLCollectionTree, etc.)
23
Canonical
// Modern canonical names (EventData, EventTag, etc.)
24
};
25
26
// Name categories
27
enum class
NameType
{
28
EventData
,
29
EventTag
,
30
DataHeader
,
31
MetaData
32
};
33
34
// Technology-specific name sets
35
namespace
ContainerNames
{
36
struct
Historical
{
37
static
constexpr
const
char
*
EventData
=
"CollectionTree"
;
38
static
constexpr
const
char
*
EventTag
=
"POOLCollectionTree"
;
39
static
constexpr
const
char
*
DataHeader
=
"POOLContainer"
;
40
static
constexpr
const
char
*
MetaData
=
"MetaData"
;
41
};
42
43
struct
Canonical
{
44
static
constexpr
const
char
*
EventData
=
"EventData"
;
45
static
constexpr
const
char
*
EventTag
=
"EventTag"
;
46
static
constexpr
const
char
*
DataHeader
=
"EventData"
;
47
static
constexpr
const
char
*
MetaData
=
"MetaData"
;
48
};
49
}
50
51
namespace
detail
{
52
// Atomic global naming scheme - shared across all threads
53
inline
std::atomic<NamingScheme>&
getGlobalScheme
() {
54
static
std::atomic<NamingScheme> s_scheme{
NamingScheme::Historical
};
55
return
s_scheme;
56
}
57
58
template
<NameType NT>
59
constexpr
const
char
*
getNameImpl
(
NamingScheme
scheme) {
60
switch
(scheme) {
61
case
NamingScheme::Canonical
:
62
if
constexpr
(NT ==
NameType::EventData
)
return
ContainerNames::Canonical::EventData
;
63
if
constexpr
(NT ==
NameType::EventTag
)
return
ContainerNames::Canonical::EventTag
;
64
if
constexpr
(NT ==
NameType::DataHeader
)
return
ContainerNames::Canonical::DataHeader
;
65
if
constexpr
(NT ==
NameType::MetaData
)
return
ContainerNames::Canonical::MetaData
;
66
break
;
67
case
NamingScheme::Historical
:
68
if
constexpr
(NT ==
NameType::EventData
)
return
ContainerNames::Historical::EventData
;
69
if
constexpr
(NT ==
NameType::EventTag
)
return
ContainerNames::Historical::EventTag
;
70
if
constexpr
(NT ==
NameType::DataHeader
)
return
ContainerNames::Historical::DataHeader
;
71
if
constexpr
(NT ==
NameType::MetaData
)
return
ContainerNames::Historical::MetaData
;
72
break
;
73
}
74
return
""
;
75
}
76
}
77
78
// Set the global naming scheme (thread-safe)
79
inline
void
setNamingScheme
(
NamingScheme
scheme) {
80
detail::getGlobalScheme
().store(scheme, std::memory_order_relaxed);
81
}
82
83
// Get the current global naming scheme (thread-safe)
84
inline
NamingScheme
getNamingScheme
() {
85
return
detail::getGlobalScheme
().load(std::memory_order_relaxed);
86
}
87
88
// Convenience method to parse strings
89
inline
std::optional<NamingScheme>
parseNamingScheme
(std::string_view name) {
90
if
(name ==
"Historical"
)
return
NamingScheme::Historical
;
91
if
(name ==
"Canonical"
)
return
NamingScheme::Canonical
;
92
return
std::nullopt;
93
}
94
95
// Public API with explicit scheme parameter
96
constexpr
const
char
*
getName
(
NamingScheme
scheme,
NameType
type
) {
97
switch
(
type
) {
98
case
NameType::EventData
:
return
detail::getNameImpl<NameType::EventData>
(scheme);
99
case
NameType::EventTag
:
return
detail::getNameImpl<NameType::EventTag>
(scheme);
100
case
NameType::DataHeader
:
return
detail::getNameImpl<NameType::DataHeader>
(scheme);
101
case
NameType::MetaData
:
return
detail::getNameImpl<NameType::MetaData>
(scheme);
102
}
103
return
""
;
104
}
105
106
// Convenience functions using global scheme
107
inline
const
char
*
getEventDataName
() {
108
return
getName
(
getNamingScheme
(),
NameType::EventData
);
109
}
110
111
inline
const
char
*
getEventTagName
() {
112
return
getName
(
getNamingScheme
(),
NameType::EventTag
);
113
}
114
115
inline
const
char
*
getDataHeaderName
() {
116
return
getName
(
getNamingScheme
(),
NameType::DataHeader
);
117
}
118
119
inline
const
char
*
getMetaDataName
() {
120
return
getName
(
getNamingScheme
(),
NameType::MetaData
);
121
}
122
123
// Overloads with explicit scheme
124
constexpr
const
char
*
getEventDataName
(
NamingScheme
scheme) {
125
return
getName
(scheme,
NameType::EventData
);
126
}
127
128
constexpr
const
char
*
getEventTagName
(
NamingScheme
scheme) {
129
return
getName
(scheme,
NameType::EventTag
);
130
}
131
132
constexpr
const
char
*
getDataHeaderName
(
NamingScheme
scheme) {
133
return
getName
(scheme,
NameType::DataHeader
);
134
}
135
136
constexpr
const
char
*
getMetaDataName
(
NamingScheme
scheme) {
137
return
getName
(scheme,
NameType::MetaData
);
138
}
139
}
// namespace WriteConfig
140
141
// The read configuration namespace encapsulates all logic that is related to the naming scheme of containers in the input file
142
namespace
ReadConfig
{
143
// Container names default to legacy values in read mode for backwards compatibility
144
struct
ContainerNames
{
145
std::string
EventTag
=
"POOLCollectionTree"
;
146
std::string
DataHeader
=
"POOLContainer"
;
147
};
148
149
namespace
detail
{
150
inline
std::shared_mutex&
getMutex
() {
151
static
std::shared_mutex s_mutex;
152
return
s_mutex;
153
}
154
155
inline
const
ContainerNames
&
getDefaultNames
() {
156
static
const
ContainerNames
s_defaultNames{};
157
return
s_defaultNames;
158
}
159
160
inline
std::map<std::string, ContainerNames, std::less<>>&
getNamesByDatabase
() {
161
static
std::map<std::string, ContainerNames, std::less<>> s_namesByDatabase
ATLAS_THREAD_SAFE
;
162
return
s_namesByDatabase;
163
}
164
}
165
166
// Setters (exclusive write lock)
167
inline
void
setEventTagName
(std::string_view databaseName, std::string_view name) {
168
std::unique_lock
lock
{
detail::getMutex
()};
169
detail::getNamesByDatabase
().try_emplace(std::string{databaseName}).first->second.EventTag = name;
170
}
171
172
inline
void
setDataHeaderName
(std::string_view databaseName, std::string_view name) {
173
std::unique_lock
lock
{
detail::getMutex
()};
174
detail::getNamesByDatabase
().try_emplace(std::string{databaseName}).first->second.DataHeader = name;
175
}
176
177
// Removers (exclusive write lock)
178
inline
void
clearDatabase
(std::string_view databaseName) {
179
std::unique_lock
lock
{
detail::getMutex
()};
180
auto
& m =
detail::getNamesByDatabase
();
181
const
auto
it = m.find(databaseName);
182
if
(it != m.end()) m.erase(it);
183
}
184
185
inline
void
clearAll
() {
186
std::unique_lock
lock
{
detail::getMutex
()};
187
detail::getNamesByDatabase
().clear();
188
}
189
190
// Getters (shared read lock)
191
inline
std::string
getEventTagName
(std::string_view databaseName) {
192
std::shared_lock
lock
{
detail::getMutex
()};
193
const
auto
& namesByDatabase =
detail::getNamesByDatabase
();
194
const
auto
it = namesByDatabase.find(databaseName);
195
return
(it != namesByDatabase.end()) ? it->second.EventTag :
detail::getDefaultNames
().
EventTag
;
196
}
197
198
inline
std::string
getDataHeaderName
(std::string_view databaseName) {
199
std::shared_lock
lock
{
detail::getMutex
()};
200
const
auto
& namesByDatabase =
detail::getNamesByDatabase
();
201
const
auto
it = namesByDatabase.find(databaseName);
202
return
(it != namesByDatabase.end()) ? it->second.DataHeader :
detail::getDefaultNames
().
DataHeader
;
203
}
204
}
// namespace ReadConfig
205
206
static
constexpr
const
char
*
IndexColName
=
"index_ref"
;
207
static
constexpr
const
char
*
DataHeaderTypeName
=
"DataHeader"
;
208
static
constexpr
const
char
*
DataHeaderFormTypeName
=
"DataHeaderForm"
;
209
static
constexpr
const
char
*
EventTagTypeName
=
"AttributeList"
;
210
static
constexpr
const
char
*
ParamsKeyEventTag
=
"POOL_CONTAINERNAME_EVENTTAG"
;
211
static
constexpr
const
char
*
ParamsKeyDataHeader
=
"POOL_CONTAINERNAME_DATAHEADER"
;
212
213
}
214
215
#endif
lock
virtual void lock()=0
Interface to allow an object to lock itself when made const in SG.
checker_macros.h
Define macros for attributes used to control the static checker.
ATLAS_THREAD_SAFE
#define ATLAS_THREAD_SAFE
Definition
checker_macros.h:211
DataHeader
This class provides the layout for summary information stored for data written to POOL.
Definition
DataHeader.h:123
APRDefaults::ReadConfig::detail::getNamesByDatabase
std::map< std::string, ContainerNames, std::less<> > & getNamesByDatabase()
Definition
APRDefaults.h:160
APRDefaults::ReadConfig::detail::getMutex
std::shared_mutex & getMutex()
Definition
APRDefaults.h:150
APRDefaults::ReadConfig::detail::getDefaultNames
const ContainerNames & getDefaultNames()
Definition
APRDefaults.h:155
APRDefaults::ReadConfig
Definition
APRDefaults.h:142
APRDefaults::ReadConfig::getDataHeaderName
std::string getDataHeaderName(std::string_view databaseName)
Definition
APRDefaults.h:198
APRDefaults::ReadConfig::clearAll
void clearAll()
Definition
APRDefaults.h:185
APRDefaults::ReadConfig::clearDatabase
void clearDatabase(std::string_view databaseName)
Definition
APRDefaults.h:178
APRDefaults::ReadConfig::getEventTagName
std::string getEventTagName(std::string_view databaseName)
Definition
APRDefaults.h:191
APRDefaults::ReadConfig::setEventTagName
void setEventTagName(std::string_view databaseName, std::string_view name)
Definition
APRDefaults.h:167
APRDefaults::ReadConfig::setDataHeaderName
void setDataHeaderName(std::string_view databaseName, std::string_view name)
Definition
APRDefaults.h:172
APRDefaults::WriteConfig::ContainerNames
Definition
APRDefaults.h:35
APRDefaults::WriteConfig::detail::getNameImpl
constexpr const char * getNameImpl(NamingScheme scheme)
Definition
APRDefaults.h:59
APRDefaults::WriteConfig::detail::getGlobalScheme
std::atomic< NamingScheme > & getGlobalScheme()
Definition
APRDefaults.h:53
APRDefaults::WriteConfig
Definition
APRDefaults.h:19
APRDefaults::WriteConfig::getMetaDataName
const char * getMetaDataName()
Definition
APRDefaults.h:119
APRDefaults::WriteConfig::getEventDataName
const char * getEventDataName()
Definition
APRDefaults.h:107
APRDefaults::WriteConfig::parseNamingScheme
std::optional< NamingScheme > parseNamingScheme(std::string_view name)
Definition
APRDefaults.h:89
APRDefaults::WriteConfig::setNamingScheme
void setNamingScheme(NamingScheme scheme)
Definition
APRDefaults.h:79
APRDefaults::WriteConfig::getDataHeaderName
const char * getDataHeaderName()
Definition
APRDefaults.h:115
APRDefaults::WriteConfig::getNamingScheme
NamingScheme getNamingScheme()
Definition
APRDefaults.h:84
APRDefaults::WriteConfig::getName
constexpr const char * getName(NamingScheme scheme, NameType type)
Definition
APRDefaults.h:96
APRDefaults::WriteConfig::NameType
NameType
Definition
APRDefaults.h:27
APRDefaults::WriteConfig::NameType::MetaData
@ MetaData
Definition
APRDefaults.h:31
APRDefaults::WriteConfig::NameType::EventTag
@ EventTag
Definition
APRDefaults.h:29
APRDefaults::WriteConfig::NameType::EventData
@ EventData
Definition
APRDefaults.h:28
APRDefaults::WriteConfig::NameType::DataHeader
@ DataHeader
Definition
APRDefaults.h:30
APRDefaults::WriteConfig::NamingScheme
NamingScheme
Definition
APRDefaults.h:21
APRDefaults::WriteConfig::NamingScheme::Historical
@ Historical
Definition
APRDefaults.h:22
APRDefaults::WriteConfig::NamingScheme::Canonical
@ Canonical
Definition
APRDefaults.h:23
APRDefaults::WriteConfig::getEventTagName
const char * getEventTagName()
Definition
APRDefaults.h:111
APRDefaults
Definition
APRDefaults.h:16
APRDefaults::ParamsKeyEventTag
static constexpr const char * ParamsKeyEventTag
Definition
APRDefaults.h:210
APRDefaults::DataHeaderTypeName
static constexpr const char * DataHeaderTypeName
Definition
APRDefaults.h:207
APRDefaults::EventTagTypeName
static constexpr const char * EventTagTypeName
Definition
APRDefaults.h:209
APRDefaults::ParamsKeyDataHeader
static constexpr const char * ParamsKeyDataHeader
Definition
APRDefaults.h:211
APRDefaults::DataHeaderFormTypeName
static constexpr const char * DataHeaderFormTypeName
Definition
APRDefaults.h:208
APRDefaults::IndexColName
static constexpr const char * IndexColName
Definition
APRDefaults.h:206
detail
Definition
extract_histogram_tag.cxx:14
APRDefaults::ReadConfig::ContainerNames
Definition
APRDefaults.h:144
APRDefaults::ReadConfig::ContainerNames::DataHeader
std::string DataHeader
Definition
APRDefaults.h:146
APRDefaults::ReadConfig::ContainerNames::EventTag
std::string EventTag
Definition
APRDefaults.h:145
APRDefaults::WriteConfig::ContainerNames::Canonical
Definition
APRDefaults.h:43
APRDefaults::WriteConfig::ContainerNames::Canonical::EventTag
static constexpr const char * EventTag
Definition
APRDefaults.h:45
APRDefaults::WriteConfig::ContainerNames::Canonical::EventData
static constexpr const char * EventData
Definition
APRDefaults.h:44
APRDefaults::WriteConfig::ContainerNames::Canonical::DataHeader
static constexpr const char * DataHeader
Definition
APRDefaults.h:46
APRDefaults::WriteConfig::ContainerNames::Canonical::MetaData
static constexpr const char * MetaData
Definition
APRDefaults.h:47
APRDefaults::WriteConfig::ContainerNames::Historical
Definition
APRDefaults.h:36
APRDefaults::WriteConfig::ContainerNames::Historical::EventTag
static constexpr const char * EventTag
Definition
APRDefaults.h:38
APRDefaults::WriteConfig::ContainerNames::Historical::DataHeader
static constexpr const char * DataHeader
Definition
APRDefaults.h:39
APRDefaults::WriteConfig::ContainerNames::Historical::MetaData
static constexpr const char * MetaData
Definition
APRDefaults.h:40
APRDefaults::WriteConfig::ContainerNames::Historical::EventData
static constexpr const char * EventData
Definition
APRDefaults.h:37
type
Generated on
for ATLAS Offline Software by
1.17.0