ATLAS Offline Software
Loading...
Searching...
No Matches
L1TopoLUT.h
Go to the documentation of this file.
1// This file is really -*- C++ -*-.
2
3/*
4 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
5*/
6
7#ifndef TRIGT1MUCTPIPHASE1_L1TOPOLUT_H
8#define TRIGT1MUCTPIPHASE1_L1TOPOLUT_H
9
10#include <boost/property_tree/ptree.hpp>
11
12#include <unordered_map>
13#include <string>
14#include <map>
15#include <utility>
16#include <vector>
17
18
19namespace LVL1MUCTPIPHASE1
20{
21 namespace pt = boost::property_tree;
22
24 {
25 bool operator==(const L1TopoCoordinates& rhs) const = default;
26
27 double eta=0;
28 double phi=0;
29 double eta_min=0;
30 double eta_max=0;
31 double phi_min=0;
32 double phi_max=0;
33 unsigned short ieta=0;
34 unsigned short iphi=0;
35 };
36
37 class L1TopoLUT //: public extends<AthService IL1TopoLUT>
38 {
39 public:
40 bool initializeLUT(const std::string& barrelFileName,
41 const std::string& ecfFileName,
42 const std::string& side0LUTFileName,
43 const std::string& side1LUTFileName);
44
45 L1TopoCoordinates getCoordinates(const unsigned short& side,
46 const unsigned short& subsystem,
47 const unsigned short& sectorID,
48 const unsigned short& roi) const;
49
50 unsigned short getBarrelROI(unsigned short side, unsigned short sector, unsigned short ieta, unsigned short iphi) const;
51
52 const std::vector<std::string>& getErrors() const {return m_errors;}
53
54 float getCompactedValue_eta(unsigned short subsystem, unsigned short side, unsigned short sectorID, unsigned short roi);
55 float getCompactedValue_phi(unsigned short subsystem, unsigned short side, unsigned short sectorID, unsigned short roi);
56
57 protected:
58
59 //for coordinate LUTs (they fit in the same data types, but meaning of indices is non-trivial;
60 // maps used where indices are not guaranteed to be continuous and/or relevant json files do not use arrays)
61 // phi row = roi & 0x3 , eta col = roi >> 2, sector low bit = sector & 0x1
62 // barrel eta/phi: /* sector */, /* eta/phi LUT code */ -> float eta/phi value
63 // endcap eta : /* eta col */, /* sector low bit */ -> float eta value
64 // endcap phi : /* sector */, /* phi row */ -> float phi value
65 // forward eta : /* sector low bit */, /* eta col */ -> float eta value
66 // forward phi : /* phi row */, /* sector */ -> float phi value
67 void fillFromPtree(const boost::property_tree::ptree& node, std::map<unsigned short,std::vector<float>>& theLut) const;
68
69 //for barrel "encoding" LUT /*sectorID*/ , /* roi */ , /* eta LUT code */, /* phi LUT code */
70 void fillFromPtree(const boost::property_tree::ptree& node, std::map<unsigned short,std::map<unsigned short, std::pair<unsigned short, unsigned short>>>& theLut) const;
71
72 bool initializeCompactedLUTs(const std::string& side0LUTFileName,
73 const std::string& side1LUTFileName);
74 bool initializeLUT(const std::string& inFileName, const bool& isBarrel);
75 bool initializeJSON(const std::string& inFileName, bool side);
76 bool initializeJSONForSubsystem(pt::ptree& root,
77 const std::string& nodeName,
78 bool side,
79 unsigned short subsystem);
80
82 {
83 unsigned short side{};
84 unsigned short subsystem{};
85 unsigned short sectorID{};
86 unsigned short roi{};
87
88 std::string info()
89 {
90 return
91 std::string("side, subsystem, sectorID, roi = ")
92 + std::to_string(side) + ", " + std::to_string(subsystem) + ", "
93 + std::to_string( sectorID) + ", " + std::to_string(roi);
94 }
95
96 //implement == operator for hashing within unordered_map
97 bool operator==(const L1TopoLUTKey& rhs) const = default;
98
99 };
100
102 {
103 unsigned long operator()(const L1TopoLUTKey& key) const
104 {
105 return static_cast<unsigned long>(key.side)
106 | (static_cast<unsigned long>(key.subsystem) << 8)
107 | (static_cast<unsigned long>(key.sectorID) << 16)
108 | (static_cast<unsigned long>(key.roi) << 24);
109 }
110 };
111 std::map<unsigned short,std::vector<float>> m_barrel_eta_lookup0;
112 std::map<unsigned short,std::vector<float>> m_barrel_eta_lookup1;
113 std::map<unsigned short,std::vector<float>> m_barrel_phi_lookup0;
114 std::map<unsigned short,std::vector<float>> m_barrel_phi_lookup1;
115 std::map<unsigned short,std::vector<float>> m_endcap_eta_lookup0;
116 std::map<unsigned short,std::vector<float>> m_endcap_eta_lookup1;
117 std::map<unsigned short,std::vector<float>> m_endcap_phi_lookup0;
118 std::map<unsigned short,std::vector<float>> m_endcap_phi_lookup1;
119 std::map<unsigned short,std::vector<float>> m_forward_eta_lookup0;
120 std::map<unsigned short,std::vector<float>> m_forward_eta_lookup1;
121 std::map<unsigned short,std::vector<float>> m_forward_phi_lookup0;
122 std::map<unsigned short,std::vector<float>> m_forward_phi_lookup1;
123
124 std::map<unsigned short,std::map<unsigned short, std::pair<unsigned short, unsigned short>>> m_barrel_encoding0;
125 std::map<unsigned short,std::map<unsigned short, std::pair<unsigned short, unsigned short>>> m_barrel_encoding1;
126
127 //reverse map: eta/phi subword(16b) as sent to Topo -> ROI
128 std::map<unsigned short, unsigned short> m_barrel_reverse_encoding0;
129 std::map<unsigned short, unsigned short> m_barrel_reverse_encoding1;
130
131 std::unordered_map<L1TopoLUTKey, L1TopoCoordinates, L1TopoLUTKeyHasher> m_encoding;
132 std::vector<std::string> m_errors;
133 };
134}
135
136#endif
bool initializeJSON(const std::string &inFileName, bool side)
unsigned short getBarrelROI(unsigned short side, unsigned short sector, unsigned short ieta, unsigned short iphi) const
std::map< unsigned short, std::vector< float > > m_forward_eta_lookup1
Definition L1TopoLUT.h:120
float getCompactedValue_phi(unsigned short subsystem, unsigned short side, unsigned short sectorID, unsigned short roi)
bool initializeCompactedLUTs(const std::string &side0LUTFileName, const std::string &side1LUTFileName)
Definition L1TopoLUT.cxx:64
std::map< unsigned short, std::vector< float > > m_forward_phi_lookup0
Definition L1TopoLUT.h:121
std::map< unsigned short, std::vector< float > > m_barrel_phi_lookup0
Definition L1TopoLUT.h:113
std::map< unsigned short, unsigned short > m_barrel_reverse_encoding0
Definition L1TopoLUT.h:128
std::vector< std::string > m_errors
Definition L1TopoLUT.h:132
std::map< unsigned short, std::vector< float > > m_barrel_eta_lookup0
Definition L1TopoLUT.h:111
std::unordered_map< L1TopoLUTKey, L1TopoCoordinates, L1TopoLUTKeyHasher > m_encoding
Definition L1TopoLUT.h:131
std::map< unsigned short, std::vector< float > > m_endcap_eta_lookup0
Definition L1TopoLUT.h:115
bool initializeJSONForSubsystem(pt::ptree &root, const std::string &nodeName, bool side, unsigned short subsystem)
std::map< unsigned short, std::vector< float > > m_barrel_phi_lookup1
Definition L1TopoLUT.h:114
std::map< unsigned short, std::vector< float > > m_endcap_eta_lookup1
Definition L1TopoLUT.h:116
L1TopoCoordinates getCoordinates(const unsigned short &side, const unsigned short &subsystem, const unsigned short &sectorID, const unsigned short &roi) const
std::map< unsigned short, unsigned short > m_barrel_reverse_encoding1
Definition L1TopoLUT.h:129
std::map< unsigned short, std::vector< float > > m_forward_eta_lookup0
Definition L1TopoLUT.h:119
const std::vector< std::string > & getErrors() const
Definition L1TopoLUT.h:52
std::map< unsigned short, std::vector< float > > m_endcap_phi_lookup0
Definition L1TopoLUT.h:117
void fillFromPtree(const boost::property_tree::ptree &node, std::map< unsigned short, std::vector< float > > &theLut) const
Definition L1TopoLUT.cxx:17
float getCompactedValue_eta(unsigned short subsystem, unsigned short side, unsigned short sectorID, unsigned short roi)
std::map< unsigned short, std::map< unsigned short, std::pair< unsigned short, unsigned short > > > m_barrel_encoding1
Definition L1TopoLUT.h:125
std::map< unsigned short, std::vector< float > > m_forward_phi_lookup1
Definition L1TopoLUT.h:122
bool initializeLUT(const std::string &barrelFileName, const std::string &ecfFileName, const std::string &side0LUTFileName, const std::string &side1LUTFileName)
std::map< unsigned short, std::map< unsigned short, std::pair< unsigned short, unsigned short > > > m_barrel_encoding0
Definition L1TopoLUT.h:124
std::map< unsigned short, std::vector< float > > m_endcap_phi_lookup1
Definition L1TopoLUT.h:118
std::map< unsigned short, std::vector< float > > m_barrel_eta_lookup1
Definition L1TopoLUT.h:112
Definition node.h:24
bool operator==(const L1TopoCoordinates &rhs) const =default
unsigned long operator()(const L1TopoLUTKey &key) const
Definition L1TopoLUT.h:103
bool operator==(const L1TopoLUTKey &rhs) const =default