ATLAS Offline Software
NavFourMom/NavFourMom/IParticleLinkContainer.h
Go to the documentation of this file.
1 
3 /*
4  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
5 */
6 
13 #ifndef NAVFOURMOM_IPARTICLELINKCONTAINER_H
14 #define NAVFOURMOM_IPARTICLELINKCONTAINER_H 1
15 
16 // STL includes
17 #include <vector>
18 
19 #include "AthLinks/ElementLink.h"
20 #include "AthenaKernel/CLASS_DEF.h"
21 #include "EventKernel/IParticle.h"
24 
25 // This defines the new container
26 class IParticleLinkContainer : public std::vector< IParticleLink >
27 {
28 };
29 
30 // This defines the ID which is used by StoreGate
31 CLASS_DEF( IParticleLinkContainer , 1340008338 , 1 )
32 
33 
34 
35 
36 // This defines how to convert an INav4MomLinkContainer to an INavigable4MomentumCollection
38  : public SG::CopyConversion<IParticleLinkContainer,
40 {
41 public:
42  virtual void convert ( const IParticleLinkContainer& src,
43  IParticleContainer& dst ) const
44  {
45  size_t sz = src.size();
46  if (dst.size() != sz) {
48  dst.reserve (sz);
49  for (size_t i = 0; i < sz; i++) {
50  const IParticle* p = *(src[i]).cptr();
51  // FIXME: Ok, since the target ends up recorded in the event
52  // store as const. But should change the interfaces so that
53  // we get a ConstDataVector to fill.
54  IParticle* p_nc ATLAS_THREAD_SAFE = const_cast<IParticle*> (p);
55  dst.push_back (p_nc);
56  }
57  }
58  }
59 };
60 
61 // This tells StoreGate about the conversion
63 
64 
65 #endif // NAVFOURMOM_IPARTICLELINKCONTAINER_H
66 
DataVector::reserve
void reserve(size_type n)
Attempt to preallocate enough memory for a specified number of elements.
IParticleLinkContainerToIParticleContainerConverter::convert
virtual void convert(const IParticleLinkContainer &src, IParticleContainer &dst) const
Convert the contents of an instance of the source class SRC to an instance of the destination class D...
Definition: NavFourMom/NavFourMom/IParticleLinkContainer.h:42
fitman.sz
sz
Definition: fitman.py:527
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
SG
Forward declaration.
Definition: CaloCellPacker_400_500.h:32
SG::VIEW_ELEMENTS
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Definition: OwnershipPolicy.h:18
WriteCellNoiseToCool.src
src
Definition: WriteCellNoiseToCool.py:513
IParticle.h
lumiFormat.i
int i
Definition: lumiFormat.py:92
IParticleLinkContainerToIParticleContainerConverter
Definition: NavFourMom/NavFourMom/IParticleLinkContainer.h:40
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
DataVector::clear
void clear()
Erase all the elements in the collection.
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
CLASS_DEF
#define CLASS_DEF(NAME, CID, VERSION)
associate a clid and a version to a type eg
Definition: Control/AthenaKernel/AthenaKernel/CLASS_DEF.h:64
IParticleContainer.h
ATLAS_THREAD_SAFE
#define ATLAS_THREAD_SAFE
Definition: checker_macros.h:211
IParticle
Definition: Event/EventKernel/EventKernel/IParticle.h:43
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
CLASS_DEF.h
macros to associate a CLID to a type