ATLAS Offline Software
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"
19 #include "AthContainers/Accessor.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 
35 void 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 
93  for (const ZdcLucrodData* zld : *lucrodCollection)
94  {
95  ATH_MSG_DEBUG("Next LUCROD...");
96  uint32_t lucrod_id = zld->GetLucrodID();
97  ATH_MSG_DEBUG("Unpacking LUCROD ID " << lucrod_id << " with BCID=" << zld->GetBCID());
98  rodBCID.push_back(zld->GetBCID());
99 
100  const std::vector<uint16_t> zlt = zld->GetTrigData();
101 
102  for (size_t i=0;i<zld->GetChanDataSize();i++)
103  {
104  ATH_MSG_DEBUG("Accessing LUCROD ID " << lucrod_id << " chan data " << i);
105  const ZdcLucrodChannel& zlc = zld->GetChanData(i);
106  uint16_t lucrod_channel = zlc.id;
107  ATH_MSG_DEBUG("lucrod_channel=" << lucrod_channel);
108  ATH_MSG_DEBUG("Accessing ZDC map");
109  int side = ZdcLucrodMapRun3::getInstance()->getLucrod(lucrod_id)["side"][lucrod_channel];
110  int module = ZdcLucrodMapRun3::getInstance()->getLucrod(lucrod_id)["module"][lucrod_channel];
111  int type = ZdcLucrodMapRun3::getInstance()->getLucrod(lucrod_id)["type"][lucrod_channel];
112  int channel = ZdcLucrodMapRun3::getInstance()->getLucrod(lucrod_id)["channel"][lucrod_channel];
113  int gain = ZdcLucrodMapRun3::getInstance()->getLucrod(lucrod_id)["gain"][lucrod_channel];
114  float xpos = 0;
115  float ypos = 0;
116  unsigned int row = -1;
117  unsigned int col = -1;
118  if (type == 1) // these variables are only defined for RPD in the json file
119  {
120  xpos = ZdcLucrodMapRun3::getInstance()->getLucrod(lucrod_id)["x"][lucrod_channel];
121  ypos = ZdcLucrodMapRun3::getInstance()->getLucrod(lucrod_id)["y"][lucrod_channel];
122  row = ZdcLucrodMapRun3::getInstance()->getLucrod(lucrod_id)["row"][lucrod_channel];
123  col = ZdcLucrodMapRun3::getInstance()->getLucrod(lucrod_id)["col"][lucrod_channel];
124  }
125 
126  ATH_MSG_DEBUG("Done accessing ZDC map side " << side << " module " << module << " type " << type << " channel " << channel << " gain " << gain);
127 
129  const uint32_t chan_hash = chan_id.get_identifier32().get_compact();
130 
131 
132  hashmapType::iterator iter = digits_map.find(chan_hash);
133  if (iter == digits_map.end())
134  {
135  ATH_MSG_DEBUG("new channel for " << chan_id);
136  Nchan++;
137  xAOD::ZdcModule* new_mod = new xAOD::ZdcModule();
138  zdcModules->push_back(xAOD::ZdcModuleContainer::unique_type(new_mod));
139  digits_map.insert(std::pair<uint32_t,xAOD::ZdcModule*>(chan_hash,new_mod));
140  iter = digits_map.find(chan_hash);
141  (*iter).second->setZdcId(chan_hash);
142  (*iter).second->setZdcSide(side);
143  (*iter).second->setZdcModule(module);
144  (*iter).second->setZdcType(type);
145  (*iter).second->setZdcChannel(channel);
146 
147  // RPDs are labeled as type 1
148  //
149  if (type == 1) {
150  // Save the (nominal) positions of the sector relative to the RPD center
151  //
152  static const SG::Accessor<float_t> xposRelAcc ("xposRel");
153  static const SG::Accessor<float_t> yposRelAcc ("yposRel");
154  static const SG::Accessor<uint16_t> rowAcc ("row");
155  static const SG::Accessor<uint16_t> colAcc ("col");
156  xposRelAcc (*iter->second) = xpos;
157  yposRelAcc (*iter->second) = ypos;
158  rowAcc (*iter->second) = row;
159  colAcc (*iter->second) = col;
160  }
161  }
162 
163  if (iter != digits_map.end())
164  {
165 
166  ATH_MSG_DEBUG("adding waveform data for " << chan_id << " gain " << gain);
167 
168  if (gain==0)
169  {
170  (*iter).second->setWaveform("g0data",zlc.waveform);
171  }
172  if (gain==1)
173  {
174  (*iter).second->setWaveform("g1data",zlc.waveform);
175  }
176 
177  if (lucrod_id==LUCROD_TRIG_ID)
178  {
179  static const SG::Accessor<uint16_t> LucrodTriggerAmpAcc ("LucrodTriggerAmp");
180  LucrodTriggerAmpAcc (*iter->second) = zlt.at(i);
181  }
182  }
183 
184  }
185 
186  if (lucrod_id==LUCROD_TRIG_ID)
187  {
188  for (int iside = 0;iside<2;iside++)
189  {
190  xAOD::ZdcModule* new_sum = new xAOD::ZdcModule();
192  new_sum->setZdcSide((iside==0) ? -1 : 1);
193  static const SG::Accessor<uint16_t> LucrodTriggerSideAmpAcc ("LucrodTriggerSideAmp");
194  LucrodTriggerSideAmpAcc (*new_sum) = (iside==0) ? zld->GetTrigAvgC() : zld->GetTrigAvgA();
195  }
196  }
197  }
198 
199  xAOD::ZdcModule* global_sum = new xAOD::ZdcModule();
200  zdcSums->push_back(xAOD::ZdcModuleContainer::unique_type(global_sum));
201  global_sum->setZdcSide(0); // special "global" sum
202  static const SG::Accessor<std::vector<uint16_t> > rodBCIDAcc ("rodBCID");
203  rodBCIDAcc (*global_sum) = std::move (rodBCID);
204 
205  ATH_MSG_DEBUG("Done trying to convert!!");
206 
207  return Nchan;
208 
209 }
210 
211 
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
query_example.row
row
Definition: query_example.py:24
ZdcLucrodChannelType
Definition: ZdcLucrodData.h:12
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:28
SG::Accessor
Helper class to provide type-safe access to aux data.
Definition: Control/AthContainers/AthContainers/Accessor.h:66
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
ZdcLucrodDataContainer
Definition: ZdcLucrodDataContainer.h:12
CaloCondBlobAlgs_fillNoiseFromASCII.gain
gain
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:110
xAOD::ZdcModule_v1
Class containing ZDC Module information.
Definition: ZdcModule_v1.h:25
ZdcLucrodMapRun3::getLucrod
const nlohmann::json & getLucrod(int i) const
Definition: ZdcLucrodMapRun3.h:23
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
ZdcID::channel_id
Identifier channel_id(int side, int module, int type, int channel) const
Definition: ZdcID.h:205
TRT::Hit::side
@ side
Definition: HitInfo.h:83
python.PyAthena.module
module
Definition: PyAthena.py:134
Identifier32::get_compact
value_type get_compact(void) const
Get the compact id.
Definition: Identifier32.h:171
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:88
ZdcLucrodChannelType::waveform
std::vector< uint16_t > waveform
Definition: ZdcLucrodData.h:15
lumiFormat.i
int i
Definition: lumiFormat.py:92
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ZdcRecChannelToolLucrod::convertLucrod2ZM
int convertLucrod2ZM(const ZdcLucrodDataContainer *lucrodContainer, xAOD::ZdcModuleContainer *zdcModules, xAOD::ZdcModuleContainer *zdcSums) const
Definition: ZdcRecChannelToolLucrod.cxx:77
ZdcLucrodMapRun3.h
ZdcRecChannelToolLucrod::initialize
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
Definition: ZdcRecChannelToolLucrod.cxx:44
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
DataVector::unique_type
std::unique_ptr< base_value_type > unique_type
Type of a unique_ptr that can be used to insert elements into this container.
Definition: DataVector.h:828
ZdcRecChannelToolLucrod::finalize
virtual StatusCode finalize() override
Definition: ZdcRecChannelToolLucrod.cxx:70
xAOD::ZdcModule
ZdcModule_v1 ZdcModule
Definition: ZdcModule.h:15
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
ZdcRecChannelToolLucrod::m_zdcId
const ZdcID * m_zdcId
Definition: ZdcRecChannelToolLucrod.h:46
Accessor.h
Helper class to provide type-safe access to aux data.
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
query_example.col
col
Definition: query_example.py:7
ZdcID.h
xAOD::ZdcModule_v1::setZdcSide
void setZdcSide(int)
ZdcLucrodData
Definition: ZdcLucrodData.h:20
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DEBUG
#define DEBUG
Definition: page_access.h:11
LUCROD_TRIG_ID
#define LUCROD_TRIG_ID
Definition: ZdcRecChannelToolLucrod.cxx:22
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
ZdcLucrodChannelType::id
unsigned int id
Definition: ZdcLucrodData.h:14
Identifier::get_identifier32
Identifier32 get_identifier32(void) const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
ZdcRecChannelToolLucrod::handle
virtual void handle(const Incident &) override
Definition: ZdcRecChannelToolLucrod.cxx:35
ZdcRecChannelToolLucrod::ZdcRecChannelToolLucrod
ZdcRecChannelToolLucrod(const std::string &name)
Definition: ZdcRecChannelToolLucrod.cxx:25
ZdcID
Definition: ZdcID.h:25
ZdcRecChannelToolLucrod.h
ServiceHandle< IIncidentSvc >
ZdcLucrodMapRun3::getInstance
static const ZdcLucrodMapRun3 * getInstance()
Definition: ZdcLucrodMapRun3.cxx:10