ATLAS Offline Software
LVL1TGCTrigger.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // STL
6 #include <sstream>
7 #include <fstream>
8 #include <vector>
9 
10 // TGC
12 #include "TrigT1TGC/TGCASDOut.h"
13 #include "TrigT1TGC/TGCEvent.h"
19 #include "TrigT1TGC/TGCSector.h"
21 #include "TrigT1TGC/TGCNumbering.h"
23 #include "TrigT1TGC/TGCNSW.h"
24 #include "TrigT1TGC/NSWTrigOut.h"
25 #include "TrigT1TGC/TGCBIS78.h"
26 #include "TrigT1TGC/BIS78TrigOut.h"
27 
28 // Other stuff
34 
35 // MuonSpectrometer
39 
44 
45 // DetMask stuff
46 #include "eformat/DetectorMask.h"
47 #include "eformat/SourceIdentifier.h"
48 
49 namespace LVL1TGCTrigger {
50 
51 LVL1TGCTrigger::LVL1TGCTrigger(const std::string& name, ISvcLocator* pSvcLocator)
52 : AthAlgorithm(name,pSvcLocator),
53  m_cabling(0),
54  m_db(0),
55  m_nEventInSector(0),
56  m_innerTrackletSlotHolder( tgcArgs() ),
57  m_debuglevel(false)
58 {}
59 
61 LVL1TGCTrigger::~LVL1TGCTrigger()
62 {
63  ATH_MSG_DEBUG("LVL1TGCTrigger destructor called");
64  if (m_db) {
65  delete m_db;
66  m_db =0;
67  }
68 }
69 
72 {
73  ATH_MSG_DEBUG("LVL1TGCTrigger::initialize()");
74 
75  m_debuglevel = (msgLevel() <= MSG::DEBUG); // save if threshold for debug
76 
77  m_tgcArgs.set_MSGLEVEL(msgLevel());
78  m_tgcArgs.set_SHPT_ORED( m_SHPTORED.value() );
79  m_tgcArgs.set_USE_INNER( m_USEINNER.value() );
80  m_tgcArgs.set_INNER_VETO( m_INNERVETO.value() );
81  m_tgcArgs.set_TILE_MU( m_TILEMU.value() );
82  m_tgcArgs.set_USE_NSW( m_USENSW.value() );
83  m_tgcArgs.set_USE_BIS78( m_USEBIS78.value() );
84  m_tgcArgs.set_FORCE_NSW_COIN( m_FORCENSWCOIN.value() );
85 
86  m_tgcArgs.set_USE_CONDDB( m_USE_CONDDB.value() );
87  m_tgcArgs.set_useRun3Config( m_useRun3Config.value() );
88 
89  m_tgcArgs.set_NSWSideInfo( m_NSWSideInfo.value() );
90 
91  ATH_CHECK( m_readCondKey.initialize(!m_useRun3Config.value()) );
92  ATH_CHECK( m_readLUTs_CondKey.initialize(m_useRun3Config.value()) );
93 
94  // CondDB is not available for Run3 config. set USE_CONDDB to false to avoid errors.
95  // will be removed the below part.
96  if(m_useRun3Config.value()){
97  m_tgcArgs.set_USE_CONDDB(false);
98  }
99 
100  // initialize TGCDataBase
101  m_db = new TGCDatabaseManager(&m_tgcArgs, m_readCondKey, m_readLUTs_CondKey);
102 
103  // initialize the TGCcabling
104  ATH_CHECK(getCabling());
105 
106  // read and write handle key
107  ATH_CHECK(m_keyTgcRdoIn.initialize());
108  ATH_CHECK(m_keyTgcDigit.initialize());
109  ATH_CHECK(m_keyTileMu.initialize());
110  ATH_CHECK(m_keyNSWTrigOut.initialize(tgcArgs()->USE_NSW())); // to be updated once the Run 3 CondDb becomes available (should be automatically configured by db info)
111  ATH_CHECK(m_keyBIS78TrigOut.initialize(tgcArgs()->USE_BIS78())); // to be updated as well
112  ATH_CHECK(m_muctpiPhase1Key.initialize(tgcArgs()->useRun3Config()));
113  ATH_CHECK(m_keyTgcRdo.initialize(tgcArgs()->useRun3Config()));
114  ATH_CHECK(m_bsMetaDataContRHKey.initialize(SG::AllowEmpty));
115 
116  // clear mask channel map
117  m_MaskedChannel.clear();
118 
119  return StatusCode::SUCCESS;
120 }
121 
124 {
125  ATH_MSG_DEBUG("LVL1TGCTrigger::finalize() called" << " m_nEventInSector = " << m_nEventInSector);
126 
127  if (m_db) delete m_db;
128  m_db = 0 ;
129 
130  return StatusCode::SUCCESS;
131 }
132 
135 {
136  ATH_MSG_DEBUG("execute() called");
137  const EventContext& ctx = getContext();
138 
139  if(!m_cabling) {
140  // get cabling svc
141  if(getCabling().isFailure()) return StatusCode::FAILURE;
142  }
143 
144  // doMaskOperation is performed at the first event
145  // It is better to implement callback against
146  // MuonTGC_CablingSvc::updateCableASDToPP (Susumu Oda, 2010/10/27)
147  if(m_firstTime) {
148  // do mask operation
149  if(getMaskedChannel().isFailure()) return StatusCode::FAILURE;
150  m_firstTime = false;
151  }
152 
153  // Tile-Muon data
154  bool doTileMu = m_tgcArgs.TILE_MU();
155 
156  if (doTileMu && !m_tgcArgs.useRun3Config()) { // for Run-2
157  SG::ReadCondHandle<TGCTriggerData> readHandle{m_readCondKey, ctx};
158  const TGCTriggerData* readCdo{*readHandle};
159  doTileMu = readCdo->isActive(TGCTriggerData::CW_TILE);
160  }
161 
162  // NSW data
163  bool doNSW = m_tgcArgs.USE_NSW();
164 
165  // BIS78 data
166  bool doBIS78 = m_tgcArgs.USE_BIS78();
167 
168  // TgcRdo
169  std::map<std::pair<int, int>, std::unique_ptr<TgcRdo>> tgcrdo;
170 
171 
172 
173  SG::ReadHandle<TgcDigitContainer> readTgcDigitContainer(m_keyTgcDigit, ctx);
174  if(!readTgcDigitContainer.isValid()){
175  ATH_MSG_ERROR("Cannot retrieve TgcDigitContainer");
176  return StatusCode::FAILURE;
177  }
178  const TgcDigitContainer* tgc_container = readTgcDigitContainer.cptr();
179 
180  SG::WriteHandle<LVL1MUONIF::Lvl1MuCTPIInputPhase1> wh_muctpiTgc(m_muctpiPhase1Key, ctx);
181  ATH_CHECK(wh_muctpiTgc.record(std::make_unique<LVL1MUONIF::Lvl1MuCTPIInputPhase1>()));
182  LVL1MUONIF::Lvl1MuCTPIInputPhase1* muctpiinputPhase1 = wh_muctpiTgc.ptr();
183 
184  // process one by one
185  StatusCode sc = StatusCode::SUCCESS;
186  for (int bc=TgcDigit::BC_PREVIOUS; bc<=TgcDigit::BC_NEXTNEXT; bc++){
187  sc = StatusCode::SUCCESS;
188 
189  // Use TileMu only if BC_CURRENT
190  if (doTileMu && bc == m_CurrentBunchTag) {
191  ATH_CHECK(m_system->getTMDB()->retrieve(m_keyTileMu));
192  }
193 
194  // Use NSW trigger output
195  if(doNSW && bc==m_CurrentBunchTag){ // To implement BC-calculation
196  ATH_CHECK(m_system->getNSW()->retrieve(m_keyNSWTrigOut));
197  }
198 
199  // Use RPC BIS78 trigger output
200  if(doBIS78 && bc == m_CurrentBunchTag){ // Todo: implement BC-calculation
201  ATH_CHECK(m_system->getBIS78()->retrieve(m_keyBIS78TrigOut));
202  }
203 
204  if (m_ProcessAllBunches || bc == m_CurrentBunchTag) {
205  m_bctagInProcess = bc;
206  sc = processOneBunch(tgc_container, muctpiinputPhase1, tgcrdo);
207  }
208  if (sc.isFailure()) {
209  ATH_MSG_FATAL("Fail to process the bunch " << m_bctagInProcess);
210  return sc;
211  }
212  }
213 
214 
215  // before writing the output TgcRdo container,
216  // read input TgcRdo and copy the tracklet etc.
217  SG::ReadHandle<TgcRdoContainer> rdoContIn(m_keyTgcRdoIn);
218  if(!rdoContIn.isValid()){
219  ATH_MSG_WARNING("Cannot retrieve TgcRdoContainer with key=" << m_keyTgcRdoIn.key());
220  return sc;
221  }else if(rdoContIn->size()>0) {
222  TgcRdoContainer::const_iterator itR = rdoContIn->begin();
223  for(; itR!=rdoContIn->end(); ++itR){
224  const TgcRdo* rdoIn = (*itR);
225  std::pair<int, int> subDetectorRod(rdoIn->subDetectorId(), rdoIn->rodId());
226  std::map<std::pair<int, int>, std::unique_ptr<TgcRdo>>::iterator itRdo = tgcrdo.find(subDetectorRod);
227  if (itRdo!=tgcrdo.end()) {
228  // if subDetectorId and rodId for input and output RDOs are the same,
229  // copy the tracklet info etc. from input to the output TgcRdo
230  for ( const TgcRawData* rd : *rdoIn ) {
231  itRdo->second->push_back(std::make_unique<TgcRawData>(*rd));
232  }
233  }
234  }
235  }
236 
237  // write tgcL1rdo container
238  SG::WriteHandle<TgcRdoContainer> tgcL1rdoHandle (m_keyTgcRdo, ctx);
239  auto trgContainer=std::make_unique<TgcRdoContainer>();
240  for(const auto& tgcRdoMap : tgcrdo){
241  for(const auto rawData : *tgcRdoMap.second){
242  trgContainer->push_back(rawData);
243  }
244  }
245  ATH_CHECK(tgcL1rdoHandle.record(std::move(trgContainer)));
246 
247  return sc;
248 }
249 
250 StatusCode LVL1TGCTrigger::processOneBunch(const TgcDigitContainer* tgc_container,
251  LVL1MUONIF::Lvl1MuCTPIInputPhase1* muctpiinputPhase1,
252  std::map<std::pair<int, int>, std::unique_ptr<TgcRdo>>& tgcrdo)
253 {
254  ATH_MSG_DEBUG("start processOneBunch: for BC=" << m_bctagInProcess);
255 
256  std::map<Identifier, int> tgcDigitIDs;
258 
259  // doMaskOperation (masked & fired)
260  doMaskOperation(tgc_container, tgcDigitIDs);
261 
262  // fill ASDOut to this event
263  TGCEvent event;
264  fillTGCEvent(tgcDigitIDs, event);
265  tgcDigitIDs.clear();
266 
267  // process trigger electronics emulation...
268  m_TimingManager->increaseBunchCounter();
269  m_system->distributeSignal(&event);
270 
271  // EIFI trigger bits for SL are cleared.
272  m_innerTrackletSlotHolder.clearTriggerBits();
273 
274  // PatchPanel, SlaveBoard
276  for( int j=0; j<m_system->getNumberOfOctant(); j+=1){
277  for( int k=0; k<m_system->getNumberOfModule(); k+=1){
278  TGCSector* sector = m_system->getSector(i,j,k);
279  if((sector!=0)&&(sector->hasHit())){
280  m_nEventInSector++;
281  m_TimingManager->startPatchPanel(sector, m_db);
282  m_TimingManager->startSlaveBoard(sector);
283  if (m_OutputTgcRDO.value()) recordRdoSLB(sector, tgcrdo);
284  // EIFI trigger bits for SL are filled in this method.
285  }
286  }
287  }
288  }
289 
290  // HighPtBoard, SectorLogic
291  const int muctpiBcId_offset = TgcDigit::BC_CURRENT;
292  int muctpiBcId = m_bctagInProcess - muctpiBcId_offset;
293  for(int i=0; i< LVL1TGC::kNSide; i++) {
294  int sectoraddr_endcap = 0;
295  int sectoraddr_forward = 0;
296  for(int j=0; j<m_system->getNumberOfOctant(); j+=1){
297  for(int k=0; k<m_system->getNumberOfModule(); k+=1){
298  if(k>=9) continue;// skip Inner TGC
299  TGCSector* sector = m_system->getSector(i,j,k);
300  if(sector==0) continue;
301 
302  m_TimingManager->startHighPtBoard(sector);
303  if (m_OutputTgcRDO.value()) recordRdoHPT(sector, tgcrdo);
304 
305  // EIFI trigger bits are checked if Endcap
306  if(sector->getRegionType() == TGCRegionType::ENDCAP && sector->getSL()) {
307  if((sector->hasHit())){
308  // Pointers to store EIFI trigger bits for Endcap SL
310  = {0, 0, 0, 0};
311  m_innerTrackletSlotHolder.getInnerTrackletSlots(i, j, k, innerTrackletSlots);
312  sector->getSL()->setInnerTrackletSlots(innerTrackletSlots);
313  }
314  }
315  m_TimingManager->startSectorLogic(sector);
316  if(sector->hasHit()) sector->clearNumberOfHit();
317 
318  // Fill inner (EIFI/Tile) words
319  if (m_OutputTgcRDO.value() && m_tgcArgs.USE_INNER()) recordRdoInner(sector, tgcrdo);
320 
321  // Fill Lvl1MuCTPInput
322  if (m_OutputTgcRDO.value()) recordRdoSL(sector, tgcrdo);
323 
324  size_t tgcsystem=0,subsystem=0;
327 
328  std::shared_ptr<TGCTrackSelectorOut> trackSelectorOut;
329  sector->getSL()->getTrackSelectorOutput(trackSelectorOut);
330 
331  std::shared_ptr<LVL1TGC::TGCNSW> nsw = m_system->getNSW();
332  int module = sector->getModuleId();
333  int sectorId;
334  if(sector->getRegionType() == TGCRegionType::ENDCAP) {
337  if(trackSelectorOut != 0) FillSectorLogicData(&sldata,trackSelectorOut.get());
338 
339  if ( m_tgcArgs.USE_NSW() ){
340  sectorId = ((module/3)*2+module%3) + sector->getOctantId()*6;
341  std::shared_ptr<const LVL1TGC::NSWTrigOut> pNSWOut = nsw->getOutput(sector->getRegionType(),
342  sector->getSideId(),
343  sectorId);
344  if ( pNSWOut ){
345  // set monitoring flag
346  for(bool NSWmonitor : pNSWOut->getNSWmonitor() ){
347  if ( NSWmonitor ) {
348  sldata.nsw(true);
349  break;
350  }
351  }
352  }
353  }
354  muctpiinputPhase1->setSectorLogicData(sldata,tgcsystem,subsystem,sectoraddr_endcap++,muctpiBcId);
355  } else if(sector->getRegionType() == TGCRegionType::FORWARD) {
358  if(trackSelectorOut != 0) FillSectorLogicData(&sldata,trackSelectorOut.get());
359 
360  if ( m_tgcArgs.USE_NSW() ) {
361  sectorId = (module/3) + sector->getOctantId()*3;
362  std::shared_ptr<const LVL1TGC::NSWTrigOut> pNSWOut = nsw->getOutput(sector->getRegionType(),
363  sector->getSideId(),
364  sectorId);
365  if ( pNSWOut ){
366  // set monitoring flag
367  for(bool NSWmonitor : pNSWOut->getNSWmonitor() ){
368  if ( NSWmonitor ) {
369  sldata.nsw(true);
370  break;
371  }
372  }
373  }
374  }
375  muctpiinputPhase1->setSectorLogicData(sldata,tgcsystem,subsystem,sectoraddr_forward++,muctpiBcId);
376  }
377 
378  trackSelectorOut.get()->reset();
379 
380 
381  } // k Module
382  } // j Octant
383  } // i Side
384 
385  event.Clear();
386 
387  return StatusCode::SUCCESS;
388 }
389 
390 
392 void LVL1TGCTrigger::doMaskOperation(const TgcDigitContainer* tgc_container,
393  std::map<Identifier, int>& TgcDigitIDs)
394 {
395  // (1) skip masked channels
396  for (const TgcDigitCollection* c : *tgc_container) {
397  for (const TgcDigit* h : *c) {
398 
399  // check BCID
400  if (h->bcTag()!=m_bctagInProcess) continue;
401 
402  Identifier channelId = h->identify();
403  const auto itCh = m_MaskedChannel.find(channelId);
404  if (itCh!=m_MaskedChannel.end() && itCh->second==0) {
405  ATH_MSG_DEBUG("This channel is masked! offlineID=" << channelId);
406  continue;
407  }
408  TgcDigitIDs.emplace(channelId, 1);
409  }
410  }
411 
412  // (2) add fired channels by force
413  for(const auto& [Id, OnOff] : m_MaskedChannel) {
414  if (OnOff==1) {
415  ATH_MSG_VERBOSE("This channel is fired by force! offlineID=" << Id);
416  TgcDigitIDs.emplace(Id, 1);
417  }
418  }
419 
420  ATH_MSG_DEBUG("# of total hits " << TgcDigitIDs.size());
421 
422  return;
423 }
424 
426 void LVL1TGCTrigger::fillTGCEvent(const std::map<Identifier, int>& tgcDigitIDs, TGCEvent& event)
427 {
428  // Loop on TGC detectors (collections)
429  for(const auto& itCh : tgcDigitIDs) {
430  const Identifier channelId = itCh.first;
431  int subsystemNumber;
432  int octantNumber;
433  int moduleNumber;
434  int layerNumber;
435  int rNumber;
436  int wireOrStrip;
437  int channelNumber;
438  bool status = m_cabling->getOnlineIDfromOfflineID(channelId,
439  subsystemNumber,
440  octantNumber,
441  moduleNumber,
442  layerNumber,
443  rNumber,
444  wireOrStrip,
445  channelNumber);
446 
447  if(!status) {
448  ATH_MSG_INFO("Fail to getOnlineIDfromOfflineID for " << channelId);
449  } else {
450  bool fstatus;
451  int subDetectorID, srodID, sswID, sbLoc, channelID;
452  int phi=0;
453  int moduleType=0;
454  int slbID=0;
455  bool isAside=true;
456  bool isEndcap=true;
457 
458  fstatus = m_cabling->getReadoutIDfromOfflineID(channelId,
459  subDetectorID,
460  srodID,sswID,
461  sbLoc,channelID);
462 
463  if (fstatus) {
464  fstatus = m_cabling->getSLBIDfromReadoutID(phi, isAside, isEndcap,
465  moduleType, slbID,
466  subDetectorID,
467  srodID, sswID,sbLoc);
468  }
469  if (fstatus) {
470  ATH_MSG_VERBOSE("hit : subsys#=" << subsystemNumber
471  << " octant#=" << octantNumber
472  << " mod#=" << moduleNumber
473  << " layer#=" << layerNumber << " r#=" << rNumber
474  << " isStrip=" << wireOrStrip
475  << " ch#=" << channelNumber << endmsg
476  << " --> readoutID: sudetID=" << subDetectorID
477  << " srodID=" << srodID << " sswID=" << sswID
478  << " slbID=" << slbID << " chID=" << channelID);
479 
480  TGCZDirection zdire = (subsystemNumber==1)? kZ_FORWARD : kZ_BACKWARD;
481  TGCReadoutIndex index(zdire,octantNumber,moduleNumber,rNumber,layerNumber);
482  TGCSignalType signal = (wireOrStrip==1)? STRIP : WIRE;
483  event.NewASDOut(index,
484  signal,
485  channelNumber,
486  0);
487  } else {
488  ATH_MSG_INFO("Fail to getSLBIDfromOfflineID for " << channelId);
489  }
490  }
491  } // End Loop on TGC detectors (collections)
492  if (m_debuglevel) {
493  ATH_MSG_DEBUG("Could make TGCEvent with TgcDigitContainer."
494  << " vector size : " << event.GetNASDOut() );
495  for(int iout=1; iout<= event.GetNASDOut(); iout++){
496  TGCASDOut* asdout = (event.GetASDOutVector()[iout-1]);
497  ATH_MSG_DEBUG( " Z:" << asdout->GetTGCReadoutIndex().GetZDirection() <<
498  " O:" << asdout->GetTGCReadoutIndex().GetOctantNumber() <<
499  " M:" << asdout->GetTGCReadoutIndex().GetModuleNumber() <<
500  " R:" << asdout->GetTGCReadoutIndex().GetRNumber() <<
501  " L:" << asdout->GetTGCReadoutIndex().GetLayerNumber() <<
502  " S:" << asdout->GetSignalType() <<
503  " I:" << asdout->GetHitID() <<
504  " T:" << asdout->GetHitToF() );
505  }
506  }
507 }
508 
509 
511 void LVL1TGCTrigger::FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicDataPhase1 *sldata,
512  const TGCTrackSelectorOut *trackSelectorOut)
513 {
514  // M.Aoki (26/10/2019)
515  // this function will be updated for Run3-specific configuration such as quality flags, 15 thresholds
516  if(trackSelectorOut ==0) return;
517 
518  sldata->clear2candidatesInSector();// for temporary
519 
520  const int muctpiBcId_offset = TgcDigit::BC_CURRENT;
521  sldata->bcid(m_bctagInProcess - muctpiBcId_offset);
522 
523  for(int trackNumber=0;trackNumber!=trackSelectorOut->getNCandidate();trackNumber++){
524 
525  sldata->roi(trackNumber,((trackSelectorOut->getR(trackNumber))<<2)+(trackSelectorOut->getPhi(trackNumber)));
526  sldata->pt(trackNumber,trackSelectorOut->getPtLevel(trackNumber));
527  if (trackSelectorOut->getInnerVeto(trackNumber)) sldata->ovl(trackNumber,1);
528  else sldata->ovl(trackNumber,0);
529  sldata->charge(trackNumber, trackSelectorOut->getCharge(trackNumber));
530  sldata->bw2or3(trackNumber, trackSelectorOut->getCoincidenceType(trackNumber));
531  sldata->goodmf(trackNumber, trackSelectorOut->getGoodMFFlag(trackNumber));
532  sldata->innercoin(trackNumber, trackSelectorOut->getInnerCoincidenceFlag(trackNumber));
533  }
535  sldata->set2candidates(trackNumber);// not used for TGC
536  sldata->clear2candidates(trackNumber);// not used for TGC
537  }
538 }
539 
541 void LVL1TGCTrigger::recordRdoSLB(TGCSector * sector,
542  std::map<std::pair<int, int>, std::unique_ptr<TgcRdo>>& tgcrdo)
543 {
544  uint16_t bcTag=m_CurrentBunchTag, l1Id=0, bcId=0;
545  // readoutID
546  int subDetectorId, rodId, sswId, sbLoc, secId, secIdEIFI;
547  // SLBID
548  bool isAside, isEndcap; int phi, moduleType, id, phiEIFI;
549  isAside = (sector->getSideId()==0 ? 1 : 0);
550  isEndcap = (sector->getRegionType() == TGCRegionType::ENDCAP ? 1 : 0);
551  int module = sector->getModuleId();
552  // OnlineID moduleNumber
553  // <---- phi ----
554  // EC: 7 6 4 3 1 0 11 10 9
555  // FWD: 8 5 2 14 13 12
556  // [M1, M2, M3] [EI/FI]
557  // secId=0-5(EC), 0-2(FWD) for TgcRawData
558  secId = (isEndcap ? (module/3)*2+module%3 : module/3);
559  // phi=1-48(EC), 1-24(FWD) in detector ID scheme
560  phi = (isEndcap ? (secId+46+sector->getOctantId()*6)%48+1 : (secId+23+sector->getOctantId()*3)%24+1);
561  // secIdEIFI=0-2
562  secIdEIFI = module%3;
563  // phiEIFI=1-24
564  phiEIFI = (secIdEIFI+23+sector->getOctantId()*3)%24+1;
565 
566  // SLB
567  const int NumberOfSLBType = 6;
568  // 0: WT, 1: WD, 2: ST, 3: SD, 4: WI 5:SI
569  for(int itype=0; itype<NumberOfSLBType; itype++) {
570  moduleType = getLPTTypeInRawData(itype);
571 
572  // loop over all SB of each type
573  for(unsigned int index=0; index<sector->getNumberOfSB(itype); index++) {
574  TGCSlaveBoard * slb = sector->getSB(itype, index);
575  if (0==slb) continue;
576  id = slb->getId();
577  const TGCSlaveBoardOut * out = slb->getOutput();
578  if (0==out) continue;
579 
580  bool isEIFI = (moduleType==TgcRawData::SLB_TYPE_INNER_WIRE ||
582 
583  // get ReadoutID
584  bool status =
585  m_cabling->getReadoutIDfromSLBID((isEIFI ? phiEIFI : phi),
586  isAside, isEndcap,
587  moduleType, id,
588  subDetectorId, rodId,
589  sswId, sbLoc);
590  if (!status) {
591  ATH_MSG_DEBUG("TGCcablignSvc::getReadoutIDfromSLBID fails");
592  ATH_MSG_DEBUG( "phi=" << phi
593  << " side=" << ((isAside) ? "A": "C")
594  << " region=" << ((isEndcap) ? "Endcap" : "Forward")
595  << " type=" << moduleType
596  << " id=" << id
597  << " subDetectorId=" << subDetectorId
598  << " rodId=" << rodId
599  << " sswId=" << sswId
600  << " sbLoc=" << sbLoc);
601  continue;
602  }
603 
604  // fill TgcRawData
605  for(int iData=0; iData<out->getNumberOfData(); iData++) { // max 8
606  if (!out->getHit(iData)) continue;
607 
608  // see TGCcabling/TGCId.h (WD=0,SD,WT,ST,SI,WI). Same as TgcRawData
610  int subMat = iData % 4;
611  int seg = 0;
613  if (iData<4) seg= 1;
614  // 13.Jan.2011 reversed by Hisaya
615  // because Layer swap in TGCStripTripletSB::doCoincidence()
616  } else if ( (type==TgcRawData::SLB_TYPE_INNER_WIRE ) ||
618  seg= iData/4;
619  }
620  std::unique_ptr<TgcRawData> rawdata(new TgcRawData(bcTag,
621  static_cast<uint16_t>(subDetectorId),
622  static_cast<uint16_t>(rodId),
623  static_cast<uint16_t>(sswId),
624  static_cast<uint16_t>(sbLoc),
625  l1Id, bcId,
626  type, out->getDev(iData), seg, subMat,
627  out->getPos(iData)));
628  addRawData(std::move(rawdata), tgcrdo);
629 
630  // EIFI trigger bits for SL are filled.
631  if(isEIFI) {
632  bool setEIFITriggerBit =
633  m_innerTrackletSlotHolder.setTriggerBit(sector->getSideId(),
634  phiEIFI,
635  (isEndcap ?
639  static_cast<unsigned int>(subMat),
640  true);
641 
642  if(!setEIFITriggerBit) {
643  ATH_MSG_INFO("Fail to set Inner trigger bit of"
644  << " sideId= " << sector->getSideId()
645  << " slotId= " << phiEIFI
646  << " region= " << (isEndcap ? "EI" : "FI")
647  << " readout= " << (type==TgcRawData::SLB_TYPE_INNER_WIRE ? "WIRE" : "STRIP")
648  << " subMat(iBit)= " << static_cast<unsigned int>(subMat) );
649  }
650  }
651 
652  ATH_MSG_DEBUG(" recordRdoSLB : reg=" << (isEndcap ? "EC" : "FWD")
653  << " srod=" << rodId << " sswId=" << sswId
654  << " SBLoc=" << sbLoc << " type=" << itype
655  << " iData(subMat:seg)=" << iData << " pos="
656  << out->getPos(iData) << " dev=" << out->getDev(iData) );
657  }
658  // end of filling TgcRawData
659 
660  } // end of loop over SB
661  } // end loop for SLB type
662 }
663 
665 void LVL1TGCTrigger::recordRdoHPT(TGCSector* sector,
666  std::map<std::pair<int, int>, std::unique_ptr<TgcRdo>>& tgcrdo)
667 {
668  if(sector->hasHit() == false) return;
669 
670  // readoutID
671  int subDetectorId, rodId, sswId, sbLoc, secId;
672 
673  // get numbering scheme info from cabling svc
674  int startEndcapSector, coverageOfEndcapSector;
675  int startForwardSector, coverageOfForwardSector;
676  rodId = 1;
677  m_cabling->getCoveragefromSRodID(rodId,
678  startEndcapSector,
679  coverageOfEndcapSector,
680  startForwardSector,
681  coverageOfForwardSector
682  ) ;
683 
684  uint16_t bcTag=m_CurrentBunchTag, l1Id=0, bcId=0;
685 
686  // HPTID
687  bool isAside, isEndcap, isStrip; int phi;
688  isAside = (sector->getSideId()==0);
689  isEndcap = (sector->getRegionType() == TGCRegionType::ENDCAP);
690  int module = sector->getModuleId();
691  // sector Id = 0..47 (Endcap) 0..23 (forward)
692  int sectorId;
693  if (isEndcap){
694  sectorId = ((module/3)*2+module%3) + sector->getOctantId()*6;
695  } else {
696  sectorId = (module/3) + sector->getOctantId()*3;
697  }
698  // secId for TgcRawData
699  // 0-3(EC), 0-1(FWD) for new TGCcabling (1/12sector)
700  // 0-5(EC), 0-2(FWD) for new TGCcabling (octant)
701  if (isEndcap){
702  secId = sectorId % coverageOfEndcapSector;
703  } else {
704  secId = sectorId % coverageOfForwardSector;
705  }
706  // phi=1-48(EC), 1-24(FWD) in detector ID scheme
707  phi = (isEndcap ? (sectorId+46)%48+1 : (sectorId+23)%24+1);
708 
709  for(int itype=0; itype<2; itype++) { // loop over HPB type(wire/strip)
710  isStrip = (itype==0 ? 0 : 1); // 0=wire 1=strip
711  for(unsigned int ihpb=0; ihpb<sector->getNumberOfHPB(itype); ihpb++) { // loop over # of HPB per sector
712  TGCHighPtBoard * hpb = sector->getHPB(itype, ihpb);
713  if (0==hpb) continue;
714  TGCHighPtChipOut * out = hpb->getOutput();
715  if (0==out) continue;
716 
717  // get ReadoutID
718  bool status = m_cabling->getReadoutIDfromHPTID(phi, isAside, isEndcap, isStrip, hpb->getId(),
719  subDetectorId, rodId, sswId, sbLoc);
720  if (!status) {
721  ATH_MSG_WARNING("TGCcablignSvc::getReadoutIDfromHPTID fails");
722  continue;
723  }
724 
725  // loop over chip and candidate
726  for(int ichip=0; ichip<NumberOfChip; ichip++) { // NumberOfChip=2
727  for(int icand=0; icand<TGCHighPtChipOut::s_NHitInTrackSelector; icand++) {
728  if (!out->getSel(ichip, icand)) continue; // should be 1 or 2
729  int chip = ichip;
730  int index = ihpb;
731  int hitId = out->getHitID(ichip, icand);
732  m_cabling->getRDOHighPtIDfromSimHighPtID(!isEndcap, isStrip,
733  index, chip, hitId);
734  bool isHPT = out->getPt(ichip,icand)==PtHigh ? 1 : 0;
735  std::unique_ptr<TgcRawData> rawdata(new TgcRawData(bcTag,
736  static_cast<uint16_t>(subDetectorId),
737  static_cast<uint16_t>(rodId),
738  l1Id,
739  bcId,
740  isStrip, (!isEndcap), secId, chip, icand,
741  isHPT, hitId,
742  out->getPos(ichip, icand),
743  out->getDev(ichip, icand),
744  0));
745  addRawData(std::move(rawdata), tgcrdo);
746 
747  // Print
748  ATH_MSG_DEBUG( "recordRdoHPT : bdTag =" << bcTag
749  << " side=" << ( (isAside)? "A" : "C")
750  << (isEndcap ? "EC" : "FWD")
751  << " w/s=" << ( (isStrip)? "s" : "w")
752  << " id=" << hpb->getId()
753  << " ecId=" << secId
754  << " chip=" << ichip
755  << " cand=" << icand
756  << " block=" << out->getHitID(ichip, icand)
757  << " subMatrix=" << out->getPos(ichip, icand)
758  << " dev=" << out->getDev(ichip, icand)
759  << " srod=" << rodId << " sswId=" << sswId << " SBLoc=" << sbLoc );
760 
761  // Strip HPT hit may be duplicated
762  if ( m_tgcArgs.SHPT_ORED() &&
763  isEndcap && isStrip &&
764  (chip==1) ) {
765  int oredId = -1;
766  if (hitId == 1) oredId = 5;
767  else if (hitId == 2) oredId = 6;
768  else if (hitId == 5) oredId = 1;
769  else if (hitId == 6) oredId = 2;
770  if (oredId >=0) {
771  std::unique_ptr<TgcRawData> rawdata2(
772  new TgcRawData(bcTag,
773  static_cast<uint16_t>(subDetectorId),
774  static_cast<uint16_t>(rodId),
775  l1Id,
776  bcId,
777  isStrip, (!isEndcap), secId, chip, icand,
778  isHPT, oredId,
779  out->getPos(ichip, icand),
780  out->getDev(ichip, icand),
781  0));
782  addRawData(std::move(rawdata2), tgcrdo);
783  }
785 
786  }
787 
788  }
789  }
790  // end loop of candidate and chip
791 
792  } // end loop for # of HPB per sector
793  } // end loop for HPB type
794 }
795 
796 
798 void LVL1TGCTrigger::recordRdoInner(TGCSector * sector,
799  std::map<std::pair<int, int>, std::unique_ptr<TgcRdo>>& tgcrdo)
800 {
801  bool isAside = sector->getSideId()==0;
802  bool isEndcap = (sector->getRegionType() == TGCRegionType::ENDCAP);
803  if (!isEndcap) return;
804 
805  // sector Id = 0..47, phi = 1..48
806  int module = sector->getModuleId();
807  int octant = sector->getOctantId();
808  int sectorId = ((module/3)*2+module%3) + octant*6;
809  int phi = (sectorId+46)%48+1;
810 
811  // get readout ID
812  int subDetectorId=0, rodId=0, sswId=0, sbLoc=0;
813 
814  bool status = m_cabling->getSReadoutIDfromSLID(phi, isAside, isEndcap,
815  subDetectorId, rodId, sswId, sbLoc);
816  if (!status) {
817  ATH_MSG_WARNING("TGCcablingSvc::ReadoutIDfromSLID fails in recordRdoInner()" );
818  return;
819  }
820 
821  // secID for TGCRawData
822  // 0-3(EC), 0-1(FWD) for 1/12 sector
823  // 0-15(EC), 0-7(FWD) for 1/3 sector covered by SROD in RUn3
824  int startEndcapSector, coverageOfEndcapSector;
825  int startForwardSector, coverageOfForwardSector;
826  if (!m_cabling->getCoveragefromSRodID(rodId,
827  startEndcapSector,
828  coverageOfEndcapSector,
829  startForwardSector,
830  coverageOfForwardSector
831  ) )
832  {
833  ATH_MSG_WARNING("LVL1TGCTrigger::recordRdoInner --- bad rodId " << rodId );
834  return;
835  }
836 
837  int secId = 0;
838  if (isEndcap){
839  secId = sectorId % coverageOfEndcapSector;
840  } else {
841  secId = sectorId % coverageOfForwardSector;
842  }
843 
844  uint16_t bcTag = m_CurrentBunchTag, l1Id = 0, bcId = 0;
845 
846  // EIFI
848 
849  const TGCInnerTrackletSlot* innerTrackletSlots[n_slots] = {0, 0, 0, 0};
850  m_innerTrackletSlotHolder.getInnerTrackletSlots(sector->getSideId(),
851  octant, module, innerTrackletSlots);
852 
853  std::array<int, n_slots>inner_eifi;
854  m_innerTrackletSlotHolder.getInnerTrackletBits(innerTrackletSlots, inner_eifi);
855 
856  for (int i_slot = 0; i_slot < n_slots; i_slot++) {
857  if (inner_eifi[i_slot] > 0) {
858  std::unique_ptr<TgcRawData> rawdata_eifi(new TgcRawData(bcTag,
859  static_cast<uint16_t>(subDetectorId),
860  static_cast<uint16_t>(rodId),
861  l1Id,
862  bcId,
863  (!isEndcap),
864  secId, /*to be checked*/
865  static_cast<uint16_t>(inner_eifi[i_slot]),
866  0, /*fi*/
867  static_cast<uint16_t>(i_slot) /*chamber Id*/));
868  addRawData(std::move(rawdata_eifi), tgcrdo);
869  }
870  }
871 
872  // Tile
873  int inner_tile = m_system->getTMDB()->getInnerTileBits(sector->getSideId(), sectorId);
874 
875  if (inner_tile > 0) {
876  //TgcRawData * rawdata_tile = new TgcRawData(bcTag,
877  //std::shared_ptr<TgcRawData> rawdata_tile (
878  std::unique_ptr<TgcRawData> rawdata_tile (new TgcRawData(bcTag,
879  static_cast<uint16_t>(subDetectorId),
880  static_cast<uint16_t>(rodId),
881  l1Id,
882  bcId,
883  (!isEndcap),
884  secId,
885  inner_tile,
886  0 /*bcid*/ ));
887  addRawData(std::move(rawdata_tile), tgcrdo);
888  }
889 
890  // NSW
891  TGCRegionType region = sector->getRegionType();
892  if ( m_USENSW ) {
893  std::shared_ptr<const LVL1TGC::NSWTrigOut> nsw_trigout = m_system->getNSW()->getOutput(region, !isAside, sectorId);
894  for ( int icand=0; icand<(int)nsw_trigout->getNSWeta().size(); icand++ ){
895  std::unique_ptr<TgcRawData> rawdata_nsw (new TgcRawData(bcTag,
896  static_cast<uint16_t>(subDetectorId),
897  static_cast<uint16_t>(rodId),
898  l1Id,
899  bcId,
900  (!isEndcap),
901  static_cast<uint16_t>(secId), /*?*/
902  static_cast<uint16_t>(nsw_trigout->getNSWeta().at(icand)),
903  static_cast<uint16_t>(nsw_trigout->getNSWphi().at(icand)),
904  static_cast<uint16_t>(icand), //nswcand
905  static_cast<uint16_t>(nsw_trigout->getNSWDtheta().at(icand)),
906  0, //nswphires
907  0, //nswlowres
908  static_cast<uint16_t>(nsw_trigout->getNSWTriggerProcessor().at(icand))));
909  addRawData(std::move(rawdata_nsw), tgcrdo);
910  }
911  }
912 
913  // RPC BIS78
914  if ( m_USEBIS78 ) {
915  std::shared_ptr<const LVL1TGC::BIS78TrigOut> bis78_trigout = m_system->getBIS78()->getOutput(sectorId);
916  for ( int icand=0; icand<(int)bis78_trigout->getBIS78eta().size(); icand++ ){
917  std::unique_ptr<TgcRawData> rawdata_bis78 (new TgcRawData(bcTag,
918  static_cast<uint16_t>(subDetectorId),
919  static_cast<uint16_t>(rodId),
920  l1Id,
921  bcId,
922  (!isEndcap),
923  static_cast<uint16_t>(secId), /*?*/
924  static_cast<uint16_t>(bis78_trigout->getBIS78eta().at(icand)),
925  static_cast<uint16_t>(bis78_trigout->getBIS78phi().at(icand)),
926  static_cast<uint16_t>(icand),
927  static_cast<uint16_t>(bis78_trigout->getBIS78Deta().at(icand)),
928  static_cast<uint16_t>(bis78_trigout->getBIS78Dphi().at(icand))));
929  addRawData(std::move(rawdata_bis78), tgcrdo);
930  }
931  }
932 }
933 
935 void LVL1TGCTrigger::recordRdoSL(TGCSector* sector,
936  std::map<std::pair<int, int>, std::unique_ptr<TgcRdo>>& tgcrdo)
937 {
938  // check if whether trigger output exists or not
939  std::shared_ptr<TGCTrackSelectorOut> selectorOut;
940  sector->getSL()->getTrackSelectorOutput(selectorOut);
941 
942  if (selectorOut == nullptr) return;
943  if (selectorOut->getNCandidate() == 0) return;
944 
945  // trigger info
946  // bool cand3plus = 0;
947  bool isEndcap = (sector->getRegionType() == TGCRegionType::ENDCAP);
948  bool isAside = (sector->getSideId()==0);
949  bool veto=0;
950  int phi=0, index=0, threshold=0, roi=0;
951  int Zdir= (isAside) ? 1 : -1;
952 
953  // sector Id = 0..47 (Endcap) 0..23 (forward)
954  int module = sector->getModuleId();
955  int sectorId;
956  if (isEndcap){
957  sectorId = ((module/3)*2+module%3) + sector->getOctantId()*6;
958  } else {
959  sectorId = (module/3) + sector->getOctantId()*3;
960  }
961 
962  // secID for TGCRawData
963  // 0-3(EC), 0-1(FWD) for new TGCcabling (1/12sector)
964  // 0-5(EC), 0-2(FWD) for new TGCcabling (octant)
965  int startEndcapSector, coverageOfEndcapSector;
966  int startForwardSector, coverageOfForwardSector;
967  int rodId = 1;
968  m_cabling->getCoveragefromSRodID(rodId,
969  startEndcapSector,
970  coverageOfEndcapSector,
971  startForwardSector,
972  coverageOfForwardSector
973  ) ;
974  int secId = 0;
975  if (isEndcap){
976  secId = sectorId % coverageOfEndcapSector;
977  } else {
978  secId = sectorId % coverageOfForwardSector;
979  }
980 
981  // phi=1-48(EC), 1-24(FWD) in detector ID scheme
982  phi = (isEndcap ? (sectorId+46)%48+1 : (sectorId+23)%24+1);
983 
984  // get readout ID
985  int subDetectorId = 0, sswId = 0, sbLoc = 0;
986  bool status = m_cabling->getSReadoutIDfromSLID(phi, isAside, isEndcap,
987  subDetectorId, rodId, sswId, sbLoc);
988  if (!status) {
989  ATH_MSG_WARNING("TGCcablignSvc::ReadoutIDfromSLID fails"
990  << (isEndcap ? " Endcap-" : " Forward-")
991  << (isAside ? "A " : "C ")
992  << " phi=" << phi );
993  return;
994  }
995 
996  // bool overlap = 0;
997  int inner=0, coinFlag=0;
998  uint16_t bcTag=m_CurrentBunchTag, l1Id=0, bcId=0;
999  for (unsigned int icand=0; icand < (unsigned int)selectorOut->getNCandidate(); ++icand) {
1000  index=icand;
1001  bool muplus = getCharge(selectorOut->getDR(icand), Zdir)==1 ? 1 : 0;
1002  threshold = selectorOut->getPtLevel(icand);
1003  roi = ((selectorOut->getR(icand))<<2)+(selectorOut->getPhi(icand));
1004  if (selectorOut->getInnerVeto(icand)) veto = 1;
1005  else veto = 0;
1006 
1007  inner = selectorOut->getInnerCoincidenceFlag(icand);
1008  coinFlag = selectorOut->getCoincidenceType(icand);
1009 
1010  // create TgcRawData
1011  std::unique_ptr<TgcRawData> rawdata(new TgcRawData(bcTag,
1012  static_cast<uint16_t>(subDetectorId),
1013  static_cast<uint16_t>(rodId),
1014  l1Id,
1015  bcId,
1016  (!isEndcap), secId,
1017  inner,
1018  coinFlag,
1019  muplus, threshold, roi));
1020  addRawData(std::move(rawdata), tgcrdo);
1021 
1022  ATH_MSG_DEBUG("recordRdoSL : bcTag =" << bcTag
1023  << " side=" << (isAside ? "A " : "C ")
1024  << " reg=" << (isEndcap ? "EC" : "FWD")
1025  << " phi=" << phi
1026  << " cand=" << index
1027  << " charge=" << (muplus ? "mu+" : "mu-")
1028  << " thre=" << threshold
1029  << " veto=" << veto
1030  << " roi=" << roi
1031  << " srod=" << rodId << " sswId=" << sswId << " SBLoc=" << sbLoc
1032  << " inner=" << inner << " coinFlag=" << coinFlag );
1033  }
1034  }
1035 
1037 // Mask=0/Fire=1
1038 StatusCode LVL1TGCTrigger::getMaskedChannel()
1039 {
1040  std::string fname=m_MaskFileName12.value();
1041  if (fname.empty()) return StatusCode::SUCCESS;
1042 
1043  std::string fullName = PathResolver::find_file (fname, "PWD");
1044  if( fullName.empty())
1045  fullName = PathResolver::find_file (fname, "DATAPATH");
1046 
1047  std::ifstream fin(fullName.c_str());
1048  if (!fin) {
1049  ATH_MSG_FATAL("Cannot open file " << fullName);
1050  return StatusCode::FAILURE;
1051  } else {
1052  ATH_MSG_INFO("Use mask file : " << fullName);
1053  }
1054  // read database ------------------------------------------------------------------------------
1055  std::vector<std::string> mask;
1056  std::string aLine;
1057  while(getline(fin,aLine)) {
1058  if (aLine.compare(0,3,"///")!=0) break;
1059  }
1060  int id_type = atoi(aLine.c_str());
1061  while(getline(fin,aLine)) {
1062  if (!aLine.empty()) mask.push_back(aLine);
1063  }
1064  fin.close();
1065 
1066  //
1067  std::vector<int> ids;
1068  Identifier ID;
1069  int nmasked=0, nfired=0;
1070  for(int ich=0; ich<(int)mask.size(); ich++) {
1071  std::string ch = mask[ich];
1072  extractFromString(ch, ids);
1073  int OnOff=ids[0]; // 0=off(masked) 1=on(fired)
1074  //
1075  if (id_type==1 && ids.size()==8) { // online
1076  int sysno1 = (ids[1]==-99 ? -1 : ids[1]); int sysno2=(ids[1]==-99 ? 1 : ids[1]);// -1(B) 1(F)
1077  int octno1 = (ids[2]==-99 ? 0 : ids[2]); int octno2=(ids[2]==-99 ? 7 : ids[2]);
1078  for(int sysno=sysno1; sysno<=sysno2; sysno+=2) {
1079  for(int octno=octno1; octno<=octno2; octno++) {
1080  bool status = m_cabling->getOfflineIDfromOnlineID(ID,sysno,octno,
1081  ids[3],ids[4],ids[5],ids[6],ids[7]);
1082  ATH_MSG_VERBOSE( (OnOff==0 ? "Mask" : "Fire") << " : offlineID=" << ID
1083  << " sys=" << sysno << " oct=" << octno << " modno=" << ids[3]
1084  << " layerno=" << ids[4] << " rNumber=" << ids[5]
1085  << " strip=" << ids[6] << " chno=" << ids[7] );
1086 
1087  if (!status) {
1088  ATH_MSG_WARNING("This onlineID is not valid and cannot be converted to offline ID." );
1089  ATH_MSG_WARNING("sys=" << sysno << " oct=" << octno << " modno=" << ids[3]
1090  << " layerno=" << ids[4] << " rNumber=" << ids[5]
1091  << " strip=" << ids[6] << " chno=" << ids[7] );
1092  } else {
1093  m_MaskedChannel.insert(std::map<Identifier, int>::value_type(ID, OnOff));
1094  if (OnOff==0) nmasked+=1;
1095  else if (OnOff==1) nfired+=1;
1096  }
1097  }
1098  }
1099 
1100  } else if (id_type==2 && ids.size()==6) { // readout id
1101  int sysno1 = (ids[1]==-99 ? 103 : ids[1]); int sysno2=(ids[1]==-99 ? 104 : ids[1]);// 103(F), 104(B)
1102  int octno1 = (ids[2]==-99 ? 0 : ids[2]); int octno2=(ids[2]==-99 ? 7 : ids[2]);
1103  for(int sysno=sysno1; sysno<=sysno2; sysno+=1) {
1104  for(int octno=octno1; octno<=octno2; octno++) {
1105  bool status = m_cabling->getOfflineIDfromReadoutID(ID, sysno,octno,ids[3],ids[4],ids[5]);
1106  ATH_MSG_VERBOSE( (OnOff==0 ? "Mask" : "Fire") << " : offlineID=" << ID
1107  << " subdetectorID=" << sysno << " rodId=" << octno << " sswID=" << ids[3]
1108  << " SBLoc=" << ids[4] << " channelId=" << ids[5] );
1109  if (!status) {
1110  ATH_MSG_WARNING("This readoutID is not valid and cannot be converted to offline ID " );
1111  ATH_MSG_WARNING("subdetectorID=" << sysno << " rodId=" << octno << " sswID=" << ids[3]
1112  << " SBLoc=" << ids[4] << " channelId=" << ids[5] );
1113  } else {
1114  m_MaskedChannel.insert(std::map<Identifier, int>::value_type(ID, OnOff));
1115  if (OnOff==0) nmasked+=1;
1116  else if (OnOff==1) nfired+=1;
1117  }
1118  }
1119  }
1120 
1121  } else if (id_type==3 && ids.size()==2) { // offline id
1122  ID = Identifier((unsigned int)ids[1]);
1123  ATH_MSG_DEBUG((OnOff==0 ? "Mask" : "Fire") << " : offlineID=" << ID);
1124  m_MaskedChannel.insert(std::map<Identifier, int>::value_type(ID, OnOff));
1125  if (OnOff==0) nmasked+=1;
1126  else if (OnOff==1) nfired+=1;
1127 
1128  } else {
1129  ATH_MSG_INFO("Invalid input. Idtype or number of parameters are invalid: idtype=" << id_type
1130  << " number of elements = " << ids.size() );
1131  return StatusCode::FAILURE;
1132  }
1133  }
1134  //
1135  ATH_MSG_INFO("Total number of masked channels ... " << nmasked);
1136  ATH_MSG_INFO("Total number of fired channels ... " << nfired);
1137  //
1138  return StatusCode::SUCCESS;
1139 }
1140 
1143  if (m_bsMetaDataContRHKey.key().empty()) return StatusCode::SUCCESS;
1144 
1145  ATH_MSG_DEBUG("Retrieving Detector Mask from ByteStream metadata container");
1146  auto bsmdc = SG::makeHandle(m_bsMetaDataContRHKey);
1147  if (bsmdc.isValid() && !bsmdc->empty()) {
1148  const ByteStreamMetadata* metadata = bsmdc->front();
1149  uint64_t detMaskLeast = metadata->getDetectorMask();
1150  uint64_t detMaskMost = metadata->getDetectorMask2();
1151 
1152  std::vector<eformat::SubDetector> subDetOff;
1153  eformat::helper::DetectorMask(~detMaskLeast, ~detMaskMost).sub_detectors(subDetOff);
1154  auto sideA = std::find_if(subDetOff.begin(), subDetOff.end(), [](const eformat::SubDetector &s) {
1155  return (s == eformat::MUON_MMEGA_ENDCAP_A_SIDE || s == eformat::MUON_STGC_ENDCAP_A_SIDE); });
1156  auto sideC = std::find_if(subDetOff.begin(), subDetOff.end(), [](const eformat::SubDetector &s) {
1157  return (s == eformat::MUON_MMEGA_ENDCAP_C_SIDE || s == eformat::MUON_STGC_ENDCAP_C_SIDE); });
1158 
1159  if (sideA != std::end(subDetOff)) tgcArgs()->set_NSWSideInfo(m_NSWSideInfo.value().erase(0,1));
1160  else if (sideC != std::end(subDetOff)) tgcArgs()->set_NSWSideInfo(m_NSWSideInfo.value().erase(1,1));
1161  else if (sideA != std::end(subDetOff) && sideC != std::end(subDetOff)) tgcArgs()->set_NSWSideInfo("");
1162  }
1163  return StatusCode::SUCCESS;
1164 }
1165 
1167 void LVL1TGCTrigger::extractFromString(const std::string& str, std::vector<int> & v) {
1168  v.clear();
1169  if (str.empty()) return;
1170  std::string line=str;
1171  while(1) {
1172  if (line.empty()) break;
1173  int i = line.find(' ');
1174  if (i==(int)std::string::npos && !line.empty()) {
1175  v.push_back(atoi(line.c_str()));
1176  break;
1177  }
1178  std::string temp = line;
1179  temp.erase(i,line.size());
1180  v.push_back(atoi(temp.c_str()));
1181  line.erase(0,i+1);
1182  }
1183 }
1184 
1186 int LVL1TGCTrigger::getCharge(int dR, int /*Zdir*/) {
1187  // old scheme
1188  // if (dR==0) return (Zdir>0 ? -1 : 1);
1189  // return (dR*Zdir>0 ? 1 : -1);
1190  return (dR >=0 ? 1 : -1 );
1191 }
1192 
1194 // see TGCNumbering.h
1195 int LVL1TGCTrigger::getLPTTypeInRawData(int type)
1196 {
1197  switch(type) {
1198  case WTSB :
1200  case WDSB :
1202  case STSB :
1204  case SDSB :
1206  case WISB :
1208  case SISB :
1210  default :
1211  return -1;
1212  }
1213 }
1214 
1216  bool LVL1TGCTrigger::addRawData(std::unique_ptr<TgcRawData> rawdata,
1217  std::map<std::pair<int, int>, std::unique_ptr<TgcRdo>>& tgcrdo)
1218 {
1219  ATH_MSG_DEBUG("addRawData() is called.");
1220  std::pair<int, int> subDetectorRod(rawdata->subDetectorId(), rawdata->rodId());
1221  std::map<std::pair<int, int>, std::unique_ptr<TgcRdo>>::iterator itRdo = tgcrdo.find(subDetectorRod);
1222 
1223  if (itRdo==tgcrdo.end()) {
1224  // in case TgcRdo with the given subDetectorId and rodId is
1225  // not registered yet, create new TgcRdo and add rawdata to it
1226  std::unique_ptr<TgcRdo> thisRdo(new TgcRdo(rawdata->subDetectorId(), rawdata->rodId(), rawdata->bcId(), rawdata->l1Id()));
1227  thisRdo->push_back(std::move(rawdata));
1228  tgcrdo.insert(std::map<std::pair<int, int>, std::unique_ptr<TgcRdo>>::value_type(subDetectorRod, std::move(thisRdo)));
1229  } else {
1230  itRdo->second->push_back(std::move(rawdata));
1231  }
1232  return true;
1233 }
1234 
1236 StatusCode LVL1TGCTrigger::getCabling()
1237 {
1238  ATH_MSG_DEBUG("LVL1TGCTrigger::getCabling()");
1239 
1240  // TGCcablingSvc
1241  // get Cabling Server Service
1242  const ITGCcablingServerSvc* TgcCabGet = 0;
1243  ATH_CHECK(service("Muon::TGCCablingServerSvc", TgcCabGet));
1244 
1245  // get Cabling Service
1246  ATH_CHECK(TgcCabGet->giveCabling(m_cabling));
1247 
1248  int maxRodId, maxSRodId, maxSswId, maxSbloc,minChannelId, maxChannelId;
1249  m_cabling->getReadoutIDRanges( maxRodId, maxSRodId, maxSswId, maxSbloc,minChannelId, maxChannelId);
1250  if (maxRodId ==12) {
1251  ATH_MSG_INFO(m_cabling->name() << " is OK");
1252  } else {
1253  ATH_MSG_FATAL("Old TGCcablingSvc(octant segmentation) can not be used !");
1254  return StatusCode::FAILURE;
1255  }
1256 
1257  // create TGCElectronicsSystem
1258  m_system = std::make_unique<TGCElectronicsSystem>(&m_tgcArgs,m_db);
1259 
1260  m_TimingManager = std::make_unique<TGCTimingManager>(m_readCondKey);
1261  m_TimingManager->setBunchCounter(0);
1262  m_nEventInSector = 0;
1263 
1264  ATH_MSG_DEBUG("finished LVL1TGCTrigger::getCabling()");
1265 
1266  return StatusCode::SUCCESS;
1267 }
1268 
1269 
1270 } // end of namespace
1271 
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
Lvl1MuEndcapSectorLogicDataPhase1.h
TgcRawData::SLB_TYPE_DOUBLET_STRIP
@ SLB_TYPE_DOUBLET_STRIP
Definition: TgcRawData.h:33
LVL1TGCTrigger::TGCRegionType::ENDCAP
@ ENDCAP
LVL1TGCTrigger::TGCSector
Definition: TGCSector.h:32
LVL1MUONIF::Lvl1MuCTPIInputPhase1::setSectorLogicData
void setSectorLogicData(const Lvl1MuSectorLogicDataPhase1 &data, size_t systemAddress, size_t subSystemAddress, size_t sectorAddress, int bcid=0)
Definition: Lvl1MuCTPIInputPhase1.cxx:74
LVL1TGCTrigger::TGCTrackSelectorOut::reset
void reset()
Definition: TGCTrackSelectorOut.cxx:30
LVL1TGCTrigger::PtHigh
const int PtHigh
Definition: TGCHighPtBoard.h:17
LVL1TGCTrigger::TGCTrackSelectorOut::getDR
int getDR(int order) const
Definition: TGCTrackSelectorOut.h:30
LVL1TGC::CSIDE
@ CSIDE
Definition: TGCNumbering.h:15
LVL1TGCTrigger::TGCTrackSelectorOut::getR
int getR(int order) const
Definition: TGCTrackSelectorOut.h:28
python.tests.PyTestsLib.finalize
def finalize(self)
_info( "content of StoreGate..." ) self.sg.dump()
Definition: PyTestsLib.py:53
TGCASDOut.h
LVL1MUONIF::Lvl1MuCTPIInputPhase1::idForwardSystem
static size_t idForwardSystem()
Definition: Lvl1MuCTPIInputPhase1.h:138
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
checkFileSG.line
line
Definition: checkFileSG.py:75
sendEI_SPB.ch
ch
Definition: sendEI_SPB.py:35
TGCTriggerData::CW_TILE
@ CW_TILE
Definition: TGCTriggerData.h:160
TgcRdo
Athena::TPCnvVers::Old Athena::TPCnvVers::Current Athena::TPCnvVers::Old Athena::TPCnvVers::Current Athena::TPCnvVers::Old Athena::TPCnvVers::Current Athena::TPCnvVers::Current Athena::TPCnvVers::Current Athena::TPCnvVers::Current Athena::TPCnvVers::Current Athena::TPCnvVers::Old Athena::TPCnvVers::Old TgcRdo
Definition: MuonEventAthenaPoolTPCnv.cxx:188
LVL1TGC::BIS78TrigOut::getBIS78Deta
const std::vector< uint8_t > & getBIS78Deta() const
Definition: BIS78TrigOut.h:64
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
TgcDigit::BC_CURRENT
@ BC_CURRENT
Definition: TgcDigit.h:37
LVL1TGCTrigger::TGCTrackSelectorOut::getInnerVeto
bool getInnerVeto(int order) const
Definition: TGCTrackSelectorOut.h:32
LVL1TGCTrigger::SISB
@ SISB
Definition: TGCNumbering.h:57
LVL1TGCTrigger::TGCASDOut::GetTGCReadoutIndex
TGCReadoutIndex GetTGCReadoutIndex() const
Definition: TGCASDOut.h:33
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
CondAttrListCollection.h
This file defines the class for a collection of AttributeLists where each one is associated with a ch...
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
ID
std::vector< Identifier > ID
Definition: CalibHitIDCheck.h:24
PathResolver::find_file
static std::string find_file(const std::string &logical_file_name, const std::string &search_path, SearchType search_type=LocalSearch)
Definition: PathResolver.cxx:251
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
LVL1TGCTrigger::TGCReadoutIndex::GetZDirection
TGCZDirection GetZDirection() const
Definition: TGCReadoutIndex.h:51
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
ZDC::sideC
BySideTypeMod sideC(-1)
LVL1TGCTrigger::TGCSector::getNumberOfHPB
unsigned int getNumberOfHPB(int type) const
Definition: TGCSector.h:165
LVL1TGCTrigger::TGCHighPtChipOut::s_NHitInTrackSelector
static constexpr int s_NHitInTrackSelector
Definition: TGCHighPtChipOut.h:18
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
index
Definition: index.py:1
LVL1MUONIF::Lvl1MuSectorLogicDataPhase1::innercoin
int innercoin(size_t id) const
Definition: Lvl1MuSectorLogicDataPhase1.h:56
initialize
void initialize()
Definition: run_EoverP.cxx:894
LVL1TGCTrigger::TGCSector::getModuleId
int getModuleId() const
Definition: TGCSector.h:78
WriteCellNoiseToCool.fullName
fullName
Definition: WriteCellNoiseToCool.py:461
mergePhysValFiles.start
start
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:14
LVL1MUONIF::Lvl1MuSectorLogicDataPhase1::nsw
int nsw() const
Definition: Lvl1MuSectorLogicDataPhase1.h:49
LVL1TGC::BIS78TrigOut::getBIS78eta
const std::vector< uint8_t > & getBIS78eta() const
Definition: BIS78TrigOut.h:62
LVL1TGCTrigger::kZ_BACKWARD
@ kZ_BACKWARD
Definition: TGCNumbering.h:45
LVL1MUONIF::Lvl1MuCTPIInputPhase1
Class representing (part of) the input data to the MuCTPI for Phase 1.
Definition: Lvl1MuCTPIInputPhase1.h:33
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
IdentifiableContainerMT::size
size_t size() const
Duplicate of fullSize for backwards compatability.
Definition: IdentifiableContainerMT.h:209
TGCSector.h
TGCNSW.h
NSWTrigOut.h
LVL1TGCTrigger::TGCSectorLogic::setInnerTrackletSlots
void setInnerTrackletSlots(const TGCInnerTrackletSlot *innerTrackletSlots[])
Definition: TGCSectorLogic.cxx:324
LVL1TGCTrigger::SDSB
@ SDSB
Definition: TGCNumbering.h:57
TgcDigit::BC_PREVIOUS
@ BC_PREVIOUS
Definition: TgcDigit.h:37
ByteStreamMetadata
This class is the StoreGate data object for bytestream metadata.
Definition: ByteStreamMetadata.h:25
LVL1TGCTrigger::TGCTrackSelectorOut::getNCandidate
int getNCandidate() const
Definition: TGCTrackSelectorOut.h:37
TgcRawData::subDetectorId
uint16_t subDetectorId() const
Definition: TgcRawData.h:264
LVL1MUONIF::Lvl1MuSectorLogicDataPhase1::bw2or3
int bw2or3(size_t id) const
Definition: Lvl1MuSectorLogicDataPhase1.h:57
LVL1TGCTrigger::TGCRegionType::FORWARD
@ FORWARD
LVL1TGCTrigger::TGCASDOut::GetHitToF
double GetHitToF() const
Definition: TGCASDOut.h:37
TgcRawData::bcId
uint16_t bcId() const
Definition: TgcRawData.h:259
LVL1TGCTrigger::TGCTrackSelectorOut::getPtLevel
int getPtLevel(int order) const
Definition: TGCTrackSelectorOut.h:27
LVL1TGCTrigger::TGCSector::clearNumberOfHit
void clearNumberOfHit()
Definition: TGCSector.h:133
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
LVL1TGCTrigger::TGCSector::getSB
TGCSlaveBoard * getSB(int type, int index) const
Definition: TGCSector.h:142
LVL1MUONIF::Lvl1MuEndcapSectorLogicDataPhase1
Class representing data from an endcap SL board.
Definition: Lvl1MuEndcapSectorLogicDataPhase1.h:26
TGCDatabaseManager.h
TGCElectronicsSystem.h
LVL1TGCTrigger::TGCInnerTrackletSlot::WIRE
@ WIRE
Definition: TGCInnerTrackletSlot.h:36
LVL1MUONIF::Lvl1MuSectorLogicDataPhase1::ovl
int ovl(size_t id) const
Definition: Lvl1MuSectorLogicDataPhase1.h:51
TgcRawData::SLB_TYPE_TRIPLET_WIRE
@ SLB_TYPE_TRIPLET_WIRE
Definition: TgcRawData.h:34
LVL1TGCTrigger::TGCInnerTrackletSlot::EI
@ EI
Definition: TGCInnerTrackletSlot.h:34
python.utils.AtlRunQueryLookup.mask
string mask
Definition: AtlRunQueryLookup.py:460
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
LVL1TGCTrigger::TGCSector::getRegionType
TGCRegionType getRegionType() const
Definition: TGCSector.h:170
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
TgcRawData::rodId
uint16_t rodId() const
Definition: TgcRawData.h:268
ThresholdConfig.h
LVL1TGCTrigger::TGCSlaveBoard
Definition: TGCSlaveBoard.h:22
LVL1TGCTrigger::TGCTrackSelectorOut::getCoincidenceType
int getCoincidenceType(int order) const
Definition: TGCTrackSelectorOut.h:34
LArG4FSStartPointFilterLegacy.execute
execute
Definition: LArG4FSStartPointFilterLegacy.py:20
python.checkMetadata.metadata
metadata
Definition: checkMetadata.py:175
LVL1TGCTrigger::NumberOfChip
const int NumberOfChip
Definition: TGCHighPtBoard.h:20
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:269
LVL1TGC::NSWTrigOut::getNSWeta
const std::vector< uint8_t > & getNSWeta() const
Definition: NSWTrigOut.h:66
Lvl1MuCTPIInputPhase1.h
python.PyAthena.module
module
Definition: PyAthena.py:134
LVL1TGCTrigger::TGCSector::getSideId
LVL1TGC::TGCSide getSideId() const
Definition: TGCSector.h:76
LVL1TGC::BIS78TrigOut::getBIS78Dphi
const std::vector< uint8_t > & getBIS78Dphi() const
Definition: BIS78TrigOut.h:65
LVL1TGCTrigger::TGCReadoutIndex::GetLayerNumber
int GetLayerNumber() const
Definition: TGCReadoutIndex.h:58
LVL1TGC::NSWTrigOut::getNSWmonitor
const std::vector< bool > & getNSWmonitor() const
Definition: NSWTrigOut.h:71
TgcRdo::subDetectorId
uint16_t subDetectorId() const
Definition: TgcRdo.h:134
LVL1TGCTrigger::WDSB
@ WDSB
Definition: TGCNumbering.h:57
LVL1TGCTrigger::TGCSector::getSL
TGCSectorLogic * getSL()
Definition: TGCSector.h:66
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ITGCcablingSvc.h
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:88
event
POOL::TEvent event(POOL::TEvent::kClassAccess)
LVL1TGCTrigger::TGCASDOut::GetSignalType
TGCSignalType GetSignalType() const
Definition: TGCASDOut.h:34
lumiFormat.i
int i
Definition: lumiFormat.py:92
TGCTimingManager.h
LVL1TGCTrigger::TGCHighPtChipOut
Definition: TGCHighPtChipOut.h:16
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
LVL1TGCTrigger::WTSB
@ WTSB
Definition: TGCNumbering.h:57
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::WriteHandle::ptr
pointer_type ptr()
Dereference the pointer.
LVL1TGCTrigger::TGCTrackSelectorOut::getInnerCoincidenceFlag
int getInnerCoincidenceFlag(int order) const
Definition: TGCTrackSelectorOut.h:36
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
LVL1TGCTrigger::TGCASDOut
Definition: TGCASDOut.h:12
TGCEvent.h
Lvl1MuForwardSectorLogicDataPhase1.h
TgcDigitCollection
Definition: TgcDigitCollection.h:17
LVL1TGCTrigger::TGCReadoutIndex::GetOctantNumber
int GetOctantNumber() const
Definition: TGCReadoutIndex.h:55
LVL1TGCTrigger::TGCReadoutIndex::GetModuleNumber
int GetModuleNumber() const
Definition: TGCReadoutIndex.h:56
LVL1MUONIF::Lvl1MuSectorLogicDataPhase1::clear2candidates
void clear2candidates(size_t id)
Definition: Lvl1MuSectorLogicDataPhase1.h:69
LVL1TGC::NSWTrigOut::getNSWDtheta
const std::vector< uint8_t > & getNSWDtheta() const
Definition: NSWTrigOut.h:68
LVL1TGCTrigger::WIRE
@ WIRE
Definition: TGCNumbering.h:52
TgcDigitCollection.h
LVL1MUONIF::Lvl1MuSectorLogicDataPhase1
Base class for the data coming from one SL board.
Definition: Lvl1MuSectorLogicDataPhase1.h:35
TgcDigit.h
TGCBIS78.h
LVL1TGCTrigger::STSB
@ STSB
Definition: TGCNumbering.h:57
LVL1TGCTrigger::WISB
@ WISB
Definition: TGCNumbering.h:57
TGCReadoutIndex.h
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
IdentifiableContainerMT::end
const_iterator end() const
return const_iterator for end of container
Definition: IdentifiableContainerMT.h:242
LVL1TGCTrigger::TGCSlaveBoardOut
Definition: TGCSlaveBoardOut.h:20
LVL1MUONIF::Lvl1MuSectorLogicDataPhase1::charge
int charge(size_t id) const
Definition: Lvl1MuSectorLogicDataPhase1.h:53
IdentifiableContainerMT::const_iterator
Definition: IdentifiableContainerMT.h:82
TriggerThreshold.h
IdentifiableContainerMT::begin
const_iterator begin() const
return const_iterator for first entry
Definition: IdentifiableContainerMT.h:236
TgcRawData::l1Id
uint16_t l1Id() const
Definition: TgcRawData.h:255
LVL1TGCTrigger::TGCEvent
Definition: TGCEvent.h:15
TGCTriggerData::isActive
bool isActive(int cwtype) const
Definition: TGCTriggerData.cxx:19
TGCSectorLogic.h
CaloCondBlobAlgs_fillNoiseFromASCII.channelId
channelId
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:122
LVL1TGCTrigger::TGCInnerTrackletSlot::STRIP
@ STRIP
Definition: TGCInnerTrackletSlot.h:37
AthAlgorithm
Definition: AthAlgorithm.h:47
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
LVL1TGCTrigger
Definition: LVL1TGCTrigger.cxx:49
LVL1TGC::NSWTrigOut::getNSWTriggerProcessor
const std::vector< int > & getNSWTriggerProcessor() const
Definition: NSWTrigOut.h:65
LVL1MUONIF::Lvl1MuCTPIInput::idSideC
static size_t idSideC()
Definition: Lvl1MuCTPIInput.h:66
TgcDigit
Definition: TgcDigit.h:21
LVL1MUONIF::Lvl1MuSectorLogicDataPhase1::set2candidates
void set2candidates(size_t id)
Definition: Lvl1MuSectorLogicDataPhase1.h:68
LVL1TGCTrigger::TGCDatabaseManager
Definition: TGCDatabaseManager.h:39
dumpTgcDigiThreshold.isStrip
list isStrip
Definition: dumpTgcDigiThreshold.py:33
bcId
uint16_t bcId(uint32_t data)
Definition: TgcByteStreamData.h:329
PathResolver.h
Cut::signal
@ signal
Definition: SUSYToolsAlg.cxx:64
TgcDigit::BC_NEXTNEXT
@ BC_NEXTNEXT
Definition: TgcDigit.h:37
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:194
LVL1TGCTrigger::TGCSlaveBoard::getId
int getId() const
Definition: TGCSlaveBoard.h:41
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
python.subdetectors.mmg.ids
ids
Definition: mmg.py:8
TGCNumbering.h
threshold
Definition: chainparser.cxx:74
BIS78TrigOut.h
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
LVL1MUONIF::Lvl1MuForwardSectorLogicDataPhase1
Class representing data from an forward SL board.
Definition: Lvl1MuForwardSectorLogicDataPhase1.h:26
LVL1TGC::BIS78TrigOut::getBIS78phi
const std::vector< uint8_t > & getBIS78phi() const
Definition: BIS78TrigOut.h:63
LVL1TGCTrigger::TGCTrackSelectorOut::getCharge
int getCharge(int order) const
Definition: TGCTrackSelectorOut.h:33
LVL1MUONIF::Lvl1MuSectorLogicDataPhase1::goodmf
int goodmf(size_t id) const
Definition: Lvl1MuSectorLogicDataPhase1.h:55
LVL1TGCTrigger::TGCReadoutIndex::GetRNumber
int GetRNumber() const
Definition: TGCReadoutIndex.h:57
LVL1TGCTrigger::TGCTrackSelectorOut::getPhi
int getPhi(int order) const
Definition: TGCTrackSelectorOut.h:29
LVL1TGC::ASIDE
@ ASIDE
Definition: TGCNumbering.h:14
LVL1TGCTrigger::TGCTrackSelectorOut::getGoodMFFlag
int getGoodMFFlag(int order) const
Definition: TGCTrackSelectorOut.h:35
ITGCcablingServerSvc.h
LVL1MUONIF::Lvl1MuCTPIInputPhase1::idEndcapSystem
static size_t idEndcapSystem()
Definition: Lvl1MuCTPIInputPhase1.h:136
python.AthDsoLogger.fname
string fname
Definition: AthDsoLogger.py:67
python.PyAthena.v
v
Definition: PyAthena.py:157
LVL1TGCTrigger::TGCSignalType
TGCSignalType
Definition: TGCNumbering.h:51
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
ZDC::sideA
BySideTypeMod sideA(1)
DeMoScan.index
string index
Definition: DeMoScan.py:362
LVL1MUONIF::Lvl1MuSectorLogicDataPhase1::pt
int pt(size_t id) const
Definition: Lvl1MuSectorLogicDataPhase1.h:52
h
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
LVL1TGCTrigger::TGCTrackSelectorOut
Definition: TGCTrackSelectorOut.h:11
python.CaloScaleNoiseConfig.str
str
Definition: CaloScaleNoiseConfig.py:78
LVL1TGCTrigger::TGCHighPtBoard
Definition: TGCHighPtBoard.h:34
LVL1TGCTrigger::TGCRegionType
TGCRegionType
Definition: TGCNumbering.h:49
LVL1TGCTrigger::TGCHighPtBoard::getId
int getId() const
Definition: TGCHighPtBoard.h:124
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TGCTrackSelectorOut.h
TRT::Track::trackNumber
@ trackNumber
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:75
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
TgcRawData
An unit object of TGC ROD output.
Definition: TgcRawData.h:23
LVL1TGCTrigger::STRIP
@ STRIP
Definition: TGCNumbering.h:52
LVL1TGCTrigger.h
DEBUG
#define DEBUG
Definition: page_access.h:11
bcTag
unsigned bcTag(unsigned bcBitMap)
Definition: TgcByteStreamData.h:367
LVL1TGCTrigger::LVL1TGCTrigger
Definition: LVL1TGCTrigger.h:68
LVL1TGCTrigger::TGCSector::getOctantId
int getOctantId() const
Definition: TGCSector.h:77
LVL1TGCTrigger::TGCSector::hasHit
bool hasHit() const
Definition: TGCSector.h:128
TgcRawData::SLB_TYPE_INNER_STRIP
@ SLB_TYPE_INNER_STRIP
Definition: TgcRawData.h:37
LVL1TGCTrigger::TGCInnerTrackletSlotHolder::NUMBER_OF_SLOTS_PER_TRIGGER_SECTOR
@ NUMBER_OF_SLOTS_PER_TRIGGER_SECTOR
Definition: TGCInnerTrackletSlotHolder.h:35
LVL1MUONIF::Lvl1MuSectorLogicDataPhase1::roi
int roi(size_t id) const
Definition: Lvl1MuSectorLogicDataPhase1.h:50
LVL1TGCTrigger::TGCSector::getNumberOfSB
unsigned int getNumberOfSB(int type) const
Definition: TGCSector.h:160
LVL1MUONIF::Lvl1MuSectorLogicDataPhase1::bcid
int bcid() const
Definition: Lvl1MuSectorLogicDataPhase1.h:48
LVL1TGC::NSWTrigOut::getNSWphi
const std::vector< uint8_t > & getNSWphi() const
Definition: NSWTrigOut.h:67
LVL1TGC::kNSide
@ kNSide
Definition: TGCNumbering.h:16
LVL1TGCTrigger::TGCInnerTrackletSlot::FI
@ FI
Definition: TGCInnerTrackletSlot.h:33
LVL1TGCTrigger::TGCReadoutIndex
Definition: TGCReadoutIndex.h:13
TGCTriggerData
Definition: TGCTriggerData.h:102
compute_lumi.fin
fin
Definition: compute_lumi.py:19
ITGCcablingServerSvc::giveCabling
virtual StatusCode giveCabling(const ITGCcablingSvc *&) const =0
CxxUtils::atoi
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...
Definition: Control/CxxUtils/Root/StringUtils.cxx:85
LVL1TGC::TGCSide
TGCSide
The sides of TGC (A- or C-side)
Definition: TGCNumbering.h:13
LVL1TGCTrigger::TGCSectorLogic::getTrackSelectorOutput
void getTrackSelectorOutput(std::shared_ptr< TGCTrackSelectorOut > &trackSelectorOut) const
Definition: TGCSectorLogic.cxx:127
TgcRawData::SLB_TYPE_INNER_WIRE
@ SLB_TYPE_INNER_WIRE
Definition: TgcRawData.h:36
str
Definition: BTagTrackIpAccessor.cxx:11
merge.status
status
Definition: merge.py:17
LVL1TGCTrigger::TGCASDOut::GetHitID
int GetHitID() const
Definition: TGCASDOut.h:35
LVL1MUONIF::Lvl1MuSectorLogicDataPhase1::clear2candidatesInSector
void clear2candidatesInSector()
Definition: Lvl1MuSectorLogicDataPhase1.h:61
TgcRdo
Definition: TgcRdo.h:22
TgcDigitContainer
Use IdentifiableContainer with TgcDigitCollection.
Definition: TgcDigitContainer.h:53
veto
std::vector< std::string > veto
these patterns are anded
Definition: listroot.cxx:191
LVL1TGCTrigger::TGCSlaveBoard::getOutput
TGCSlaveBoardOut * getOutput()
Definition: TGCSlaveBoard.h:38
TgcDigitContainer.h
TgcRawData
Athena::TPCnvVers::Old Athena::TPCnvVers::Current Athena::TPCnvVers::Old Athena::TPCnvVers::Current Athena::TPCnvVers::Old Athena::TPCnvVers::Current Athena::TPCnvVers::Current Athena::TPCnvVers::Current Athena::TPCnvVers::Current Athena::TPCnvVers::Current TgcRawData
Definition: MuonEventAthenaPoolTPCnv.cxx:168
python.CaloScaleNoiseConfig.default
default
Definition: CaloScaleNoiseConfig.py:79
ITGCcablingServerSvc
Definition: ITGCcablingServerSvc.h:16
LVL1TGCTrigger::TGCZDirection
TGCZDirection
Definition: TGCNumbering.h:43
LVL1TGCTrigger::TGCHighPtBoard::getOutput
TGCHighPtChipOut * getOutput()
Definition: TGCHighPtBoard.cxx:144
LVL1MUONIF::Lvl1MuCTPIInput::idSideA
static size_t idSideA()
Definition: Lvl1MuCTPIInput.h:65
value_type
Definition: EDM_MasterSearch.h:11
SG::AllowEmpty
@ AllowEmpty
Definition: StoreGate/StoreGate/VarHandleKey.h:30
LVL1TGCTrigger::TGCTrackSelectorOut::NCandidateInTrackSelector
@ NCandidateInTrackSelector
Definition: TGCTrackSelectorOut.h:39
L1TopoSimulationConfig.subsystem
subsystem
Definition: L1TopoSimulationConfig.py:242
TgcRawData::SLB_TYPE_TRIPLET_STRIP
@ SLB_TYPE_TRIPLET_STRIP
Definition: TgcRawData.h:35
TrigT1TGC_ClassDEF.h
LVL1TGCTrigger::TGCInnerTrackletSlot
Definition: TGCInnerTrackletSlot.h:11
python.compressB64.c
def c
Definition: compressB64.py:93
LVL1TGC::TGCNSW::getOutput
std::shared_ptr< const NSWTrigOut > getOutput(LVL1TGCTrigger::TGCRegionType region, int side, int TGC_TriggerSector) const
Definition: TGCNSW.cxx:53
TgcRdo::rodId
uint16_t rodId() const
Definition: TgcRdo.h:138
LVL1TGCTrigger::kZ_FORWARD
@ kZ_FORWARD
Definition: TGCNumbering.h:44
TgcRawData::SLB_TYPE_DOUBLET_WIRE
@ SLB_TYPE_DOUBLET_WIRE
Definition: TgcRawData.h:32
fitman.k
k
Definition: fitman.py:528
LVL1TGCTrigger::TGCSector::getHPB
TGCHighPtBoard * getHPB(int type, int index) const
Definition: TGCSector.h:148
TgcRawData::SlbType
SlbType
Definition: TgcRawData.h:31