Belle II Software  release-05-02-19
Database.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2015-2019 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Thomas Kuhr, Martin Ritter *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 #pragma once
11 
12 #include <framework/database/IntervalOfValidity.h>
13 #include <framework/database/PayloadMetadata.h>
14 #include <framework/database/TestingPayloadStorage.h>
15 #include <framework/database/DBStore.h>
16 #include <framework/utilities/ScopeGuard.h>
17 #include <TClonesArray.h>
18 
19 #include <string>
20 #include <utility>
21 #include <list>
22 #include <memory>
23 
24 class TObject;
25 
26 
27 namespace Belle2 {
32  class EventMetaData;
33  namespace Conditions {
34  class MetadataProvider;
35  class PayloadProvider;
36  }
37 
44  class Database {
45  public:
49  c_PreInit = 0,
53  c_Ready = 2,
54  };
55 
59  static Database& Instance();
60 
69  static void reset(bool keepConfig = false);
70 
75 
79  struct DBImportQuery {
86  explicit DBImportQuery(const std::string& aName, TObject* aObject = nullptr,
87  const IntervalOfValidity& aIov = IntervalOfValidity()): name(aName), object(aObject), iov(aIov) {};
88  std::string name;
89  TObject* object;
91  };
92 
103  std::pair<TObject*, IntervalOfValidity> getData(const EventMetaData& event, const std::string& name);
104 
105 
112  bool getData(const EventMetaData& event, DBQuery& query)
113  {
114  std::vector<DBQuery> container{query};
115  bool found = getData(event, container);
116  query = container[0];
117  return found;
118  }
119 
128  bool getData(const EventMetaData& event, std::vector<DBQuery>& query);
129 
138  bool storeData(const std::string& name, TObject* object, const IntervalOfValidity& iov);
139 
147  bool storeData(TClonesArray* array, const IntervalOfValidity& iov) {return storeData(DataStore::defaultArrayName(array->ClassName()), array, iov);};
148 
156  template<class T> bool storeData(T* object, const IntervalOfValidity& iov) {return storeData(DBStore::objectName<T>(""), object, iov);};
157 
164  bool storeData(std::list<DBImportQuery>& query);
165 
174  bool addPayload(const std::string& name, const std::string& fileName, const IntervalOfValidity& iov)
175  {
177  return m_payloadCreation->storePayload(name, fileName, iov);
178  }
179 
183  static void exposePythonAPI();
184 
190  std::string getGlobalTags();
191 
198 
200  void initialize(const EDatabaseState target = c_Ready);
201 
202  protected:
204  Database() = default;
206  Database(const Database&) = delete;
208  ~Database();
210  void nextMetadataProvider();
212  std::vector<std::string> m_metadataConfigurations;
214  std::vector<std::string> m_globalTags;
216  std::set<std::string> m_usableTagStates;
218  std::unique_ptr<Conditions::MetadataProvider> m_metadataProvider;
220  std::unique_ptr<Conditions::PayloadProvider> m_payloadProvider;
222  std::unique_ptr<Conditions::TestingPayloadStorage> m_payloadCreation;
224  std::vector<Conditions::TestingPayloadStorage> m_testingPayloads;
227  };
229 } // namespace Belle2
Belle2::IntervalOfValidity
A class that describes the interval of experiments/runs for which an object in the database is valid.
Definition: IntervalOfValidity.h:35
Belle2::Database::DBImportQuery::DBImportQuery
DBImportQuery(const std::string &aName, TObject *aObject=nullptr, const IntervalOfValidity &aIov=IntervalOfValidity())
Constructor.
Definition: Database.h:86
Belle2::Database::getGlobalTags
std::string getGlobalTags()
Return the global tags used by the database.
Definition: Database.cc:165
Belle2::Database::storeData
bool storeData(TClonesArray *array, const IntervalOfValidity &iov)
Store an ClonesArray in the database with the default name.
Definition: Database.h:147
Belle2::Database::getData
std::pair< TObject *, IntervalOfValidity > getData(const EventMetaData &event, const std::string &name)
Request an object from the database.
Definition: Database.cc:84
Belle2::Database::c_PreInit
@ c_PreInit
Before any initialization.
Definition: Database.h:49
Belle2::Database::DBImportQuery::object
TObject * object
Pointer to the object.
Definition: Database.h:89
Belle2::Database::exposePythonAPI
static void exposePythonAPI()
Exposes setGlobalTag function of the Database class to Python.
Definition: Database.cc:284
Belle2::ScopeGuard
Simple ScopeGuard to execute a function at the end of the object lifetime.
Definition: ScopeGuard.h:46
Belle2::Database::createScopedUpdateSession
ScopeGuard createScopedUpdateSession()
Make sure we have efficient http pipelinging during initialize/beginRun but don't keep session alive ...
Definition: Database.cc:74
Belle2::Database::storeData
bool storeData(const std::string &name, TObject *object, const IntervalOfValidity &iov)
Store an object in the database.
Definition: Database.cc:152
Belle2::Database::m_payloadCreation
std::unique_ptr< Conditions::TestingPayloadStorage > m_payloadCreation
testing payload storage to create new payloads
Definition: Database.h:222
Belle2::Database::EDatabaseState
EDatabaseState
State of the database.
Definition: Database.h:47
Belle2::Database::reset
static void reset(bool keepConfig=false)
Reset the database instance.
Definition: Database.cc:62
Belle2::Database::m_globalTags
std::vector< std::string > m_globalTags
List of globaltags to be used.
Definition: Database.h:214
Belle2::Database::m_payloadProvider
std::unique_ptr< Conditions::PayloadProvider > m_payloadProvider
The active payload provider.
Definition: Database.h:220
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::Database::DBImportQuery::iov
IntervalOfValidity iov
Interval of validity of the object.
Definition: Database.h:90
Belle2::DataStore::defaultArrayName
static std::string defaultArrayName()
Return the default storage name for an array of the given type.
Definition: DataStore.h:159
Belle2::Database::m_usableTagStates
std::set< std::string > m_usableTagStates
Set of usable globaltag states to be handed to the metadata providers.
Definition: Database.h:216
Belle2::Conditions::PayloadMetadata
Simple struct to group all information necessary for a single payload.
Definition: PayloadMetadata.h:25
Belle2::Database::m_configState
EDatabaseState m_configState
Current configuration state of the database.
Definition: Database.h:226
Belle2::Database::c_InitGlobaltagList
@ c_InitGlobaltagList
Globaltag list has been finalized metadata providers not and globaltags are not checked for usability...
Definition: Database.h:51
Belle2::Database::storeData
bool storeData(T *object, const IntervalOfValidity &iov)
Store an object in the database with the default name.
Definition: Database.h:156
Belle2::Database::getData
bool getData(const EventMetaData &event, DBQuery &query)
Request an object from the database.
Definition: Database.h:112
Belle2::Database::m_metadataProvider
std::unique_ptr< Conditions::MetadataProvider > m_metadataProvider
Currently active metadata provider.
Definition: Database.h:218
Belle2::Database::initialize
void initialize(const EDatabaseState target=c_Ready)
Initialize the database connection settings on first use.
Definition: Database.cc:208
Belle2::Database
Singleton base class for the low-level interface to the database.
Definition: Database.h:44
Belle2::Database::Instance
static Database & Instance()
Instance of a singleton Database.
Definition: Database.cc:54
Belle2::EventMetaData
Store event, run, and experiment numbers.
Definition: EventMetaData.h:43
Belle2::Database::~Database
~Database()
Hidden destructor, as it is a singleton.
Belle2::Database::m_metadataConfigurations
std::vector< std::string > m_metadataConfigurations
List of available metadata providers (which haven't been tried yet)
Definition: Database.h:212
Belle2::Database::DBImportQuery
Struct for bulk write queries.
Definition: Database.h:79
Belle2::Database::c_Ready
@ c_Ready
Everything is ready.
Definition: Database.h:53
Belle2::Database::nextMetadataProvider
void nextMetadataProvider()
Enable the next metadataprovider in the list.
Definition: Database.cc:170
Belle2::Database::DBImportQuery::name
std::string name
identifier of the object
Definition: Database.h:87
Belle2::Database::addPayload
bool addPayload(const std::string &name, const std::string &fileName, const IntervalOfValidity &iov)
Add a payload file to the database.
Definition: Database.h:174
Belle2::Database::Database
Database()=default
Hidden constructor, as it is a singleton.
Belle2::Database::m_testingPayloads
std::vector< Conditions::TestingPayloadStorage > m_testingPayloads
optional list of testing payload storages to look for existing payloads
Definition: Database.h:224