ATLAS Offline Software
VectorFillerToolBase.h
Go to the documentation of this file.
1 // This file's extension implies that it's C, but it's really -*- C++ -*-.
2 
3 /*
4  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
5 */
6 
7 // $Id$
16 #ifndef D3PDMAKERUTILS_VECTORFILLERTOOLBASE_H
17 #define D3PDMAKERUTILS_VECTORFILLERTOOLBASE_H
18 
19 
20 #include "ObjectMetadata.h"
24 #include "GaudiKernel/ToolHandle.h"
25 #include <vector>
26 #include <list>
27 #include <string>
28 #include <typeinfo>
29 class TVirtualCollectionProxy;
30 
31 
32 namespace D3PD {
33 
34 
35 class IIteration;
36 
37 
78  : public AthAlgTool,
79  public IAddVariable
80 {
81 public:
88  VectorFillerToolBase (const std::string& type,
89  const std::string& name,
90  const IInterface* parent);
91 
92 
94  virtual StatusCode initialize();
95 
96 
98  virtual StatusCode finalize();
99 
100 
117  virtual StatusCode addVariable (const std::string& name,
118  const std::type_info& ti,
119  void* & ptr,
120  const std::string& docstring = "",
121  const void* defval = 0);
122 
123 
140  virtual StatusCode
141  addDimensionedVariable (const std::string& name,
142  const std::type_info& ti,
143  void* & ptr,
144  const std::string& dim,
145  const std::string& docstring = "",
146  const void* defval = 0);
147 
148 
149 protected:
158 
159 
165  StatusCode doBook();
166 
167 
176  StatusCode doFill (IIteration& it, size_t sizeHint);
177 
178 
181 
182 
184  std::string m_prefix;
185 
186 
187 private:
189  ToolHandleArray<IBlockFillerTool> m_blockFillers;
190 
193  std::string m_nrowName;
194 
197  std::string m_nobjName;
198 
201  std::string m_objIndexName;
202 
205 
207  int* m_nrow;
208 
210  int* m_nobj;
211 
214 
215 
227  class Var
228  {
229  public:
243  Var (const std::string& name,
244  const std::type_info& ti,
245  void* & ptr,
246  const std::string& dim,
247  char* defval,
248  size_t defsize);
249 
250 
257  const std::string& prefix);
258 
259 
265  void resize (size_t sz, size_t pos);
266 
267 
271  void next();
272 
273 
279  void free();
280 
281 
282  private:
284  std::string m_name;
285 
287  const std::type_info* m_ti;
288 
290  char** m_addr;
291 
293  std::string m_docstring;
294 
296  TVirtualCollectionProxy* m_proxy;
297 
299  size_t m_valdiff;
300 
302  void* m_contptr;
303 
306  char* m_default;
307 
311  size_t m_defsize;
312  };
313 
314 
324  struct Vars
325  : public std::list<Var>
326  {
328  ~Vars();
329 
330 
336  void resize_all (size_t sz, size_t pos = 0);
337 
338 
342  void next_all ();
343  };
344 
347 
348 
354  void maybeExtend (size_t& n, size_t& sz);
355 
356 
376  StatusCode fillOnce (const void* obj,
377  size_t objndx,
378  size_t& n,
379  size_t& sz,
380  const std::vector<unsigned long>& codes_in,
381  std::vector<unsigned long>& codes_out);
382 };
383 
384 
385 } // namespace D3PD
386 
387 
388 #endif // not D3PDMAKERUTILS_VECTORFILLERTOOLBASE_H
D3PD::IAddVariable
Common interface for adding a variable to a tuple.
Definition: IAddVariable.h:70
D3PD::VectorFillerToolBase::doBook
StatusCode doBook()
Declare tuple variables.
Definition: VectorFillerToolBase.cxx:112
D3PD::VectorFillerToolBase
Common code for wrapping filled variables up into a vector.
Definition: VectorFillerToolBase.h:80
yodamerge_tmp.dim
dim
Definition: yodamerge_tmp.py:239
fitman.sz
sz
Definition: fitman.py:527
D3PD::VectorFillerToolBase::addVariable
virtual StatusCode addVariable(const std::string &name, const std::type_info &ti, void *&ptr, const std::string &docstring="", const void *defval=0)
Add a variable to the tuple.
Definition: VectorFillerToolBase.cxx:306
D3PD::VectorFillerToolBase::m_nrowName
std::string m_nrowName
Property: Name of the variable for the count of rows.
Definition: VectorFillerToolBase.h:193
D3PD::VectorFillerToolBase::Var::free
void free()
Free allocated storage.
Definition: VectorFillerToolBase.cxx:542
D3PD::VectorFillerToolBase::Var::m_addr
char ** m_addr
Pointer to the variable pointer.
Definition: VectorFillerToolBase.h:290
tree
TChain * tree
Definition: tile_monitor.h:30
D3PD::VectorFillerToolBase::Var::m_proxy
TVirtualCollectionProxy * m_proxy
The root collection proxy.
Definition: VectorFillerToolBase.h:296
skel.it
it
Definition: skel.GENtoEVGEN.py:423
ObjectMetadata.h
D3PD::VectorFillerToolBase::m_metadata
ObjectMetadata m_metadata
Metadata about the variables created by this tool.
Definition: VectorFillerToolBase.h:180
D3PD::IIteration
Abstract interface for iterating over a set of things.
Definition: IIteration.h:41
D3PD::VectorFillerToolBase::Var::init
StatusCode init(IAddVariable *tree, const std::string &prefix)
Initialize the variable.
Definition: VectorFillerToolBase.cxx:432
D3PD::VectorFillerToolBase::Vars
Description for the list of variables.
Definition: VectorFillerToolBase.h:326
D3PD::VectorFillerToolBase::doConfigure
StatusCode doConfigure(IAddVariable *tree, IIteration &it)
Configure the tool.
Definition: VectorFillerToolBase.cxx:147
D3PD::VectorFillerToolBase::Var::m_valdiff
size_t m_valdiff
Offset between collection elements.
Definition: VectorFillerToolBase.h:299
D3PD::VectorFillerToolBase::Var::m_docstring
std::string m_docstring
Documentation string.
Definition: VectorFillerToolBase.h:293
D3PD::VectorFillerToolBase::m_vars
Vars m_vars
All booked variables.
Definition: VectorFillerToolBase.h:346
D3PD::VectorFillerToolBase::Var::next
void next()
Move the variable pointer to the next element.
Definition: VectorFillerToolBase.cxx:32
D3PD::VectorFillerToolBase::Var::m_ti
const std::type_info * m_ti
The type of the variable element (for each object).
Definition: VectorFillerToolBase.h:287
D3PD::VectorFillerToolBase::Var
Description for a single variable.
Definition: VectorFillerToolBase.h:228
D3PD
Block filler tool for noisy FEB information.
Definition: InnerDetector/InDetMonitoring/InDetGlobalMonitoring/macros/EnhancedPrimaryVertexMonitoring/TrigD3PD/ChainGroup.h:21
D3PD::VectorFillerToolBase::maybeExtend
void maybeExtend(size_t &n, size_t &sz)
Extend vectors if needed.
Definition: VectorFillerToolBase.cxx:167
D3PD::VectorFillerToolBase::m_nobjName
std::string m_nobjName
Property: Name of the variable for the count of objects.
Definition: VectorFillerToolBase.h:197
beamspotman.n
n
Definition: beamspotman.py:731
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
D3PD::VectorFillerToolBase::initialize
virtual StatusCode initialize()
Standard Gaudi initialize method.
Definition: VectorFillerToolBase.cxx:88
D3PD::VectorFillerToolBase::m_nobj
int * m_nobj
Variable for the object count.
Definition: VectorFillerToolBase.h:210
D3PD::VectorFillerToolBase::m_tree
IAddVariable * m_tree
The parent tree.
Definition: VectorFillerToolBase.h:204
AthAlgTool.h
D3PD::VectorFillerToolBase::fillOnce
StatusCode fillOnce(const void *obj, size_t objndx, size_t &n, size_t &sz, const std::vector< unsigned long > &codes_in, std::vector< unsigned long > &codes_out)
Make one loop over block filler tools.
Definition: VectorFillerToolBase.cxx:196
D3PD::VectorFillerToolBase::doFill
StatusCode doFill(IIteration &it, size_t sizeHint)
Fill objects from an IIteration.
Definition: VectorFillerToolBase.cxx:244
checkCorrelInHIST.prefix
dictionary prefix
Definition: checkCorrelInHIST.py:391
D3PD::VectorFillerToolBase::Var::resize
void resize(size_t sz, size_t pos)
Resize the vector.
Definition: VectorFillerToolBase.cxx:495
test_pyathena.parent
parent
Definition: test_pyathena.py:15
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
D3PD::VectorFillerToolBase::Var::m_default
char * m_default
Pointer to the default value for this variable, if one has been requested.
Definition: VectorFillerToolBase.h:306
D3PD::VectorFillerToolBase::Var::m_contptr
void * m_contptr
Pointer to the vector instance.
Definition: VectorFillerToolBase.h:302
D3PD::ObjectMetadata
D3PD variable metadata handling class.
Definition: ObjectMetadata.h:36
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
D3PD::VectorFillerToolBase::Var::Var
Var(const std::string &name, const std::type_info &ti, void *&ptr, const std::string &dim, char *defval, size_t defsize)
Constructor.
Definition: VectorFillerToolBase.cxx:408
D3PD::VectorFillerToolBase::m_objIndex
int * m_objIndex
Variable for the object index.
Definition: VectorFillerToolBase.h:213
D3PD::VectorFillerToolBase::addDimensionedVariable
virtual StatusCode addDimensionedVariable(const std::string &name, const std::type_info &ti, void *&ptr, const std::string &dim, const std::string &docstring="", const void *defval=0)
Add a variable to the tuple.
Definition: VectorFillerToolBase.cxx:383
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
IBlockFillerTool.h
Abstract interface for tool to fill a block in the D3PD.
D3PD::VectorFillerToolBase::Var::m_defsize
size_t m_defsize
Size of the object pointed to by m_default.
Definition: VectorFillerToolBase.h:311
D3PD::VectorFillerToolBase::m_nrow
int * m_nrow
Variable for the row count.
Definition: VectorFillerToolBase.h:207
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
D3PD::VectorFillerToolBase::finalize
virtual StatusCode finalize()
Standard Gaudi finalize method.
Definition: VectorFillerToolBase.cxx:99
D3PD::VectorFillerToolBase::m_objIndexName
std::string m_objIndexName
Property: Name of the variable for the object index.
Definition: VectorFillerToolBase.h:201
D3PD::VectorFillerToolBase::m_prefix
std::string m_prefix
Property: Variable prefix for this block.
Definition: VectorFillerToolBase.h:184
IAddVariable.h
Common interface for adding a variable to a tuple.
AthAlgTool
Definition: AthAlgTool.h:26
D3PD::VectorFillerToolBase::m_blockFillers
ToolHandleArray< IBlockFillerTool > m_blockFillers
Property: The list of block filler tools.
Definition: VectorFillerToolBase.h:189
python.PyAthena.obj
obj
Definition: PyAthena.py:135
D3PD::VectorFillerToolBase::Var::m_name
std::string m_name
The variable name.
Definition: VectorFillerToolBase.h:284
D3PD::VectorFillerToolBase::Vars::~Vars
~Vars()
Destructor.
Definition: VectorFillerToolBase.cxx:551
D3PD::VectorFillerToolBase::VectorFillerToolBase
VectorFillerToolBase(const std::string &type, const std::string &name, const IInterface *parent)
Standard Gaudi tool constructor.
Definition: VectorFillerToolBase.cxx:56
D3PD::VectorFillerToolBase::Vars::resize_all
void resize_all(size_t sz, size_t pos=0)
Resize all vector.
Definition: VectorFillerToolBase.cxx:564
D3PD::VectorFillerToolBase::Vars::next_all
void next_all()
Move all variable pointers to the next element.
Definition: VectorFillerToolBase.cxx:42