ATLAS Offline Software
Loading...
Searching...
No Matches
TGCConnectionPPToSL.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
7#include <fstream>
8#include <sstream>
9#include <string>
10
12
13namespace LVL1TGCTrigger {
14
21
28
29
31{
32 if (this != &right) {
33 m_PPToSB = right.m_PPToSB;
34 m_SBToHPB = right.m_SBToHPB;
35 m_HPBToSL = right.m_HPBToSL;
36 }
37 return *this;
38}
39
41{
42 std::string fn = TGCDatabaseManager::getFilename(2); // PP2SL.db
43 std::string fullpath = PathResolver::find_file(fn, "PWD");
44 if (fullpath.length() == 0)
45 fullpath = PathResolver::find_file(fn, "DATAPATH");
46 std::ifstream inputfile(fullpath.c_str(), std::ios::in);
47
48 static constexpr int BufferSize = 512;
49 char buf[BufferSize];
50
51 // find entries match in region type
52 bool isMatched = false;
53 while (inputfile && inputfile.getline(buf,BufferSize)) {
54 std::istringstream line(buf);
55
56 std::string region;
57 line >> region ;
58 isMatched = (region == "Endcap" && type == TGCRegionType::ENDCAP) ||
59 (region == "Forward" && type == TGCRegionType::FORWARD);
60 if (isMatched) break;
61 }
62 if (!isMatched) return false;
63
64 // read entries for HighPtBoard
65 if (inputfile.getline(buf, BufferSize)) {
66 std::istringstream infileStr(buf);
67 std::string boardName;
68 infileStr >> boardName;
69
70 for (int itype=0; itype < m_HPBToSL.getNumberOfType(); itype++) {
71 int board_number{0};
72 infileStr >> board_number;
73 //coverity[TAINTED_SCALAR]
74 m_HPBToSL.setNumber(itype, board_number);
75 for (int j=0; j < board_number; j++) {
76 inputfile.getline(buf, BufferSize);
77 std::istringstream infileStr2(buf);
78 int id, port;
79 infileStr2 >> id >> port;
80 //j is unlikely to overflow
81 //coverity[INTEGER_OVERFLOW]
82 m_HPBToSL.setId(itype, j, id);
83 //coverity[TAINTED_SCALAR]
84 m_HPBToSL.setSLPortToHPB(itype, id, port);
85 }
86 }
87 }
88
89 // read entries for SlaveBoard
90 if (inputfile.getline(buf, BufferSize)) {
91 std::istringstream infileStr(buf);
92 std::string boardName;
93 infileStr >> boardName;
94
95 for (int itype=0; itype < m_SBToHPB.getNumberOfType(); itype++) {
96 // No HPT board for Inner
97 if (itype == WISB || itype == SISB) continue;
98 int board_number{0};
99 infileStr >> board_number;
100 //coverity[TAINTED_SCALAR]
101 m_SBToHPB.setNumber(itype, board_number);
102 for (int j=0; j < board_number; j++) {
103 inputfile.getline(buf, BufferSize);
104 std::istringstream infileStr2(buf);
105 int id, idHPB, port;
106 infileStr2 >> id >> idHPB >> port;
107 if (id < 0 || idHPB < 0 || port < 0) continue;
108 m_SBToHPB.setId(itype, j, id); // BoardType, Number in a type, id
109 //coverity[TAINTED_SCALAR]
110 m_SBToHPB.setHPBIdToSB(itype, id, idHPB);
111 m_SBToHPB.setHPBPortToSB(itype, id, port);
112 }
113 }
114 }
115
116 // read entries for PatchPanel
117 if (inputfile.getline(buf, BufferSize)) {
118 std::istringstream infileStr(buf);
119 std::string boardName;
120 infileStr >> boardName;
121
122 for (int itype=0; itype < m_PPToSB.getNumberOfType(); itype++) {
123 int board_number{0};
124 infileStr >> board_number;
125 //coverity[TAINTED_SCALAR]
126 m_PPToSB.setNumber(itype, board_number);
127 for(int j=0; j<board_number; j++) {
128 inputfile.getline(buf, BufferSize);
129 std::istringstream infileStr2(buf);
130 int id{0}; // PP ID
131 int idSB1{0}; // SB ID for Part0
132 int idSB2{0}; // SB ID for Part1
133 infileStr2 >> id >> idSB1 >> idSB2;
134 m_PPToSB.setId(itype, j, id);
135 m_PPToSB.setSBIdToPP(itype, 0, j, idSB1);
136 m_PPToSB.setSBIdToPP(itype, 1, j, idSB2);
137 }
138 }
139 }
140
141 return true;
142}
143
144} // end of namespace
TGCConnectionPPToSL & operator=(const TGCConnectionPPToSL &)
static std::string getFilename(int type)
static std::string find_file(const std::string &logical_file_name, const std::string &search_path)