ATLAS Offline Software
Loading...
Searching...
No Matches
ZdcRecChannelToolLucrod.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5/*
6 * ZdcRecChannelToolLucrod.cxx
7 *
8 * Created on: July 9, 2022
9 * Author: steinber
10 */
11
12
13#include "GaudiKernel/IInterface.h"
14#include "GaudiKernel/MsgStream.h"
15
18#include "ZdcIdentifier/ZdcID.h"
20
21// This will normally be one for HI running, but not for the LHCf run
22#define LUCROD_TRIG_ID 1
23
24//==================================================================================================
26 AsgTool(name)
27{
28 //Declare properties here...
29
30 declareInterface<ZdcRecChannelToolLucrod>(this);
31}
32//==================================================================================================
33
34
35void ZdcRecChannelToolLucrod::handle( const Incident& inc )
36{
37 if ( inc.type() == IncidentType::EndEvent) {
38
39 }
40}
41
42
43//==================================================================================================
45{
46 msg(MSG::INFO) << "Initializing " << name() << endmsg;
47
48 const ZdcID* zdcId = nullptr;
49 if (detStore()->retrieve( zdcId ).isFailure() ) {
50 msg(MSG::ERROR) << "execute: Could not retrieve ZdcID object from the detector store" << endmsg;
51 return StatusCode::FAILURE;
52 }
53 else {
54 msg(MSG::DEBUG) << "execute: retrieved ZdcID" << endmsg;
55 }
56 m_zdcId = zdcId;
57
58 ServiceHandle<IIncidentSvc> incidentSvc("IncidentSvc", name());
59 CHECK(incidentSvc.retrieve());
60 incidentSvc->addListener(this, IncidentType::EndEvent);
61
62 msg(MSG::DEBUG) << "--> ZDC : END OF MODIFICATION 0" << endmsg ;
63 return StatusCode::SUCCESS;
64
65}
66
67//==================================================================================================
68
69//==================================================================================================
71{
72 msg(MSG::INFO) << "Finalizing " << name() << endmsg;
73 return StatusCode::SUCCESS;
74}
75//==================================================================================================
76
78{
79
80 ATH_MSG_DEBUG("Trying to convert LUCROD to Modules!");
81
84
85 typedef std::map<uint32_t,xAOD::ZdcModule*> hashmapType;
86 hashmapType digits_map;
87 Identifier chan_id;
88
89 int Nchan = 0;
90
91 std::vector<uint16_t> rodBCID;
92 std::array<xAOD::ZdcModule*, 2> zdcSideSum_ptrs;
93
94 for (int iside = 0;iside<2;iside++)
95 {
96 xAOD::ZdcModule* new_sum = new xAOD::ZdcModule();
98 zdcSideSum_ptrs[iside] = new_sum;
99 new_sum->setZdcSide((iside==0) ? -1 : 1);
100 }
101
102
103 for (const ZdcLucrodData* zld : *lucrodCollection)
104 {
105 ATH_MSG_DEBUG("Next LUCROD...");
106 uint32_t lucrod_id = zld->GetLucrodID();
107 ATH_MSG_DEBUG("Unpacking LUCROD ID " << lucrod_id << " with BCID=" << zld->GetBCID());
108 rodBCID.push_back(zld->GetBCID());
109
110 const std::vector<uint16_t> zlt = zld->GetTrigData();
111
112 for (size_t i=0;i<zld->GetChanDataSize();i++)
113 {
114 ATH_MSG_DEBUG("Accessing LUCROD ID " << lucrod_id << " chan data " << i);
115 const ZdcLucrodChannel& zlc = zld->GetChanData(i);
116 uint16_t lucrod_channel = zlc.id;
117 ATH_MSG_DEBUG("lucrod_channel=" << lucrod_channel);
118 ATH_MSG_DEBUG("Accessing ZDC map");
119 int side = ZdcLucrodMapRun3::getInstance()->getLucrod(lucrod_id)["side"][lucrod_channel];
120 int module = ZdcLucrodMapRun3::getInstance()->getLucrod(lucrod_id)["module"][lucrod_channel];
121 int type = ZdcLucrodMapRun3::getInstance()->getLucrod(lucrod_id)["type"][lucrod_channel];
122 int channel = ZdcLucrodMapRun3::getInstance()->getLucrod(lucrod_id)["channel"][lucrod_channel];
123 int gain = ZdcLucrodMapRun3::getInstance()->getLucrod(lucrod_id)["gain"][lucrod_channel];
124 float xpos = 0;
125 float ypos = 0;
126 unsigned int row = -1;
127 unsigned int col = -1;
128 if (type == 1) // these variables are only defined for RPD in the json file
129 {
130 xpos = ZdcLucrodMapRun3::getInstance()->getLucrod(lucrod_id)["x"][lucrod_channel];
131 ypos = ZdcLucrodMapRun3::getInstance()->getLucrod(lucrod_id)["y"][lucrod_channel];
132 row = ZdcLucrodMapRun3::getInstance()->getLucrod(lucrod_id)["row"][lucrod_channel];
133 col = ZdcLucrodMapRun3::getInstance()->getLucrod(lucrod_id)["col"][lucrod_channel];
134 }
135
136 ATH_MSG_DEBUG("Done accessing ZDC map side " << side << " module " << module << " type " << type << " channel " << channel << " gain " << gain);
137
138 chan_id = m_zdcId->channel_id(side,module,type,channel);
139 const uint32_t chan_hash = chan_id.get_identifier32().get_compact();
140
141
142 hashmapType::iterator iter = digits_map.find(chan_hash);
143 if (iter == digits_map.end())
144 {
145 ATH_MSG_DEBUG("new channel for " << chan_id);
146 Nchan++;
147 xAOD::ZdcModule* new_mod = new xAOD::ZdcModule();
149 digits_map.insert(std::pair<uint32_t,xAOD::ZdcModule*>(chan_hash,new_mod));
150 iter = digits_map.find(chan_hash);
151 (*iter).second->setZdcId(chan_hash);
152 (*iter).second->setZdcSide(side);
153 (*iter).second->setZdcModule(module);
154 (*iter).second->setZdcType(type);
155 (*iter).second->setZdcChannel(channel);
156
157 // RPDs are labeled as type 1
158 //
159 if (type == 1) {
160 // Save the (nominal) positions of the sector relative to the RPD center
161 //
162 static const SG::Accessor<float_t> xposRelAcc ("xposRel");
163 static const SG::Accessor<float_t> yposRelAcc ("yposRel");
164 static const SG::Accessor<uint16_t> rowAcc ("row");
165 static const SG::Accessor<uint16_t> colAcc ("col");
166 xposRelAcc (*iter->second) = xpos;
167 yposRelAcc (*iter->second) = ypos;
168 rowAcc (*iter->second) = row;
169 colAcc (*iter->second) = col;
170 }
171 }
172
173 if (iter != digits_map.end())
174 {
175
176 ATH_MSG_DEBUG("adding waveform data for " << chan_id << " gain " << gain);
177
178 if (gain==0)
179 {
180 (*iter).second->setWaveform("g0data",zlc.waveform);
181 }
182 if (gain==1)
183 {
184 (*iter).second->setWaveform("g1data",zlc.waveform);
185 }
186
187 if (type == 0) {
188 if (gain ==0) {
189 static const SG::Accessor<uint16_t> LucrodTriggerAmpLGAcc ("LucrodTriggerAmpLG");
190 LucrodTriggerAmpLGAcc (*iter->second) = zlt.at(i);
191 }
192 else {
193 static const SG::Accessor<uint16_t> LucrodTriggerAmpAcc ("LucrodTriggerAmp");
194 LucrodTriggerAmpAcc (*iter->second) = zlt.at(i);
195 }
196 }
197 }
198
199 }
200
201 // Get the trigger information from ZDC lucrods
202 //
203 // Unfortunately, we have to hack a bit to get the information we want
204 //
205 int type = ZdcLucrodMapRun3::getInstance()->getLucrod(lucrod_id)["type"][0];
206 int gain = ZdcLucrodMapRun3::getInstance()->getLucrod(lucrod_id)["gain"][0];
207
208 if (type == 0) {
209 std::string auxName = (gain == 0 ? "LucrodTriggerSideAmpLG" : "LucrodTriggerSideAmp");
210 static const SG::Accessor<uint16_t> auxNameAcc (auxName);
211 auxNameAcc ( *zdcSideSum_ptrs[0]) = zld->GetTrigAvgC();
212 auxNameAcc ( *zdcSideSum_ptrs[1]) = zld->GetTrigAvgA();
213 }
214 }
215
216 xAOD::ZdcModule* global_sum = new xAOD::ZdcModule();
218 global_sum->setZdcSide(0); // special "global" sum
219 static const SG::Accessor<std::vector<uint16_t> > rodBCIDAcc ("rodBCID");
220 rodBCIDAcc (*global_sum) = std::move (rodBCID);
221
222 ATH_MSG_DEBUG("Done trying to convert!!");
223
224 return Nchan;
225
226}
227
228
#define endmsg
#define ATH_MSG_DEBUG(x)
Helper class to provide type-safe access to aux data.
#define CHECK(...)
Evaluate an expression and check for errors.
struct ZdcLucrodChannelType ZdcLucrodChannel
const ServiceHandle< StoreGateSvc > & detStore() const
value_type push_back(value_type pElem)
Add an element to the end of the collection.
std::unique_ptr< base_value_type > unique_type
Definition DataVector.h:829
value_type get_compact() const
Get the compact id.
Identifier32 get_identifier32() const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
Helper class to provide type-safe access to aux data.
SG::Accessor< T, ALLOC > Accessor
Definition AuxElement.h:572
Definition ZdcID.h:25
static const ZdcLucrodMapRun3 * getInstance()
const nlohmann::json & getLucrod(int i) const
virtual StatusCode finalize() override
int convertLucrod2ZM(const ZdcLucrodDataContainer *lucrodContainer, xAOD::ZdcModuleContainer *zdcModules, xAOD::ZdcModuleContainer *zdcSums) const
virtual void handle(const Incident &) override
ZdcRecChannelToolLucrod(const std::string &name)
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
AsgTool(const std::string &name)
Constructor specifying the tool instance's name.
Definition AsgTool.cxx:58
void setZdcSide(int)
ZdcModuleContainer_v1 ZdcModuleContainer
ZdcModule_v1 ZdcModule
Definition ZdcModule.h:15
std::vector< uint16_t > waveform
MsgStream & msg
Definition testRead.cxx:32