ATLAS Offline Software
Loading...
Searching...
No Matches
TGCConnectionPPToSL.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 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 m_HPBToSL.setNumber(itype, board_number);
74 for (int j=0; j < board_number; j++) {
75 inputfile.getline(buf, BufferSize);
76 std::istringstream infileStr2(buf);
77 int id, port;
78 infileStr2 >> id >> port;
79 m_HPBToSL.setId(itype, j, id);
80 m_HPBToSL.setSLPortToHPB(itype, id, port);
81 }
82 }
83 }
84
85 // read entries for SlaveBoard
86 if (inputfile.getline(buf, BufferSize)) {
87 std::istringstream infileStr(buf);
88 std::string boardName;
89 infileStr >> boardName;
90
91 for (int itype=0; itype < m_SBToHPB.getNumberOfType(); itype++) {
92 // No HPT board for Inner
93 if (itype == WISB || itype == SISB) continue;
94 int board_number{0};
95 infileStr >> board_number;
96 m_SBToHPB.setNumber(itype, board_number);
97 for (int j=0; j < board_number; j++) {
98 inputfile.getline(buf, BufferSize);
99 std::istringstream infileStr2(buf);
100 int id, idHPB, port;
101 infileStr2 >> id >> idHPB >> port;
102 if (id < 0 || idHPB < 0 || port < 0) continue;
103 m_SBToHPB.setId(itype, j, id); // BoardType, Number in a type, id
104 m_SBToHPB.setHPBIdToSB(itype, id, idHPB);
105 m_SBToHPB.setHPBPortToSB(itype, id, port);
106 }
107 }
108 }
109
110 // read entries for PatchPanel
111 if (inputfile.getline(buf, BufferSize)) {
112 std::istringstream infileStr(buf);
113 std::string boardName;
114 infileStr >> boardName;
115
116 for (int itype=0; itype < m_PPToSB.getNumberOfType(); itype++) {
117 int board_number{0};
118 infileStr >> board_number;
119 m_PPToSB.setNumber(itype, board_number);
120 for(int j=0; j<board_number; j++) {
121 inputfile.getline(buf, BufferSize);
122 std::istringstream infileStr2(buf);
123 int id{0}; // PP ID
124 int idSB1{0}; // SB ID for Part0
125 int idSB2{0}; // SB ID for Part1
126 infileStr2 >> id >> idSB1 >> idSB2;
127 m_PPToSB.setId(itype, j, id);
128 m_PPToSB.setSBIdToPP(itype, 0, j, idSB1);
129 m_PPToSB.setSBIdToPP(itype, 1, j, idSB2);
130 }
131 }
132 }
133
134 return true;
135}
136
137} // 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)