ATLAS Offline Software
Loading...
Searching...
No Matches
MuonVal::MuonTesterTree Class Reference

#include <MuonTesterTree.h>

Inheritance diagram for MuonVal::MuonTesterTree:

Public Types

using FriendTreePtr = std::shared_ptr<MuonTesterTree>
 Appends the other tester Tree as friend to this instance.

Public Member Functions

 MuonTesterTree (const std::string &tree_name, const std::string &stream)
 ~MuonTesterTree ()
TTree * tree ()
 TTree object.
const TTree * tree () const
TTree * operator-> ()
 Operator to the TTree object.
const TTree * operator-> () const
bool initialized () const
 Has the init method been called and the tree is connected with the output file.
bool fill (const EventContext &ctx)
 Fills the tree per call.
std::string name () const
 Name of the tree.
const std::string & fileStream () const
 file_stream of the analysis to which the tree belongs
const std::string & path () const
 sub directory in the TFile
void setPath (const std::string &new_path)
 Save the TTree in a subfolder of the TFile.
template<class OWNER, typename = typename std::enable_if<std::is_base_of<IProperty, OWNER>::value>::type>
StatusCode init (OWNER *instance)
 Initialize method.
StatusCode write ()
 Finally write the TTree objects.
bool registerBranch (std::shared_ptr< IMuonTesterBranch > branch)
 This method adds the branch to the tree and hands over the ownership to the MuonAnalysisTree instance IF the second argument is set to false the branch is not added to the active list of branches i.e.
bool addBranch (std::shared_ptr< IMuonTesterBranch > branch)
 Branch is added to the tree without transferring the ownership.
bool addBranch (IMuonTesterBranch &branch)
bool addBranch (IMuonTesterBranch *branch)
void removeBranch (IMuonTesterBranch *branch)
 In case instances of a certain branch type are destroyed before hand.
void removeBranch (IMuonTesterBranch &branch)
void disableBranch (const std::string &br_name)
 Skips the branch from being added to the tree.
void disableBranch (const std::vector< std::string > &br_names)
template<class T>
std::shared_ptr< T > getBranch (const std::string &str) const
 Retrieves the branches owned by the muon_tree.
template<typename T>
VectorBranch< T > & newVector (const std::string &name)
 Creates new branches and returns their reference.
template<typename T>
ScalarBranch< T > & newScalar (const std::string &name)
template<typename T>
MatrixBranch< T > & newMatrix (const std::string &name)
template<typename T>
SetBranch< T > & newSet (const std::string &name)
template<typename T>
VectorBranch< T > & newVector (const std::string &name, const T def_val)
 Creates and returns branches with a default value.
template<typename T>
ScalarBranch< T > & newScalar (const std::string &name, const T def_val)
template<typename T>
MatrixBranch< T > & newMatrix (const std::string &name, const T def_val)
template<typename T>
T & newBranch (std::shared_ptr< T > br)
 returns the reference of the branch
bool isActive (const IMuonTesterBranch *branch) const
 Returns a boolean whether the branch is already part of the tree or one of the deligated friends.
bool isCommonTree () const
 Returns Whether the Tree is a common tree or not.
bool addCommonTree (FriendTreePtr common_tree)
const std::vector< FriendTreePtr > & getFriends () const
bool msgLvl (const MSG::Level lvl) const
 Test the output level.
MsgStream & msg () const
 The standard message stream.
MsgStream & msg (const MSG::Level lvl) const
 The standard message stream.
void setLevel (MSG::Level lvl)
 Change the current logging level.

Private Types

using DataDependency = IMuonTesterBranch::DataDependency

Private Member Functions

bool addClient (MuonTesterTree *client)
 Adds the other TTree as a Client and declares this instance as a Common Tree.
StatusCode init (ServiceHandle< ITHistSvc > hist_svc)
 Initialze the tree with the output file.
void initMessaging () const
 Initialize our message level and MessageSvc.

Private Attributes

std::vector< DataDependencym_dependencies {}
unsigned int m_depCounter {0}
std::unique_ptr< TTree > m_tree {nullptr}
std::string m_stream {}
std::string m_path {}
bool m_init {false}
 Flag to avoid double initialization with the StoreGate.
bool m_written {false}
 Flag to indicate whether the TTree is written to the file or not.
std::vector< IMuonTesterBranch * > m_branches_to_init {}
std::vector< std::shared_ptr< IMuonTesterBranch > > m_branches {}
std::set< IMuonTesterBranch * > m_initialized_br {}
 Set of branches that were already initialized.
std::set< std::string > m_excludedBranches {}
TDirectory * m_directory {nullptr}
bool m_filled {false}
ServiceHandle< ITHistSvc > m_hist_svc {"", ""}
std::vector< FriendTreePtrm_friendLinks {}
 List of all other common instances that are acting as friends.
std::set< MuonTesterTree * > m_commonClients {}
 List of all other MuonTesterTree instances using this instance as a common Tree If the Tree has one client it is declared as a common Tree.
std::shared_ptr< EventHashBranchm_hash_br
std::string m_nm
 Message source name.
boost::thread_specific_ptr< MsgStream > m_msg_tls
 MsgStream instance (a std::cout like with print-out levels)
std::atomic< IMessageSvc * > m_imsg { nullptr }
 MessageSvc pointer.
std::atomic< MSG::Level > m_lvl { MSG::NIL }
 Current logging level.
std::atomic_flag m_initialized ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
 Messaging initialized (initMessaging)

Detailed Description

Definition at line 30 of file MuonTesterTree.h.

Member Typedef Documentation

◆ DataDependency

◆ FriendTreePtr

Appends the other tester Tree as friend to this instance.

Definition at line 109 of file MuonTesterTree.h.

Constructor & Destructor Documentation

◆ MuonTesterTree()

MuonVal::MuonTesterTree::MuonTesterTree ( const std::string & tree_name,
const std::string & stream )

Definition at line 267 of file MuonTesterTree.cxx.

267 :
268 AthMessaging{"MuonTesterTree"},
269 m_tree{std::make_unique<TTree>(tree_name.c_str(), "MuonTesterTree")}, m_stream(stream) {}
AthMessaging(IMessageSvc *msgSvc, const std::string &name)
Constructor.
std::unique_ptr< TTree > m_tree

◆ ~MuonTesterTree()

MuonVal::MuonTesterTree::~MuonTesterTree ( )

Definition at line 271 of file MuonTesterTree.cxx.

271 {
272 m_branches_to_init.clear();
273}
std::vector< IMuonTesterBranch * > m_branches_to_init

Member Function Documentation

◆ addBranch() [1/3]

bool MuonVal::MuonTesterTree::addBranch ( IMuonTesterBranch & branch)

Definition at line 62 of file MuonTesterTree.cxx.

62{ return addBranch(&branch); }
bool addBranch(std::shared_ptr< IMuonTesterBranch > branch)
Branch is added to the tree without transferring the ownership.

◆ addBranch() [2/3]

bool MuonVal::MuonTesterTree::addBranch ( IMuonTesterBranch * branch)

Definition at line 63 of file MuonTesterTree.cxx.

63 {
64 if (isActive(branch))
65 return true;
66 else if (!branch) {
67 ATH_MSG_ERROR("Nullptr given");
68 return false;
69 } else if (m_filled) {
70 ATH_MSG_ERROR("Tree structure is already finalized. Cannot add " << branch->name());
71 return false;
72 }
73 if (branch->tree() != tree()) {
74 for (const FriendTreePtr& friend_tree : getFriends()) {
75 if (friend_tree->addBranch(branch)) return true;
76 }
77 return false;
78 }
79 m_branches_to_init.push_back(branch);
80 return true;
81}
#define ATH_MSG_ERROR(x)
const std::vector< FriendTreePtr > & getFriends() const
std::shared_ptr< MuonTesterTree > FriendTreePtr
Appends the other tester Tree as friend to this instance.
bool isActive(const IMuonTesterBranch *branch) const
Returns a boolean whether the branch is already part of the tree or one of the deligated friends.
TTree * tree()
TTree object.

◆ addBranch() [3/3]

bool MuonVal::MuonTesterTree::addBranch ( std::shared_ptr< IMuonTesterBranch > branch)

Branch is added to the tree without transferring the ownership.

Definition at line 61 of file MuonTesterTree.cxx.

61{ return registerBranch(branch) && addBranch(branch.get()); }
bool registerBranch(std::shared_ptr< IMuonTesterBranch > branch)
This method adds the branch to the tree and hands over the ownership to the MuonAnalysisTree instance...

◆ addClient()

bool MuonVal::MuonTesterTree::addClient ( MuonTesterTree * client)
private

Adds the other TTree as a Client and declares this instance as a Common Tree.

Definition at line 225 of file MuonTesterTree.cxx.

225 {
226 if (Gaudi::Concurrency::ConcurrencyFlags::numThreads() > 1) {
227 ATH_MSG_WARNING("Common TTree mechanism only supported in single thread environment");
228 return false;
229 }
230 if (!m_hash_br) {
231 m_hash_br = std::make_shared<EventHashBranch>(tree());
232 if (!addBranch(m_hash_br)) return false;
233 }
234 m_commonClients.insert(client);
235 return true;
236}
#define ATH_MSG_WARNING(x)
std::set< MuonTesterTree * > m_commonClients
List of all other MuonTesterTree instances using this instance as a common Tree If the Tree has one c...
std::shared_ptr< EventHashBranch > m_hash_br

◆ addCommonTree()

bool MuonVal::MuonTesterTree::addCommonTree ( FriendTreePtr common_tree)

Ensure that the event entries are synchronized

Definition at line 237 of file MuonTesterTree.cxx.

237 {
238 if (Gaudi::Concurrency::ConcurrencyFlags::numThreads() > 1) {
239 ATH_MSG_WARNING("Common TTree mechanism only supported in single thread environment");
240 return false;
241 }
242 if (!common_tree) {
243 ATH_MSG_ERROR("Nullptr given");
244 return false;
245 }
246 if (common_tree->fileStream() != fileStream()) {
247 ATH_MSG_ERROR("The common tree "<<common_tree->name()<<" and "<<name()<<" have to be written into the same file");
248 return false;
249 }
250 if (m_commonClients.count(common_tree.get())) {
251 ATH_MSG_ERROR(name()<<" is already a friend of "<<common_tree->name());
252 return false;
253 }
255 if (!m_hash_br) {
256 m_hash_br = std::make_shared<EventHashBranch>(tree());
257 if (!addBranch(m_hash_br)) return false;
258 }
259 m_friendLinks.push_back(common_tree);
260 return common_tree->addClient(this);
261}
std::vector< FriendTreePtr > m_friendLinks
List of all other common instances that are acting as friends.
std::string name() const
Name of the tree.
const std::string & fileStream() const
file_stream of the analysis to which the tree belongs

◆ disableBranch() [1/2]

void MuonVal::MuonTesterTree::disableBranch ( const std::string & br_name)

Skips the branch from being added to the tree.

Definition at line 199 of file MuonTesterTree.cxx.

199 {
200 if (!m_filled) m_excludedBranches.insert(b_name);
201}
std::set< std::string > m_excludedBranches

◆ disableBranch() [2/2]

void MuonVal::MuonTesterTree::disableBranch ( const std::vector< std::string > & br_names)

Definition at line 202 of file MuonTesterTree.cxx.

202 {
203 if (!m_filled) m_excludedBranches.insert(br_names.begin(), br_names.end());
204}

◆ fileStream()

const std::string & MuonVal::MuonTesterTree::fileStream ( ) const

file_stream of the analysis to which the tree belongs

Definition at line 205 of file MuonTesterTree.cxx.

205{ return m_stream; }

◆ fill()

bool MuonVal::MuonTesterTree::fill ( const EventContext & ctx)

Fills the tree per call.

Remove the information that is no longer of value

Common trees arecan only be filled once in an event

Call the fill method on all friends

These branches are actually initialized

Definition at line 89 of file MuonTesterTree.cxx.

89 {
90 if (!initialized()) {
91 ATH_MSG_ERROR("The TTree has not been initialized yet");
92 return false;
93 }
95 if (!m_filled) {
96 m_excludedBranches.clear();
97 m_initialized_br.clear();
98 m_dependencies.clear();
99 }
101 if (isCommonTree() && m_hash_br->is_dumped(ctx)) {
102 return true;
103 }
105 for (const FriendTreePtr& friend_tree : getFriends()){
106 if (!friend_tree->fill(ctx)) return false;
107 }
109 for (auto& branch : m_branches_to_init) {
110 ATH_MSG_VERBOSE("Try to fill "<<branch->name());
111 if (!branch->fill(ctx)) {
112 ATH_MSG_ERROR("fill() --- Failed to fill branch " << branch->name() << " in tree " << name() );
113 return false;
114 }
115 }
116 m_tree->Fill();
117 m_filled = true;
118 return true;
119}
#define ATH_MSG_VERBOSE(x)
bool initialized() const
Has the init method been called and the tree is connected with the output file.
std::vector< DataDependency > m_dependencies
bool isCommonTree() const
Returns Whether the Tree is a common tree or not.
std::set< IMuonTesterBranch * > m_initialized_br
Set of branches that were already initialized.

◆ getBranch()

template<class T>
std::shared_ptr< T > MuonVal::MuonTesterTree::getBranch ( const std::string & str) const

Retrieves the branches owned by the muon_tree.

◆ getFriends()

const std::vector< MuonTesterTree::FriendTreePtr > & MuonVal::MuonTesterTree::getFriends ( ) const

Definition at line 262 of file MuonTesterTree.cxx.

262 {
263 return m_friendLinks;
264}

◆ init() [1/2]

template<class OWNER, typename = typename std::enable_if<std::is_base_of<IProperty, OWNER>::value>::type>
StatusCode MuonVal::MuonTesterTree::init ( OWNER * instance)

Initialize method.

◆ init() [2/2]

StatusCode MuonVal::MuonTesterTree::init ( ServiceHandle< ITHistSvc > hist_svc)
private

Initialze the tree with the output file.

The stream corresponds to the stream of the file e.g MDTTester HighEtaTester

push back the ds id index

Sort by alphabet

Kick everything that is not owned by the class itself

Definition at line 120 of file MuonTesterTree.cxx.

120 {
121 if (fileStream().empty()) {
122 ATH_MSG_ERROR("The file stream of " << name() << " has not been set yet" );
123 return StatusCode::FAILURE;
124 }
125 if (!initialized()) {
126 if (!m_tree) {
127 ATH_MSG_FATAL("No TTree object");
128 return StatusCode::FAILURE;
129 }
131 std::stringstream full_path{};
132 full_path<<"/"<<fileStream()<<"/"<<path()<<(path().empty() ? "" : "/")<<name();
133 if (!hist_svc->regTree(full_path.str(), tree()).isSuccess()) { return StatusCode::FAILURE; }
134 m_directory = m_tree->GetDirectory();
135 if (!m_directory) {
136 ATH_MSG_ERROR("Where is my directory to write later?");
137 return StatusCode::FAILURE;
138 }
139 m_hist_svc = hist_svc;
140 m_init = true;
141 }
142 for (const FriendTreePtr& friend_tree : getFriends()){
143 if (!friend_tree->init(hist_svc).isSuccess()) return StatusCode::FAILURE;
144 }
145
146 Remove(m_branches_to_init, [this](const IMuonTesterBranch* br) {
147 return !br || m_excludedBranches.count(br->name());
148 });
151 [](IMuonTesterBranch* a, IMuonTesterBranch* b) { return a->name() < b->name(); });
152 for (IMuonTesterBranch* branch : m_branches_to_init) {
153 if (m_initialized_br.count(branch)) {
154 ATH_MSG_VERBOSE("Do not count the initialize function on "<<branch->name()<<" twice.");
155 continue;
156 }
157 if (!branch->init()) {
158 ATH_MSG_ERROR("Failed to initialize branch " << branch->name());
159 return StatusCode::FAILURE;
160 }
161 ATH_MSG_DEBUG(" Branch " << branch->name() << " has been initialized");
162 std::vector<DataDependency> data_dep = branch->data_dependencies();
163 for (const DataDependency& data : data_dep) {
164 m_dependencies.emplace_back(data);
165 }
166 m_initialized_br.insert(branch);
167 }
169 Remove(m_branches_to_init, [this](const IMuonTesterBranch* br) {
170 return std::find_if(m_branches.begin(), m_branches.end(),
171 [br](const std::shared_ptr<IMuonTesterBranch>& owned) {
172 return owned.get() == br; }) == m_branches.end();
173 });
174 ATH_MSG_INFO("Initialization of "<<name()<<" successfully completed");
175 return StatusCode::SUCCESS;
176}
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
static Double_t a
static const Attributes_t empty
bool m_init
Flag to avoid double initialization with the StoreGate.
IMuonTesterBranch::DataDependency DataDependency
std::vector< std::shared_ptr< IMuonTesterBranch > > m_branches
ServiceHandle< ITHistSvc > m_hist_svc
const std::string & path() const
sub directory in the TFile
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.

◆ initialized()

bool MuonVal::MuonTesterTree::initialized ( ) const

Has the init method been called and the tree is connected with the output file.

Definition at line 88 of file MuonTesterTree.cxx.

88{ return m_init; }

◆ initMessaging()

void AthMessaging::initMessaging ( ) const
privateinherited

Initialize our message level and MessageSvc.

This method should only be called once.

Definition at line 39 of file AthMessaging.cxx.

40{
42 // If user did not set an explicit level, set a default
43 if (m_lvl == MSG::NIL) {
44 m_lvl = m_imsg ?
45 static_cast<MSG::Level>( m_imsg.load()->outputLevel(m_nm) ) :
46 MSG::INFO;
47 }
48}
std::string m_nm
Message source name.
std::atomic< IMessageSvc * > m_imsg
MessageSvc pointer.
std::atomic< MSG::Level > m_lvl
Current logging level.
IMessageSvc * getMessageSvc(bool quiet=false)

◆ isActive()

bool MuonVal::MuonTesterTree::isActive ( const IMuonTesterBranch * branch) const

Returns a boolean whether the branch is already part of the tree or one of the deligated friends.

Definition at line 206 of file MuonTesterTree.cxx.

206 {
207 if (!branch) {
208 ATH_MSG_ERROR("Nullptr was given");
209 return false;
210 }
211 if (branch->tree() != tree()) {
212 for (const FriendTreePtr& friend_tree : getFriends()){
213 if (friend_tree->isActive(branch)) return true;
214 }
215 return false;
216 }
217 return std::find_if(m_branches_to_init.begin(), m_branches_to_init.end(),
218 [&branch](const IMuonTesterBranch* known) {
219 return known == branch || known->name() == branch->name();
220 }) != m_branches_to_init.end();
221}

◆ isCommonTree()

bool MuonVal::MuonTesterTree::isCommonTree ( ) const

Returns Whether the Tree is a common tree or not.

Definition at line 265 of file MuonTesterTree.cxx.

265{return !m_commonClients.empty(); }

◆ msg() [1/2]

MsgStream & AthMessaging::msg ( ) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 163 of file AthMessaging.h.

164{
165 MsgStream* ms = m_msg_tls.get();
166 if (!ms) {
167 if (!m_initialized.test_and_set()) initMessaging();
168 ms = new MsgStream(m_imsg,m_nm);
169 m_msg_tls.reset( ms );
170 }
171
172 ms->setLevel (m_lvl);
173 return *ms;
174}
boost::thread_specific_ptr< MsgStream > m_msg_tls
MsgStream instance (a std::cout like with print-out levels)
void initMessaging() const
Initialize our message level and MessageSvc.

◆ msg() [2/2]

MsgStream & AthMessaging::msg ( const MSG::Level lvl) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 178 of file AthMessaging.h.

179{ return msg() << lvl; }
MsgStream & msg() const
The standard message stream.

◆ msgLvl()

bool AthMessaging::msgLvl ( const MSG::Level lvl) const
inlineinherited

Test the output level.

Parameters
lvlThe message level to test against
Returns
boolean Indicating if messages at given level will be printed
Return values
trueMessages at level "lvl" will be printed

Definition at line 151 of file AthMessaging.h.

152{
153 if (m_lvl <= lvl) {
154 msg() << lvl;
155 return true;
156 } else {
157 return false;
158 }
159}

◆ name()

std::string MuonVal::MuonTesterTree::name ( ) const

Name of the tree.

Definition at line 20 of file MuonTesterTree.cxx.

20{ return m_tree->GetName(); }

◆ newBranch()

template<typename T>
T & MuonVal::MuonTesterTree::newBranch ( std::shared_ptr< T > br)

returns the reference of the branch

◆ newMatrix() [1/2]

template<typename T>
MatrixBranch< T > & MuonVal::MuonTesterTree::newMatrix ( const std::string & name)

◆ newMatrix() [2/2]

template<typename T>
MatrixBranch< T > & MuonVal::MuonTesterTree::newMatrix ( const std::string & name,
const T def_val )

◆ newScalar() [1/2]

template<typename T>
ScalarBranch< T > & MuonVal::MuonTesterTree::newScalar ( const std::string & name)

◆ newScalar() [2/2]

template<typename T>
ScalarBranch< T > & MuonVal::MuonTesterTree::newScalar ( const std::string & name,
const T def_val )

◆ newSet()

template<typename T>
SetBranch< T > & MuonVal::MuonTesterTree::newSet ( const std::string & name)

◆ newVector() [1/2]

template<typename T>
VectorBranch< T > & MuonVal::MuonTesterTree::newVector ( const std::string & name)

Creates new branches and returns their reference.

◆ newVector() [2/2]

template<typename T>
VectorBranch< T > & MuonVal::MuonTesterTree::newVector ( const std::string & name,
const T def_val )

Creates and returns branches with a default value.

◆ operator->() [1/2]

TTree * MuonVal::MuonTesterTree::operator-> ( )

Operator to the TTree object.

Definition at line 23 of file MuonTesterTree.cxx.

23{ return m_tree.get(); }

◆ operator->() [2/2]

const TTree * MuonVal::MuonTesterTree::operator-> ( ) const

Definition at line 25 of file MuonTesterTree.cxx.

25{ return m_tree.get(); }

◆ path()

const std::string & MuonVal::MuonTesterTree::path ( ) const

sub directory in the TFile

Definition at line 223 of file MuonTesterTree.cxx.

223{ return m_path; }

◆ registerBranch()

bool MuonVal::MuonTesterTree::registerBranch ( std::shared_ptr< IMuonTesterBranch > branch)

This method adds the branch to the tree and hands over the ownership to the MuonAnalysisTree instance IF the second argument is set to false the branch is not added to the active list of branches i.e.

no fill and initialize function is called on it

Check whether the branch belongs to the same TTree

Definition at line 28 of file MuonTesterTree.cxx.

28 {
29 if (!branch) {
30 ATH_MSG_ERROR("Nullptr given");
31 return false;
32 }
34 if (branch->tree() != tree()) {
35 for (const FriendTreePtr& friend_tree : getFriends()){
36 if (friend_tree->registerBranch(branch)) {
37 m_branches.push_back(std::move(branch));
38 return true;
39 }
40 }
41 return false;
42 }
43 std::vector<std::shared_ptr<IMuonTesterBranch>>::const_iterator itr = std::find_if(
44 m_branches.begin(), m_branches.end(),
45 [&branch](const std::shared_ptr<IMuonTesterBranch>& known) {
46 return known == branch || known->name() == branch->name();
47 });
48 if (itr != m_branches.end()) {
49 if (typeid((*itr).get()) != typeid(branch.get())) {
50 ATH_MSG_FATAL("Different branches have been added here under " << branch->name());
51 return false;
52 }
53 return true;
54 } else if (m_filled) {
55 ATH_MSG_FATAL("Tree structure is already finalized");
56 return false;
57 }
58 m_branches.push_back(std::move(branch));
59 return true;
60}

◆ removeBranch() [1/2]

void MuonVal::MuonTesterTree::removeBranch ( IMuonTesterBranch & branch)

Definition at line 86 of file MuonTesterTree.cxx.

86{ removeBranch(&branch); }
void removeBranch(IMuonTesterBranch *branch)
In case instances of a certain branch type are destroyed before hand.

◆ removeBranch() [2/2]

void MuonVal::MuonTesterTree::removeBranch ( IMuonTesterBranch * branch)

In case instances of a certain branch type are destroyed before hand.

Definition at line 83 of file MuonTesterTree.cxx.

83 {
84 Remove(m_branches_to_init, [branch](const IMuonTesterBranch* br) { return br == branch; });
85}

◆ setLevel()

void AthMessaging::setLevel ( MSG::Level lvl)
inherited

Change the current logging level.

Use this rather than msg().setLevel() for proper operation with MT.

Definition at line 28 of file AthMessaging.cxx.

29{
30 m_lvl = lvl;
31}

◆ setPath()

void MuonVal::MuonTesterTree::setPath ( const std::string & new_path)

Save the TTree in a subfolder of the TFile.

Definition at line 222 of file MuonTesterTree.cxx.

222{ m_path = new_path; }

◆ tree() [1/2]

TTree * MuonVal::MuonTesterTree::tree ( )

TTree object.

Definition at line 22 of file MuonTesterTree.cxx.

22{ return m_tree.get(); }

◆ tree() [2/2]

const TTree * MuonVal::MuonTesterTree::tree ( ) const

Definition at line 24 of file MuonTesterTree.cxx.

24{ return m_tree.get(); }

◆ write()

StatusCode MuonVal::MuonTesterTree::write ( )

Finally write the TTree objects.

Definition at line 178 of file MuonTesterTree.cxx.

178 {
179 if (!initialized() || !m_tree || m_written) { return StatusCode::SUCCESS; }
180 if (!m_hist_svc->deReg(tree()).isSuccess()) {
181 ATH_MSG_ERROR(__func__<<"() --- Failed to put the tree "<<name()<<" out of the HistService");
182 return StatusCode::FAILURE;
183 }
184 for (const FriendTreePtr& friend_tree : getFriends()) {
185 if (!friend_tree->write().isSuccess()) return StatusCode::FAILURE;
186 if (!tree()->AddFriend(friend_tree->tree())) {
187 ATH_MSG_ERROR("Failed to establish the Friendship between "<<name()<<" & "<<friend_tree->tree());
188 return StatusCode::FAILURE;
189 }
190 }
191 m_directory->WriteObject(tree(), tree()->GetName(), "overwrite");
192 if (!isCommonTree()) m_tree.reset();
193 m_branches_to_init.clear();
194 m_branches.clear();
195 m_friendLinks.clear();
196 m_written = true;
197 return StatusCode::SUCCESS;
198}
bool m_written
Flag to indicate whether the TTree is written to the file or not.

Member Data Documentation

◆ ATLAS_THREAD_SAFE

std::atomic_flag m_initialized AthMessaging::ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
mutableprivateinherited

Messaging initialized (initMessaging)

Definition at line 141 of file AthMessaging.h.

◆ m_branches

std::vector<std::shared_ptr<IMuonTesterBranch> > MuonVal::MuonTesterTree::m_branches {}
private

Definition at line 145 of file MuonTesterTree.h.

145{};

◆ m_branches_to_init

std::vector<IMuonTesterBranch*> MuonVal::MuonTesterTree::m_branches_to_init {}
private

Definition at line 143 of file MuonTesterTree.h.

143{};

◆ m_commonClients

std::set<MuonTesterTree*> MuonVal::MuonTesterTree::m_commonClients {}
private

List of all other MuonTesterTree instances using this instance as a common Tree If the Tree has one client it is declared as a common Tree.

It can then only be filled once in an event

Definition at line 160 of file MuonTesterTree.h.

160{};

◆ m_depCounter

unsigned int MuonVal::MuonTesterTree::m_depCounter {0}
private

Definition at line 125 of file MuonTesterTree.h.

125{0};

◆ m_dependencies

std::vector<DataDependency> MuonVal::MuonTesterTree::m_dependencies {}
private

Definition at line 124 of file MuonTesterTree.h.

124{};

◆ m_directory

TDirectory* MuonVal::MuonTesterTree::m_directory {nullptr}
private

Definition at line 151 of file MuonTesterTree.h.

151{nullptr};

◆ m_excludedBranches

std::set<std::string> MuonVal::MuonTesterTree::m_excludedBranches {}
private

Definition at line 149 of file MuonTesterTree.h.

149{};

◆ m_filled

bool MuonVal::MuonTesterTree::m_filled {false}
private

Definition at line 152 of file MuonTesterTree.h.

152{false};

◆ m_friendLinks

std::vector<FriendTreePtr> MuonVal::MuonTesterTree::m_friendLinks {}
private

List of all other common instances that are acting as friends.

Definition at line 156 of file MuonTesterTree.h.

156{};

◆ m_hash_br

std::shared_ptr<EventHashBranch> MuonVal::MuonTesterTree::m_hash_br
private

Definition at line 162 of file MuonTesterTree.h.

◆ m_hist_svc

ServiceHandle<ITHistSvc> MuonVal::MuonTesterTree::m_hist_svc {"", ""}
private

Definition at line 153 of file MuonTesterTree.h.

153{"", ""};

◆ m_imsg

std::atomic<IMessageSvc*> AthMessaging::m_imsg { nullptr }
mutableprivateinherited

MessageSvc pointer.

Definition at line 135 of file AthMessaging.h.

135{ nullptr };

◆ m_init

bool MuonVal::MuonTesterTree::m_init {false}
private

Flag to avoid double initialization with the StoreGate.

Definition at line 131 of file MuonTesterTree.h.

131{false};

◆ m_initialized_br

std::set<IMuonTesterBranch*> MuonVal::MuonTesterTree::m_initialized_br {}
private

Set of branches that were already initialized.

Definition at line 147 of file MuonTesterTree.h.

147{};

◆ m_lvl

std::atomic<MSG::Level> AthMessaging::m_lvl { MSG::NIL }
mutableprivateinherited

Current logging level.

Definition at line 138 of file AthMessaging.h.

138{ MSG::NIL };

◆ m_msg_tls

boost::thread_specific_ptr<MsgStream> AthMessaging::m_msg_tls
mutableprivateinherited

MsgStream instance (a std::cout like with print-out levels)

Definition at line 132 of file AthMessaging.h.

◆ m_nm

std::string AthMessaging::m_nm
privateinherited

Message source name.

Definition at line 129 of file AthMessaging.h.

◆ m_path

std::string MuonVal::MuonTesterTree::m_path {}
private

Definition at line 129 of file MuonTesterTree.h.

129{};

◆ m_stream

std::string MuonVal::MuonTesterTree::m_stream {}
private

Definition at line 128 of file MuonTesterTree.h.

128{};

◆ m_tree

std::unique_ptr<TTree> MuonVal::MuonTesterTree::m_tree {nullptr}
private

Definition at line 127 of file MuonTesterTree.h.

127{nullptr};

◆ m_written

bool MuonVal::MuonTesterTree::m_written {false}
private

Flag to indicate whether the TTree is written to the file or not.

Definition at line 133 of file MuonTesterTree.h.

133{false};

The documentation for this class was generated from the following files: