ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
TrigT1
TrigT1TGC
src
TGCDatabaseManager.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
TrigT1TGC/TGCDatabaseManager.h
"
6
#include "
TrigT1TGC/TGCArguments.h
"
7
#include "
TrigT1TGC/TGCConnectionPPToSL.h
"
8
#include "
TrigT1TGC/BigWheelCoincidenceLUT.h
"
9
#include "
TrigT1TGC/TGCEIFICoincidenceMap.h
"
10
#include "
TrigT1TGC/TGCTileMuCoincidenceLUT.h
"
11
#include "
TrigT1TGC/TGCNSWCoincidenceMap.h
"
12
#include "
TrigT1TGC/TGCBIS78CoincidenceMap.h
"
13
#include "
TrigT1TGC/TGCGoodMF.h
"
14
#include "
TrigT1TGC/TGCConnectionASDToPP.h
"
15
#include "
TrigT1TGC/TGCConnectionInPP.h
"
16
#include "
TrigT1TGC/TGCPatchPanel.h
"
17
18
#include "
AthenaBaseComps/AthMsgStreamMacros.h
"
19
20
namespace
LVL1TGCTrigger
{
21
22
TGCConnectionInPP
*
TGCDatabaseManager::getConnectionInPP
(
TGCPatchPanel
* patchPanel)
const
23
{
24
if
(!patchPanel)
return
0;
25
26
PatchPanelIDs
patchPanelIDs(5, -1);
27
patchPanelIDs.at(0) = (patchPanel->
getRegion
() ==
TGCRegionType::FORWARD
? 0 : 1);
28
patchPanelIDs.at(1) = patchPanel->
getType
();
29
patchPanelIDs.at(2) = patchPanel->
getId
();
30
patchPanelIDs.at(3) = (patchPanel->
getAdjacentPP
(0) ? patchPanel->
getAdjacentPP
(0)->
getId
() : -1);
31
patchPanelIDs.at(4) = (patchPanel->
getAdjacentPP
(1) ? patchPanel->
getAdjacentPP
(1)->
getId
() : -1);
32
33
std::map<PatchPanelIDs, std::pair<const TGCConnectionInPP, PatchPanelPointers> >
::const_iterator
cit
34
=
m_patchPanelToConnectionInPP
.find(patchPanelIDs);
35
// If this PatchPanel is already registered, create a clone connectionInPP
36
if
(cit!=
m_patchPanelToConnectionInPP
.end()) {
37
TGCConnectionInPP
* newConnectionInPP =
new
TGCConnectionInPP
(((*cit).second).first);
38
PatchPanelPointers
oldPatchPanelPointers = ((*cit).second).second;
39
// Need to replace PatchPanel pointers of newConnectionInPP by ones of patchPanel
40
bool
isReplaced = newConnectionInPP->
replacePatchPanelPointers
(patchPanel, oldPatchPanelPointers);
41
if
(!isReplaced) {
42
delete
newConnectionInPP;
43
newConnectionInPP = 0;
44
}
45
return
newConnectionInPP;
46
}
47
48
return
0;
49
}
50
51
void
TGCDatabaseManager::addConnectionInPP
(
const
TGCPatchPanel
* patchPanel,
52
const
TGCConnectionInPP
* connectionInPP)
53
{
54
if
(!patchPanel || !connectionInPP)
return
;
55
56
PatchPanelIDs
patchPanelIDs(5, -1);
57
patchPanelIDs.at(0) = (patchPanel->
getRegion
() ==
TGCRegionType::FORWARD
? 0 : 1);
58
patchPanelIDs.at(1) = patchPanel->
getType
();
59
patchPanelIDs.at(2) = patchPanel->
getId
();
60
patchPanelIDs.at(3) = (patchPanel->
getAdjacentPP
(0) ? patchPanel->
getAdjacentPP
(0)->
getId
() : -1);
61
patchPanelIDs.at(4) = (patchPanel->
getAdjacentPP
(1) ? patchPanel->
getAdjacentPP
(1)->
getId
() : -1);
62
63
PatchPanelPointers
patchPanelPointers;
64
patchPanelPointers.push_back(patchPanel);
65
patchPanelPointers.push_back(patchPanel->
getAdjacentPP
(0));
66
patchPanelPointers.push_back(patchPanel->
getAdjacentPP
(1));
67
68
TGCConnectionInPP
newConnectionInPP(*connectionInPP);
69
std::pair<const TGCConnectionInPP, PatchPanelPointers> cInPP_PPPs(newConnectionInPP, patchPanelPointers);
70
71
m_patchPanelToConnectionInPP
.insert(std::pair<
PatchPanelIDs
, std::pair<const TGCConnectionInPP, PatchPanelPointers> >
72
(patchPanelIDs, cInPP_PPPs));
73
}
74
75
TGCDatabaseManager::TGCDatabaseManager
()
76
:
AthMessaging
(
"LVL1TGC::TGCDatabaseManager"
),
77
m_tgcArgs
(nullptr)
78
{
79
for
(
int
j=0; j<
NumberOfRegionType
; j+=1){
80
for
(
int
i=0; i<
TGCSector::NumberOfPatchPanelType
; i+=1){
81
for
(
int
k=0; k<
TotalNumForwardBackwardType
; k+=1){
82
m_ASDToPP
[j][i][k] = 0;
83
}
84
}
85
}
86
for
(
int
i=0; i<
NumberOfRegionType
; i+=1){
87
m_PPToSL
[i] = 0;
88
}
89
for
(
int
side=0; side <
LVL1TGC::kNSide
; side++) {
90
m_mapEIFI
[side] = 0;
91
}
92
}
93
94
TGCDatabaseManager::TGCDatabaseManager
(
TGCArguments
* tgcargs,
95
const
SG::ReadCondHandleKey<TGCTriggerData>
& readCondKey,
96
const
SG::ReadCondHandleKey<TGCTriggerLUTs>
& readLUTsCondKey)
97
:
AthMessaging
(
"LVL1TGC::TGCDatabaseManager"
),
98
m_tgcArgs
(tgcargs)
99
{
100
setLevel
(
tgcArgs
()->MSGLEVEL());
101
102
bool
status =
true
;
103
104
ATH_MSG_DEBUG
(
"Read database for connection from ASD to PP."
);
105
106
for
(
int
i=0; i<
TGCSector::NumberOfPatchPanelType
; i+=1){
107
for
(
int
k=0; k<
TotalNumForwardBackwardType
; k+=1){
108
m_ASDToPP
[0][i][k] =
new
TGCConnectionASDToPP
;
109
m_ASDToPP
[1][i][k] =
new
TGCConnectionASDToPP
;
110
status = status
111
&&
m_ASDToPP
[0][i][k]->readData(
TGCRegionType::FORWARD
, i, (
TGCForwardBackwardType
)k)
112
&&
m_ASDToPP
[1][i][k]->readData(
TGCRegionType::ENDCAP
, i, (
TGCForwardBackwardType
)k);
113
}
114
}
115
for
(
int
i=0; i<
NumberOfRegionType
; i+=1){
116
m_PPToSL
[i] =
new
TGCConnectionPPToSL
;
117
}
118
status = status &&
m_PPToSL
[0]->readData(
TGCRegionType::FORWARD
)
119
&&
m_PPToSL
[1]->readData(
TGCRegionType::ENDCAP
);
120
121
// Temporary solution for Run 3 simulation (to be migrated to CONDDB
122
tgcArgs
()->
set_USE_CONDDB
(
false
);
123
124
// CW for SL (ONLY available for Run-3 development phase)
125
std::string ver_BW =
"v05"
;
126
std::string ver_EIFI =
"v07"
;
127
std::string ver_TILE =
"v01"
;
128
std::string ver_NSW =
"v01"
;
129
std::string ver_BIS78 =
"v01"
;
// OK?
130
std::string ver_HotRoI =
"v2"
;
131
132
// EIFI Coincidence Map
133
ATH_MSG_DEBUG
(
"start to create EIFI coincidence map."
);
134
for
(
int
side=0; side <
LVL1TGC::kNSide
; side++) {
135
m_mapEIFI
[side] =
new
LVL1TGC::TGCEIFICoincidenceMap
(
tgcArgs
(), readCondKey, ver_EIFI, side);
136
}
137
138
// Big Wheel Coincidence LUT
139
m_bigWheelLUT
.reset(
new
LVL1TGC::BigWheelCoincidenceLUT
(
tgcArgs
(), readLUTsCondKey, ver_BW));
140
141
// Tile-Muon LUT
142
m_tileMuLUT
.reset(
new
LVL1TGC::TGCTileMuCoincidenceLUT
(
tgcArgs
(), readCondKey, ver_TILE));
143
144
// NSW coincidence Map
145
if
(
tgcArgs
()->USE_NSW()){
146
for
(
int
side=0; side <
LVL1TGC::kNSide
; side++) {
147
for
(
int
oct=0; oct<
NumberOfOctant
; oct++) {
148
for
(
int
mod=0; mod<
NumberOfModuleInBW
; mod++){
149
// NSW Coincidence Map
150
m_mapNSW
[side][oct][mod].reset(
new
TGCNSWCoincidenceMap
(
tgcArgs
(),ver_NSW,side,oct,mod));
151
}
152
}
153
}
154
}
155
156
// BIS78 coincidence Map
157
if
(
tgcArgs
()->USE_BIS78()){
158
m_mapBIS78
.reset(
new
LVL1TGC::TGCBIS78CoincidenceMap
(
tgcArgs
(),ver_BIS78));
159
}
160
161
//Hot RoI LUT
162
m_mapGoodMF
.reset(
new
LVL1TGC::TGCGoodMF
(
tgcArgs
(),ver_HotRoI));
163
}
164
165
void
TGCDatabaseManager::deleteConnectionPPToSL
()
166
{
167
for
(
int
i=0; i<
NumberOfRegionType
; i+=1){
168
delete
m_PPToSL
[i];
169
m_PPToSL
[i]=0;
170
}
171
}
172
173
TGCDatabaseManager::~TGCDatabaseManager
()
174
{
175
int
i,j,k;
176
for
( j=0; j<
NumberOfRegionType
; j+=1){
177
for
( i=0; i<
TGCSector::NumberOfPatchPanelType
; i+=1){
178
for
( k=0; k<
TotalNumForwardBackwardType
; k+=1){
179
if
(
m_ASDToPP
[j][i][k]!=0)
delete
m_ASDToPP
[j][i][k];
180
m_ASDToPP
[j][i][k]=0;
181
}
182
}
183
if
(
m_PPToSL
[j]!=0)
delete
m_PPToSL
[j];
184
m_PPToSL
[j]=0;
185
}
186
187
for
(
int
side=0; side <
LVL1TGC::kNSide
; side++) {
188
delete
m_mapEIFI
[side];
189
}
190
}
191
192
TGCDatabaseManager::TGCDatabaseManager
(
const
TGCDatabaseManager
& right)
193
:
AthMessaging
(
"LVL1TGC::TGCDatabaseManager"
)
194
{
195
for
(
int
j=0; j<
NumberOfRegionType
; j+=1){
196
for
(
int
i=0; i<
TGCSector::NumberOfPatchPanelType
; i+=1){
197
for
(
int
k=0; k<
TotalNumForwardBackwardType
; k+=1){
198
m_ASDToPP
[j][i][k] = 0;
199
}
200
}
201
}
202
for
(
int
i=0; i<
NumberOfRegionType
; i+=1)
m_PPToSL
[i] = 0;
203
for
(
int
side=0; side <
LVL1TGC::kNSide
; side++) {
204
m_mapEIFI
[side] = 0;
205
}
206
207
*
this
= right;
208
}
209
210
TGCDatabaseManager
&
211
TGCDatabaseManager::operator=
(
const
TGCDatabaseManager
& right)
212
{
213
if
(
this
!=&right){
214
m_tgcArgs
= right.
m_tgcArgs
;
215
for
(
int
j=0; j<
NumberOfRegionType
; j+=1){
216
for
(
int
i=0; i<
TGCSector::NumberOfPatchPanelType
; i+=1){
217
for
(
int
k=0; k<
TotalNumForwardBackwardType
; k+=1){
218
if
(
m_ASDToPP
[j][i][k]!=0)
delete
m_ASDToPP
[j][i][k];
219
m_ASDToPP
[j][i][k] =
new
TGCConnectionASDToPP
;
220
*
m_ASDToPP
[j][i][k] = *right.
m_ASDToPP
[j][i][k];
221
}
222
}
223
}
224
for
(
int
i=0; i<
NumberOfRegionType
; i+=1){
225
if
(
m_PPToSL
[i]!=0)
delete
m_PPToSL
[i];
226
m_PPToSL
[i] =
new
TGCConnectionPPToSL
( *right.
m_PPToSL
[i] );
227
}
228
229
for
(
int
side=0; side<
LVL1TGC::kNSide
; side++) {
230
if
(
m_mapEIFI
[side]!=0)
delete
m_mapEIFI
[side];
231
m_mapEIFI
[side] =
new
LVL1TGC::TGCEIFICoincidenceMap
(*(right.
m_mapEIFI
[side]));
232
}
233
234
m_patchPanelToConnectionInPP
= right.
m_patchPanelToConnectionInPP
;
235
}
236
return
*
this
;
237
}
238
239
std::string
TGCDatabaseManager::getFilename
(
int
type
)
240
{
241
switch
(
type
) {
242
case
0:
//ASD2PP
243
return
"MuonTGC_Cabling_ASD2PP.db"
;
244
case
1:
//PP
245
return
"MuonTGC_Cabling_PP.db"
;
246
case
2:
//PP2SL
247
return
"MuonTGC_Cabling_PP2SL.db"
;
248
}
249
return
""
;
250
}
251
252
const
std::vector<std::string>
TGCDatabaseManager::splitCW
(
const
std::string& input,
char
delimiter
)
253
{
254
std::istringstream stream(input);
255
256
std::string field;
257
std::vector<std::string> result;
258
while
(std::getline(stream, field,
delimiter
)) {
259
result.push_back(field);
260
}
261
return
result;
262
}
263
264
}
//end of namespace bracket
AthMsgStreamMacros.h
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
BigWheelCoincidenceLUT.h
TGCArguments.h
TGCBIS78CoincidenceMap.h
TGCConnectionASDToPP.h
TGCConnectionInPP.h
TGCConnectionPPToSL.h
TGCDatabaseManager.h
TGCEIFICoincidenceMap.h
TGCGoodMF.h
TGCNSWCoincidenceMap.h
TGCPatchPanel.h
TGCTileMuCoincidenceLUT.h
AthMessaging::setLevel
void setLevel(MSG::Level lvl)
Change the current logging level.
Definition
AthMessaging.cxx:28
AthMessaging::AthMessaging
AthMessaging(IMessageSvc *msgSvc, const std::string &name)
Constructor.
Definition
AthMessaging.cxx:13
const_iterator
LVL1TGCTrigger::TGCArguments
Definition
TGCArguments.h:12
LVL1TGCTrigger::TGCArguments::set_USE_CONDDB
void set_USE_CONDDB(bool v)
Definition
TGCArguments.cxx:33
LVL1TGCTrigger::TGCConnectionASDToPP
Definition
TGCConnectionASDToPP.h:12
LVL1TGCTrigger::TGCConnectionInPP
Definition
TGCConnectionInPP.h:15
LVL1TGCTrigger::TGCConnectionInPP::replacePatchPanelPointers
bool replacePatchPanelPointers(TGCPatchPanel *newPatchPanel, const std::vector< const TGCPatchPanel * > &oldPatchPanels)
Definition
TGCConnectionInPP.cxx:359
LVL1TGCTrigger::TGCConnectionPPToSL
Definition
TGCConnectionPPToSL.h:16
LVL1TGCTrigger::TGCDatabaseManager
Definition
TGCDatabaseManager.h:39
LVL1TGCTrigger::TGCDatabaseManager::getConnectionInPP
TGCConnectionInPP * getConnectionInPP(TGCPatchPanel *patchPanel) const
Definition
TGCDatabaseManager.cxx:22
LVL1TGCTrigger::TGCDatabaseManager::PatchPanelPointers
std::vector< const TGCPatchPanel * > PatchPanelPointers
Definition
TGCDatabaseManager.h:41
LVL1TGCTrigger::TGCDatabaseManager::operator=
TGCDatabaseManager & operator=(const TGCDatabaseManager &right)
Definition
TGCDatabaseManager.cxx:211
LVL1TGCTrigger::TGCDatabaseManager::getFilename
static std::string getFilename(int type)
Definition
TGCDatabaseManager.cxx:239
LVL1TGCTrigger::TGCDatabaseManager::m_mapGoodMF
std::shared_ptr< LVL1TGC::TGCGoodMF > m_mapGoodMF
Definition
TGCDatabaseManager.h:83
LVL1TGCTrigger::TGCDatabaseManager::addConnectionInPP
void addConnectionInPP(const TGCPatchPanel *patchPanel, const TGCConnectionInPP *connectionInPP)
Definition
TGCDatabaseManager.cxx:51
LVL1TGCTrigger::TGCDatabaseManager::m_bigWheelLUT
std::shared_ptr< LVL1TGC::BigWheelCoincidenceLUT > m_bigWheelLUT
Definition
TGCDatabaseManager.h:76
LVL1TGCTrigger::TGCDatabaseManager::NumberOfModuleInBW
@ NumberOfModuleInBW
Definition
TGCDatabaseManager.h:74
LVL1TGCTrigger::TGCDatabaseManager::m_tileMuLUT
std::shared_ptr< LVL1TGC::TGCTileMuCoincidenceLUT > m_tileMuLUT
Definition
TGCDatabaseManager.h:78
LVL1TGCTrigger::TGCDatabaseManager::m_patchPanelToConnectionInPP
std::map< PatchPanelIDs, std::pair< const TGCConnectionInPP, PatchPanelPointers > > m_patchPanelToConnectionInPP
Definition
TGCDatabaseManager.h:85
LVL1TGCTrigger::TGCDatabaseManager::m_mapBIS78
std::shared_ptr< LVL1TGC::TGCBIS78CoincidenceMap > m_mapBIS78
Definition
TGCDatabaseManager.h:80
LVL1TGCTrigger::TGCDatabaseManager::deleteConnectionPPToSL
void deleteConnectionPPToSL()
Definition
TGCDatabaseManager.cxx:165
LVL1TGCTrigger::TGCDatabaseManager::splitCW
static const std::vector< std::string > splitCW(const std::string &input, char delimiter)
Definition
TGCDatabaseManager.cxx:252
LVL1TGCTrigger::TGCDatabaseManager::~TGCDatabaseManager
virtual ~TGCDatabaseManager()
Definition
TGCDatabaseManager.cxx:173
LVL1TGCTrigger::TGCDatabaseManager::m_mapEIFI
LVL1TGC::TGCEIFICoincidenceMap * m_mapEIFI[LVL1TGC::kNSide]
Definition
TGCDatabaseManager.h:77
LVL1TGCTrigger::TGCDatabaseManager::PatchPanelIDs
std::vector< int > PatchPanelIDs
Definition
TGCDatabaseManager.h:40
LVL1TGCTrigger::TGCDatabaseManager::TGCDatabaseManager
TGCDatabaseManager()
Definition
TGCDatabaseManager.cxx:75
LVL1TGCTrigger::TGCDatabaseManager::tgcArgs
TGCArguments * tgcArgs()
Definition
TGCDatabaseManager.h:70
LVL1TGCTrigger::TGCDatabaseManager::m_PPToSL
TGCConnectionPPToSL * m_PPToSL[NumberOfRegionType]
Definition
TGCDatabaseManager.h:81
LVL1TGCTrigger::TGCDatabaseManager::m_ASDToPP
TGCConnectionASDToPP * m_ASDToPP[NumberOfRegionType][TGCSector::NumberOfPatchPanelType][TotalNumForwardBackwardType]
Definition
TGCDatabaseManager.h:82
LVL1TGCTrigger::TGCDatabaseManager::m_mapNSW
std::array< std::array< std::array< std::shared_ptr< TGCNSWCoincidenceMap >, NumberOfModuleInBW >, NumberOfOctant >, LVL1TGC::kNSide > m_mapNSW
Definition
TGCDatabaseManager.h:79
LVL1TGCTrigger::TGCDatabaseManager::m_tgcArgs
TGCArguments * m_tgcArgs
Definition
TGCDatabaseManager.h:87
LVL1TGCTrigger::TGCNSWCoincidenceMap
Definition
TGCNSWCoincidenceMap.h:24
LVL1TGCTrigger::TGCPatchPanel
Definition
TGCPatchPanel.h:38
LVL1TGCTrigger::TGCPatchPanel::getAdjacentPP
TGCPatchPanel * getAdjacentPP(int side)
Definition
TGCPatchPanel.h:49
LVL1TGCTrigger::TGCPatchPanel::getType
int getType() const
Definition
TGCPatchPanel.h:64
LVL1TGCTrigger::TGCPatchPanel::getId
int getId() const
Definition
TGCPatchPanel.cxx:401
LVL1TGCTrigger::TGCPatchPanel::getRegion
TGCRegionType getRegion() const
Definition
TGCPatchPanel.h:66
LVL1TGCTrigger::TGCSector::NumberOfPatchPanelType
@ NumberOfPatchPanelType
Definition
TGCSector.h:36
LVL1TGC::BigWheelCoincidenceLUT
Definition
BigWheelCoincidenceLUT.h:35
LVL1TGC::TGCBIS78CoincidenceMap
Definition
TGCBIS78CoincidenceMap.h:23
LVL1TGC::TGCEIFICoincidenceMap
Definition
TGCEIFICoincidenceMap.h:23
LVL1TGC::TGCGoodMF
Definition
TGCGoodMF.h:20
LVL1TGC::TGCTileMuCoincidenceLUT
This class stores the LUT for Tile-Muon coincidence of the Run-3 L1Muon Endcap trigger.
Definition
TGCTileMuCoincidenceLUT.h:62
SG::ReadCondHandleKey
Definition
ReadCondHandleKey.h:21
delimiter
static const std::string delimiter("/")
LVL1TGCTrigger
Definition
LVL1TGCTrigger.cxx:48
LVL1TGCTrigger::TGCForwardBackwardType
TGCForwardBackwardType
Definition
TGCNumbering.h:59
LVL1TGCTrigger::TotalNumForwardBackwardType
@ TotalNumForwardBackwardType
Definition
TGCNumbering.h:59
LVL1TGCTrigger::NumberOfRegionType
const int NumberOfRegionType
Definition
TGCNumbering.h:55
LVL1TGCTrigger::TGCRegionType::FORWARD
@ FORWARD
Definition
TGCNumbering.h:49
LVL1TGCTrigger::TGCRegionType::ENDCAP
@ ENDCAP
Definition
TGCNumbering.h:49
LVL1TGCTrigger::NumberOfOctant
const int NumberOfOctant
Definition
TGCElectronicsSystem.h:21
LVL1TGC::kNSide
@ kNSide
Definition
TGCNumbering.h:16
type
Generated on
for ATLAS Offline Software by
1.17.0