ATLAS Offline Software
Lvl1MuCTPIInput.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include <iostream>
6 #include <iomanip>
7 
9 
10 namespace LVL1MUONIF {
11 
13  for (size_t isys=0; isys<NumberOfMuonSystem; isys++){
14  m_isFilledOutOfTimeCandidates[isys] = false;
15  }}
16 
19  *this = right;
20  }
21 
24  clearAll();
25  }
26 
28 
30  if ( this != &right ) {
31  clearAll();
32  for (size_t idSys=0; idSys<NumberOfMuonSystem; idSys++){
33  for( size_t ip=0; ip<right.m_data[idSys].size(); ip++){
34  int bc=((right.m_data[idSys]).at(ip)).first;
35  Lvl1MuVect vSL(((right.m_data[idSys]).at(ip)).second);
36  m_data[idSys].push_back(std::make_pair(bc,vSL));
37  }
39  }
40  }
41  return *this;
42  }
43 
44 
45 
48  size_t subSystemAddress,
49  size_t sectorAddress,
50  int bcid ) const {
51 
53  for( size_t ip=0; ip<m_data[systemAddress].size(); ip++){
54  int bc=((m_data[systemAddress]).at(ip)).first;
55  if (bc != bcid) continue;
56  const Lvl1MuVect vecSL( ((m_data[systemAddress]).at(ip)).second);
57  return *(vecSL.at(getSystemIndex(systemAddress,subSystemAddress,sectorAddress)));
58  }
59  return dummy;
60  }
61 
64  size_t systemAddress,
65  size_t subSystemAddress,
66  size_t sectorAddress,
67  int bcid ) {
68  size_t ip=0;
69  if (isEmpty(systemAddress,bcid)) {
70  ip = reserve( systemAddress, bcid );
71  } else {
72  ip = getBcidIndex( systemAddress, bcid );
73  }
74 
75  Lvl1MuVect vecSL((((m_data[systemAddress]).at(ip)).second));
76  size_t idx= getSystemIndex(systemAddress,subSystemAddress,sectorAddress);
77  if ( systemAddress == Barrel ) {
78  *std::dynamic_pointer_cast<Lvl1MuBarrelSectorLogicData>(vecSL.at(idx)) = data;
79  } else if ( systemAddress == Endcap ) {
80  *std::dynamic_pointer_cast<Lvl1MuEndcapSectorLogicData>(vecSL.at(idx))= data;
81  } else if ( systemAddress == Forward ) {
82  *std::dynamic_pointer_cast<Lvl1MuForwardSectorLogicData>(vecSL.at(idx))= data;
83  }
84  }
85 
87  void Lvl1MuCTPIInput::setSectorLogicData( const unsigned int & sectorWord,
88  size_t systemAddress,
89  size_t subSystemAddress,
90  size_t sectorAddress,
91  int bcid ) {
92  // convert to SectorLogicData
93  Lvl1MuSectorLogicData * pData;
94  if ( systemAddress == Barrel ) {
95  pData = new Lvl1MuBarrelSectorLogicData();
96  } else if ( systemAddress == Endcap ) {
97  pData = new Lvl1MuEndcapSectorLogicData();
98  } else if ( systemAddress == Forward ) {
99  pData = new Lvl1MuForwardSectorLogicData();
100  } else {
101  return ;
102  }
103  pData->convertFromWordFormat( sectorWord );
104  setSectorLogicData( *pData, systemAddress, subSystemAddress, sectorAddress, bcid );
105  delete pData;
106  }
107 
110  if ( this == &right ) return;
111 
112  for (size_t idSys=0; idSys<NumberOfMuonSystem; idSys++){
113  for( size_t ip=0; ip<right.m_data[idSys].size(); ip++){
114  int bc=((right.m_data[idSys]).at(ip)).first;
115  if (isEmpty( idSys, bc)){
116  Lvl1MuVect vSL(((right.m_data[idSys]).at(ip)).second);
117  m_data[idSys].push_back(std::make_pair(bc,vSL));
119  }
120  }
121  }
122 
123  }
124 
126  size_t Lvl1MuCTPIInput::reserve( size_t systemAddress ,
127  int bcid) {
128 
129  Lvl1MuVect vecSL;
130 
131  if ( systemAddress == Barrel ) {
132  for ( size_t id = 0; id < NumberOfBarrelSector*NumberOfMuonSubSystem; id++ ) {
133  std::shared_ptr<Lvl1MuBarrelSectorLogicData> barrelSect(new Lvl1MuBarrelSectorLogicData);
134  vecSL.push_back(barrelSect);
135  }
136 
137  } else if ( systemAddress == Endcap ) {
138  for ( size_t id = 0; id < NumberOfEndcapSector*NumberOfMuonSubSystem; id++ ) {
139  std::shared_ptr<Lvl1MuEndcapSectorLogicData> endcapSect(new Lvl1MuEndcapSectorLogicData);
140  vecSL.push_back(endcapSect);
141  }
142 
143  } else if ( systemAddress == Forward ) {
144  for ( size_t id = 0; id < NumberOfForwardSector*NumberOfMuonSubSystem; id++ ) {
145  std::shared_ptr<Lvl1MuForwardSectorLogicData> forwardSect(new Lvl1MuForwardSectorLogicData);
146  vecSL.push_back(forwardSect);
147  }
148  }
149 
150  size_t ip = m_data[systemAddress].size();
151  m_data[systemAddress].push_back( std::make_pair(bcid, vecSL) );
152 
153  if (bcid!=0) m_isFilledOutOfTimeCandidates[systemAddress] = true;
154 
155  return ip;
156  }
157 
159  bool Lvl1MuCTPIInput::isEmpty( size_t systemAddress,
160  int bcid ) const {
161  for( size_t ip=0; ip<m_data[systemAddress].size(); ip++){
162  int bc=((m_data[systemAddress]).at(ip)).first;
163  if (bc == bcid) return false;
164  }
165  return true;
166  }
167 
171  return true;
172  } else {
173  return false;
174  }
175  }
176 
178  void Lvl1MuCTPIInput::clear( size_t systemAddress ) {
179  std::cout << "TW: SysAd: in " << systemAddress << " size: " << m_data[systemAddress].size() << std::endl;
180  m_data[systemAddress].clear();
181  }
182 
185  for ( size_t id = 0; id < NumberOfMuonSystem; id++ ) {
186  m_data[ id ].clear();
187  }
188 
189 
190  }
191 
193  // void Lvl1MuCTPIInput::duplicateToOtherBC(int bcidOffset) {
194 
195  // std::cout << "I am faking candidates for testing - do you really want that??" << std::endl;
196 
197  // std::vector<Lvl1MuVectWithBC> dataCopy[ NumberOfMuonSystem ];
198 
199  // for ( size_t id = 0; id < NumberOfMuonSystem; id++ ) {
200  // dataCopy[ id ] = m_data[ id ];
201  // }
202 
203  // for (std::vector<Lvl1MuVectWithBC>::iterator itb = dataCopy[Barrel].begin(); itb !=dataCopy[Barrel].end(); ++itb){
204  // (*itb).first =bcidOffset ;
205  // }
206  // std::vector<Lvl1MuVectWithBC>::iterator itb = m_data[Barrel].end();
207  // m_data[Barrel].insert(itb, dataCopy[Barrel].begin(), dataCopy[Barrel].end());
208 
209  // for (std::vector<Lvl1MuVectWithBC>::iterator ite = dataCopy[Endcap].begin(); ite !=dataCopy[Endcap].end(); ++ite){
210  // (*ite).first =bcidOffset ;
211  // }
212  // std::vector<Lvl1MuVectWithBC>::iterator ite = m_data[Endcap].end();
213  // m_data[Endcap].insert(ite, dataCopy[Endcap].begin(), dataCopy[Endcap].end());
214 
215  // for (std::vector<Lvl1MuVectWithBC>::iterator itf = dataCopy[Forward].begin(); itf !=dataCopy[Forward].end(); ++itf){
216  // (*itf).first =bcidOffset ;
217  // }
218  // std::vector<Lvl1MuVectWithBC>::iterator itf = m_data[Forward].end();
219  // m_data[Forward].insert(itf, dataCopy[Forward].begin(), dataCopy[Forward].end());
220  // }
221 
222 
223  std::ostream& operator<<( std::ostream& out, const Lvl1MuCTPIInput& right ) {
224 
225  size_t systemAddress;
226  size_t subSystemAddress;
227  size_t side, id;
228 
229  out << "--------- Barrel Sector ---------------------------" << std::endl;
230  systemAddress = right.idBarrelSystem();
231  for ( side = 0; side < right.NumberOfMuonSubSystem; ++side ) {
232  if ( side == 0 ) {
233  out << " ------ A Side (Z>0) ---------------------------" << std::endl;
234  subSystemAddress = right.idSideA();
235  } else {
236  out << " ------ C Side (Z<0) ---------------------------" << std::endl;
237  subSystemAddress = right.idSideC();
238  }
239  for ( id = 0; id < right.numberOfBarrelSector() ;++id ) {
240  out << " --- Sector ID : " << id << " ----------" << std::endl;
241  for( size_t ip=0; ip < right.m_data[systemAddress].size(); ip++){
242  int bc=((right.m_data[systemAddress]).at(ip)).first;
243  out << right.getSectorLogicData( systemAddress, subSystemAddress, id, bc );
244  out << " BC: " << bc;
245  out << std::endl;
246  }
247  }
248  }
249 
250  out << "--------- Endcap Sector ---------------------------" << std::endl;
251  systemAddress = right.idEndcapSystem();
252  for ( side = 0; side < right.NumberOfMuonSubSystem; ++side ) {
253  if ( side == 0 ) {
254  out << " ------ A Side (Z>0) ---------------------------" << std::endl;
255  subSystemAddress = right.idSideA();
256  } else {
257  out << " ------ C Side (Z<0) ---------------------------" << std::endl;
258  subSystemAddress = right.idSideC();
259  }
260  for ( id = 0; id < right.numberOfEndcapSector() ;++id ) {
261  out << " --- Sector ID : " << id << " ----------" << std::endl;
262  for( size_t ip=0; ip < right.m_data[systemAddress].size(); ip++){
263  int bc=((right.m_data[systemAddress]).at(ip)).first;
264  out << right.getSectorLogicData( systemAddress, subSystemAddress, id, bc );
265  out << " BC: " << bc;
266  out << std::endl;
267  }
268  }
269  }
270 
271  out << "--------- Forward Sector ---------------------------" << std::endl;
272  systemAddress = right.idForwardSystem();
273  for ( side = 0; side < right.NumberOfMuonSubSystem; ++side ) {
274  if ( side == 0 ) {
275  out << " ------ A Side (Z>0) ---------------------------" << std::endl;
276  subSystemAddress = right.idSideA();
277  } else {
278  out << " ------ C Side (Z<0) ---------------------------" << std::endl;
279  subSystemAddress = right.idSideC();
280  }
281  for ( id = 0; id < right.numberOfForwardSector() ;++id ) {
282  out << " --- Sector ID : " << id << " ----------" << std::endl;
283  for( size_t ip=0; ip < right.m_data[systemAddress].size(); ip++){
284  int bc=((right.m_data[systemAddress]).at(ip)).first;
285  out << right.getSectorLogicData( systemAddress, subSystemAddress, id, bc );
286  out << " BC: " << bc;
287  out << std::endl;
288  }
289  }
290  }
291 
292  return out;
293  }
294 }
LVL1MUONIF::Lvl1MuCTPIInput::merge
void merge(const Lvl1MuCTPIInput &another)
Merge SectorLogic data of another object into this data of a system (Barrel, Endcap or Forward) is no...
Definition: Lvl1MuCTPIInput.cxx:109
python.SystemOfUnits.second
int second
Definition: SystemOfUnits.py:120
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
LVL1MUONIF::Lvl1MuSectorLogicData
Base class for the data coming from one SL board.
Definition: Lvl1MuSectorLogicData.h:34
LVL1MUONIF::Lvl1MuCTPIInput::setSectorLogicData
void setSectorLogicData(const Lvl1MuSectorLogicData &data, size_t systemAddress, size_t subSystemAddress, size_t sectorAddress, int bcid=0)
Definition: Lvl1MuCTPIInput.cxx:63
LVL1MUONIF::Lvl1MuCTPIInput::Endcap
@ Endcap
Definition: Lvl1MuCTPIInput.h:50
LVL1MUONIF::Lvl1MuCTPIInput::NumberOfMuonSystem
@ NumberOfMuonSystem
Definition: Lvl1MuCTPIInput.h:52
LVL1MUONIF::Lvl1MuCTPIInput::Forward
@ Forward
Definition: Lvl1MuCTPIInput.h:50
LVL1MUONIF::Lvl1MuCTPIInput
Class representing (part of) the input data to the MuCTPI.
Definition: Lvl1MuCTPIInput.h:36
LVL1MUONIF::Lvl1MuCTPIInput::operator=
Lvl1MuCTPIInput & operator=(const Lvl1MuCTPIInput &right)
Definition: Lvl1MuCTPIInput.cxx:29
LVL1MUONIF::Lvl1MuCTPIInput::~Lvl1MuCTPIInput
virtual ~Lvl1MuCTPIInput()
Definition: Lvl1MuCTPIInput.cxx:23
LVL1MUONIF
Namespace for the LVL1 muon interface classes.
Definition: Lvl1MuBarrelSectorLogicData.cxx:9
LVL1MUONIF::Lvl1MuCTPIInput::reserve
size_t reserve(size_t systemAddress, int bcid=0)
To store object to file. (NOT TO BE USED ANYMORE...)
Definition: Lvl1MuCTPIInput.cxx:126
LVL1MUONIF::Lvl1MuCTPIInput::getSectorLogicData
const Lvl1MuSectorLogicData & getSectorLogicData(size_t systemAddress, size_t subSystemAddress, size_t sectorAddress, int bcid=0) const
Definition: Lvl1MuCTPIInput.cxx:47
LVL1MUONIF::Lvl1MuCTPIInput::numberOfBarrelSector
static size_t numberOfBarrelSector()
Definition: Lvl1MuCTPIInput.h:60
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
LVL1MUONIF::Lvl1MuCTPIInput::Lvl1MuVect
std::vector< std::shared_ptr< Lvl1MuSectorLogicData > > Lvl1MuVect
Definition: Lvl1MuCTPIInput.h:160
LVL1MUONIF::Lvl1MuCTPIInput::isEmptyAll
bool isEmptyAll(int bcid=0) const
Return "true" if data of all systems for this bcid is empty.
Definition: Lvl1MuCTPIInput.cxx:169
LVL1MUONIF::Lvl1MuCTPIInput::NumberOfEndcapSector
@ NumberOfEndcapSector
Definition: Lvl1MuCTPIInput.h:55
LVL1MUONIF::Lvl1MuCTPIInput::getSystemIndex
size_t getSystemIndex(size_t systemAddress, size_t subSystemAddress, size_t sectorAddress) const
Definition: Lvl1MuCTPIInput.h:134
LVL1MUONIF::Lvl1MuCTPIInput::idForwardSystem
static size_t idForwardSystem()
Definition: Lvl1MuCTPIInput.h:63
TRT::Hit::side
@ side
Definition: HitInfo.h:83
LVL1MUONIF::Lvl1MuCTPIInput::clearAll
void clearAll()
Clear Sector Logic data.
Definition: Lvl1MuCTPIInput.cxx:184
LVL1MUONIF::Lvl1MuBarrelSectorLogicData
Class representing data from a barrel SL board.
Definition: Lvl1MuBarrelSectorLogicData.h:27
LVL1MUONIF::Lvl1MuCTPIInput::m_isFilledOutOfTimeCandidates
bool m_isFilledOutOfTimeCandidates[NumberOfMuonSystem]
Definition: Lvl1MuCTPIInput.h:155
LVL1MUONIF::Lvl1MuCTPIInput::isEmpty
bool isEmpty(size_t systemAddress, int bcid=0) const
Return "true" if data of specified system is empty.
Definition: Lvl1MuCTPIInput.cxx:159
LVL1MUONIF::Lvl1MuCTPIInput::idBarrelSystem
static size_t idBarrelSystem()
Definition: Lvl1MuCTPIInput.h:59
find_tgc_unfilled_channelids.ip
ip
Definition: find_tgc_unfilled_channelids.py:3
python.xAODType.dummy
dummy
Definition: xAODType.py:4
LVL1MUONIF::Lvl1MuForwardSectorLogicData
Class representing data from a forward SL board.
Definition: Lvl1MuForwardSectorLogicData.h:27
LVL1MUONIF::Lvl1MuCTPIInput::getBcidIndex
size_t getBcidIndex(size_t systemAddress, int bcid=0) const
Definition: Lvl1MuCTPIInput.h:147
LVL1MUONIF::Lvl1MuCTPIInput::m_data
std::vector< Lvl1MuVectWithBC > m_data[NumberOfMuonSystem]
Definition: Lvl1MuCTPIInput.h:162
LVL1MUONIF::Lvl1MuCTPIInput::idEndcapSystem
static size_t idEndcapSystem()
Definition: Lvl1MuCTPIInput.h:61
LVL1MUONIF::Lvl1MuCTPIInput::idSideC
static size_t idSideC()
Definition: Lvl1MuCTPIInput.h:66
LVL1MUONIF::Lvl1MuCTPIInput::NumberOfBarrelSector
@ NumberOfBarrelSector
Definition: Lvl1MuCTPIInput.h:54
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:194
LVL1MUONIF::Lvl1MuEndcapSectorLogicData
Class representing data from an endcap SL board.
Definition: Lvl1MuEndcapSectorLogicData.h:27
xAOD::bcid
setEventNumber setTimeStamp bcid
Definition: EventInfo_v1.cxx:133
LVL1MUONIF::Lvl1MuCTPIInput::clear
void clear(size_t systemAddress)
Definition: Lvl1MuCTPIInput.cxx:178
LVL1MUONIF::Lvl1MuCTPIInput::numberOfForwardSector
static size_t numberOfForwardSector()
Definition: Lvl1MuCTPIInput.h:64
LVL1MUONIF::Lvl1MuSectorLogicData::convertFromWordFormat
virtual const Lvl1MuSectorLogicData & convertFromWordFormat(const SectorLogicWord &)=0
Convert SectorLogicData from 32 bit word data.
LVL1MUONIF::Lvl1MuCTPIInput::NumberOfForwardSector
@ NumberOfForwardSector
Definition: Lvl1MuCTPIInput.h:56
LVL1MUONIF::Lvl1MuCTPIInput::Barrel
@ Barrel
Definition: Lvl1MuCTPIInput.h:50
DeMoScan.first
bool first
Definition: DeMoScan.py:534
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
LVL1MUONIF::Lvl1MuCTPIInput::numberOfEndcapSector
static size_t numberOfEndcapSector()
Definition: Lvl1MuCTPIInput.h:62
LVL1MUONIF::Lvl1MuCTPIInput::idSideA
static size_t idSideA()
Definition: Lvl1MuCTPIInput.h:65
LVL1MUONIF::Lvl1MuCTPIInput::Lvl1MuCTPIInput
Lvl1MuCTPIInput()
Definition: Lvl1MuCTPIInput.cxx:12
Lvl1MuCTPIInput.h
LVL1MUONIF::Lvl1MuCTPIInput::NumberOfMuonSubSystem
@ NumberOfMuonSubSystem
Definition: Lvl1MuCTPIInput.h:53
LVL1MUONIF::operator<<
std::ostream & operator<<(std::ostream &out, const Lvl1MuCTPIInput &right)
Definition: Lvl1MuCTPIInput.cxx:223