ATLAS Offline Software
Loading...
Searching...
No Matches
gFEXCondAlgo.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// Interface for gFEXCondAlgo - Tool to read the COOL DB for gFEX
6// -------------------
7// begin : 23 10 2024
8// email : jared.little@cern.ch
9//***************************************************************************
10#include "gFEXCondAlgo.h"
11#include "nlohmann/json.hpp"
12#include "CoralBase/Blob.h"
14
15namespace LVL1 {
16
17gFEXCondAlgo::gFEXCondAlgo(const std::string& name, ISvcLocator* svc) : AthCondAlgorithm(name, svc){}
18
20
21 ATH_MSG_INFO("Loading gFEX parameters from database");
24 ATH_CHECK( m_gFEXDBParamsKey.initialize() );
25
26 return StatusCode::SUCCESS;
27}
28
29
30StatusCode gFEXCondAlgo::execute(const EventContext& ctx) const {
31
33 if (writeCHandle.isValid()) {
34 ATH_MSG_DEBUG("Existing gFEX condition is still valid");
35 return StatusCode::SUCCESS;
36 }
37
38 bool validTimeStamp = (ctx.eventID().time_stamp() < m_dbBeginTimestamp) ? false : true;
39 if (m_isMC) validTimeStamp = true;
40
41 // Set DB to false if any of keys not provided
42 bool anyKeyEmpty = m_GfexNoiseCutsKey.empty();
43 bool useDBparams = (!anyKeyEmpty && validTimeStamp);
44
45 // Construct the output Cond Object and fill it in
46 std::unique_ptr<gFEXDBCondData> writeDBTool(std::make_unique<gFEXDBCondData>() );
47 if (!m_GfexModuleConditionsKey.empty() && !m_isMC) {
48 SG::ReadCondHandle <CondAttrListCollection> load_gFexModuleConditions{m_GfexModuleConditionsKey, ctx };
49 if (load_gFexModuleConditions.isValid()) {
50 // CHECK HERE
51 writeCHandle.addDependency(load_gFexModuleConditions);
52 for (auto itr = load_gFexModuleConditions->begin(); itr != load_gFexModuleConditions->end(); ++itr) {
53 if ( itr->second["moduleName"].data<std::string>() !="l1calo-gfc0-gfex01" ) continue;
54 const coral::Blob& blob = (itr->second["json"]).data<coral::Blob>();
55 const std::string s((char*)blob.startingAddress(),blob.size());
56 nlohmann::json attrList = nlohmann::json::parse(s);
57 if (attrList.contains("FWVersion")) {
58 writeDBTool->set_FWVersion(attrList["FWVersion"]);
59 }
60 else {
61 writeDBTool->set_FWVersion(m_fwVersionDefault);
62 }
63 }
64 }
65 else {
66 ATH_MSG_ERROR("Values from "<<m_GfexModuleConditionsKey<< " not loaded. Wrong key?");
67 return StatusCode::FAILURE;
68 }
69 }
70 else {
72 writeDBTool->set_FWVersion(m_fwVersionDefault);
73 }
74
75 if(!m_GfexNoiseCutsKey.empty() && useDBparams) {
76
77 SG::ReadCondHandle <CondAttrListCollection> load_gFexNoiseCut{m_GfexNoiseCutsKey, ctx };
78
79 std::vector<std::string> myStringsNoise;
80 myStringsNoise = { "Aslopes", "Bslopes", "Cslopes", "AnoiseCuts", "BnoiseCuts", "CnoiseCuts"};
81
82 if (load_gFexNoiseCut.isValid()) {
83 writeCHandle.addDependency(load_gFexNoiseCut);
84
85 // setting the validity
86 for (auto itr = load_gFexNoiseCut->begin(); itr != load_gFexNoiseCut->end(); ++itr) {
87
88 const coral::Blob& blob = (itr->second["json"]).data<coral::Blob>();
89 const std::string s((char*)blob.startingAddress(),blob.size());
90 nlohmann::json attrList = nlohmann::json::parse(s);
91
92 // Trying to update Noise cut values
93
94 bool allitemsPresent = true;
95 for(const auto & name:myStringsNoise ) {
96 allitemsPresent = allitemsPresent && attrList.contains(name);
97 }
98
99 if( allitemsPresent ) {
100 writeDBTool->set_Aslopes(attrList["Aslopes"]);
101 writeDBTool->set_Bslopes(attrList["Bslopes"]);
102 writeDBTool->set_Cslopes(attrList["Cslopes"]);
103 writeDBTool->set_AnoiseCuts(attrList["AnoiseCuts"]);
104 writeDBTool->set_BnoiseCuts(attrList["BnoiseCuts"]);
105 writeDBTool->set_CnoiseCuts(attrList["CnoiseCuts"]);
106 }
107 else {
108 throw (int16_t) itr->first;
109 }
110 }
111 }
112 else {
113 ATH_MSG_ERROR("Values from "<<m_GfexNoiseCutsKey<< " not loaded. Wrong key?");
114 return StatusCode::FAILURE;
115 }
116 }
117 else{
119 writeDBTool->set_Aslopes(m_AslopesDefault);
120 writeDBTool->set_Bslopes(m_BslopesDefault);
121 writeDBTool->set_Cslopes(m_CslopesDefault);
122 writeDBTool->set_AnoiseCuts(m_AnoiseCutsDefault);
123 writeDBTool->set_BnoiseCuts(m_BnoiseCutsDefault);
124 writeDBTool->set_CnoiseCuts(m_CnoiseCutsDefault);
125 }
126
127 if (useDBparams) ATH_MSG_DEBUG("Parameters obtained from COOL: " << m_GfexNoiseCutsKey);
128 else ATH_MSG_DEBUG("Parameters are set to default");
129
130 // Wrinting into SG!
131 if (writeCHandle.record(std::move(writeDBTool)).isFailure()) {
132 ATH_MSG_ERROR("Could not record " << writeCHandle.key() << " with EventRange " << writeCHandle.getRange() << " into Conditions Store");
133 return StatusCode::FAILURE;
134 }
135
136 ATH_MSG_INFO("Recorded " << writeCHandle.key() << " with EventRange " << writeCHandle.getRange() << " into Conditions Store");
137
138 return StatusCode::SUCCESS;
139}
140} // END LVL1 NAMESPACE
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
Base class for conditions algorithms.
static EventIDRange infiniteRunLB()
Produces an EventIDRange that is infinite in RunLumi and invalid in Time.
static constexpr std::array< int, 12 > m_AslopesDefault
virtual StatusCode initialize() override
static constexpr std::array< int, 12 > m_BslopesDefault
SG::ReadCondHandleKey< CondAttrListCollection > m_GfexModuleConditionsKey
virtual StatusCode execute(const EventContext &) const override
SG::ReadCondHandleKey< CondAttrListCollection > m_GfexNoiseCutsKey
static constexpr std::array< int, 12 > m_BnoiseCutsDefault
static constexpr std::array< int, 12 > m_CslopesDefault
SG::WriteCondHandleKey< gFEXDBCondData > m_gFEXDBParamsKey
gFEXCondAlgo(const std::string &name, ISvcLocator *svc)
Constructors.
UnsignedIntegerProperty m_dbBeginTimestamp
Gaudi::Property< bool > m_isMC
static constexpr std::array< int, 12 > m_CnoiseCutsDefault
static constexpr std::string m_fwVersionDefault
static constexpr std::array< int, 12 > m_AnoiseCutsDefault
const std::string & key() const
void addDependency(const EventIDRange &range)
const EventIDRange & getRange() const
StatusCode record(const EventIDRange &range, T *t)
record handle, with explicit range DEPRECATED
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...