ATLAS Offline Software
Loading...
Searching...
No Matches
UnitTestAlg1.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 UnitTestAlg1 ::
42 testInvariant () const
43 {
44 RCU_INVARIANT (this != 0);
45 }
46
47
48
49 UnitTestAlg1 ::
50 UnitTestAlg1 (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 UnitTestAlg1 ::
65 setupJob (Job& job)
66 {
68
69 if (makeOutput)
70 {
71 OutputStream out ("out");
72 job.outputAdd (out);
73 }
74 {
75 OutputStream out ("out_empty");
76 job.outputAdd (out);
77 }
78 return StatusCode::SUCCESS;
79 }
80
81
82
83 StatusCode UnitTestAlg1 ::
84 changeInput (bool firstFile)
85 {
87
88 if (firstFile)
89 getCallbacks()->Fill (CB_CHANGE_INPUT_FIRST);
90 else
91 getCallbacks()->Fill (CB_CHANGE_INPUT_OTHER);
92
93 RCU_ASSERT (wk()->tree() != 0);
94 m_branch = wk()->tree()->GetBranch (m_name.c_str());
95 if (m_branch == 0)
96 RCU_THROW_MSG ("failed to find branch " + m_name);
97 m_branch->SetAddress (&m_value);
98 RCU_ASSERT_SOFT (firstFile == m_fileName.empty());
99 m_fileName = wk()->inputFile()->GetName();
100 return StatusCode::SUCCESS;
101 }
102
103
104
105 StatusCode UnitTestAlg1 ::
106 histInitialize ()
107 {
109
110 getCallbacks()->Fill (CB_HIST_INITIALIZE);
111
112 RCU_ASSERT_SOFT (!m_hasHistInitialize);
113
114 book (TH1F ((m_name + "2").c_str(), m_name.c_str(), 50, 0, 50));
115 book (TH1F ("file_executes", "file executes", 1, 0, 1));
116 m_hasHistInitialize = true;
117 return StatusCode::SUCCESS;
118 }
119
120
121
122 StatusCode UnitTestAlg1 ::
123 initialize ()
124 {
126
127 getCallbacks()->Fill (CB_INITIALIZE);
128
129 RCU_ASSERT_SOFT (m_hasHistInitialize);
130 RCU_ASSERT_SOFT (!m_hasInitialize);
131
132 RCU_ASSERT_SOFT (wk()->tree()->GetEntries() > wk()->treeEntry());
133 RCU_ASSERT_SOFT (m_fileName == wk()->inputFile()->GetName());
134
135 // if (wk()->metaData()->castDouble ("jobOpt") != 42)
136 // RCU_THROW_MSG ("failed to read meta-data from job options");
137
138 // if (wk()->metaData()->castString ("mymeta") != "test")
139 // RCU_THROW_MSG ("failed to read meta-data from worker");
140
141 wk()->addOutput (/*m_hist = */new TH1F (m_name.c_str(), m_name.c_str(),
142 50, 0, 50));
143 if (makeOutput)
144 {
145 TFile *file = wk()->getOutputFile ("out");
146 m_tree = new TTree ("tree", "test output");
147 m_tree->SetDirectory (file);
148 m_tree->Branch (m_name.c_str(), &m_value, (m_name + "/I").c_str());
149 }
150 m_hasInitialize = true;
151 return StatusCode::SUCCESS;
152 }
153
154
155
156 StatusCode UnitTestAlg1 ::
157 fileExecute ()
158 {
160
161 getCallbacks()->Fill (CB_FILE_EXECUTE);
162
163 RCU_ASSERT_SOFT (m_hasHistInitialize);
164 hist ("file_executes")->Fill (0);
165 return StatusCode::SUCCESS;
166 }
167
168
169
170 StatusCode UnitTestAlg1 ::
171 execute ()
172 {
174
175 getCallbacks()->Fill (CB_EXECUTE);
176
177 RCU_ASSERT_SOFT (m_hasInitialize);
178
179 m_branch->GetEntry (wk()->treeEntry());
180 hist(m_name)->Fill (m_value);
181 if (makeOutput)
182 m_tree->Fill ();
183
184 setMsgLevel (MSG::INFO);
185 if (++ m_calls < 3)
186 ATH_MSG_INFO ("message test");
187
188 return StatusCode::SUCCESS;
189 }
190
191
192
193 StatusCode UnitTestAlg1 ::
194 finalize ()
195 {
197
198 getCallbacks()->Fill (CB_FINALIZE);
199
200 RCU_ASSERT_SOFT (m_hasInitialize);
201 wk()->addOutput (new TH1F ("beta/dir/hist", "directory test", 10, 0, 10));
202 wk()->addOutputList ("alpha", new TObjString ("alpha"));
203 return StatusCode::SUCCESS;
204 }
205
206
207
208 StatusCode UnitTestAlg1 ::
209 histFinalize ()
210 {
212
213 getCallbacks()->Fill (CB_HIST_FINALIZE);
214
215 RCU_ASSERT_SOFT (m_hasHistInitialize);
216 wk()->addOutput (new TH1F ("beta/dir/hist", "directory test", 10, 0, 10));
217 wk()->addOutputList ("alpha", new TObjString ("alpha"));
218 return StatusCode::SUCCESS;
219 }
220
221
222
223 TH1 *UnitTestAlg1 ::
224 getCallbacks ()
225 {
226 if (m_callbacks == nullptr)
227 {
228 m_callbacks = new TH1F ("callbacks", "callbacks", CB_HIST_FINALIZE + 1,
229 0, CB_HIST_FINALIZE + 1);
230 wk()->addOutput (m_callbacks);
231 }
232 return m_callbacks;
233 }
234}
#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::UnitTestAlg1) namespace EL
This module defines the arguments passed from the BATCH driver to the BATCH worker.
TChain * tree
TFile * file