ATLAS Offline Software
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>
21 #include <EventLoop/OutputStream.h>
22 #include <EventLoop/Worker.h>
23 #include <RootCoreUtils/Assert.h>
24 #include <RootCoreUtils/ThrowMsg.h>
25 #include <TFile.h>
26 #include <TH1.h>
27 #include <TTree.h>
28 #include <TObjString.h>
29 
30 #include <AsgMessaging/MsgStream.h>
32 
33 //
34 // method implementations
35 //
36 
38 
39 namespace EL
40 {
41  void UnitTestAlg ::
42  testInvariant () const
43  {
44  RCU_INVARIANT (this != 0);
45  }
46 
47 
48 
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 
65  setupJob (Job& job)
66  {
67  RCU_CHANGE_INVARIANT (this);
68 
69  if (makeOutput)
70  {
71  OutputStream out ("out");
72  job.outputAdd (out);
73  }
74  return StatusCode::SUCCESS;
75  }
76 
77 
78 
80  changeInput (bool firstFile)
81  {
82  RCU_CHANGE_INVARIANT (this);
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 
98  {
99  RCU_CHANGE_INVARIANT (this);
100 
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 
112  initialize ()
113  {
114  RCU_CHANGE_INVARIANT (this);
115 
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 
144  fileExecute ()
145  {
146  RCU_CHANGE_INVARIANT (this);
147 
149  hist ("file_executes")->Fill (0);
150  return StatusCode::SUCCESS;
151  }
152 
153 
154 
156  execute ()
157  {
158  RCU_CHANGE_INVARIANT (this);
159 
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 
177  finalize ()
178  {
179  RCU_CHANGE_INVARIANT (this);
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 
189  histFinalize ()
190  {
191  RCU_CHANGE_INVARIANT (this);
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 }
ClassImp
ClassImp(EL::UnitTestAlg) namespace EL
Definition: UnitTestAlg.cxx:37
EL::UnitTestAlg::fileExecute
virtual StatusCode fileExecute() override
effects: do all the processing that needs to be done once per file guarantee: basic failures: algorit...
EL::UnitTestAlg::histFinalize
virtual StatusCode histFinalize() override
effects: this is a post-initialization routine that is called after finalize has been called.
EL::UnitTestAlg::histInitialize
virtual StatusCode histInitialize() override
effects: this is a pre-initialization routine that is called before changeInput is called.
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
EL::Algorithm::setMsgLevel
void setMsgLevel(int level)
set the message level for the message stream for this object
Job.h
tree
TChain * tree
Definition: tile_monitor.h:30
EL::IHistogramWorker::addOutput
virtual void addOutput(TObject *output_swallow)=0
effects: add an object to the output.
OutputStream.h
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
EL::UnitTestAlg::changeInput
virtual StatusCode changeInput(bool firstFile) override
effects: do all changes to work with a new input file, e.g.
EL::Algorithm::hist
TH1 * hist(const std::string &name) const
get the histogram with the given name
UnitTestAlg.h
Assert.h
EL::UnitTestAlg::m_hasInitialize
bool m_hasInitialize
whether initialize has been called
Definition: UnitTestAlg.h:171
EL::IWorker::addOutputList
virtual void addOutputList(const std::string &name, TObject *output_swallow)=0
effects: add a given object to the output.
EL::UnitTestAlg::makeOutput
bool makeOutput
description: whether I create an output n-tuple
Definition: UnitTestAlg.h:55
EL::UnitTestAlg::execute
virtual StatusCode execute() override
effects: process the next event guarantee: basic failures: algorithm dependent rationale: the virtual...
EL::IWorker::inputFile
virtual TFile * inputFile() const =0
description: the file we are reading the current tree from guarantee: no-fail
EL::UnitTestAlg::m_tree
TTree * m_tree
description: the histogram we are creating
Definition: UnitTestAlg.h:163
RCU_ASSERT_SOFT
#define RCU_ASSERT_SOFT(x)
Definition: Assert.h:167
CaloCondBlobAlgs_fillNoiseFromASCII.inputFile
string inputFile
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:17
EL::UnitTestAlg::finalize
virtual StatusCode finalize() override
effects: do everything that needs to be done after completing work on this worker guarantee: basic fa...
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
EL::UnitTestAlg::testInvariant
void testInvariant() const
effects: test the invariant of this object guarantee: no-fail
EL::UnitTestAlg::m_branch
TBranch * m_branch
description: the branch we are using
Definition: UnitTestAlg.h:151
file
TFile * file
Definition: tile_monitor.h:29
EL::UnitTestAlg::setupJob
virtual StatusCode setupJob(Job &job) override
effects: give the algorithm a chance to intialize the job with anything this algorithm needs.
EL
This module defines the arguments passed from the BATCH driver to the BATCH worker.
Definition: AlgorithmWorkerData.h:24
EL::UnitTestAlg::m_value
Int_t m_value
description: the value we are reading from the branch
Definition: UnitTestAlg.h:155
EL::Algorithm::wk
IWorker * wk() const
description: the worker that is controlling us guarantee: no-fail
TH1::Fill
int Fill(double)
Definition: rootspy.cxx:285
RCU_INVARIANT
#define RCU_INVARIANT(x)
Definition: Assert.h:201
INav4MomDumper_jobOptions.OutputStream
OutputStream
Definition: INav4MomDumper_jobOptions.py:20
EL::UnitTestAlg::m_hasHistInitialize
bool m_hasHistInitialize
whether histInitialize has been called
Definition: UnitTestAlg.h:175
EL::UnitTestAlg::m_fileName
std::string m_fileName
the name of the file (for testing changeInput)
Definition: UnitTestAlg.h:167
ThrowMsg.h
EL::UnitTestAlg::initialize
virtual StatusCode initialize() override
effects: do everything that needs to be done before running the algorithm, e.g.
TH1F
Definition: rootspy.cxx:320
EL::Algorithm::book
void book(const TH1 &hist)
book the given histogram
Worker.h
MsgStreamMacros.h
EL::UnitTestAlg::m_calls
unsigned m_calls
Definition: UnitTestAlg.h:178
generate::GetEntries
double GetEntries(TH1D *h, int ilow, int ihi)
Definition: rmsFrac.cxx:20
EL::UnitTestAlg::UnitTestAlg
UnitTestAlg(const std::string &branchName="el_n")
effects: standard constructor.
EL::IWorker::getOutputFile
virtual TFile * getOutputFile(const std::string &label) const =0
effects: get the output file that goes into the dataset with the given label.
RCU_CHANGE_INVARIANT
#define RCU_CHANGE_INVARIANT(x)
Definition: Assert.h:231
RCU_THROW_MSG
#define RCU_THROW_MSG(message)
Definition: PrintMsg.h:58
test_interactive_athena.job
job
Definition: test_interactive_athena.py:6
RCU_ASSERT
#define RCU_ASSERT(x)
Definition: Assert.h:222
EL::IWorker::tree
virtual TTree * tree() const =0
description: the tree we are running on guarantee: no-fail
EL::UnitTestAlg
Definition: UnitTestAlg.h:34
EL::UnitTestAlg::m_name
std::string m_name
description: the name of the variable we are using
Definition: UnitTestAlg.h:147
MsgStream.h
RCU_NEW_INVARIANT
#define RCU_NEW_INVARIANT(x)
Definition: Assert.h:233