1#ifndef __JROOT__JMANAGER__ 
    2#define __JROOT__JMANAGER__ 
   28namespace JPP { 
using namespace JROOT; }
 
   43  template<
class JKey_t, 
class JValue_t>
 
   46    public std::map<JKey_t, JPointer<JValue_t>>
 
   86      if (
string(this->
get()->GetName()).find(
wc) == string::npos) {
 
 
  109             const std::string& name,
 
  111             std::ios::fmtflags format   = std::ios::fmtflags()) : 
 
  124      this->
get()->SetName(name.c_str());
 
  126      if (
string(this->
get()->GetName()).find(
wc) == string::npos) {
 
 
  154        this->set((JValue_t*) manager.get()->Clone());
 
  158        resetObject(this->get(), true);
 
 
  168      for (
typename map_type::iterator i = this->begin(); i != this->end(); ++i) {
 
 
  187      typename map_type::iterator i = this->find(key);
 
  189      if (i == this->end()) {
 
  191        string            buffer = this->
get()->GetName();
 
  192        string::size_type ipos   = buffer.find(
wc);
 
  200        buffer.replace(ipos, 1, os.str());
 
  202        JValue_t* p = (JValue_t*) this->
get()->Clone(buffer.c_str());
 
  208        this->insert(make_pair(key,p));
 
 
  227    static JManager Read(TDirectory& in, 
const char* 
const master, 
const char wildcard)
 
  234      TString buffer = master;
 
  236      const Ssiz_t  pos = buffer.Index(wildcard);
 
  238      const TString a   = buffer(0,     pos); 
 
  239      const TString b   = buffer(pos+1, buffer.Length()); 
 
  241      buffer.ReplaceAll(
"[", 
"\\[");
 
  242      buffer.ReplaceAll(
"]", 
"\\]");
 
  244      buffer.ReplaceAll(wildcard, 
".*");
 
  246      const TRegexp regexp(buffer);
 
  248      TIter iter(in.GetListOfKeys());
 
  250      for (TKey* key; (key = (TKey*) iter.Next()) != NULL; ) {
 
  252        const TString tag(key->GetName());
 
  256        if (tag.Index(regexp) != -1) {
 
  258          JValue_t* p = 
dynamic_cast<JValue_t*
>(key->ReadObj());
 
  264            string buffer = p->GetName();
 
  266            if (a.Length() != 0) { buffer.replace(buffer.find(a), a.Length(), 
""); }
 
  267            if (b.Length() != 0) { buffer.replace(buffer.find(b), b.Length(), 
""); }
 
  271            istringstream(buffer) >> key;
 
  273            manager.insert(make_pair(key, p));
 
 
  304    void Write(TDirectory& out, 
const bool wm = 
false)
 
  306      for (
typename map_type::iterator i = this->begin(); i != this->end(); ++i) {
 
  307        out.WriteTObject(i->second);
 
  311        out.WriteTObject(this->
get());
 
 
  322    void Write(
const char* file_name, 
const bool wm = 
false)
 
  324      TFile out(file_name, 
"RECREATE");
 
  326      this->
Write(out, wm) ;
 
 
 
  393  template<
class JKey_t, 
class JValue_t>
 
  396    if (object->is_valid()) {
 
 
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
 
bool is_valid() const
Check validity of pointer.
 
Template implementation of class that holds pointer to object(s).
 
virtual JClass_t * get() const override
Get pointer.
 
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys.
 
JManager(const JManager &manager)
Copy constructor.
 
static void detach(TH1 *p)
Implementation for detaching of object pointed to from ROOT I/O.
 
JPointer< JValue_t > ptr_type
 
void Read(TDirectory &in)
Read objects from file.
 
JValue_t * operator[](JKey_t key)
Get pointer to object for given key.
 
static JManager Read(TDirectory &in, const char *const master, const char wildcard)
Read objects from file into manager.
 
JManager(JValue_t *master, char wildcard='%', JFormat_t format=JFormat_t())
Constructor.
 
friend TFile & operator>>(TFile &file, JManager &object)
Read manager from file.
 
std::map< JKey_t, ptr_type > map_type
 
friend TFile & operator<<(TFile &file, JManager &object)
Write manager to file.
 
JManager()
Default constructor.
 
void Write(TDirectory &out, const bool wm=false)
Write objects to file.
 
JManager(JValue_t *master, const std::string &name, char wildcard='%', std::ios::fmtflags format=std::ios::fmtflags())
Constructor.
 
void Write(const char *file_name, const bool wm=false)
Write objects to file.
 
void clear()
Clear client objects.
 
static void detach(...)
Fall back for detaching object pointed to from ROOT I/O.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
Auxiliary classes and methods for ROOT I/O.
 
void resetObject(JManager< JKey_t, JValue_t > *object, const bool reset=false)
Reset JManager object.