ATLAS Offline Software
Classes | Public Types | Public Member Functions | Private Attributes | List of all members
RootUtils::Type Class Reference

Wrapper for ROOT types. More...

#include <Type.h>

Collaboration diagram for RootUtils::Type:

Classes

class  Deleter
 Deleter object, compatible with std::unique_ptr. More...
 

Public Types

typedef std::unique_ptr< void, Deleterunique_ptr
 A std::unique_ptr type referencing a generic pointer. More...
 

Public Member Functions

 Type ()
 Default constructor. More...
 
 Type (TClass *cls)
 Construct for a class type. More...
 
 Type (EDataType type)
 Construct for a fundamental type. More...
 
 Type (const std::string &typname)
 Construct from a type name. More...
 
 Type (const RootUtils::Type &other)
 Copy constructor. More...
 
Typeoperator= (const RootUtils::Type &other)
 Assignment. More...
 
 ~Type ()
 Destructor. More...
 
void init (const std::string &typname)
 Initialize from a type name. More...
 
void init (TClass *cls)
 Initialize for a class type. More...
 
void init (EDataType type)
 Initialize for a fundamental data type. More...
 
void * create () const
 Create an instance of the object. More...
 
void destroy (void *p) const
 Destroy an instance of the object (and free memory). More...
 
std::string getTypeName () const
 Return the name of this type. More...
 
const TClass * getClass () const
 Return the ROOT class for the described type. More...
 
EDataType getDataType () const
 Return the ROOT data type code for the described type. More...
 
const std::type_info * getTypeInfo () const
 Return the type_info for the described type. More...
 
size_t getSize () const
 Return the size in bytes of an instance of the described type. More...
 
void copyRange (void *dst, const void *src, size_t n) const
 Copy a range of objects. More...
 
void clearRange (void *dst, size_t n) const
 Clear a range of objects. More...
 
void clearRange (void *dst, size_t index, size_t n) const
 Clear a range of objects. More...
 
void clear (void *dst, size_t index) const
 Clear an object in a vector. More...
 
void clear (void *dst) const
 Clear an object. More...
 
void assign (void *dst, size_t dst_index, const void *src, size_t src_index) const
 Copy an object within vectors. More...
 
void assign (void *dst, const void *src) const
 Copy an object. More...
 
void swap (void *a, size_t a_index, void *b, size_t b_index) const
 Swap an object between vectors. More...
 
void swap (void *a, void *b) const
 Swap two objects. More...
 
void swapRange (void *a, size_t a_index, void *b, size_t b_index, size_t n) const
 Swap a range of objects between vectors. More...
 
void fromString (void *p, const std::string &s) const
 Initialize an object from a string. More...
 

Private Attributes

TClass * m_cls
 The class of the derived type, or 0 if it's not a class type. More...
 
EDataType m_type
 The ROOT type code of the derived type, or kNoType_t for a class type. More...
 
const std::type_info * m_ti
 The type_info for the described type. More...
 
size_t m_size
 The size in bytes of an instance of the described type. More...
 
TSMethodCall m_assign ATLAS_THREAD_SAFE
 
void * m_defElt
 Pointer to a default-constructed instance of the payload object. More...
 

Detailed Description

Wrapper for ROOT types.

Using the ROOT interfaces to manipulate objects of generic type is rather awkward, because you have do to completely different things depending on whether the type of object you're dealing with is a class or a fundamental type. This wrapper allows treating these two cases in a uniform way. For now, we don't try to handle other kinds of types (pointers, etc).

Definition at line 39 of file Type.h.

Member Typedef Documentation

◆ unique_ptr

typedef std::unique_ptr<void, Deleter> RootUtils::Type::unique_ptr

A std::unique_ptr type referencing a generic pointer.

You need to pass in the type when constructing it, like this:

RootUtils::Type typ (...);
RootUtils::Type::unique_ptr up (typ.create(), typ);

Definition at line 344 of file Type.h.

Constructor & Destructor Documentation

◆ Type() [1/5]

RootUtils::Type::Type ( )

Default constructor.

Wrapper for ROOT types.

The only thing you can do with the resulting object is to call init() on it.

Using the ROOT interfaces to manipulate objects of generic type is rather awkward, because you have do to completely different things depending on whether the type of object you're dealing with is a class or a fundamental type. This wrapper allows treating these two cases in a uniform way. For now, we don't try to handle other kinds of types (pointers, etc).

Definition at line 35 of file Type.cxx.

36  : m_cls(0),
37  m_type(kNoType_t),
38  m_ti(0),
39  m_size(0),
40  m_defElt(0)
41 {
42 }

◆ Type() [2/5]

RootUtils::Type::Type ( TClass *  cls)

Construct for a class type.

Parameters
clsThe class of the object on which we're operating.

Definition at line 49 of file Type.cxx.

50  : m_cls(0),
51  m_type(kNoType_t),
52  m_ti(0),
53  m_size(0),
54  m_defElt(0)
55 {
56  init (cls);
57 }

◆ Type() [3/5]

RootUtils::Type::Type ( EDataType  type)

Construct for a fundamental type.

Parameters
typeThe ROOT type code.

Definition at line 64 of file Type.cxx.

65  : m_cls(0),
66  m_type(kNoType_t),
67  m_ti(0),
68  m_size(0),
69  m_defElt(0)
70 {
71  init (type);
72 }

◆ Type() [4/5]

RootUtils::Type::Type ( const std::string &  typname)

Construct from a type name.

Parameters
typnameThe name of the type.

typname may be either the name of a fundamental type, or the name of a class known to ROOT. An exception will be thrown if the name is not recognized.

Definition at line 83 of file Type.cxx.

84  : m_cls(0),
85  m_type(kNoType_t),
86  m_ti(0),
87  m_size(0),
88  m_defElt(0)
89 {
90  init (typname);
91 }

◆ Type() [5/5]

RootUtils::Type::Type ( const RootUtils::Type other)

Copy constructor.

Parameters
otherObject to be copied.

Definition at line 98 of file Type.cxx.

99  : m_cls (other.m_cls),
100  m_type (other.m_type),
101  m_ti (other.m_ti),
102  m_size (other.m_size),
103  m_assign (other.m_assign),
104  m_defElt (0)
105 {
106  if (m_cls)
107  m_defElt = create();
108 }

◆ ~Type()

RootUtils::Type::~Type ( )

Destructor.

Definition at line 137 of file Type.cxx.

138 {
139  if (m_defElt)
140  destroy (m_defElt);
141 }

Member Function Documentation

◆ assign() [1/2]

void RootUtils::Type::assign ( void *  dst,
const void *  src 
) const

Copy an object.

Parameters
dstDestination for the copy.
srcSource for the copy.

The copy will be done using either m_assign or memcpy, depending on whether or not the object has class type. If the payload does not have class type and src is null, then the destination element will be filled with 0's.

Definition at line 499 of file Type.cxx.

500 {
501  if (TMethodCall* meth = m_assign.call()) {
502  meth->ResetParam();
503  meth->SetParam (reinterpret_cast<Long_t>(src));
504  meth->Execute (dst);
505  }
506  else {
507  if (src)
508  memcpy (dst, src, m_size);
509  else
510  memset (dst, 0, m_size);
511  }
512 }

◆ assign() [2/2]

void RootUtils::Type::assign ( void *  dst,
size_t  dst_index,
const void *  src,
size_t  src_index 
) const

Copy an object within vectors.

Parameters
dstPointer to the start of the destination vector's data.
dst_indexIndex of destination object in the vector.
srcPointer to the start of the source vector's data.
src_indexIndex of source object in the vector.

dst and @ src can be either the same or different.

Definition at line 480 of file Type.cxx.

482 {
483  dst = reinterpret_cast<void*>(reinterpret_cast<unsigned long>(dst) + m_size* dst_index);
484  src = reinterpret_cast<const void*>(reinterpret_cast<unsigned long>(src) + m_size * src_index);
485  assign (dst, src);
486 }

◆ clear() [1/2]

void RootUtils::Type::clear ( void *  dst) const

Clear an object.

Parameters
dstPointer to the object.

Definition at line 465 of file Type.cxx.

466 {
467  assign (dst, m_defElt);
468 }

◆ clear() [2/2]

void RootUtils::Type::clear ( void *  dst,
size_t  index 
) const

Clear an object in a vector.

Parameters
dstPointer to the start of the vector's data.
indexIndex of the object in the vector.

Definition at line 454 of file Type.cxx.

455 {
456  dst = reinterpret_cast<void*>(reinterpret_cast<unsigned long>(dst) + m_size* index);
457  assign (dst, m_defElt);
458 }

◆ clearRange() [1/2]

void RootUtils::Type::clearRange ( void *  dst,
size_t  index,
size_t  n 
) const

Clear a range of objects.

Parameters
dstPointer to the start of vector's data.
indexIndex of the first element to clear.
nNumber of objects to clear.

Objects of class type are cleared by assigning to them a default-constructed object. Other objects types are cleared by filling with 0.

Definition at line 443 of file Type.cxx.

444 {
445  clearRange (reinterpret_cast<char*> (dst) + index * m_size, n);
446 }

◆ clearRange() [2/2]

void RootUtils::Type::clearRange ( void *  dst,
size_t  n 
) const

Clear a range of objects.

Parameters
dstPointer to the start of the first object to clear.
nNumber of objects to clear.

Objects of class type are cleared by assigning to them a default-constructed object. Other objects types are cleared by filling with 0.

Definition at line 420 of file Type.cxx.

421 {
422  if (m_cls) {
423  for (size_t i = 0; i < n; ++i) {
424  clear (dst, i);
425  }
426  }
427  else {
428  memset (dst, 0, n * m_size);
429  }
430 }

◆ copyRange()

void RootUtils::Type::copyRange ( void *  dst,
const void *  src,
size_t  n 
) const

Copy a range of objects.

Parameters
dstPointer to the start of the first object for the destination.
srcPointer to the start of the first object for the copy source.
nNumber of objects to copy.

This function properly handles overlapping ranges.

Definition at line 389 of file Type.cxx.

390 {
391  if (m_cls) {
392  if (dst > src && reinterpret_cast<unsigned long>(src) + n*m_size > reinterpret_cast<unsigned long>(dst))
393  {
394  for (size_t i = n-1; i < n; --i) {
395  assign (dst, i, src, i);
396  }
397  }
398  else
399  {
400  for (size_t i = 0; i < n; ++i) {
401  assign (dst, i, src, i);
402  }
403  }
404  }
405  else {
406  memmove (dst, src, n * m_size);
407  }
408 }

◆ create()

void * RootUtils::Type::create ( ) const

Create an instance of the object.

Class objects will be default-constructed; fundamental types will be zero-filled.

Definition at line 296 of file Type.cxx.

297 {
298  if (m_cls)
299  return m_cls->New();
300  void* p = new char[m_size];
301  clear (p);
302  return p;
303 }

◆ destroy()

void RootUtils::Type::destroy ( void *  p) const

Destroy an instance of the object (and free memory).

Parameters
pPointer to the object to be destroyed and freed.

Definition at line 310 of file Type.cxx.

311 {
312  if (p) {
313  if (m_cls) {
314  // TClass::Destructor is non-const.
315  // But there's nothing obviously problematic in it...
316  // just suppress the checker warning for now.
317  TClass* cls ATLAS_THREAD_SAFE = m_cls;
318  cls->Destructor (p);
319  }
320  else
321  delete [] (reinterpret_cast<char*> (p));
322  }
323 }

◆ fromString()

void RootUtils::Type::fromString ( void *  p,
const std::string &  s 
) const

Initialize an object from a string.

Parameters
pPointer to the object to initialize.
sString from which to initialize.

Only works for basic types and std::string.

Definition at line 601 of file Type.cxx.

602 {
603  std::istringstream is (s);
604  switch (m_type) {
605 #define TYPE(CODE, TYP, IOTYP) case CODE: { IOTYP tmp=0; is >> tmp; *reinterpret_cast<TYP*>(p) = tmp; } return
606 #include "Types.def"
607 #undef TYPE
608  default: break;
609  }
610 
611  if (m_cls == TClass::GetClass ("string")) {
612  *reinterpret_cast<std::string*>(p) = s;
613  return;
614  }
615 
616  throw std::runtime_error
617  (std::string ("RootUtils::Type::fromString: Can't convert objects of type `" +
618  getTypeName() + "'."));
619 }

◆ getClass()

const TClass * RootUtils::Type::getClass ( ) const

Return the ROOT class for the described type.

Returns 0 if this is for a fundamental type.

Definition at line 346 of file Type.cxx.

347 {
348  return m_cls;
349 }

◆ getDataType()

EDataType RootUtils::Type::getDataType ( ) const

Return the ROOT data type code for the described type.

Returns kNoType_t if this is for a class type.

Definition at line 357 of file Type.cxx.

358 {
359  return m_type;
360 }

◆ getSize()

size_t RootUtils::Type::getSize ( ) const

Return the size in bytes of an instance of the described type.

Definition at line 375 of file Type.cxx.

376 {
377  return m_size;
378 }

◆ getTypeInfo()

const std::type_info * RootUtils::Type::getTypeInfo ( ) const

Return the type_info for the described type.

Definition at line 366 of file Type.cxx.

367 {
368  return m_ti;
369 }

◆ getTypeName()

std::string RootUtils::Type::getTypeName ( ) const

Return the name of this type.

Definition at line 329 of file Type.cxx.

330 {
331  if (m_type != kNoType_t)
332  return TDataType::GetTypeName (m_type);
333 
334  if (m_cls)
335  return m_cls->GetName();
336 
337  return "";
338 }

◆ init() [1/3]

void RootUtils::Type::init ( const std::string &  type_name)

Initialize from a type name.

Parameters
typnameThe name of the type.

The Type object must have been just default-constructed.

typname may be either the name of a fundamental type, or the name of a class known to ROOT. An exception will be thrown if the name is not recognized.

Parameters
type_nameThe name of the type.

The Type object must have been just default-constructed.

type_name may be either the name of a fundamental type, or the name of a class known to ROOT. An exception will be thrown if the name is not recognized.

Definition at line 154 of file Type.cxx.

155 {
156  // Make sure root's table of types is initialized.
157  // May be needed for root 6.
158  gROOT->GetListOfTypes();
159 
160  assert (m_cls == 0 && m_type == kNoType_t);
161 
162  TClass* cls = TClass::GetClass (type_name.c_str());
163  if (cls) {
164  init (cls);
165  return;
166  }
167 
168  for (int i = 0; i < kNumDataTypes; ++i) {
169  EDataType type = static_cast<EDataType>(i);
170  TDataType* dt = TDataType::GetDataType(type);
171  if (dt && type_name == dt->GetTypeName()) {
172  init (type);
173  return;
174  }
175  }
176 
177  EDataType type = kNoType_t;
178  // Check for some other synonyms.
179  // RNTuple likes to prepend "std::" to type names - remove it before comparison
180  std::string tname;
181  if( type_name.rfind("std::", 0) == 0 ) {
182  // remove std:: prefix if present
183  tname = type_name.substr(5);
184  } else {
185  tname = type_name;
186  }
187  if (tname == "uint32_t") {
188  if (sizeof (unsigned int) == 4)
189  type = kUInt_t;
190  }
191  else if (tname == "int32_t") {
192  if (sizeof (unsigned int) == 4)
193  type = kInt_t;
194  }
195  else if (tname == "uint16_t") {
196  if (sizeof (unsigned short) == 2)
197  type = kUShort_t;
198  }
199  else if (tname == "int16_t") {
200  if (sizeof (short) == 2)
201  type = kShort_t;
202  }
203  else if (tname == "uint8_t") {
204  type = kUChar_t;
205  }
206  else if (tname == "int8_t") {
207  type = kChar_t;
208  }
209  else if (tname == "uint64_t") {
210  if (sizeof(unsigned long) == 8)
211  type = kULong_t;
212  else if (sizeof(unsigned long long) == 8)
213  type = kULong64_t;
214 
215  }
216  else if (tname == "int64_t") {
217  if (sizeof(long) == 8)
218  type = kLong_t;
219  else if (sizeof(long long) == 8)
220  type = kLong64_t;
221  }
222 
223  if (type != kNoType_t) {
224  init (type);
225  return;
226  }
227 
228  throw std::runtime_error (std::string ("RootUtils::Type: Can't find type `") +
229  type_name + "'.");
230 }

◆ init() [2/3]

void RootUtils::Type::init ( EDataType  type)

Initialize for a fundamental data type.

Parameters
typeThe ROOT type code.

The Type object must have been just default-constructed.

Definition at line 264 of file Type.cxx.

265 {
266  // Make sure root's table of types is initialized.
267  // May be needed for root 6.
268  gROOT->GetListOfTypes();
269 
270  assert (m_cls == 0 && m_type == kNoType_t);
271  TDataType* dt = TDataType::GetDataType (type);
272  if (!dt) {
273  throw std::runtime_error ("Unknown data type");
274  }
275 
276  m_cls = 0;
277  m_type = type;
278  m_size = dt->Size();
279  m_defElt = 0;
280 
281  switch (type) {
282 #define TYPE(CODE, TYP, IOTYP) case CODE: m_ti = &typeid(TYP); break
283 #include "Types.def"
284 #undef TYPE
285  default: break;
286  }
287 }

◆ init() [3/3]

void RootUtils::Type::init ( TClass *  cls)

Initialize for a class type.

Parameters
clsThe class of the object on which we're operating.

The Type object must have been just default-constructed.

Definition at line 239 of file Type.cxx.

240 {
241  assert (m_cls == 0 && m_type == kNoType_t);
242  m_cls = cls;
243  m_type = kNoType_t;
244  m_size = cls->Size();
245  m_defElt = create();
246  m_ti = cls->GetTypeInfo();
247 
248  std::string fname = "operator=";
249 
250  std::string assignProto = "const ";
251  assignProto += m_cls->GetName();
252  assignProto += "&";
253 
254  m_assign.setProto (m_cls, fname, assignProto);
255 }

◆ operator=()

Type & RootUtils::Type::operator= ( const RootUtils::Type other)

Assignment.

Parameters
otherObject to be copied.

Definition at line 115 of file Type.cxx.

116 {
117  if (this != &other) {
118  m_cls = other.m_cls;
119  m_type = other.m_type;
120  m_ti = other.m_ti;
121  m_size = other.m_size;
122  m_assign = other.m_assign;
123  if (m_defElt)
124  destroy (m_defElt);
125  if (m_cls)
126  m_defElt = create();
127  else
128  m_defElt = 0;
129  }
130  return *this;
131 }

◆ swap() [1/2]

void RootUtils::Type::swap ( void *  a,
size_t  a_index,
void *  b,
size_t  b_index 
) const

Swap an object between vectors.

Parameters
aPointer to the start of the first vector's data.
aindexIndex of the object in the first vector.
bPointer to the start of the second vector's data.
bindexIndex of the object in the second vector.

a and @ b can be either the same or different.

Definition at line 524 of file Type.cxx.

526 {
527  a = reinterpret_cast<void*>(reinterpret_cast<unsigned long>(a) + m_size*a_index);
528  b = reinterpret_cast<void*>(reinterpret_cast<unsigned long>(b) + m_size*b_index);
529  swap (a, b);
530 }

◆ swap() [2/2]

void RootUtils::Type::swap ( void *  a,
void *  b 
) const

Swap two objects.

Parameters
aPointer to the first object.
bPointer to the second object.

Definition at line 538 of file Type.cxx.

539 {
540  if (m_assign.call() != nullptr) {
541  void* tmp = create();
542  assign (tmp, a);
543  assign (a, b);
544  assign (b, tmp);
545  destroy (tmp);
546  }
547  else {
548  std::vector<char> tmp (m_size);
549  memcpy (tmp.data(), a, m_size);
550  memcpy (a, b, m_size);
551  memcpy (b, tmp.data(), m_size);
552  }
553 }

◆ swapRange()

void RootUtils::Type::swapRange ( void *  a,
size_t  a_index,
void *  b,
size_t  b_index,
size_t  n 
) const

Swap a range of objects between vectors.

Parameters
aPointer to the start of the first vector's data.
aindexIndex of the first object in the first vector.
bPointer to the start of the second vector's data.
bindexIndex of the second object in the second vector.
nNumber of objects to swap.

a and @ b can be either the same or different. However, the ranges should not overlap.

Definition at line 567 of file Type.cxx.

570 {
571  char* aptr = reinterpret_cast<char*>(a) + m_size * a_index;
572  char* bptr = reinterpret_cast<char*>(b) + m_size * b_index;
573 
574  if (m_assign.call() != nullptr) {
575  void* tmp = create();
576  for (size_t i = 0; i < n; i++) {
577  assign (tmp, aptr);
578  assign (aptr, bptr);
579  assign (bptr, tmp);
580  aptr += m_size;
581  bptr += m_size;
582  }
583  destroy (tmp);
584  }
585  else {
586  std::vector<char> tmp (m_size * n);
587  memcpy (tmp.data(), aptr, m_size * n);
588  memcpy (aptr, bptr, m_size * n);
589  memcpy (bptr, tmp.data(), m_size * n);
590  }
591 }

Member Data Documentation

◆ ATLAS_THREAD_SAFE

TSMethodCall m_assign RootUtils::Type::ATLAS_THREAD_SAFE
mutableprivate

Definition at line 361 of file Type.h.

◆ m_cls

TClass* RootUtils::Type::m_cls
private

The class of the derived type, or 0 if it's not a class type.

Definition at line 349 of file Type.h.

◆ m_defElt

void* RootUtils::Type::m_defElt
private

Pointer to a default-constructed instance of the payload object.

Null if the payload does not have class type.

Definition at line 365 of file Type.h.

◆ m_size

size_t RootUtils::Type::m_size
private

The size in bytes of an instance of the described type.

Definition at line 358 of file Type.h.

◆ m_ti

const std::type_info* RootUtils::Type::m_ti
private

The type_info for the described type.

Definition at line 355 of file Type.h.

◆ m_type

EDataType RootUtils::Type::m_type
private

The ROOT type code of the derived type, or kNoType_t for a class type.

Definition at line 352 of file Type.h.


The documentation for this class was generated from the following files:
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
RootUtils::Type::init
void init(const std::string &typname)
Initialize from a type name.
Definition: Type.cxx:154
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
RootUtils::Type::m_cls
TClass * m_cls
The class of the derived type, or 0 if it's not a class type.
Definition: Type.h:349
WriteCellNoiseToCool.src
src
Definition: WriteCellNoiseToCool.py:513
index
Definition: index.py:1
RootUtils::Type::swap
void swap(void *a, size_t a_index, void *b, size_t b_index) const
Swap an object between vectors.
Definition: Type.cxx:524
CaloClusterListBadChannel.cls
cls
Definition: CaloClusterListBadChannel.py:8
RootUtils::Type::m_defElt
void * m_defElt
Pointer to a default-constructed instance of the payload object.
Definition: Type.h:365
RootUtils::Type::assign
void assign(void *dst, size_t dst_index, const void *src, size_t src_index) const
Copy an object within vectors.
Definition: Type.cxx:480
RootUtils::Type::m_type
EDataType m_type
The ROOT type code of the derived type, or kNoType_t for a class type.
Definition: Type.h:352
RootUtils::Type::clear
void clear(void *dst, size_t index) const
Clear an object in a vector.
Definition: Type.cxx:454
RootUtils::Type::destroy
void destroy(void *p) const
Destroy an instance of the object (and free memory).
Definition: Type.cxx:310
lumiFormat.i
int i
Definition: lumiFormat.py:92
RootUtils::Type::clearRange
void clearRange(void *dst, size_t n) const
Clear a range of objects.
Definition: Type.cxx:420
beamspotman.n
n
Definition: beamspotman.py:731
CaloNoise_fillDB.dt
dt
Definition: CaloNoise_fillDB.py:58
CalibCoolCompareRT.up
up
Definition: CalibCoolCompareRT.py:109
DeMoUpdate.tmp
string tmp
Definition: DeMoUpdate.py:1167
RootUtils::Type::m_size
size_t m_size
The size in bytes of an instance of the described type.
Definition: Type.h:358
RootUtils::Type::m_ti
const std::type_info * m_ti
The type_info for the described type.
Definition: Type.h:355
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
python.AthDsoLogger.fname
string fname
Definition: AthDsoLogger.py:67
RootUtils::Type::unique_ptr
std::unique_ptr< void, Deleter > unique_ptr
A std::unique_ptr type referencing a generic pointer.
Definition: Type.h:344
RootUtils::Type::ATLAS_THREAD_SAFE
TSMethodCall m_assign ATLAS_THREAD_SAFE
Definition: Type.h:361
a
TList * a
Definition: liststreamerinfos.cxx:10
InDetDD::other
@ other
Definition: InDetDD_Defs.h:16
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
RootUtils::Type
Wrapper for ROOT types.
Definition: Type.h:40
RootUtils::Type::create
void * create() const
Create an instance of the object.
Definition: Type.cxx:296
RootUtils::Type::getTypeName
std::string getTypeName() const
Return the name of this type.
Definition: Type.cxx:329