Belle II Software light-2505-deimos
DBImportBase.h
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8#pragma once
9
10#include <framework/database/DBStore.h>
11#include <framework/database/IntervalOfValidity.h>
12
13namespace Belle2 {
18
24 public:
25
30 explicit DBImportBase(const std::string& name): m_name(name) {}
31
35 virtual ~DBImportBase();
36
41 const std::string& getName() const {return m_name;}
42
47 virtual void addEventDependency(unsigned int eventNumber)
48 {
49 addIntraRunDependency(eventNumber, c_Event);
50 }
51
56 virtual void addTimeStampDependency(unsigned long long int timeStamp)
57 {
58 addIntraRunDependency(timeStamp, c_TimeStamp);
59 }
60
65 virtual void addSubrunDependency(int subrun)
66 {
67 addIntraRunDependency(subrun, c_Subrun);
68 }
69
74 bool import(const IntervalOfValidity& iov);
75
79 virtual void clear();
80
81 protected:
82
86 enum EIntraRunDependency { c_None = 0,
87 c_Event = 1,
88 c_TimeStamp = 2,
89 c_Subrun = 3
90 };
91
97 void addIntraRunDependency(unsigned long long int tag, EIntraRunDependency type);
98
99 std::string m_name;
100 TObject* m_object = 0;
101
102 private:
103
109
114 template<class IntraRun> bool import(const IntervalOfValidity& iov)
115 {
116 if (m_objects.empty()) return false;
117 IntraRun intraRun(m_objects[0], false); // IntraRun must not own the objects
118
119 if (m_object) m_objects.push_back(m_object);
120 for (unsigned i = 1; i < m_objects.size(); i++) {
121 intraRun.add(m_tags[i - 1], m_objects[i]);
122 }
123 if (m_object) m_objects.pop_back(); // restore initial state (mandatory!)
124
125 return storeData(&intraRun, iov);
126 }
127
134 bool storeData(TObject* intraRun, const IntervalOfValidity& iov);
135
136
138 std::vector<TObject*> m_objects;
139 std::vector<unsigned long long int> m_tags;
140
141 };
142
143}
virtual void addTimeStampDependency(unsigned long long int timeStamp)
add time stamp dependency
const std::string & getName() const
Returns the name under which the object will be stored in the database.
void addIntraRunDependency(unsigned long long int tag, EIntraRunDependency type)
add intra run dependency
EIntraRunDependency
Intra run dependency types (used only internally)
DBImportBase(const DBImportBase &)
Hidden copy constructor.
virtual void addEventDependency(unsigned int eventNumber)
add event dependency
virtual ~DBImportBase()
Destructor.
std::vector< unsigned long long int > m_tags
container for intra run dep.
DBImportBase(const std::string &name)
Constructor.
bool storeData(TObject *intraRun, const IntervalOfValidity &iov)
Store intra run dependent objects.
std::vector< TObject * > m_objects
container for intra run dependency objects
virtual void addSubrunDependency(int subrun)
add subrun dependency
virtual void clear()
Clear the content, e.g.
std::string m_name
object or array name in database
EIntraRunDependency m_dependency
dependency type
TObject * m_object
pointer to allocated object or array
A class that describes the interval of experiments/runs for which an object in the database is valid.
Abstract base class for different kinds of events.