ATLAS Offline Software
Loading...
Searching...
No Matches
Lvl1MuForwardSectorLogicDataPhase1.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
3*/
4#include <iomanip>
5#include <iostream>
6
9
10namespace LVL1MUONIF {
11
17
19 if ( ( right.getSystemId() == m_id_system ) &&
20 ( this != &right ) ) {
21 m_bcid = right.bcid();
22 m_nsw = right.nsw();
24 for ( size_t i = 0; i < NCAND[m_id_system]; ++i ) {
25 m_roi[ i ] = right.roi( i );
26 m_ovl[ i ] = right.ovl( i );
27 m_pt[ i ] = right.pt( i );
28 m_charge[ i ] = right.charge( i );
29 m_2candidates[ i ] = right.is2candidates( i );
30 m_goodmf[ i ] = right.goodmf(i);
31 m_innercoin[ i ] = right.innercoin(i);
32 m_bw2or3[ i ] = right.bw2or3(i);
33 m_veto[ i ] = right.veto(i);
34 }
35 }
36 return *this;
37 }
38
40
41 SectorLogicWord val(std::make_pair(0, 0));
42 unsigned int len=0;
43 unsigned int pos=0;
44 for (size_t i=0;i<NCAND[m_id_system];i++)
45 {
46 //track current position and length of current data
47 len=0;
48 pos=0;
49
50 // Candidate 'i' will be offset by 16*i bits
51 //0-7: ROI - 8 bits
53 if (roi(i) < 0) val.first |= len << (i*16+pos);
54 else val.first |= (roi(i) & len) << (i*16+pos);
55 pos += len;
56
57 //8-11: pT - 4 bits
59 val.first |= (pt(i) & len) << (i*16+pos);
60 pos += len;
61
62 //12: charge
64 val.first |= (charge(i) & len) << (i*16+pos);
65 pos += len;
66
67 //13: 2 or 3 hits in BW
69 val.first |= (bw2or3(i) & len) << (i*16+pos);
70 pos += len;
71
72 //14: inner coincidence
74 if (charge(i) > 0) val.first |= (1 >> (i*16+pos)) & len;
75 pos += len;
76
77 //15: GoodMF
79 val.first |= (goodmf(i) & len) << (i*16+pos);
80 pos += len;
81 }
82
83
84 // Global+BCID flags (bits 32-47)
85 len=0;
86 pos=0;
87
88 //0-11: BCID
90 val.second |= ( bcid() & len);
91 pos += len;
92
93 //12-15: global flags
94 //12: >1cand/sector
96 if (is2candidatesInSector()) val.second |= (1 >> pos) & len;
97 pos += len;
98
99 //13: nsw monitoring
101 if (nsw()) val.second |= (1 >> pos) & len;
102 pos += len;
103
104
105 return val;
106 }
107
108
110
111 unsigned int val;
112 unsigned int pos=0;
113 unsigned int len=0;
114 for (size_t i=0;i<NCAND[m_id_system];i++)
115 {
116 //track current position and length of current data
117 len=0;
118 pos=0;
119
120 // Candidate 'i' will be offset by 16*i bits
121 //0-7: ROI - 8 bits
123 val = (value.first >> (i*16+pos)) & len;
124 if (val == len) roi(i, -1);
125 else roi(i, val);
126 pos += len;
127
128 //8-11: pT - 4 bits
130 val = (value.first >> (i*16+pos)) & len;
131 if (val == len) pt(i, -1);
132 else pt(i, val);
133 pos += len;
134
135 //12: charge
137 val = (value.first >> (i*16+pos)) & len;
138 if (val > 0) charge(i, +1);
139 else charge(i, -1);
140 pos += len;
141
142 //13: 2 or 3 hits in BW
144 val = (value.first >> (i*16+pos)) & len;
145 bw2or3(i, val);
146 pos += len;
147
148 //14: inner coincidence
150 val = (value.first >> (i*16+pos)) & len;
151 innercoin(i, val);
152 pos += len;
153
154 //15: GoodMF
156 val = (value.first >> (i*16+pos)) & len;
157 goodmf(i, val);
158 pos += len;
159 }
160
161 // Global+BCID flags (bits 32-47)
162 len=0;
163 pos=0;
164
165 //0-11: BCID
167 val = value.second & len;
168 bcid(val);
169 pos += len;
170
171 //12: > 2 candidates
173 val = (value.second >> pos) & len;
174 if (val) set2candidatesInSector();
176
177 //13: nsw monitoring
179 val = (value.second >> pos) & len;
180 nsw(val);
181
182 //14-15: other global flags
183
184 return *this;
185 }
186
187
188 void Lvl1MuForwardSectorLogicDataPhase1::printOut( std::ostream& out ) const {
189
190 for (size_t i=0;i<NCAND[m_id_system];i++)
191 {
192 out << "Bit 0-7 " << " ROI<" << i+1 << "> ";
193 if (roi(i) == -1) out << "NA" << std::endl;
194 else out << std::setw(8) << roi(i) << std::endl;
195
196 out << "Bit 8-11 "<< "Pt" << i+1 << " ";
197 if (pt(i) == -1) out << "No Hit" << std::endl;
198 else out << pt(i) << std::endl;
199
200 out << "Bit 12 "<<"2 candidates in ROI<" << i+1 << "> ";
201 out << std::setw(8) << is2candidates(i) << std::endl;
202
203 out << "Bit 13-14 "<<"overlap<"<<i+1<<"> ";
204 out << std::setw(8) << ovl(i) << std::endl;
205
206 out << "Bit 15 "<<"charge<"<<i+1<<"> ";
207 out << std::setw(8) << charge(i) << std::endl;
208 }
209 out << "Bit 0-11 " << " BCID ";
210 out << std::setw( 8 ) << bcid() << std::endl;
211
212 out << "Bit 12 " << " >2candidates in a sector ";
213 out << std::setw( 8 ) << m_2candidatesInSector << std::endl;
214
215 out << "Bit 13 " << " NSW monitoring ";
216 out << std::setw( 8 ) << m_nsw << std::endl;
217 }
218
219} // namespace LVL1MUONIF
const Lvl1MuSectorLogicDataPhase1 & convertFromWordFormat(const SectorLogicWord &)
Convert SectorLogicDataPhase1 from 32 bit word data.
SectorLogicWord getWordFormat() const
Get data in 32 bit word format.
Lvl1MuForwardSectorLogicDataPhase1 & operator=(const Lvl1MuSectorLogicDataPhase1 &right)
virtual void printOut(std::ostream &out) const
print out data
std::pair< unsigned long int, unsigned short int > SectorLogicWord
Namespace for the LVL1 muon interface classes.
static const unsigned int NBITS_CHARGE[3]
static const unsigned int NBITS_ROI[3]
static const unsigned int NBITS_BW2OR3[3]
static const unsigned int NBITS_IS2CANDIDATESINSECTOR[3]
static const unsigned int NBITS_GOODMF[3]
static const unsigned int NBITS_PT[3]
static const size_t NCAND[3]
static const unsigned int NBITS_NSWMON[3]
static const unsigned int NBITS_BCID[3]
static const unsigned int NBITS_INNERCOIN[3]