ATLAS Offline Software
Loading...
Searching...
No Matches
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
13#include "TrigT1TGC/TGCGoodMF.h"
17
19
20namespace LVL1TGCTrigger {
21
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
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
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
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){
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
166{
167 for(int i=0; i<NumberOfRegionType; i+=1){
168 delete m_PPToSL[i];
169 m_PPToSL[i]=0;
170 }
171}
172
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
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
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
235 }
236 return *this;
237}
238
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
252const 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
#define ATH_MSG_DEBUG(x)
void setLevel(MSG::Level lvl)
Change the current logging level.
AthMessaging(IMessageSvc *msgSvc, const std::string &name)
Constructor.
bool replacePatchPanelPointers(TGCPatchPanel *newPatchPanel, const std::vector< const TGCPatchPanel * > &oldPatchPanels)
TGCConnectionInPP * getConnectionInPP(TGCPatchPanel *patchPanel) const
std::vector< const TGCPatchPanel * > PatchPanelPointers
TGCDatabaseManager & operator=(const TGCDatabaseManager &right)
static std::string getFilename(int type)
std::shared_ptr< LVL1TGC::TGCGoodMF > m_mapGoodMF
void addConnectionInPP(const TGCPatchPanel *patchPanel, const TGCConnectionInPP *connectionInPP)
std::shared_ptr< LVL1TGC::BigWheelCoincidenceLUT > m_bigWheelLUT
std::shared_ptr< LVL1TGC::TGCTileMuCoincidenceLUT > m_tileMuLUT
std::map< PatchPanelIDs, std::pair< const TGCConnectionInPP, PatchPanelPointers > > m_patchPanelToConnectionInPP
std::shared_ptr< LVL1TGC::TGCBIS78CoincidenceMap > m_mapBIS78
static const std::vector< std::string > splitCW(const std::string &input, char delimiter)
LVL1TGC::TGCEIFICoincidenceMap * m_mapEIFI[LVL1TGC::kNSide]
TGCConnectionPPToSL * m_PPToSL[NumberOfRegionType]
TGCConnectionASDToPP * m_ASDToPP[NumberOfRegionType][TGCSector::NumberOfPatchPanelType][TotalNumForwardBackwardType]
std::array< std::array< std::array< std::shared_ptr< TGCNSWCoincidenceMap >, NumberOfModuleInBW >, NumberOfOctant >, LVL1TGC::kNSide > m_mapNSW
TGCPatchPanel * getAdjacentPP(int side)
TGCRegionType getRegion() const
This class stores the LUT for Tile-Muon coincidence of the Run-3 L1Muon Endcap trigger.
@ TotalNumForwardBackwardType
const int NumberOfRegionType