ATLAS Offline Software
TGCTileMuCoincidenceLUT.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
8 
9 #include "GaudiKernel/ISvcLocator.h"
10 #include "GaudiKernel/MsgStream.h"
11 #include "GaudiKernel/IMessageSvc.h"
12 
13 #include <fstream>
14 
15 namespace LVL1TGC {
16 
18  const SG::ReadCondHandleKey<TGCTriggerData>& readCondKey,
19  const std::string& version)
20  : m_verName(version),
21  m_tgcArgs(tgcargs),
22  m_readCondKey(readCondKey)
23 {
24  if (!tgcArgs()->TILE_MU()) return;
25  if (tgcArgs()->USE_CONDDB()) return;
26 
28  IMessageSvc* msgSvc = 0;
29  ISvcLocator* svcLocator = Gaudi::svcLocator();
30  if (svcLocator->service("MessageSvc", msgSvc) == StatusCode::FAILURE) {
31  return;
32  }
33  MsgStream log(msgSvc, "LVL1TGC::TGCTileMuCoincidenceLUT");
34 
35  // read Inner Coincidence Map
36  if (this->readMap()) {
37  log << MSG::INFO
38  << " TGC TileMu CW version of " << m_verName << " is selected " << endmsg;
39  } else {
40  log << MSG::INFO
41  << " NOT use TileMu " << endmsg;
42  m_flagpt.clear();
43  m_flagroi.clear();
44  m_trigbit.clear();
45  }
46 }
47 
48 
50 {
51 }
52 
54 {
55  IMessageSvc* msgSvc = 0;
56  ISvcLocator* svcLocator = Gaudi::svcLocator();
57  if (svcLocator->service("MessageSvc", msgSvc) == StatusCode::FAILURE) {
58  return false;
59  }
60  MsgStream log(msgSvc, "LVL1TGC::TGCTileMuCoincidenceLUT");
61 
62  // select right database according to a set of thresholds
63  std::string dbname="";
64  dbname = "TileMuCoincidenceMap." + m_verName + "._12.db";
65 
66  //-----
67 
68  std::string fullName;
69  fullName = PathResolver::FindCalibDirectory("dev")+"/TrigT1TGC/TILE/"+dbname;
70  bool isFound =( fullName.length() > 0 );
71  if( !isFound) {
72  log << MSG::WARNING
73  << " Could not found " << dbname << endmsg;
74  return false ;
75  }
76 
77  std::ifstream file(fullName.c_str(),std::ios::in);
78 
79  static constexpr unsigned int BufferSize = 256;
80  char buf[BufferSize];
81 
82  while (file.getline(buf, BufferSize)) {
83 
84  int16_t sideId = -1;
85  int16_t sectorId = -1;
86  int16_t sscId = -1;
87 
88  std::istringstream header(buf);
89  std::string tag;
90  header >> tag;
91  if(tag == "#") {
92  header >> sideId >> sectorId >> sscId;
93  }
94 
95  // check Id
96  if(sideId < 0 || sideId>=TGCTriggerData::N_SIDE ||
97  sectorId < 0 || sectorId>=TGCTriggerData::N_ENDCAP_SECTOR ||
98  sscId < 0 || sscId>=TGCTriggerData::N_ENDCAP_SSC ) {
99  log << MSG::WARNING
100  << " illegal parameter in database header : " << header.str()
101  << " in file " << dbname
102  << endmsg;
103  file.close();
104  return false;
105  }
106 
107  uint16_t addr = this->getAddr(sideId, sectorId, sscId);
108 
109  uint8_t flagpt = 0;
110  for (size_t pt = 0; pt < TGCTriggerData::N_PT_THRESH; pt++){
111  uint8_t use;
112  header >> use;
113  flagpt |= (use&0x1)<<pt;
114  }
115  m_flagpt[addr] = flagpt;
116 
117  uint8_t roi = 0;
118  for (size_t pos=0; pos< TGCTriggerData::N_ROI_IN_SSC; pos++){
119  uint8_t use;
120  header >> use;
121  roi |= (use&0x1)<<pos;
122  }
123  m_flagroi[addr] = roi;
124 
125  // get trigger word
126  file.getline(buf,BufferSize);
127  std::istringstream cont(buf);
128  uint16_t trigbit = 0x0;
129  for(size_t pos=0; pos < TGCTriggerData::N_TILE_INPUT; pos++){
130  uint16_t word;
131  cont >> word;
132  trigbit |= (word & 0xf)<<(pos*4);
133  }
134  m_trigbit[addr] = trigbit;
135 
136  }
137  file.close();
138 
139  return true;
140 }
141 
142 
144  const int16_t ssc,
145  const int16_t sec,
146  const int16_t side) const
147 {
148  if ((module<0)||(module>=TGCTriggerData::N_TILE_INPUT)) return TM_NA;
149 
150  uint16_t mask = 0x0;
151  if (tgcArgs()->USE_CONDDB()) {
153  const TGCTriggerData* readCdo{*readHandle};
154  mask = readCdo->getTrigMaskTile(ssc, sec, side);
155  } else {
156  uint16_t addr = this->getAddr(side, sec, ssc);
157  std::unordered_map<uint16_t, uint16_t>::const_iterator it = m_trigbit.find(addr);
158  if(it != m_trigbit.end()) mask = it->second;
159  }
160 
161  return mask>>(module*4) & 0x7;
162 }
163 
165  const int16_t ssc,
166  const int16_t sec,
167  const int16_t side) const
168 {
169  if ((pt<=0)||(pt>TGCTriggerData::N_PT_THRESH)) return -1;
170 
171  uint8_t ptmask = 0x0;
172  if (tgcArgs()->USE_CONDDB()) {
174  const TGCTriggerData* readCdo{*readHandle};
175  ptmask = readCdo->getFlagPtTile(ssc, sec, side);
176  } else {
177  uint16_t addr = this->getAddr(side, sec, ssc);
178  std::unordered_map<uint16_t, uint8_t>::const_iterator it = m_flagpt.find(addr);
179  if(it != m_flagpt.end()) ptmask = it->second;
180  }
181  return (ptmask>>(pt-1)) & 0x1; /* only 1st bit needed (0x1) */
182 }
183 
185  const int16_t ssc,
186  const int16_t sec,
187  const int16_t side) const
188 {
189  if ((roi<0)||(roi>=TGCTriggerData::N_ROI_IN_SSC)) return -1;
190 
191  uint8_t roimask = 0x0;
192  if (tgcArgs()->USE_CONDDB()) {
194  const TGCTriggerData* readCdo{*readHandle};
195  roimask = readCdo->getFlagRoiTile(ssc, sec, side);
196  } else {
197  uint16_t addr = this->getAddr(side, sec, ssc);
198  std::unordered_map<uint16_t, uint8_t>::const_iterator it = m_flagroi.find(addr);
199  if(it != m_flagroi.end()) roimask = it->second;
200  }
201  return (roimask >> roi) & 0x1; /* only 1st bit needed (0x1) */
202 }
203 
205 {
208  (ssc & TGCTriggerData::SSC_MASK);
209 }
210 
211 
212 } //end of namespace bracket
CaloNoise_fillDB.dbname
dbname
Definition: CaloNoise_fillDB.py:43
TGCTriggerData::SECTOR_MASK
static constexpr uint8_t SECTOR_MASK
Mask for trigger sector for the (EIFI/TILE) ADDR.
Definition: TGCTriggerData.h:150
StateLessPT_NewConfig.BufferSize
BufferSize
Definition: StateLessPT_NewConfig.py:370
header
Definition: hcg.cxx:526
LVL1TGC::TGCTileMuCoincidenceLUT::m_trigbit
std::unordered_map< uint16_t, uint16_t > m_trigbit
Definition: TGCTileMuCoincidenceLUT.h:97
TGCTriggerData::ADDR_SECTOR_SHIFT
static constexpr uint8_t ADDR_SECTOR_SHIFT
Bit position of the trigger sector bit in the (EIFI/TILE) ADDR.
Definition: TGCTriggerData.h:156
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:575
LVL1TGC::TGCTileMuCoincidenceLUT::getTrigMask
int getTrigMask(const int module, const int16_t ssc, const int16_t sec, const int16_t side) const
Definition: TGCTileMuCoincidenceLUT.cxx:143
TGCTriggerData::N_ENDCAP_SSC
@ N_ENDCAP_SSC
Definition: TGCTriggerData.h:164
LVL1TGC::TGCTileMuCoincidenceLUT::tgcArgs
LVL1TGCTrigger::TGCArguments * tgcArgs()
Definition: TGCTileMuCoincidenceLUT.h:91
WriteCellNoiseToCool.fullName
fullName
Definition: WriteCellNoiseToCool.py:461
skel.it
it
Definition: skel.GENtoEVGEN.py:423
LVL1TGC::TGCTileMuCoincidenceLUT::m_verName
std::string m_verName
Definition: TGCTileMuCoincidenceLUT.h:99
test_pyathena.pt
pt
Definition: test_pyathena.py:11
LVL1TGC::TGCTileMuCoincidenceLUT::TGCTileMuCoincidenceLUT
TGCTileMuCoincidenceLUT(LVL1TGCTrigger::TGCArguments *, const SG::ReadCondHandleKey< TGCTriggerData > &readCondKey, const std::string &version="NA")
Definition: TGCTileMuCoincidenceLUT.cxx:17
TGCTriggerData::ADDR_SIDE_SHIFT
static constexpr uint8_t ADDR_SIDE_SHIFT
Bit position of the side bit in the (EIFI/TILE) ADDR.
Definition: TGCTriggerData.h:154
LVL1TGC::TGCTileMuCoincidenceLUT::getFlagPT
int getFlagPT(const int pt, const int16_t ssc, const int16_t sec, const int16_t side) const
Definition: TGCTileMuCoincidenceLUT.cxx:164
PathResolver::FindCalibDirectory
static std::string FindCalibDirectory(const std::string &logical_file_name)
Definition: PathResolver.h:109
xAOD::int16_t
setScaleOne setStatusOne setSaturated int16_t
Definition: gFexGlobalRoI_v1.cxx:55
python.utils.AtlRunQueryLookup.mask
string mask
Definition: AtlRunQueryLookup.py:460
TRT::Hit::side
@ side
Definition: HitInfo.h:83
python.PyAthena.module
module
Definition: PyAthena.py:134
TGCTriggerData::N_ROI_IN_SSC
@ N_ROI_IN_SSC
Definition: TGCTriggerData.h:166
TGCTriggerData::N_TILE_INPUT
@ N_TILE_INPUT
Definition: TGCTriggerData.h:171
TGCTriggerData::SSC_MASK
static constexpr uint8_t SSC_MASK
Mask for SSC for the (EIFI/TILE) ADDR.
Definition: TGCTriggerData.h:152
LVL1TGC::TGCTileMuCoincidenceLUT::getAddr
uint16_t getAddr(int16_t side, int16_t sec, int16_t ssc) const
Definition: TGCTileMuCoincidenceLUT.cxx:204
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:88
StdJOSetup.msgSvc
msgSvc
Provide convenience handles for various services.
Definition: StdJOSetup.py:36
LVL1TGC::TGCTileMuCoincidenceLUT::readMap
bool readMap()
Definition: TGCTileMuCoincidenceLUT.cxx:53
TGCTriggerData::getFlagRoiTile
uint8_t getFlagRoiTile(int ssc, int sectorId, int side) const
Definition: TGCTriggerData.cxx:97
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
LVL1TGC::TGCTileMuCoincidenceLUT::m_readCondKey
const SG::ReadCondHandleKey< TGCTriggerData > & m_readCondKey
Definition: TGCTileMuCoincidenceLUT.h:101
LVL1TGC
Definition: BigWheelCoincidenceLUT.cxx:24
LVL1TGC::TGCTileMuCoincidenceLUT::~TGCTileMuCoincidenceLUT
virtual ~TGCTileMuCoincidenceLUT()
Definition: TGCTileMuCoincidenceLUT.cxx:49
file
TFile * file
Definition: tile_monitor.h:29
LVL1TGC::TGCTileMuCoincidenceLUT::m_flagpt
std::unordered_map< uint16_t, uint8_t > m_flagpt
Definition: TGCTileMuCoincidenceLUT.h:95
PathResolver.h
TGCTriggerData::N_PT_THRESH
@ N_PT_THRESH
Definition: TGCTriggerData.h:161
TGCTriggerData::SIDE_MASK
static constexpr uint8_t SIDE_MASK
Mask for extracting the side from the GLOBALADDR.
Definition: TGCTriggerData.h:107
LVL1TGCTrigger::TGCArguments
Definition: TGCArguments.h:12
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
SG::ReadCondHandleKey< TGCTriggerData >
get_generator_info.version
version
Definition: get_generator_info.py:33
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
TGCTriggerData::getFlagPtTile
unsigned char getFlagPtTile(int ssc, int sectorId, int side) const
Definition: TGCTriggerData.cxx:87
TGCTriggerData
Definition: TGCTriggerData.h:102
TGCTileMuCoincidenceLUT.h
CaloCondBlobAlgs_fillNoiseFromASCII.tag
string tag
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:24
TGCTriggerData::N_ENDCAP_SECTOR
@ N_ENDCAP_SECTOR
Definition: TGCTriggerData.h:165
makeTOC.header
header
Definition: makeTOC.py:28
LVL1TGC::TGCTileMuCoincidenceLUT::TM_NA
@ TM_NA
Definition: TGCTileMuCoincidenceLUT.h:82
LVL1TGC::TGCTileMuCoincidenceLUT::getFlagROI
int getFlagROI(const int roi, const int16_t ssc, const int16_t sec, const int16_t side) const
Definition: TGCTileMuCoincidenceLUT.cxx:184
TGCTriggerData::N_SIDE
@ N_SIDE
Definition: TGCTriggerData.h:162
LVL1TGC::TGCTileMuCoincidenceLUT::m_flagroi
std::unordered_map< uint16_t, uint8_t > m_flagroi
Definition: TGCTileMuCoincidenceLUT.h:96