8#include <calibration/CalibObjManager.h>
11#include <boost/algorithm/string/split.hpp>
12#include <boost/algorithm/string/classification.hpp>
17using namespace Calibration;
37 B2DEBUG(100,
"Held object is a TTree which will be have CloneTree() called.");
40 TTree* dest = source->CloneTree(0);
41 dest->SetName(newName.c_str());
61 if (
m_dir->GetDirectory(x.first.c_str()) == 0) {
62 m_dir->mkdir(x.first.c_str());
63 TDirectory* objectDir =
m_dir->GetDirectory(x.first.c_str());
64 objectDir->SetWritable(
true);
65 B2DEBUG(100,
"Made TDirectory: " << x.first);
73 TDirectory* objectDir =
m_dir->GetDirectory(x.first.c_str());
74 string dirName = x.first +
getSuffix(expRun);
75 TDirectory* newDir = objectDir->GetDirectory(dirName.c_str());
77 newDir = objectDir->mkdir(dirName.c_str());
78 newDir->SetWritable(
true);
79 B2DEBUG(100,
"Made TDirectory " << newDir->GetPath());
88 B2DEBUG(100,
"Writing for " << x.first);
89 for (
auto key : * (objectDir->GetList())) {
90 B2DEBUG(100,
"Writing for " << key->GetName());
91 TNamed* objMemory =
dynamic_cast<TNamed*
>(objectDir->FindObject(key->GetName()));
93 objectDir->WriteTObject(objMemory, key->GetName(),
"Overwrite");
103 B2DEBUG(100,
"We are deleting all the in-memory + file objects " << objectDir->GetPath());
104 objectDir->DeleteAll();
110 unsigned int index = 0;
112 for (
auto key : * (dir->GetList())) {
113 string keyName = key->GetName();
114 if (keyName.find(name) != std::string::npos) {
115 B2DEBUG(1000,
"Found previous Object " << keyName <<
" in the directory " << dir->GetPath());
117 if (currentIndex > index) {
118 index = currentIndex;
123 for (
auto key : * (dir->GetListOfKeys())) {
124 string keyName = key->GetName();
125 if (keyName.find(name) != std::string::npos) {
126 B2DEBUG(1000,
"Found previous Key " << keyName <<
" in the directory " << dir->GetPath());
128 if (currentIndex > index) {
129 index = currentIndex;
133 B2DEBUG(1000,
"Returning highest index " << index);
139 return "_" + encodeExpRun(expRun);
156 boost::split(strs, keyName, boost::is_any_of(
"_"));
157 string indexString = strs.back();
158 return stoi(indexString);
static T * cloneObj(T *source, const std::string &newName)
Clone object.
std::map< std::string, std::shared_ptr< TNamed > > m_templateObjects
The objects that we are managing, these are template objects for all future objects for each (Exp,...
TDirectory * m_dir
The TDirectory where all of our managed objects should be found, and where we should create new ones.
void clearCurrentObjects(const Calibration::ExpRun &expRun)
Deletes all in-memory objects in the exprun directories for all the collector objects we know about.
void writeCurrentObjects(const Calibration::ExpRun &expRun)
For each templated object we know about, we find an in memory object for this exprun and write to the...
std::string getObjectExpRunName(const std::string &name, const Calibration::ExpRun &expRun) const
Get object experiment and run name.
unsigned int getHighestIndexObject(const std::string &name, const TDirectory *dir) const
Scans the directory to get the highest "_i" index of an object with this name.
void deleteHeldObjects()
Clears the map of templated objects -> causing their destruction.
void addObject(const std::string &name, std::shared_ptr< TNamed > object)
Add a new object to manage, this is used as a template for creating future/missing objects.
bool isRegistered(const std::string &name) const
Checks for the existence of a name in the templated object map to see if we registered the object.
void createExpRunDirectories(Calibration::ExpRun &expRun) const
For each templated object, we create a new TDirectory for this exprun.
static std::string getSuffix(const Calibration::ExpRun &key)
We rename objects based on the Exp,Run that they contain so we need to generate a nice naming convent...
void createDirectories()
Each object gets its own TDirectory under the main manager directory to store its objects.
static unsigned int extractKeyIndex(const std::string &keyName)
Extract key index.
Abstract base class for different kinds of events.
Struct containing exp number and run number.