ATLAS Offline Software
Loading...
Searching...
No Matches
JetCollectionCnv_p2.cxx
Go to the documentation of this file.
1
2
3/*
4 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
5*/
6
7// JetCollectionCnv_p2.cxx
8// Implementation file for class JetCollectionCnv_p2
9// Author: S.Binet<binet@cern.ch>
11
12// DataModel includes
14
15// JetEvent includes
16#include "JetEvent/Jet.h"
18
19
20// JetEventTPCnv includes
25
26// DataModelAthenaPool includes
28
29#include <sstream>
30
31// preallocate converters
32static const JetCnv_p2 jetCnv;
34
35void
37 JetCollection* trans,
38 MsgStream& msg ) const
39{
40 msg << MSG::DEBUG << "Loading JetCollection from persistent state..."
41 << endmsg;
42
43 // make sure to first read the JetKeyDescriptor
45 JetKeyStoreCnv.persToTrans( &pers->m_keyStore, &trans->m_keyStore, msg );
46
47 // If the link is null, reset it to a default key.
48 if (trans->m_keyStore.isDefault())
50 // link the JetKeyDescriptorInstance to the store:
51 if( trans->m_keyStore.isValid() ){
52 trans->keyDesc()->m_Stores = nullptr;
53 trans->keyDesc()->m_ConstStores = trans->m_keyStore.cptr();
54 // make sure the global instance is pointing to this jetkey store
57 }
58 else if (trans->m_keyStore.isDefault()) {
59 DataLink<JetKeyDescriptor> dl ("JetKeyMap");
60 if (dl.isValid()) {
61 trans->keyDesc()->m_Stores = nullptr;
62 trans->keyDesc()->m_ConstStores = dl.cptr();
63 // make sure the global instance is pointing to this jetkey store
66 }
67 else {
68 trans->keyDesc()->m_Stores =
70 trans->keyDesc()->m_ConstStores =
72 }
73 }
74 else {
77 }
78
79 //(trans->m_keyStore)->printOut(msg);
80 msg << MSG::DEBUG << "Rolf : " << &(*trans->m_keyStore) << endmsg;
81 // attach the map to the instance
82 (trans->m_keyStore)->access();
83 msg << MSG::DEBUG << "attached JetKeyDescriptor to its instance" << endmsg;
84
85 // elements are managed by DataPool
87
88 DataPool<Jet> pool( 20 );
89 const std::size_t nJets = pers->size();
90 if ( pool.capacity() - pool.allocated() < nJets ) {
91 pool.reserve( pool.allocated() + nJets );
92 }
93
94 trans->setOrdered (static_cast<JetCollection::OrderedVar>(pers->m_ordered));
95 // the transient version does not have this data member any more,
96 // each jet knows its ROI
97 //trans->m_ROIauthor = //pers->m_roiAuthor;
98
99 trans->reserve( nJets );
100 for ( JetCollection_p2::const_iterator
101 itr = pers->begin(),
102 itrEnd = pers->end();
103 itr != itrEnd;
104 ++itr ) {
105 Jet * jet = pool.nextElementPtr();
106 jetCnv.persToTrans( &(*itr), jet, msg );
107 trans->push_back( jet );
108
109 }
110
111 // now each jet knows its ROI
112 unsigned int RoIWord;
113 std::stringstream strm(pers->m_roiAuthor);
114 strm >> RoIWord;
115 if( strm.good() )
116 {
117 msg << MSG::DEBUG << "Note: This jet collection uses RoIWords!" << endmsg;
118 for( JetCollection::iterator itr = trans->begin(); itr != trans->end(); ++itr )
119 (*itr)->set_RoIword( RoIWord );
120 }
121
122 msg << MSG::DEBUG << "Loading JetCollection from persistent state [OK]"
123 << endmsg;
124}
125
126void
128 JetCollection_p2* pers,
129 MsgStream& msg ) const
130{
131// msg << MSG::DEBUG << "Creating persistent state of JetCollection..."
132// << endmsg;
133
134 pers->m_ordered = static_cast<short>(trans->ordered());
135 //pers->m_roiAuthor = trans->m_ROIauthor;
136
137 std::size_t size = trans->size();
138 pers->resize(size);
139
140 // convert vector entries one by one
141 JetCollection::const_iterator transItr = trans->begin();
142 JetCollection_p2::iterator persItr = pers->begin();
143 while(size) {
144 jetCnv.transToPers( *transItr, &(*persItr), msg );
145 ++persItr; ++transItr; --size;
146 }
147
148 // RS now deal with the JetKeyDescriptor
150 JetKeyStoreCnv.transToPers( &trans->m_keyStore, &pers->m_keyStore, msg );
151}
152
#define endmsg
This file contains the class definition for the DataLinkCnv_p1 class and DataLinkVectorCnv_p1 class.
static const JetCnv_p1 jetCnv
static const JetKeyDescriptorCnv_p1 jetkeyCnv
bool isDefault() const
Test to see if we're in the default state.
virtual void persToTrans(const PersDLink_t *pers, DLink_t *trans, MsgStream &log) const override
virtual void transToPers(const DLink_t *trans, PersDLink_t *pers, MsgStream &log) const override
a typed memory pool that saves time spent allocation small object.
Definition DataPool.h:63
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
void reserve(size_type n)
Attempt to preallocate enough memory for a specified number of elements.
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
virtual void transToPers(const JetCollection *trans, JetCollection_p2 *pers, MsgStream &msg) const override
Method creating the persistent representation JetCollection_p1 from its transient representation JetC...
virtual void persToTrans(const JetCollection_p2 *pers, JetCollection *trans, MsgStream &msg) const override
Method creating the transient representation of JetCollection from its persistent representation JetC...
std::string m_roiAuthor
DataLink_p1 m_keyStore
JetCollection::OrderedVar ordered() const
DataLink< JetKeyDescriptor > m_keyStore
link to the JetKeyDescriptor is mandatory for persistency. Access done through the JetKeyDescriptorIn...
void setOrdered(JetCollection::OrderedVar ordered)
DataVector< Jet >::iterator iterator
void push_back(Jet *j)
JetKeyDescriptorInstance * keyDesc() const
const JetKeyDescriptor * m_ConstStores
JetKeyDescriptor * m_Stores
static JetKeyDescriptorInstance * instance()
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
pool namespace
Definition libname.h:15
MsgStream & msg
Definition testRead.cxx:32