ATLAS Offline Software
Loading...
Searching...
No Matches
DMTestWrite.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
18
19#include "DMTestWrite.h"
29#include "GaudiKernel/MsgStream.h"
31
32
33namespace DMTest {
34
35
41DMTestWrite::DMTestWrite (const std::string& name, ISvcLocator* pSvcLocator)
42 : AthReentrantAlgorithm (name, pSvcLocator)
43{
44}
45
46
47namespace {
48
49
58template <class VEC>
59StatusCode make_vec (StoreGateSvc* sg,
60 int n,
61 int istart,
62 const std::string& key,
63 const std::string& context)
64{
65 VEC* vec = new VEC;
66 for (int i=0; i < n; i++)
67 vec->push_back (new typename VEC::base_value_type (i + istart));
68 CHECK_WITH_CONTEXT( sg->record (vec, key), context);
69 return StatusCode::SUCCESS;
70}
71
72
73StatusCode make_elvec (StoreGateSvc* sg,
74 const std::string& key,
75 const std::string& context)
76{
78 for (int i = 0; i < 10; i += 3) {
79 vec->m_el.push_back (ElementLink<BVec> ("bvec", i));
80 vec->m_el.back().toPersistent();
81 }
82 for (int i = 1; i < 10; i += 3) {
83 vec->m_el.push_back (ElementLink<BVec> ("bder", i));
84 vec->m_el.back().toPersistent();
85 }
86 CHECK_WITH_CONTEXT( sg->record (vec, key), context);
87 return StatusCode::SUCCESS;
88}
89
90
91StatusCode remap_test (StoreGateSvc* sg, int istart, MsgStream& log)
92{
93 ELVec* elv = new ELVec;
94 CHECK_WITH_CONTEXT( sg->record (elv, "elv_remap"), "remap_test");
95
96 BVec* b1 = new BVec;
97 CHECK_WITH_CONTEXT( sg->record (b1, "b1"), "remap_test");
98 for (int i=0; i < 10; i++) {
99 b1->push_back (new B (i + istart + 100));
100 elv->m_el2.push_back (ElementLink<BVec> ("b1", i));
101 if ((i%2) == 0)
102 elv->m_elv2.push_back (ElementLink<BVec> ("b1", i));
103 else
104 elv->m_elv2.push_back (ElementLink<BVec> (*b1, i));
105 }
106
107 BVec* b2 = new BVec;
108 CHECK_WITH_CONTEXT( sg->record (b2, "b2"), "remap_test");
109 for (int i=0; i < 10; i++) {
110 b2->push_back (new B (i + istart + 200));
111 elv->m_el2.push_back (ElementLink<BVec> ("b2", i));
112 elv->m_elv2.push_back (ElementLink<BVec> ("b2", i));
113 }
114
115 elv->m_dl2.push_back (DataLink<BVec> ("b1"));
116 elv->m_dl2.push_back (DataLink<BVec> ("b2"));
117
118 BVec* b3 = new BVec (SG::VIEW_ELEMENTS);
119 CHECK_WITH_CONTEXT( sg->record (b3, "b3"), "remap_test");
120 b3->insert (b3->end(), b1->begin(), b1->end());
121 b3->insert (b3->end(), b2->begin(), b2->end());
122
123 sg->remap (ClassID_traits<BVec>::ID(), "b1", "b3", 0);
124 sg->remap (ClassID_traits<BVec>::ID(), "b2", "b3", b1->size());
125
126 ElementLinkVectorCnv_p1<ElementLinkVector<BVec> > elvcnv;
127 elvcnv.transToPers (&elv->m_elv2, &elv->m_elv2_p, log);
128
129 ElementLinkCnv_p3<ElementLink<BVec> > elcnv;
130 elv->m_el2_p.resize (elv->m_el2.size());
131 for (size_t i=0; i < elv->m_el2.size(); i++)
132 elcnv.transToPers (&elv->m_el2[i], &elv->m_el2_p[i], log);
133
134 DataLinkCnv_p1<DataLink<BVec> > dlcnv;
135 elv->m_dl2_p.resize (elv->m_dl2.size());
136 for (size_t i=0; i < elv->m_dl2.size(); i++)
137 dlcnv.transToPers (&elv->m_dl2[i], &elv->m_dl2_p[i], log);
138
139 return StatusCode::SUCCESS;
140}
141
142
143} // anonymous namespace
144
145
149StatusCode DMTestWrite::execute(const EventContext& ctx) const
150{
151 const unsigned int i = ctx.eventID().event_number();
152 // Make one instance of each container.
153 StoreGateSvc* sg = &*evtStore();
154 CHECK( make_vec<BVec> (sg, 10, 0+i, "bvec", name()) );
155 CHECK( make_vec<BDer> (sg, 10, 100+i, "bder", name()) );
156 CHECK( make_vec<DVec> (sg, 10, 200+i, "dvec", name()) );
157 CHECK( make_vec<DDer> (sg, 10, 300+i, "dder", name()) );
158 CHECK( make_elvec (sg, "elvec", name()) );
159 CHECK( remap_test (sg, i, msg()) );
160
161 return StatusCode::SUCCESS;
162}
163
164
165} // namespace DMTest
std::vector< size_t > vec
Helpers for checking error return status codes and reporting errors.
#define CHECK(...)
Evaluate an expression and check for errors.
#define CHECK_WITH_CONTEXT(...)
Evaluate an expression and check for errors, with an explicitly specified context name.
Algorithm to test writing DataVector data.
This file contains the class definition for the DataLinkCnv_p1 class and DataLinkVectorCnv_p1 class.
Class used for testing the new DataVector inheritance scheme.
Class used for testing the new DataVector inheritance scheme.
Class used for testing the new DataVector inheritance scheme.
Class used for testing new ElementLink.
This file contains the class definition for the ElementLinkCnv_p3 class.
This file contains the class definition for the ElementLinkVectorCnv_p1 class.
An algorithm that can be simultaneously executed in multiple threads.
virtual StatusCode execute(const EventContext &ctx) const override
Algorithm event processing.
DMTestWrite(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
virtual void transToPers(const DLink_t *trans, PersDLink_t *pers, MsgStream &log) const override
void transToPers(const Link_t &trans, PersLink_t &pers, const SG::ThinningCache *cache, MsgStream &log) const
void transToPers(const LinkVect_t &trans, PersLinkVect_t &pers, const SG::ThinningCache *cache, MsgStream &log) const
The Athena Transient Store API.
StatusCode record(T *p2BRegistered, const TKEY &key)
Record an object with a key.
void remap(CLID clid, const TKEY &source, const TKEY &target, off_t index_offset)
Declare a remapping.
Definition B.h:23
DataVector< DMTest::B > BVec
A DataVector containing the base class, B.
::StatusCode StatusCode
StatusCode definition for legacy code.
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Base contained class for DataVector tests.
Definition B.h:34