ATLAS Offline Software
ZdcTrigValidTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
7 #include <fstream>
8 #include <bitset>
9 #include <stdexcept>
12 
14 
15 //**********************************************************************
16 namespace ZDC{
18  : asg::AsgTool(name), m_name(name)
19  {
20 
21 #ifndef XAOD_STANDALONE
22  declareInterface<IZdcAnalysisTool>(this);
23 #endif
24  declareProperty("Message", m_msg = "");
25  declareProperty("WriteAux", m_writeAux = true);
26  declareProperty("AuxSuffix", m_auxSuffix = "");
27 }
28 
29 //**********************************************************************
30 
32 {
33  ATH_MSG_DEBUG("Deleting ZdcTrigValidTool named " << m_name);
34 }
35 
37 
38  ATH_MSG_INFO("Initialising tool " << m_name);
39  ATH_CHECK(m_trigDecTool.retrieve());
40  ATH_MSG_INFO("TDT retrieved");
41 
42  // Find the full path to filename:
44  ATH_MSG_INFO("Reading file " << file);
45  std::ifstream fin(file.c_str());
46  if(!fin){
47  ATH_MSG_ERROR("Can not read file: " << file);
48  return StatusCode::FAILURE;
49  }
51 
52  // Obtain LUTs from Calibration Area
53  // A data member to hold the side A LUT values
54  std::array<unsigned int, 4096> sideALUT = data["LucrodHighGain"]["LUTs"]["sideA"];
55  // A data member to hold the side C LUT values
56  std::array<unsigned int, 4096> sideCLUT = data["LucrodHighGain"]["LUTs"]["sideC"];
57  // A data member to hold the Combined LUT values
58  std::array<unsigned int, 256> combLUT = data["LucrodHighGain"]["LUTs"]["comb"];
59 
60  //Construct Trigger Map
61  m_triggerMap.insert({"L1_ZDC_BIT0",0});
62  m_triggerMap.insert({"L1_ZDC_BIT1",1});
63  m_triggerMap.insert({"L1_ZDC_BIT2",2});
64 
65  // Construct Simulation Objects
66  m_modInputs_p = std::make_shared<ZDCTriggerSim::ModuleAmplInputsFloat>(ZDCTriggerSim::ModuleAmplInputsFloat());
67  m_simTrig = std::make_shared<ZDCTriggerSimModuleAmpls>(ZDCTriggerSimModuleAmpls(sideALUT, sideCLUT, combLUT));
68  ATH_MSG_INFO(m_name<<" Initialised");
69 
70  m_zdcModuleAmp = "ZdcModules.Amplitude"+m_auxSuffix;
71  ATH_CHECK(m_zdcModuleAmp.initialize());
72  m_trigValStatus = "ZdcSums.TrigValStatus"+m_auxSuffix;
73  ATH_CHECK(m_trigValStatus.initialize());
74 
75  return StatusCode::SUCCESS;
76 
77 }
78 
79 
81 {
82  std::vector<float> moduleEnergy = {0., 0., 0., 0., 0., 0., 0., 0.};
83 
85 
86  bool trigMatch = false;
87  for (const auto zdcModule : moduleContainer) {
88  if (zdcModule->zdcType() == 1) continue;
89 
90  // Side A
91  if (zdcModule->zdcSide() > 0) {
92  moduleEnergy.at(zdcModule->zdcModule()) = zdcModuleAmp(*zdcModule);
93  }
94 
95  // Side C
96  if (zdcModule->zdcSide() < 0) {
97  moduleEnergy.at(zdcModule->zdcModule() + 4) = zdcModuleAmp(*zdcModule);
98  }
99  }
100  // Get Output as an integer (0-7)
101  m_modInputs_p->setData(moduleEnergy);
102 
103  // call ZDCTriggerSim to actually get ZDC Bits
104  unsigned int wordOut = m_simTrig->simLevel1Trig(ZDCTriggerSim::SimDataCPtr(m_modInputs_p));
105 
106  // convert int to bitset
107  std::bitset<3> bin(wordOut);
108 
109  // get trigger decision tool
110  const auto &trigDecTool = m_trigDecTool;
111  unsigned int wordOutCTP = 0;
112 
113 
114  // iterate through zdc bit output from CTP, validate that they match above bitset
115  for (const auto &trig : m_triggerList)
116  {
117 
118  if (m_triggerMap.find(trig) == m_triggerMap.end())
119  continue;
120  if (not trigDecTool->isPassed(trig, TrigDefs::Physics | TrigDefs::allowResurrectedDecision))
121  {
122  ATH_MSG_DEBUG("Chain " << trig << " is passed: NO");
123  continue;
124  }
125  ATH_MSG_DEBUG("Chain " << trig << " is passed: YES");
126  wordOutCTP += 1 << m_triggerMap[trig];
127  }
128 
129  trigMatch = (wordOut == wordOutCTP) ? 1 : 0;
131 
132  // write 1 if decision from ZDC firmware matches CTP, 0 otherwize
133  for(const auto zdc_sum : moduleSumContainer){
134  if(m_writeAux) trigValStatus(*zdc_sum) = trigMatch;
135  }
136  ATH_MSG_DEBUG("ZDC Trigger Status: " << trigMatch);
137 
138 return StatusCode::SUCCESS;
139 }
140 } //namespace ZDC
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
ZDC::ZdcTrigValidTool::m_trigDecTool
PublicToolHandle< Trig::TrigDecisionTool > m_trigDecTool
Tool to tell whether a specific trigger is passed.
Definition: ZdcTrigValidTool.h:45
ZDC::ZdcTrigValidTool::initialize
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
Definition: ZdcTrigValidTool.cxx:36
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
json
nlohmann::json json
Definition: HistogramDef.cxx:9
ZDC::ZdcTrigValidTool::~ZdcTrigValidTool
virtual ~ZdcTrigValidTool() override
Definition: ZdcTrigValidTool.cxx:31
ZDC::ZdcTrigValidTool::m_triggerMap
std::map< std::string, unsigned int > m_triggerMap
Definition: ZdcTrigValidTool.h:61
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
ZDC::ZdcTrigValidTool::m_triggerList
Gaudi::Property< std::vector< std::string > > m_triggerList
Definition: ZdcTrigValidTool.h:50
parse
std::map< std::string, std::string > parse(const std::string &list)
Definition: egammaLayerRecalibTool.cxx:983
ZDC::ZdcTrigValidTool::m_auxSuffix
std::string m_auxSuffix
Definition: ZdcTrigValidTool.h:62
asg
Definition: DataHandleTestTool.h:28
ZDC::ZdcTrigValidTool::m_modInputs_p
std::shared_ptr< ZDCTriggerSim::ModuleAmplInputsFloat > m_modInputs_p
A data member to hold the ZDCTrigger Object that stores input floats: shared ptr to ensure cleanup.
Definition: ZdcTrigValidTool.h:55
ZDCTriggerSimModuleAmpls
Definition: ForwardDetectors/ZDC/ZdcUtils/ZdcUtils/ZDCTriggerSim.h:262
ZDC::ZdcTrigValidTool::m_simTrig
std::shared_ptr< ZDCTriggerSimModuleAmpls > m_simTrig
A data member to hold the ZDCTrigger Object that computes the LUT logic: shared ptr to ensure cleanup...
Definition: ZdcTrigValidTool.h:58
ZDC::ZdcTrigValidTool::m_name
std::string m_name
Definition: ZdcTrigValidTool.h:63
ZDC::ZdcTrigValidTool::ZdcTrigValidTool
ZdcTrigValidTool(const std::string &name)
Definition: ZdcTrigValidTool.cxx:17
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
SG::ReadDecorHandle
Handle class for reading a decoration on an object.
Definition: StoreGate/StoreGate/ReadDecorHandle.h:94
ZDC::ZdcTrigValidTool::m_trigValStatus
SG::WriteDecorHandleKey< xAOD::ZdcModuleContainer > m_trigValStatus
Definition: ZdcTrigValidTool.h:67
ZDC::ZdcTrigValidTool::recoZdcModules
virtual StatusCode recoZdcModules(const xAOD::ZdcModuleContainer &moduleContainer, const xAOD::ZdcModuleContainer &moduleSumContainer) override
Definition: ZdcTrigValidTool.cxx:80
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
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition: StoreGate/StoreGate/WriteDecorHandle.h:99
ZDC::ZdcTrigValidTool::m_writeAux
bool m_writeAux
Definition: ZdcTrigValidTool.h:64
file
TFile * file
Definition: tile_monitor.h:29
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
ZDCTriggerSim::SimDataCPtr
std::shared_ptr< const ZDCTriggerSimDataBase > SimDataCPtr
Definition: ForwardDetectors/ZDC/ZdcUtils/ZdcUtils/ZDCTriggerSim.h:162
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
WriteDecorHandle.h
Handle class for adding a decoration to an object.
PathResolver.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
ZDCTriggerSimData
Definition: ForwardDetectors/ZDC/ZdcUtils/ZdcUtils/ZDCTriggerSim.h:58
plotBeamSpotVxVal.bin
int bin
Definition: plotBeamSpotVxVal.py:83
PathResolverFindCalibFile
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.cxx:431
ZDC
Definition: RpdSubtractCentroidTool.cxx:13
ReadDecorHandle.h
Handle class for reading a decoration on an object.
compute_lumi.fin
fin
Definition: compute_lumi.py:19
ZDC::ZdcTrigValidTool::m_zdcModuleAmp
SG::ReadDecorHandleKey< xAOD::ZdcModuleContainer > m_zdcModuleAmp
Definition: ZdcTrigValidTool.h:66
json
nlohmann::json json
Definition: ZdcTrigValidTool.cxx:13
ZdcTrigValidTool.h
ZDC::ZdcTrigValidTool::m_msg
std::string m_msg
Definition: ZdcTrigValidTool.h:60
ZDC::ZdcTrigValidTool::m_lutFile
Gaudi::Property< std::string > m_lutFile
Definition: ZdcTrigValidTool.h:52