ATLAS Offline Software
Loading...
Searching...
No Matches
ZdcRecRun3Decode.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
5/*
6 * ZdcRecRun3Decode.cxx
7 *
8 * Created on: June 23, 2022 (never forget)
9 * Author: steinberg@bnl.gov
10 */
11
12
13#include <memory>
14
15#include "GaudiKernel/ISvcLocator.h"
16#include "GaudiKernel/MsgStream.h"
17#include "GaudiKernel/StatusCode.h"
21
27
28
29//==================================================================================================
30ZdcRecRun3Decode::ZdcRecRun3Decode(const std::string& name, ISvcLocator* pSvcLocator) :
31
32 AthAlgorithm(name, pSvcLocator),
33 m_ownPolicy(static_cast<int> (SG::OWN_ELEMENTS))
34{
35 declareProperty("OwnPolicy",m_ownPolicy) ;
36}
37
38//==================================================================================================
39
40//==================================================================================================
42//==================================================================================================
43
44//==================================================================================================
46{
47 MsgStream mLog(msgSvc(), name());
48
49 // Reconstruction Tool
50 ATH_CHECK( m_ChannelTool.retrieve() );
51
52 // Reconstruction Tool
53
54 ATH_CHECK( m_zdcModuleContainerName.initialize() );
55 ATH_CHECK( m_zdcSumContainerName.initialize() );
57 ATH_CHECK( m_eventInfoKey.initialize() );
58 ATH_CHECK( m_eventInfoDecorKey.initialize() );
59
61 mLog << MSG::DEBUG << "...will OWN its cells." << endmsg;
62 else
63 mLog << MSG::DEBUG << "...will VIEW its cells." << endmsg;
64
65
66 mLog << MSG::DEBUG << "--> ZDC: ZdcRecRun3Decode initialization complete" << endmsg;
67
68 return StatusCode::SUCCESS;
69}
70//==================================================================================================
71
72//==================================================================================================
74{
75
76 ATH_MSG_DEBUG("In ZdRecRun3");
77
78 const EventContext& ctx = Gaudi::Hive::currentContext();
79
80 ATH_MSG_DEBUG ("--> ZDC: ZdcRecRun3Decode execute starting on "
81 << ctx.evt()
82 << "th event");
83
84 //Look for the container presence
85 if (m_zldContainerName.empty()) {
86 return StatusCode::SUCCESS;
87 }
88
89 ATH_MSG_DEBUG("Trying to get LUCROD DATA!");
91 ATH_MSG_DEBUG("Did I get LUCROD DATA?");
92
93 if (zldContainer->size() < m_nFragments)
94 {
95 int zdcLucrod = 0;
96 int rpdLucrod = 0;
97 for (auto zld : *zldContainer)
98 {
99 uint32_t lucrod_id = zld->GetLucrodID();
100 if (lucrod_id == ZdcEventInfo::LucrodLowGain || lucrod_id == ZdcEventInfo::LucrodHighGain) // ZDC LUCRODs
101 {
102 zdcLucrod++;
103 }
104 else if (lucrod_id == ZdcEventInfo::LucrodRPD1A
105 || lucrod_id == ZdcEventInfo::LucrodRPD1C
106 || lucrod_id == ZdcEventInfo::LucrodRPD2A
107 || lucrod_id == ZdcEventInfo::LucrodRPD2C)
108 {
109 rpdLucrod++;
110 }
111 else
112 {
113 ATH_MSG_WARNING("Unidentified LUCROD ID = " << lucrod_id);
114 }
115 }
117 if (!eventInfo->updateErrorState(xAOD::EventInfo::ForwardDet,xAOD::EventInfo::Error))
118 {
119 ATH_MSG_WARNING( " cannot set EventInfo error state for ForwardDet " );
120 }
121 if (!eventInfo->updateEventFlagBit(xAOD::EventInfo::ForwardDet,ZdcEventInfo::DECODINGERROR))
122 {
123 ATH_MSG_WARNING( " cannot set flag bit for ForwardDet " );
124 }
125 if (rpdLucrod < ZdcEventInfo::nTotalRpdLucrod)
126 {
127 if (!eventInfo->updateEventFlagBit(xAOD::EventInfo::ForwardDet,ZdcEventInfo::RPDDECODINGERROR))
128 {
129 ATH_MSG_WARNING( " cannot set RPDDECODINGERROR flag bit for ForwardDet " );
130 }
131 }
132 if (zdcLucrod < ZdcEventInfo::nTotalZdcLucrod)
133 {
134 if (!eventInfo->updateEventFlagBit(xAOD::EventInfo::ForwardDet,ZdcEventInfo::ZDCDECODINGERROR))
135 {
136 ATH_MSG_WARNING( " cannot set ZDCDECODINGERROR flag bit for ForwardDet " );
137 }
138 }
139 }
140
141 //Create the containers to hold the reconstructed information (you just pass the pointer and the converter does the work)
142 std::unique_ptr<xAOD::ZdcModuleContainer> moduleContainer( new xAOD::ZdcModuleContainer());
143 std::unique_ptr<xAOD::ZdcModuleAuxContainer> moduleAuxContainer( new xAOD::ZdcModuleAuxContainer() );
144 moduleContainer->setStore( moduleAuxContainer.get() );
145
146 //Create the containers to hold the reconstructed information (you just pass the pointer and the converter does the work)
147 std::unique_ptr<xAOD::ZdcModuleContainer> moduleSumContainer( new xAOD::ZdcModuleContainer());
148 std::unique_ptr<xAOD::ZdcModuleAuxContainer> moduleSumAuxContainer( new xAOD::ZdcModuleAuxContainer() );
149 moduleSumContainer->setStore( moduleSumAuxContainer.get() );
150
151 ATH_MSG_DEBUG("Trying to convert!");
152
153 // rearrange ZDC channels and perform fast reco on all channels (including non-big tubes)
154 int ncha = m_ChannelTool->convertLucrod2ZM(zldContainer.get(), moduleContainer.get(), moduleSumContainer.get() );
155 ATH_MSG_DEBUG("m_ChannelTool->convertLucrod2ZM returned " << ncha << " channels");
156
157 ATH_MSG_DEBUG("Dumping modules");
158 ATH_MSG_DEBUG( ZdcModuleToString(*moduleContainer) );
159 ATH_MSG_DEBUG("Dumping module sums");
160 ATH_MSG_DEBUG( ZdcModuleToString(*moduleSumContainer) );
161
162 // eventually reconstruct RPD, using ML libraries
163 // ATH_CHECK( m_rpdTool...)
164
166 ATH_CHECK( moduleContainerH.record (std::move(moduleContainer),
167 std::move(moduleAuxContainer)) );
168
170 ATH_CHECK( moduleSumContainerH.record (std::move(moduleSumContainer),
171 std::move(moduleSumAuxContainer)) );
172
173 return StatusCode::SUCCESS;
174
175}
176//==================================================================================================
177
178//==================================================================================================
180{
181
182 ATH_MSG_DEBUG( "--> ZDC: ZdcRecRun3Decode finalize complete" );
183
184 return StatusCode::SUCCESS;
185
186}
187//==================================================================================================
188
#define endmsg
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
Handle class for reading from StoreGate.
Handle class for recording to StoreGate.
Define enumerations for event-level ZDC data.
std::string ZdcModuleToString(const xAOD::ZdcModule &zm)
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
const_pointer_type get() const
Dereference the pointer, but don't cache anything.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
ZdcRecRun3Decode(const std::string &name, ISvcLocator *pSvcLocator)
StatusCode execute() override
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
StatusCode initialize() override
StatusCode finalize() override
SG::ReadHandleKey< ZdcLucrodDataContainer > m_zldContainerName
SG::WriteHandleKey< xAOD::ZdcModuleContainer > m_zdcSumContainerName
SG::WriteDecorHandleKey< xAOD::EventInfo > m_eventInfoDecorKey
Gaudi::Property< unsigned int > m_nFragments
ToolHandle< ZdcRecChannelToolLucrod > m_ChannelTool
SG::WriteHandleKey< xAOD::ZdcModuleContainer > m_zdcModuleContainerName
@ ForwardDet
The forward detectors.
@ Error
The sub-detector issued an error.
Forward declaration.
@ OWN_ELEMENTS
this data object owns its elements
ZdcModuleContainer_v1 ZdcModuleContainer
ZdcModuleAuxContainer_v2 ZdcModuleAuxContainer