ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtTabInfo.h
Go to the documentation of this file.
1 #ifndef ATTABINFO_H
2 #define ATTABINFO_H
3 
5 
6 #include <FairRootManager.h>
7 
8 #include <TClonesArray.h>
9 #include <TObject.h> // for TObject
10 #include <TString.h>
11 
12 #include <map>
13 #include <memory> // for allocator
14 #include <string>
15 #include <type_traits> // for enable_if_t, is_base_of
16 
36 
37 public:
38  AtTabInfoBase() = default;
39  virtual ~AtTabInfoBase() = default;
40 
44  virtual std::string GetDefaultName() = 0;
45 };
46 
51 class AtTabInfo : public AtTabInfoBase {
52 public:
53  using BasePtr = std::shared_ptr<AtTabInfoBase>;
54 
55 protected:
56  std::map<std::string, BasePtr> fInfoAugments;
57 
58 public:
59  AtTabInfo() = default;
60  ~AtTabInfo() = default;
61 
62  std::string GetDefaultName() override { return "AtTabInfo"; }
63 
64  void AddAugment(BasePtr augment);
65  void AddAugment(BasePtr augment, std::string name);
66 
67  void ReplaceAugment(BasePtr augment);
68  void ReplaceAugment(BasePtr augment, std::string name);
69 
70  BasePtr GetAugment(std::string name);
71 
73  template <typename T, typename std::enable_if_t<std::is_base_of<AtTabInfoBase, T>::value> * = nullptr>
74  T *GetAugment(std::string name)
75  {
76  return dynamic_cast<T *>(GetAugment(name).get());
77  }
78 };
79 
87 template <typename T>
89 
90 protected:
93  TClonesArray *fArray{nullptr};
94 
95 public:
98 
99  std::string GetDefaultName() override { return T::Class_Name(); }
100 
101  T *GetInfo() { return Get(); }
102  T *Get()
103  {
106  fArray = dynamic_cast<TClonesArray *>(FairRootManager::Instance()->GetObject(fCurrentBranchName));
107  }
108  if (fArray != nullptr && fArray->GetEntries() > 0)
109  return dynamic_cast<T *>(fArray->At(0));
110  return nullptr;
111  }
112  const T *operator->() const { return Get(); }
113  const T &operator*() const { return *Get(); }
114  T *operator->() { return Get(); }
115  T &operator*() { return *Get(); }
116 
117  const DataHandling::AtBranch &GetBranch() const { return fBranchName; }
118 };
119 
120 #endif
AtTabInfoFairRoot::operator->
const T * operator->() const
Definition: AtTabInfo.h:112
AtTabInfo::AtTabInfo
AtTabInfo()=default
AtTabInfo
Contains all the data needed by an AtTab.
Definition: AtTabInfo.h:51
DataHandling::AtBranch
Subject for the branch in the FairRoot tree.
Definition: AtViewerManagerSubject.h:38
AtTabInfoFairRoot::GetBranch
const DataHandling::AtBranch & GetBranch() const
Definition: AtTabInfo.h:117
AtTabInfo::ReplaceAugment
void ReplaceAugment(BasePtr augment)
Definition: AtTabInfo.cxx:32
AtTabInfo::GetAugment
BasePtr GetAugment(std::string name)
Definition: AtTabInfo.cxx:45
AtTabInfoBase::GetDefaultName
virtual std::string GetDefaultName()=0
Default name for info type.
AtTabInfoFairRoot::fBranchName
DataHandling::AtBranch & fBranchName
Definition: AtTabInfo.h:91
AtTabInfoFairRoot::fArray
TClonesArray * fArray
Definition: AtTabInfo.h:93
AtTabInfoFairRoot::~AtTabInfoFairRoot
~AtTabInfoFairRoot()
Definition: AtTabInfo.h:97
AtTabInfo::~AtTabInfo
~AtTabInfo()=default
AtTabInfoFairRoot::Get
T * Get()
Definition: AtTabInfo.h:102
AtViewerManagerSubject.h
AtTabInfoFairRoot::AtTabInfoFairRoot
AtTabInfoFairRoot(DataHandling::AtBranch &branch)
Definition: AtTabInfo.h:96
AtTabInfoBase
Interface for AtTabInfo classes.
Definition: AtTabInfo.h:35
AtTabInfoFairRoot::fCurrentBranchName
TString fCurrentBranchName
Definition: AtTabInfo.h:92
AtTabInfo::AddAugment
void AddAugment(BasePtr augment)
Definition: AtTabInfo.cxx:11
AtTabInfoFairRoot::operator->
T * operator->()
Definition: AtTabInfo.h:114
AtTabInfoFairRoot::GetDefaultName
std::string GetDefaultName() override
Default name for info type.
Definition: AtTabInfo.h:99
AtTabInfo::fInfoAugments
std::map< std::string, BasePtr > fInfoAugments
Definition: AtTabInfo.h:56
AtTabInfoFairRoot
Class for tracking the information from a branch of the FairRoot source tree.
Definition: AtTabInfo.h:88
AtTabInfoBase::~AtTabInfoBase
virtual ~AtTabInfoBase()=default
AtTabInfo::BasePtr
std::shared_ptr< AtTabInfoBase > BasePtr
Definition: AtTabInfo.h:53
AtTabInfoBase::AtTabInfoBase
AtTabInfoBase()=default
AtTabInfoFairRoot::operator*
const T & operator*() const
Definition: AtTabInfo.h:113
AtTabInfo::GetAugment
T * GetAugment(std::string name)
Get Augment cast to anticipated type (which must have the proper base class).
Definition: AtTabInfo.h:74
AtTabInfo::GetDefaultName
std::string GetDefaultName() override
Default name for info type.
Definition: AtTabInfo.h:62
AtTabInfoFairRoot::operator*
T & operator*()
Definition: AtTabInfo.h:115
AtTabInfoFairRoot::GetInfo
T * GetInfo()
Definition: AtTabInfo.h:101
DataHandling::AtBranch::GetBranchName
TString GetBranchName() const
Definition: AtViewerManagerSubject.cxx:32