ATLAS Offline Software
Loading...
Searching...
No Matches
TgcPrepDataReplicationTool3BCtoAllBC.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3*/
4
6
11
12//================ Constructor =================================================
14 TgcPrepDataReplicationTool3BCtoAllBC(const std::string& t,
15 const std::string& n,
16 const IInterface* p)
17 : base_class(t, n, p) {}
18
19//================ Initialization ==============================================
21 ATH_CHECK(AthAlgTool::initialize());
22 ATH_CHECK(m_idHelperSvc.retrieve());
23
24 for (int ibc = 0; ibc < BC_ALL; ibc++) {
25 std::ostringstream location;
26 location << "TGC_Measurements" << (ibc == BC_PREVIOUS ? "PriorBC" : "")
27 << (ibc == BC_NEXT ? "NextBC" : "");
28 m_3BCKeys.at(ibc) = location.str();
29 }
30
31 ATH_CHECK(m_3BCKeys.initialize());
32
33 return StatusCode::SUCCESS;
34}
35
37 const EventContext& ctx) const {
38 return convert3BCtoAllBC(ctx);
39}
40
42 const EventContext& ctx) const {
43
45 ctx);
47 tgcPrepDataContainerAll.record(std::make_unique<TgcPrepDataContainer>(
48 m_idHelperSvc->tgcIdHelper().module_hash_max())));
49
50 auto tgc3BCs = m_3BCKeys.makeHandles(ctx);
51
52 // convert
53 int ibc{0};
55 m_3BCKeys.makeHandles(ctx)) {
56 uint16_t bcBitMap = 0;
57 if (ibc == BC_PREVIOUS) {
59 } else if (ibc == BC_CURRENT) {
61 } else if (ibc == BC_NEXT) {
62 bcBitMap = TgcPrepData::BCBIT_NEXT;
63 }
64 ++ibc;
65
66 if (!handle.isValid()) {
67 ATH_MSG_FATAL("Cannot retrieve " << handle.key());
68 return StatusCode::FAILURE;
69 }
70 for (const Muon::TgcPrepDataCollection* coll : *handle) {
71
72 for (const Muon::TgcPrepData* to_copy : *coll) {
73 const Identifier channelId = to_copy->identify();
74 const Identifier elementId =
75 m_idHelperSvc->tgcIdHelper().elementID(channelId);
76
77 Muon::TgcPrepDataCollection* collection =
78 Muon::IDC_Helper::getCollection<TgcPrepDataContainer,
80 elementId, tgcPrepDataContainerAll.ptr(),
81 m_idHelperSvc->tgcIdHelper(), msg());
82
84 std::find_if(collection->begin(), collection->end(),
85 [&channelId](const TgcPrepData* duplicate) {
86 return channelId == duplicate->identify();
87 });
88 if (duplicateInAllBCs != collection->end()) {
89 TgcPrepData* prd = *duplicateInAllBCs;
90 prd->setBcBitMap(prd->getBcBitMap() | bcBitMap);
91 } else {
92 Muon::TgcPrepData* newPrepData =
94 to_copy, bcBitMap);
95 newPrepData->setHashAndIndex(collection->identifyHash(),
96 collection->size());
97 collection->push_back(newPrepData);
98 }
99 }
100 }
101 }
102
103 return StatusCode::SUCCESS;
104}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_FATAL(x)
value_type push_back(value_type pElem)
DataModel_detail::iterator< DataVector > iterator
Definition DataVector.h:842
const_iterator end() const noexcept
const_iterator begin() const noexcept
size_type size() const noexcept
virtual IdentifierHash identifyHash() const override final
virtual StatusCode replicate(const EventContext &ctx) const override
TgcPrepDataReplicationTool3BCtoAllBC(const std::string &t, const std::string &n, const IInterface *p)
Constructor.
StatusCode convert3BCtoAllBC(const EventContext &ctx) const
SG::WriteHandleKey< TgcPrepDataContainer > m_AllBCKey
SG::ReadHandleKeyArray< TgcPrepDataContainer > m_3BCKeys
static TgcPrepData * makeTgcPrepData(const TgcPrepData *to_copy, uint16_t bcBitMap)
Make new TgcPrepData.
Class to represent TGC measurements.
Definition TgcPrepData.h:32
void setBcBitMap(const uint16_t)
set the bcBitMap for this PRD
uint16_t getBcBitMap() const
Returns the bcBitMap of this PRD bit2 for Previous BC, bit1 for Current BC, bit0 for Next BC.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
pointer_type ptr()
Dereference the pointer.
void setHashAndIndex(unsigned short collHash, unsigned short objIndex)
TEMP for testing: might make some classes friends later ...
MuonPrepDataCollection< TgcPrepData > TgcPrepDataCollection
MuonPrepDataContainerT< TgcPrepData > TgcPrepDataContainer
MsgStream & msg
Definition testRead.cxx:32