ATLAS Offline Software
Loading...
Searching...
No Matches
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"
8
10
11
12namespace 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
51std::shared_ptr<const NSWTrigOut>
52TGCNSW::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
138void 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
161void 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
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_DEBUG(x)
AthMessaging(IMessageSvc *msgSvc, const std::string &name)
Constructor.
StatusCode retrieve(const SG::ReadHandleKey< Muon::NSW_TrigRawDataContainer > &key, const EventContext &ctx)
Definition TGCNSW.cxx:23
std::shared_ptr< const NSWTrigOut > getOutput(LVL1TGCTrigger::TGCRegionType region, int side, int TGC_TriggerSector) const
Definition TGCNSW.cxx:52
std::shared_ptr< NSWTrigOut > m_buffer[LVL1TGC::TGCSide::kNSide][NumberOfNSWTriggerProcesser]
Definition TGCNSW.h:41
void print() const
Definition TGCNSW.cxx:161
@ NumberOfNSWTriggerProcesser
Definition TGCNSW.h:34
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
void eraseOutput()
Definition TGCNSW.cxx:152
Property holding a SG store/key/clid from which a ReadHandle is made.
virtual bool isValid() override final
Can the handle be successfully dereferenced?