ATLAS Offline Software
TGCTMDB.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "TrigT1TGC/TGCTMDB.h"
6 
7 namespace LVL1TGC {
8 
10 : AthMessaging("LVL1TGC::TGCTMDB")
11 {
12  for (size_t side=0; side < TGCSide::kNSide; side++) {
13  for (size_t mod=0; mod < kNTileModule; mod++) {
14  m_buffer[side][mod].reset(new TGCTMDBOut(side, mod));
15  }
16  }
17 }
18 
19 
21 {
22  ATH_MSG_DEBUG("fillTMDB");
23 
24  // clear TMDB
25  this->eraseOutput();
26 
27  SG::ReadHandle<TileMuonReceiverContainer> readTileMuonReceiverContainer(key);
28  if(!readTileMuonReceiverContainer.isValid()){
29  ATH_MSG_ERROR("Cannot retrieve Tile Muon Receiver Container.");
30  return StatusCode::FAILURE;
31  }
32  const TileMuonReceiverContainer* tileMuRecCont = readTileMuonReceiverContainer.cptr();
33 
34  // loop over all TileMuonReceiverObj in container
35  TileMuonReceiverContainer::const_iterator tmItr = tileMuRecCont->begin();
36 
37  const TileMuonReceiverObj * tmObj_Thresholds = *tmItr;
38  if ( (tmObj_Thresholds->GetThresholds()).size() == 4) {
39  float thresholds[4];
40  for (size_t ip=0;ip<4;ip++){
41  thresholds[ip] = (tmObj_Thresholds->GetThresholds()).at(ip);
42  }
43  ATH_MSG_DEBUG("thresholds[] :" << thresholds[0] << thresholds[1] << thresholds[2] << thresholds[3] );
44  ATH_MSG_DEBUG("type of GetThreshold : " << typeid((tmObj_Thresholds->GetThresholds())).name()
45  << " ID of GetThreshold : "
46  << tmObj_Thresholds->GetID() );
47  }
48 
49 
50  //clear tmobj_Threshols
51  tmObj_Thresholds = 0;
52  // m_id and decision , etc ... from
53  ++tmItr;
54 
55  for ( ; tmItr != tileMuRecCont->end(); ++tmItr) {
56 
57  const TileMuonReceiverObj * tmObj = *tmItr;
58  // Tile Module
59  unsigned int moduleID = static_cast<unsigned int>(tmObj->GetID());
60  unsigned int sideID = (moduleID & 0xf00) >> 8;
61  unsigned int mod = (moduleID & 0x0ff); // 0...63
62  // TMDB decision
63  bool tile2SL[4];
64  // [0] [1] [2] [3]
65  // d5d6_hi d5d6_lo d6_hi d6_lo
66  for (size_t ip=0;ip<4;ip++){
67  tile2SL[ip] = (tmObj->GetDecision()).at(ip);
68  }
69  //if ( moduleID < 300 || (moduleID > 363 && moduleID < 400) || moduleID > 463 ||
70  if ( mod > 63 || (sideID !=3 && sideID !=4) ||
71  ((tmObj->GetDecision()).size() != 4) ) {
72  continue;
73  } else {
74 
76  if (sideID == 3) {
78  } else if (sideID == 4) {
80  }
81  // setOutput(side, mod, hit56, hit6) -> hit56, 6
84  if (tile2SL[0] == true && tile2SL[1] == false) {
85  hit56 = TGCTMDBOut::TM_HIGH;
86  } else if (tile2SL[0] == false && tile2SL[1] == true) {
87  hit56 = TGCTMDBOut::TM_LOW;
88  } else if (tile2SL[0] == false && tile2SL[1] == false) {
89  hit56 = TGCTMDBOut::TM_NOHIT;
90  }
91 
92  if (tile2SL[2] == true && tile2SL[3] == false) {
93  hit6 = TGCTMDBOut::TM_HIGH;
94  } else if (tile2SL[2] == false && tile2SL[3] == true) {
95  hit6 = TGCTMDBOut::TM_LOW;
96  } else if (tile2SL[2] == false && tile2SL[3] == false) {
97  hit6 = TGCTMDBOut::TM_NOHIT;
98  }
99 
100  TGCTMDBOut::TileModuleHit prehit56 = this->getOutput(side, mod)->getHit56();
101  TGCTMDBOut::TileModuleHit prehit6 = this->getOutput(side, mod)->getHit6();
102  if(prehit56 != TGCTMDBOut::TM_NA && prehit56 > hit56) { hit56=prehit56; }
103  if(prehit6 != TGCTMDBOut::TM_NA && prehit6 > hit6) { hit6=prehit6; }
104 
105  this->setOutput(side, mod, hit56, hit6);
106  }
107  }
108 
109  return StatusCode::SUCCESS;
110 }
111 
112 
113 
114 std::shared_ptr<const TGCTMDBOut> TGCTMDB::getOutput(const TGCSide side, unsigned int mod) const {
115  if (side >= TGCSide::kNSide) return 0;
116  if (mod >= kNTileModule) return 0;
117  return m_buffer[side][mod];
118 }
119 
120 std::shared_ptr<const TGCTMDBOut> TGCTMDB::getOutput(const TGCSide side, int sector, unsigned int mod) const
121 {
122  if (side >= TGCSide::kNSide) return 0;
123  if ((sector<0)||(sector>47)) return 0;
124  if (mod>3) return 0;
125  int octant = sector / 6;
126  int sec = sector % 6;
127  int offset = 0;
128  if (sec==0) offset = -4;
129  else if (sec==1) offset = -4; // same SL board as sec#0
130  else if (sec==2) offset = 0;
131  else if (sec==3) offset = 0; // same SL board as sec#1
132  else if (sec==4) offset = 2;
133  else if (sec==5) offset = 2; // same SL board as sec#2
134  int moduleID = (octant*(kNTileModule/8) + offset + kNTileModule) % kNTileModule;
135  moduleID = (moduleID + mod) % kNTileModule;
136  return m_buffer[side][moduleID];
137 }
138 
139 void TGCTMDB::setOutput(const TGCSide side, const unsigned int module,
140  const TGCTMDBOut::TileModuleHit hit56,
141  const TGCTMDBOut::TileModuleHit hit6)
142 {
143  if (module>=kNTileModule) return;
144  m_buffer.at(side)[module]->setHit56(hit56);
145  m_buffer.at(side)[module]->setHit6(hit6);
146 }
147 
149  for (auto &perside : m_buffer) {
150  for (auto &mod : perside) mod->clear();
151  }
152 }
153 
154 int TGCTMDB::getInnerTileBits(const TGCSide side, int sector) const
155 {
156  int inner_tile = 0;
157 
158  for (int ii = 0; ii < 4; ii++) {
159  TGCTMDBOut::TileModuleHit hit56 = getOutput(side, sector, ii)->getHit56();
160  TGCTMDBOut::TileModuleHit hit6 = getOutput(side, sector, ii)->getHit6();
161 
162  int tmp_56 = (hit56 == TGCTMDBOut::TM_LOW || hit56 == TGCTMDBOut::TM_HIGH) ? 1 : 0;
163  int tmp_6 = (hit6 == TGCTMDBOut::TM_LOW || hit6 == TGCTMDBOut::TM_HIGH) ? 1 : 0;
164 
165  int tmp_all = (tmp_6 << 1) | (tmp_56);
166 
167  inner_tile |= (tmp_all << (ii*2));
168  }
169 
170  return inner_tile;
171 }
172 
173 void TGCTMDB::print() const {
174  for (auto &perside : m_buffer) {
175  for (auto &mod : perside) mod->print();
176  }
177 }
178 
179 
180 } // end of namespace
LVL1TGC::TGCTMDB::getOutput
std::shared_ptr< const TGCTMDBOut > getOutput(const TGCSide side, unsigned int moduleID) const
Definition: TGCTMDB.cxx:114
LVL1TGC::CSIDE
@ CSIDE
Definition: TGCNumbering.h:15
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
LVL1TGC::TGCTMDB::retrieve
StatusCode retrieve(SG::ReadHandleKey< TileMuonReceiverContainer > key)
Definition: TGCTMDB.cxx:20
LVL1TGC::TGCTMDB::print
void print() const
Definition: TGCTMDB.cxx:173
LVL1TGC::TGCTMDBOut
Definition: TGCTMDBOut.h:11
SG::ReadHandleKey
Property holding a SG store/key/clid from which a ReadHandle is made.
Definition: StoreGate/StoreGate/ReadHandleKey.h:39
TRT::Hit::side
@ side
Definition: HitInfo.h:83
LVL1TGC::TGCTMDB::getInnerTileBits
int getInnerTileBits(const TGCSide side, int sectorID) const
Definition: TGCTMDB.cxx:154
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
python.PyAthena.module
module
Definition: PyAthena.py:131
LVL1TGC::TGCTMDBOut::TM_NOHIT
@ TM_NOHIT
Definition: TGCTMDBOut.h:13
LVL1TGC::TGCTMDBOut::TM_HIGH
@ TM_HIGH
Definition: TGCTMDBOut.h:13
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
maskDeadModules.mod
mod
Definition: maskDeadModules.py:36
TileMuonReceiverObj::GetDecision
const std::vector< bool > & GetDecision() const
Definition: TileMuonReceiverObj.h:109
TileMuonReceiverObj::GetThresholds
const std::vector< float > & GetThresholds() const
Definition: TileMuonReceiverObj.h:110
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
LVL1TGC
Definition: BigWheelCoincidenceLUT.cxx:20
AthMessaging
Class to provide easy MsgStream access and capabilities.
Definition: AthMessaging.h:55
find_tgc_unfilled_channelids.ip
ip
Definition: find_tgc_unfilled_channelids.py:3
LVL1TGC::TGCTMDBOut::TM_NA
@ TM_NA
Definition: TGCTMDBOut.h:13
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
TGCTMDB.h
LVL1TGC::TGCTMDB::eraseOutput
void eraseOutput()
Definition: TGCTMDB.cxx:148
TileMuonReceiverObj::GetID
int GetID() const
Definition: TileMuonReceiverObj.h:105
LVL1TGC::ASIDE
@ ASIDE
Definition: TGCNumbering.h:14
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
TileMuonReceiverObj
Definition: TileMuonReceiverObj.h:28
LVL1TGC::TGCTMDBOut::TM_LOW
@ TM_LOW
Definition: TGCTMDBOut.h:13
LVL1TGC::TGCTMDB::m_buffer
std::array< std::array< std::shared_ptr< TGCTMDBOut >, kNTileModule >, TGCSide::kNSide > m_buffer
Definition: TGCTMDB.h:46
convertTimingResiduals.offset
offset
Definition: convertTimingResiduals.py:71
LVL1TGC::TGCTMDB::TGCTMDB
TGCTMDB()
Definition: TGCTMDB.cxx:9
LVL1TGC::kNSide
@ kNSide
Definition: TGCNumbering.h:16
LVL1TGC::TGCTMDBOut::TileModuleHit
TileModuleHit
Definition: TGCTMDBOut.h:13
LVL1TGC::TGCSide
TGCSide
The sides of TGC (A- or C-side)
Definition: TGCNumbering.h:13
LVL1TGC::TGCTMDB::setOutput
void setOutput(const TGCSide side, const unsigned int module, const TGCTMDBOut::TileModuleHit hit56, const TGCTMDBOut::TileModuleHit hit6)
Definition: TGCTMDB.cxx:139
LVL1TGC::TGCTMDB::kNTileModule
static constexpr unsigned int kNTileModule
Definition: TGCTMDB.h:38
TileContainer
Definition: TileContainer.h:38
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37