ATLAS Offline Software
Loading...
Searching...
No Matches
UnitTestAlg.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3*/
4
5//
6// Distributed under the Boost Software License, Version 1.0.
7// (See accompanying file LICENSE_1_0.txt or copy at
8// http://www.boost.org/LICENSE_1_0.txt)
9
10// Please feel free to contact me (krumnack@iastate.edu) for bug
11// reports, feature suggestions, praise and complaints.
12
13
14//
15// includes
16//
17
19
20#include <EventLoop/Job.h>
22#include <EventLoop/Worker.h>
25#include <TFile.h>
26#include <TH1.h>
27#include <TTree.h>
28#include <TObjString.h>
29
32
33//
34// method implementations
35//
36
38
39namespace EL
40{
41 void UnitTestAlg ::
42 testInvariant () const
43 {
44 RCU_INVARIANT (this != 0);
45 }
46
47
48
49 UnitTestAlg ::
50 UnitTestAlg (const std::string& branchName)
51 : makeOutput (true),
52 m_name (branchName),
53 m_branch (0),
54 m_value (0),// m_hist (0),
55 m_tree (0),
56 m_hasInitialize (false),
57 m_hasHistInitialize (false)
58 {
59 RCU_NEW_INVARIANT (this);
60 }
61
62
63
64 StatusCode UnitTestAlg ::
65 setupJob (Job& job)
66 {
68
69 if (makeOutput)
70 {
71 OutputStream out ("out");
72 job.outputAdd (out);
73 }
74 return StatusCode::SUCCESS;
75 }
76
77
78
79 StatusCode UnitTestAlg ::
80 changeInput (bool firstFile)
81 {
83
84 RCU_ASSERT (wk()->tree() != 0);
85 m_branch = wk()->tree()->GetBranch (m_name.c_str());
86 if (m_branch == 0)
87 RCU_THROW_MSG ("failed to find branch " + m_name);
88 m_branch->SetAddress (&m_value);
89 RCU_ASSERT_SOFT (firstFile == m_fileName.empty());
90 m_fileName = wk()->inputFile()->GetName();
91 return StatusCode::SUCCESS;
92 }
93
94
95
96 StatusCode UnitTestAlg ::
97 histInitialize ()
98 {
100
101 RCU_ASSERT_SOFT (!m_hasHistInitialize);
102
103 book (TH1F ((m_name + "2").c_str(), m_name.c_str(), 50, 0, 50));
104 book (TH1F ("file_executes", "file executes", 1, 0, 1));
105 m_hasHistInitialize = true;
106 return StatusCode::SUCCESS;
107 }
108
109
110
111 StatusCode UnitTestAlg ::
112 initialize ()
113 {
115
116 RCU_ASSERT_SOFT (m_hasHistInitialize);
117 RCU_ASSERT_SOFT (!m_hasInitialize);
118
119 RCU_ASSERT_SOFT (wk()->tree()->GetEntries() > wk()->treeEntry());
120 RCU_ASSERT_SOFT (m_fileName == wk()->inputFile()->GetName());
121
122 if (wk()->metaData()->castDouble ("jobOpt") != 42)
123 RCU_THROW_MSG ("failed to read meta-data from job options");
124
125 if (wk()->metaData()->castString ("mymeta") != "test")
126 RCU_THROW_MSG ("failed to read meta-data from worker");
127
128 wk()->addOutput (/*m_hist = */new TH1F (m_name.c_str(), m_name.c_str(),
129 50, 0, 50));
130 if (makeOutput)
131 {
132 TFile *file = wk()->getOutputFile ("out");
133 m_tree = new TTree ("tree", "test output");
134 m_tree->SetDirectory (file);
135 m_tree->Branch (m_name.c_str(), &m_value, (m_name + "/I").c_str());
136 }
137 m_hasInitialize = true;
138 return StatusCode::SUCCESS;
139 }
140
141
142
143 StatusCode UnitTestAlg ::
144 fileExecute ()
145 {
147
148 RCU_ASSERT_SOFT (m_hasHistInitialize);
149 hist ("file_executes")->Fill (0);
150 return StatusCode::SUCCESS;
151 }
152
153
154
155 StatusCode UnitTestAlg ::
156 execute ()
157 {
159
160 RCU_ASSERT_SOFT (m_hasInitialize);
161
162 m_branch->GetEntry (wk()->treeEntry());
163 hist(m_name)->Fill (m_value);
164 if (makeOutput)
165 m_tree->Fill ();
166
167 setMsgLevel (MSG::INFO);
168 if (++ m_calls < 3)
169 ATH_MSG_INFO ("message test");
170
171 return StatusCode::SUCCESS;
172 }
173
174
175
176 StatusCode UnitTestAlg ::
177 finalize ()
178 {
180 RCU_ASSERT_SOFT (m_hasInitialize);
181 wk()->addOutput (new TH1F ("beta/dir/hist", "directory test", 10, 0, 10));
182 wk()->addOutputList ("alpha", new TObjString ("alpha"));
183 return StatusCode::SUCCESS;
184 }
185
186
187
188 StatusCode UnitTestAlg ::
189 histFinalize ()
190 {
192 RCU_ASSERT_SOFT (m_hasHistInitialize);
193 wk()->addOutput (new TH1F ("beta/dir/hist", "directory test", 10, 0, 10));
194 wk()->addOutputList ("alpha", new TObjString ("alpha"));
195 return StatusCode::SUCCESS;
196 }
197}
#define RCU_INVARIANT(x)
Definition Assert.h:201
#define RCU_ASSERT(x)
Definition Assert.h:222
#define RCU_CHANGE_INVARIANT(x)
Definition Assert.h:231
#define RCU_NEW_INVARIANT(x)
Definition Assert.h:233
#define RCU_ASSERT_SOFT(x)
Definition Assert.h:167
#define ATH_MSG_INFO(x)
#define RCU_THROW_MSG(message)
Definition PrintMsg.h:58
TGraphErrors * GetEntries(TH2F *histo)
ClassImp(EL::UnitTestAlg) namespace EL
This module defines the arguments passed from the BATCH driver to the BATCH worker.
TChain * tree
TFile * file