Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
TGCNSW.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
6 #include "TrigT1TGC/TGCNSW.h"
7 #include "TrigT1TGC/NSWTrigOut.h"
8 
10 
11 
12 namespace LVL1TGC {
13 
15 : AthMessaging("LVL1TGC::TGCNSW") {
16  for (int side=0; side < 2; side++) {
17  for (int TP=0; TP < NumberOfNSWTriggerProcesser; TP++) {
18  m_buffer[side][TP] = std::make_shared<NSWTrigOut>(side, std::vector<int>{TP});
19  }
20  }
21 }
22 
24  const EventContext& ctx) {
25  ATH_MSG_DEBUG("retrieve");
26  this->eraseOutput();
27 
28  //The following part will be available when NSW Trigger Output is available.
29 
30  SG::ReadHandle<Muon::NSW_TrigRawDataContainer> readNSW_TrigRawDataContainer(key, ctx);
31  ATH_CHECK( readNSW_TrigRawDataContainer.isValid() );
32 
33  for(const Muon::NSW_TrigRawData* nsw_sector : *readNSW_TrigRawDataContainer){
34  for(const Muon::NSW_TrigRawDataSegment* nsw_trk : *nsw_sector){
35  int nsw_sideId = (nsw_sector->sectorSide()=='A')?0:1;
36  this->setOutput(nsw_sideId, // side
37  nsw_sector->sectorId(), // Sector number in NSW
38  nsw_trk->rIndex(), // R-index
39  nsw_trk->phiIndex(), // Phi-index
40  nsw_trk->deltaTheta(), // Delta theta index
41  nsw_trk->lowRes(),
42  nsw_trk->phiRes(),
43  nsw_trk->monitor()); // monitoring flag
44  }
45  }
46 
47  return StatusCode::SUCCESS;
48 }
49 
50 
51 std::shared_ptr<const NSWTrigOut>
52 TGCNSW::getOutput(LVL1TGCTrigger::TGCRegionType region ,int side,int TGC_TriggerSector) const
53 {
54  auto indexIsOk = [this](int idx)->bool{
55  if (not ((idx >=0 ) and (idx < NumberOfNSWTriggerProcesser))){
56  ATH_MSG_ERROR("index out of range in TGCNSW::getOutput");
57  return false;
58  }
59  return true;
60  };
61 
62  auto trigNSW_output = std::make_shared<NSWTrigOut>();
63  if ( (side<0)||(side>1) ) return 0;
65  if ( TGC_TriggerSector<0 || TGC_TriggerSector>47 ) return 0;
66 
67  int temp=int((TGC_TriggerSector-2)/6);
68  int NSW_TriggerSector=temp*2+int((TGC_TriggerSector-1-6*temp)/5);
69  if(TGC_TriggerSector==0 || TGC_TriggerSector==1) {
70  NSW_TriggerSector=15;
71  }
72 
73  //
74  // SL input 0-1
75  if (not indexIsOk(NSW_TriggerSector)) return nullptr;
76  *trigNSW_output+=*m_buffer[side][NSW_TriggerSector];
77  // SL input 2-3
78  if ( NSW_TriggerSector == 15 ) {
79  *trigNSW_output+=*m_buffer[side][0];
80  } else {
81  if (not indexIsOk(NSW_TriggerSector + 1)) return nullptr;
82  *trigNSW_output+=*m_buffer[side][NSW_TriggerSector+1];
83  }
84 
85  if( !(TGC_TriggerSector%6==4 || TGC_TriggerSector%6==5) ){
86  return trigNSW_output;
87  }
88 
90  if ( NSW_TriggerSector==14 ) {
92  *trigNSW_output+=*m_buffer[side][0];
93  } else {
95  if (not indexIsOk(NSW_TriggerSector + 2)) return nullptr;
96  *trigNSW_output+=*m_buffer[side][NSW_TriggerSector+2];
97  }
98 
99  return trigNSW_output;
100  }
101 
103  if ( TGC_TriggerSector<0 || TGC_TriggerSector>23 ) return 0;
104 
106  int temp=int((TGC_TriggerSector-4)/6);
107  int NSW_TriggerSector=temp*4+int((TGC_TriggerSector-6*temp-4)/2)+2;
108  if(TGC_TriggerSector==0 || TGC_TriggerSector==1)
109  NSW_TriggerSector=15;
110  else if(TGC_TriggerSector==2 || TGC_TriggerSector==3)
111  NSW_TriggerSector=0;
112 
114  if (not indexIsOk(NSW_TriggerSector)) return nullptr;
115  *trigNSW_output+=*m_buffer[side][NSW_TriggerSector];
117  if(TGC_TriggerSector==0 || TGC_TriggerSector==1){
118  *trigNSW_output+=*m_buffer[side][0];
119  *trigNSW_output+=*m_buffer[side][1];
120  }else if(TGC_TriggerSector==22 || TGC_TriggerSector==23){
121  if (not indexIsOk(NSW_TriggerSector + 1)) return nullptr;
122  *trigNSW_output+=*m_buffer[side][NSW_TriggerSector+1];
123  *trigNSW_output+=*m_buffer[side][0];
124  }else{
125  if (not indexIsOk(NSW_TriggerSector + 2)) return nullptr;
126  *trigNSW_output+=*m_buffer[side][NSW_TriggerSector+1];
127  *trigNSW_output+=*m_buffer[side][NSW_TriggerSector+2];
128  }
129 
130  return trigNSW_output;
131  }
132 
133 
134  return 0;
135 }
136 
137 
138 void TGCNSW::setOutput(int side, int NSWTriggerProcesser, uint8_t NSWeta_8bit, uint8_t NSWphi_6bit, uint8_t NSWDtheta_5bit, bool lowRes, bool phiRes, bool NSWmonitor)
139 {
140  if ( (side<0)||(side>1) ) return; //side 0::Aside 1::Cside
141  if ( (NSWTriggerProcesser<0) || (NSWTriggerProcesser>=NumberOfNSWTriggerProcesser) ) return;
142  m_buffer[side][NSWTriggerProcesser]->setSide(side);
143  m_buffer[side][NSWTriggerProcesser]->setNSWTriggerProcessor(NSWTriggerProcesser);
144  m_buffer[side][NSWTriggerProcesser]->setEta(NSWeta_8bit);
145  m_buffer[side][NSWTriggerProcesser]->setPhi(NSWphi_6bit);
146  m_buffer[side][NSWTriggerProcesser]->setDtheta(NSWDtheta_5bit);
147  m_buffer[side][NSWTriggerProcesser]->setLowRes(lowRes);
148  m_buffer[side][NSWTriggerProcesser]->setPhiRes(phiRes);
149  m_buffer[side][NSWTriggerProcesser]->setMonitor(NSWmonitor);
150 }
151 
153 {
154  for(int idx1=0; idx1<2; idx1++){
155  for (int idx2=0; idx2<NumberOfNSWTriggerProcesser; idx2++){
156  m_buffer[idx1][idx2]->clear();
157  }
158  }
159 }
160 
161 void TGCNSW::print() const
162 {
163  for(int idx1=0; idx1<2; idx1++){
164  for (int idx2=0; idx2<NumberOfNSWTriggerProcesser; idx2++){
165  m_buffer[idx1][idx2]->print();
166  }
167  }
168 }
169 
170 
171 } // end of namespace
LVL1TGCTrigger::TGCRegionType::ENDCAP
@ ENDCAP
LVL1TGC::TGCNSW::eraseOutput
void eraseOutput()
Definition: TGCNSW.cxx:152
AthCheckMacros.h
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:557
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
Muon::NSW_TrigRawData
Definition: NSW_TrigRawData.h:15
TGCNSW.h
NSWTrigOut.h
LVL1TGCTrigger::TGCRegionType::FORWARD
@ FORWARD
SG::ReadHandleKey< Muon::NSW_TrigRawDataContainer >
TRT::Hit::side
@ side
Definition: HitInfo.h:83
LVL1TGC::TGCNSW::print
void print() const
Definition: TGCNSW.cxx:161
LVL1TGC::TGCNSW::retrieve
StatusCode retrieve(const SG::ReadHandleKey< Muon::NSW_TrigRawDataContainer > &key, const EventContext &ctx)
Definition: TGCNSW.cxx:23
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
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
python.LArMinBiasAlgConfig.int
int
Definition: LArMinBiasAlgConfig.py:59
LVL1TGC
Definition: BigWheelCoincidenceLUT.cxx:20
AthMessaging
Class to provide easy MsgStream access and capabilities.
Definition: AthMessaging.h:55
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Muon::NSW_TrigRawDataSegment
Definition: NSW_TrigRawDataSegment.h:15
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
LVL1TGC::TGCNSW::setOutput
void setOutput(int side, int NSWTriggerProcesser, uint8_t NSWeta_8bit, uint8_t NSWphi_6bit, uint8_t NSWDtheta_5bit, bool lowRes, bool phiRes, bool NSWmonitor)
Definition: TGCNSW.cxx:138
LVL1TGC::TGCNSW::NumberOfNSWTriggerProcesser
@ NumberOfNSWTriggerProcesser
Definition: TGCNSW.h:34
LVL1TGCTrigger::TGCRegionType
TGCRegionType
Definition: TGCNumbering.h:49
LVL1TGC::TGCNSW::m_buffer
std::shared_ptr< NSWTrigOut > m_buffer[LVL1TGC::TGCSide::kNSide][NumberOfNSWTriggerProcesser]
Definition: TGCNSW.h:41
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
LVL1TGC::TGCNSW::getOutput
std::shared_ptr< const NSWTrigOut > getOutput(LVL1TGCTrigger::TGCRegionType region, int side, int TGC_TriggerSector) const
Definition: TGCNSW.cxx:52
LVL1TGC::TGCNSW::TGCNSW
TGCNSW()
Definition: TGCNSW.cxx:14
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37