ATLAS Offline Software
Loading...
Searching...
No Matches
LVL1TGCTrigger::LVL1TGCTrigger Class Reference

#include <LVL1TGCTrigger.h>

Inheritance diagram for LVL1TGCTrigger::LVL1TGCTrigger:

Public Member Functions

 LVL1TGCTrigger (const std::string &name, ISvcLocator *pSvcLocator)
 standard constructor and destructor for algorithms
virtual ~LVL1TGCTrigger ()
virtual StatusCode initialize () override
virtual StatusCode start () override
virtual StatusCode execute () override
virtual StatusCode finalize () override
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

StatusCode processOneBunch (const TgcDigitContainer *, LVL1MUONIF::Lvl1MuCTPIInputPhase1 *, std::map< std::pair< int, int >, std::unique_ptr< TgcRdo > > &)
void doMaskOperation (const TgcDigitContainer *, std::map< Identifier, int > &)
void fillTGCEvent (const std::map< Identifier, int > &, TGCEvent &)
void recordRdoSLB (TGCSector *, std::map< std::pair< int, int >, std::unique_ptr< TgcRdo > > &)
void recordRdoHPT (TGCSector *, std::map< std::pair< int, int >, std::unique_ptr< TgcRdo > > &)
void recordRdoInner (TGCSector *, std::map< std::pair< int, int >, std::unique_ptr< TgcRdo > > &)
void recordRdoSL (TGCSector *, std::map< std::pair< int, int >, std::unique_ptr< TgcRdo > > &)
StatusCode getMaskedChannel ()
int getCharge (int dR, int Zdir)
void extractFromString (const std::string &, std::vector< int > &)
bool addRawData (std::unique_ptr< TgcRawData > rawdata, std::map< std::pair< int, int >, std::unique_ptr< TgcRdo > > &tgcrdo)
int getLPTTypeInRawData (int type)
void FillSectorLogicData (LVL1MUONIF::Lvl1MuSectorLogicDataPhase1 *sldata, const TGCTrackSelectorOut *trackSelectorOut)
StatusCode getCabling ()
TGCArgumentstgcArgs ()
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

StringProperty m_keyMuCTPIInput_TGC {this,"MuCTPIInput_TGC","L1MuctpiStoreTGC"}
StringProperty m_MaskFileName12 {this,"MaskFileName12",""}
 property, see LVL1TGCTrigger::LVL1TGCTrigger
ShortProperty m_CurrentBunchTag {this,"CurrentBunchTag",TgcDigit::BC_CURRENT}
 property, see LVL1TGCTrigger::LVL1TGCTrigger
BooleanProperty m_ProcessAllBunches {this,"ProcessAllBunhes",true}
BooleanProperty m_OutputTgcRDO {this,"OutputTgcRDO",true}
 property, see LVL1TGCTrigger::LVL1TGCTrigger
BooleanProperty m_USE_CONDDB {this, "USE_CONDDB", true}
BooleanProperty m_SHPTORED {this, "SHPTORED", true}
BooleanProperty m_USEINNER {this, "USEINNER", true}
BooleanProperty m_INNERVETO {this,"INNERVETO",true}
BooleanProperty m_FULLCW {this,"FULLCW",false}
BooleanProperty m_TILEMU {this,"TILEMU",true}
BooleanProperty m_USENSW {this,"USENSW",false}
BooleanProperty m_FORCENSWCOIN {this,"FORCENSWCOIN",true}
BooleanProperty m_USEBIS78 {this,"USEBIS78",false}
BooleanProperty m_useRun3Config {this,"useRun3Config",false}
StringProperty m_NSWSideInfo {this,"NSWSideInfo",""}
bool m_firstTime {true}
uint16_t m_bctagInProcess {TgcDigit::BC_UNDEFINED}
TGCDatabaseManagerm_db
std::unique_ptr< TGCTimingManagerm_TimingManager
std::unique_ptr< TGCElectronicsSystemm_system
int m_nEventInSector
TGCInnerTrackletSlotHolder m_innerTrackletSlotHolder
bool m_debuglevel
TGCArguments m_tgcArgs
ServiceHandle< MuonTGC_CablingSvcm_cabling {this, "TGCCablingSvc", "MuonTGC_CablingSvc", ""}
SG::WriteHandleKey< TgcRdoContainerm_keyTgcRdo {this,"TgcRdo","TGCRDO2","Location of TgcRdoContainer"}
SG::ReadHandleKey< TgcRdoContainerm_keyTgcRdoIn {this,"InputRDO","TGCRDO","Location of input TgcRdoContainer"}
SG::ReadHandleKey< TgcDigitContainerm_keyTgcDigit {this,"InputData_perEvent","TGC_DIGITS","Location of TgcDigitContainer"}
SG::ReadHandleKey< TileMuonReceiverContainerm_keyTileMu {this,"TileMuRcv_Input","TileMuRcvCnt","Location of TileMuonReceiverContainer"}
SG::ReadHandleKey< Muon::NSW_TrigRawDataContainerm_keyNSWTrigOut {this,"NSWTrigger_Input","L1_NSWTrigContainer","Location of NSW_TrigRawDataContainer"}
SG::ReadHandleKey< Muon::RpcBis78_TrigRawDataContainerm_keyBIS78TrigOut {this,"BIS78Trig_Input","BIS78TrigContainer","Location of RpcBis78_TrigRawDataContainer"}
SG::ReadCondHandleKey< TGCTriggerDatam_readCondKey {this,"ReadCondKey","TGCTriggerData"}
SG::ReadCondHandleKey< TGCTriggerLUTsm_readLUTs_CondKey {this,"ReadLUTCondKey","TGCTriggerLUTs"}
SG::WriteHandleKey< LVL1MUONIF::Lvl1MuCTPIInputPhase1m_muctpiPhase1Key {this, "MuctpiPhase1LocationTGC", "L1MuctpiStoreTGC", "Location of muctpiPhase1 for Tgc"}
SG::ReadHandleKey< ByteStreamMetadataContainerm_bsMetaDataContRHKey {this, "ByteStreamMetadataRHKey", "ByteStreamMetadata", "Location to retrieve the detector mask"}
std::map< Identifier, int > m_MaskedChannel
 mask channel map
DataObjIDColl m_extendedExtraObjects
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 66 of file LVL1TGCTrigger.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ LVL1TGCTrigger()

LVL1TGCTrigger::LVL1TGCTrigger::LVL1TGCTrigger ( const std::string & name,
ISvcLocator * pSvcLocator )

standard constructor and destructor for algorithms

Definition at line 49 of file LVL1TGCTrigger.cxx.

50: AthAlgorithm(name,pSvcLocator),
51 m_db(0),
54 m_debuglevel(false)
55{}
AthAlgorithm()
Default constructor:
TGCInnerTrackletSlotHolder m_innerTrackletSlotHolder

◆ ~LVL1TGCTrigger()

LVL1TGCTrigger::LVL1TGCTrigger::~LVL1TGCTrigger ( )
virtual

Definition at line 58 of file LVL1TGCTrigger.cxx.

59{
60 ATH_MSG_DEBUG("LVL1TGCTrigger destructor called");
61 if (m_db) {
62 delete m_db;
63 m_db =0;
64 }
65}
#define ATH_MSG_DEBUG(x)

Member Function Documentation

◆ addRawData()

bool LVL1TGCTrigger::LVL1TGCTrigger::addRawData ( std::unique_ptr< TgcRawData > rawdata,
std::map< std::pair< int, int >, std::unique_ptr< TgcRdo > > & tgcrdo )
private

Definition at line 1221 of file LVL1TGCTrigger.cxx.

1223{
1224 ATH_MSG_DEBUG("addRawData() is called.");
1225 std::pair<int, int> subDetectorRod(rawdata->subDetectorId(), rawdata->rodId());
1226 std::map<std::pair<int, int>, std::unique_ptr<TgcRdo>>::iterator itRdo = tgcrdo.find(subDetectorRod);
1227
1228 if (itRdo==tgcrdo.end()) {
1229 // in case TgcRdo with the given subDetectorId and rodId is
1230 // not registered yet, create new TgcRdo and add rawdata to it
1231 std::unique_ptr<TgcRdo> thisRdo(new TgcRdo(rawdata->subDetectorId(), rawdata->rodId(), rawdata->bcId(), rawdata->l1Id()));
1232 thisRdo->push_back(std::move(rawdata));
1233 tgcrdo.insert(std::map<std::pair<int, int>, std::unique_ptr<TgcRdo>>::value_type(subDetectorRod, std::move(thisRdo)));
1234 } else {
1235 itRdo->second->push_back(std::move(rawdata));
1236 }
1237 return true;
1238}
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

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ doMaskOperation()

void LVL1TGCTrigger::LVL1TGCTrigger::doMaskOperation ( const TgcDigitContainer * tgc_container,
std::map< Identifier, int > & TgcDigitIDs )
private

Definition at line 397 of file LVL1TGCTrigger.cxx.

399{
400 // (1) skip masked channels
401 for (const TgcDigitCollection* c : *tgc_container) {
402 for (const TgcDigit* h : *c) {
403
404 // check BCID
405 if (h->bcTag()!=m_bctagInProcess) continue;
406
407 Identifier channelId = h->identify();
408 const auto itCh = m_MaskedChannel.find(channelId);
409 if (itCh!=m_MaskedChannel.end() && itCh->second==0) {
410 ATH_MSG_DEBUG("This channel is masked! offlineID=" << channelId);
411 continue;
412 }
413 TgcDigitIDs.emplace(channelId, 1);
414 }
415 }
416
417 // (2) add fired channels by force
418 for(const auto& [Id, OnOff] : m_MaskedChannel) {
419 if (OnOff==1) {
420 ATH_MSG_VERBOSE("This channel is fired by force! offlineID=" << Id);
421 TgcDigitIDs.emplace(Id, 1);
422 }
423 }
424
425 ATH_MSG_DEBUG("# of total hits " << TgcDigitIDs.size());
426
427 return;
428}
#define ATH_MSG_VERBOSE(x)
std::map< Identifier, int > m_MaskedChannel
mask channel map

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode LVL1TGCTrigger::LVL1TGCTrigger::execute ( )
overridevirtual

Definition at line 139 of file LVL1TGCTrigger.cxx.

140{
141 ATH_MSG_DEBUG("execute() called");
142 const EventContext& ctx = getContext();
143
144 if(!m_cabling) {
145 // get cabling svc
146 if(getCabling().isFailure()) return StatusCode::FAILURE;
147 }
148
149 // doMaskOperation is performed at the first event
150 // It is better to implement callback against
151 // MuonTGC_CablingSvc::updateCableASDToPP (Susumu Oda, 2010/10/27)
152 if(m_firstTime) {
153 // do mask operation
154 if(getMaskedChannel().isFailure()) return StatusCode::FAILURE;
155 m_firstTime = false;
156 }
157
158 // Tile-Muon data
159 bool doTileMu = m_tgcArgs.TILE_MU();
160
161 if (doTileMu && !m_tgcArgs.useRun3Config()) { // for Run-2
162 SG::ReadCondHandle<TGCTriggerData> readHandle{m_readCondKey, ctx};
163 const TGCTriggerData* readCdo{*readHandle};
164 doTileMu = readCdo->isActive(TGCTriggerData::CW_TILE);
165 }
166
167 // NSW data
168 bool doNSW = m_tgcArgs.USE_NSW();
169
170 // BIS78 data
171 bool doBIS78 = m_tgcArgs.USE_BIS78();
172
173 // TgcRdo
174 std::map<std::pair<int, int>, std::unique_ptr<TgcRdo>> tgcrdo;
175
176
177
178 SG::ReadHandle<TgcDigitContainer> readTgcDigitContainer(m_keyTgcDigit, ctx);
179 if(!readTgcDigitContainer.isValid()){
180 ATH_MSG_ERROR("Cannot retrieve TgcDigitContainer");
181 return StatusCode::FAILURE;
182 }
183 const TgcDigitContainer* tgc_container = readTgcDigitContainer.cptr();
184
185 SG::WriteHandle<LVL1MUONIF::Lvl1MuCTPIInputPhase1> wh_muctpiTgc(m_muctpiPhase1Key, ctx);
186 ATH_CHECK(wh_muctpiTgc.record(std::make_unique<LVL1MUONIF::Lvl1MuCTPIInputPhase1>()));
187 LVL1MUONIF::Lvl1MuCTPIInputPhase1* muctpiinputPhase1 = wh_muctpiTgc.ptr();
188
189 // process one by one
190 StatusCode sc = StatusCode::SUCCESS;
191 for (int bc=TgcDigit::BC_PREVIOUS; bc<=TgcDigit::BC_NEXTNEXT; bc++){
192 sc = StatusCode::SUCCESS;
193
194 // Use TileMu only if BC_CURRENT
195 if (doTileMu && bc == m_CurrentBunchTag) {
196 ATH_CHECK(m_system->getTMDB()->retrieve(m_keyTileMu, ctx));
197 }
198
199 // Use NSW trigger output
200 if(doNSW && bc==m_CurrentBunchTag){ // To implement BC-calculation
201 ATH_CHECK(m_system->getNSW()->retrieve(m_keyNSWTrigOut, ctx));
202 }
203
204 // Use RPC BIS78 trigger output
205 if(doBIS78 && bc == m_CurrentBunchTag){ // Todo: implement BC-calculation
206 ATH_CHECK(m_system->getBIS78()->retrieve(m_keyBIS78TrigOut, ctx));
207 }
208
210 m_bctagInProcess = bc;
211 sc = processOneBunch(tgc_container, muctpiinputPhase1, tgcrdo);
212 }
213 if (sc.isFailure()) {
214 ATH_MSG_FATAL("Fail to process the bunch " << m_bctagInProcess);
215 return sc;
216 }
217 }
218
219
220 // before writing the output TgcRdo container,
221 // read input TgcRdo and copy the tracklet etc.
222 SG::ReadHandle<TgcRdoContainer> rdoContIn(m_keyTgcRdoIn);
223 if(!rdoContIn.isValid()){
224 ATH_MSG_WARNING("Cannot retrieve TgcRdoContainer with key=" << m_keyTgcRdoIn.key());
225 return sc;
226 }else if(rdoContIn->size()>0) {
227 TgcRdoContainer::const_iterator itR = rdoContIn->begin();
228 for(; itR!=rdoContIn->end(); ++itR){
229 const TgcRdo* rdoIn = (*itR);
230 std::pair<int, int> subDetectorRod(rdoIn->subDetectorId(), rdoIn->rodId());
231 std::map<std::pair<int, int>, std::unique_ptr<TgcRdo>>::iterator itRdo = tgcrdo.find(subDetectorRod);
232 if (itRdo!=tgcrdo.end()) {
233 // if subDetectorId and rodId for input and output RDOs are the same,
234 // copy the tracklet info etc. from input to the output TgcRdo
235 for ( const TgcRawData* rd : *rdoIn ) {
236 itRdo->second->push_back(std::make_unique<TgcRawData>(*rd));
237 }
238 }
239 }
240 }
241
242 // write tgcL1rdo container
243 SG::WriteHandle<TgcRdoContainer> tgcL1rdoHandle (m_keyTgcRdo, ctx);
244 auto trgContainer=std::make_unique<TgcRdoContainer>();
245 for(const auto& tgcRdoMap : tgcrdo){
246 for(const auto rawData : *tgcRdoMap.second){
247 trgContainer->push_back(rawData);
248 }
249 }
250 ATH_CHECK(tgcL1rdoHandle.record(std::move(trgContainer)));
251
252 return sc;
253}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_FATAL(x)
#define ATH_MSG_WARNING(x)
static Double_t sc
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
StatusCode processOneBunch(const TgcDigitContainer *, LVL1MUONIF::Lvl1MuCTPIInputPhase1 *, std::map< std::pair< int, int >, std::unique_ptr< TgcRdo > > &)
SG::ReadHandleKey< Muon::NSW_TrigRawDataContainer > m_keyNSWTrigOut
SG::ReadHandleKey< Muon::RpcBis78_TrigRawDataContainer > m_keyBIS78TrigOut
SG::ReadHandleKey< TgcDigitContainer > m_keyTgcDigit
SG::ReadHandleKey< TgcRdoContainer > m_keyTgcRdoIn
SG::ReadHandleKey< TileMuonReceiverContainer > m_keyTileMu
ShortProperty m_CurrentBunchTag
property, see LVL1TGCTrigger::LVL1TGCTrigger
SG::ReadCondHandleKey< TGCTriggerData > m_readCondKey
SG::WriteHandleKey< TgcRdoContainer > m_keyTgcRdo
SG::WriteHandleKey< LVL1MUONIF::Lvl1MuCTPIInputPhase1 > m_muctpiPhase1Key
ServiceHandle< MuonTGC_CablingSvc > m_cabling
std::unique_ptr< TGCElectronicsSystem > m_system
bool isActive(int cwtype) const
@ BC_PREVIOUS
Definition TgcDigit.h:37
@ BC_NEXTNEXT
Definition TgcDigit.h:37
uint16_t rodId() const
Definition TgcRdo.h:138
uint16_t subDetectorId() const
Definition TgcRdo.h:134
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ extractFromString()

void LVL1TGCTrigger::LVL1TGCTrigger::extractFromString ( const std::string & str,
std::vector< int > & v )
private

Definition at line 1172 of file LVL1TGCTrigger.cxx.

1172 {
1173 v.clear();
1174 if (str.empty()) return;
1175 std::string line=str;
1176 while(1) {
1177 if (line.empty()) break;
1178 int i = line.find(' ');
1179 if (i==(int)std::string::npos && !line.empty()) {
1180 v.push_back(atoi(line.c_str()));
1181 break;
1182 }
1183 std::string temp = line;
1184 temp.erase(i,line.size());
1185 v.push_back(atoi(temp.c_str()));
1186 line.erase(0,i+1);
1187 }
1188}
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 50 of file AthAlgorithm.cxx.

51{
52 // If we didn't find any symlinks to add, just return the collection
53 // from the base class. Otherwise, return the extended collection.
54 if (!m_extendedExtraObjects.empty()) {
56 }
57 return Algorithm::extraOutputDeps();
58}
DataObjIDColl m_extendedExtraObjects

◆ FillSectorLogicData()

void LVL1TGCTrigger::LVL1TGCTrigger::FillSectorLogicData ( LVL1MUONIF::Lvl1MuSectorLogicDataPhase1 * sldata,
const TGCTrackSelectorOut * trackSelectorOut )
private

Definition at line 516 of file LVL1TGCTrigger.cxx.

518{
519 // M.Aoki (26/10/2019)
520 // this function will be updated for Run3-specific configuration such as quality flags, 15 thresholds
521 if(trackSelectorOut ==0) return;
522
523 sldata->clear2candidatesInSector();// for temporary
524
525 const int muctpiBcId_offset = TgcDigit::BC_CURRENT;
526 sldata->bcid(m_bctagInProcess - muctpiBcId_offset);
527
528 for(int trackNumber=0;trackNumber!=trackSelectorOut->getNCandidate();trackNumber++){
529
530 sldata->roi(trackNumber,((trackSelectorOut->getR(trackNumber))<<2)+(trackSelectorOut->getPhi(trackNumber)));
531 sldata->pt(trackNumber,trackSelectorOut->getPtLevel(trackNumber));
532 if (trackSelectorOut->getInnerVeto(trackNumber)) sldata->ovl(trackNumber,1);
533 else sldata->ovl(trackNumber,0);
534 sldata->charge(trackNumber, trackSelectorOut->getCharge(trackNumber));
535 sldata->bw2or3(trackNumber, trackSelectorOut->getCoincidenceType(trackNumber));
536 sldata->goodmf(trackNumber, trackSelectorOut->getGoodMFFlag(trackNumber));
537 sldata->innercoin(trackNumber, trackSelectorOut->getInnerCoincidenceFlag(trackNumber));
538 }
540 sldata->set2candidates(trackNumber);// not used for TGC
541 sldata->clear2candidates(trackNumber);// not used for TGC
542 }
543}
@ BC_CURRENT
Definition TgcDigit.h:37

◆ fillTGCEvent()

void LVL1TGCTrigger::LVL1TGCTrigger::fillTGCEvent ( const std::map< Identifier, int > & tgcDigitIDs,
TGCEvent & event )
private

Definition at line 431 of file LVL1TGCTrigger.cxx.

432{
433 // Loop on TGC detectors (collections)
434 for(const auto& itCh : tgcDigitIDs) {
435 const Identifier channelId = itCh.first;
436 int subsystemNumber;
437 int octantNumber;
438 int moduleNumber;
439 int layerNumber;
440 int rNumber;
441 int wireOrStrip;
442 int channelNumber;
443 bool status = m_cabling->getOnlineIDfromOfflineID(channelId,
444 subsystemNumber,
445 octantNumber,
446 moduleNumber,
447 layerNumber,
448 rNumber,
449 wireOrStrip,
450 channelNumber);
451
452 if(!status) {
453 ATH_MSG_INFO("Fail to getOnlineIDfromOfflineID for " << channelId);
454 } else {
455 bool fstatus;
456 int subDetectorID, srodID, sswID, sbLoc, channelID;
457 int phi=0;
458 int moduleType=0;
459 int slbID=0;
460 bool isAside=true;
461 bool isEndcap=true;
462
463 fstatus = m_cabling->getReadoutIDfromOfflineID(channelId,
464 subDetectorID,
465 srodID,sswID,
466 sbLoc,channelID);
467
468 if (fstatus) {
469 fstatus = m_cabling->getSLBIDfromReadoutID(phi, isAside, isEndcap,
470 moduleType, slbID,
471 subDetectorID,
472 srodID, sswID,sbLoc);
473 }
474 if (fstatus) {
475 ATH_MSG_VERBOSE("hit : subsys#=" << subsystemNumber
476 << " octant#=" << octantNumber
477 << " mod#=" << moduleNumber
478 << " layer#=" << layerNumber << " r#=" << rNumber
479 << " isStrip=" << wireOrStrip
480 << " ch#=" << channelNumber << endmsg
481 << " --> readoutID: sudetID=" << subDetectorID
482 << " srodID=" << srodID << " sswID=" << sswID
483 << " slbID=" << slbID << " chID=" << channelID);
484
485 TGCZDirection zdire = (subsystemNumber==1)? kZ_FORWARD : kZ_BACKWARD;
486 TGCReadoutIndex index(zdire,octantNumber,moduleNumber,rNumber,layerNumber);
487 TGCSignalType signal = (wireOrStrip==1)? STRIP : WIRE;
488 event.NewASDOut(index,
489 signal,
490 channelNumber,
491 0);
492 } else {
493 ATH_MSG_INFO("Fail to getSLBIDfromOfflineID for " << channelId);
494 }
495 }
496 } // End Loop on TGC detectors (collections)
497 if (m_debuglevel) {
498 ATH_MSG_DEBUG("Could make TGCEvent with TgcDigitContainer."
499 << " vector size : " << event.GetNASDOut() );
500 for(int iout=1; iout<= event.GetNASDOut(); iout++){
501 TGCASDOut* asdout = (event.GetASDOutVector()[iout-1]);
502 ATH_MSG_DEBUG( " Z:" << asdout->GetTGCReadoutIndex().GetZDirection() <<
503 " O:" << asdout->GetTGCReadoutIndex().GetOctantNumber() <<
504 " M:" << asdout->GetTGCReadoutIndex().GetModuleNumber() <<
505 " R:" << asdout->GetTGCReadoutIndex().GetRNumber() <<
506 " L:" << asdout->GetTGCReadoutIndex().GetLayerNumber() <<
507 " S:" << asdout->GetSignalType() <<
508 " I:" << asdout->GetHitID() <<
509 " T:" << asdout->GetHitToF() );
510 }
511 }
512}
Scalar phi() const
phi method
#define endmsg
#define ATH_MSG_INFO(x)
str index
Definition DeMoScan.py:362
status
Definition merge.py:16

◆ finalize()

StatusCode LVL1TGCTrigger::LVL1TGCTrigger::finalize ( )
overridevirtual

Definition at line 128 of file LVL1TGCTrigger.cxx.

129{
130 ATH_MSG_DEBUG("LVL1TGCTrigger::finalize() called" << " m_nEventInSector = " << m_nEventInSector);
131
132 if (m_db) delete m_db;
133 m_db = 0 ;
134
135 return StatusCode::SUCCESS;
136}

◆ getCabling()

StatusCode LVL1TGCTrigger::LVL1TGCTrigger::getCabling ( )
private

Definition at line 1241 of file LVL1TGCTrigger.cxx.

1242{
1243 ATH_MSG_DEBUG("LVL1TGCTrigger::getCabling()");
1244
1245 // get Cabling service
1246 ATH_CHECK(m_cabling.retrieve());
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 ATH_MSG_DEBUG("finished LVL1TGCTrigger::getCabling()");
1258
1259 return StatusCode::SUCCESS;
1260}

◆ getCharge()

int LVL1TGCTrigger::LVL1TGCTrigger::getCharge ( int dR,
int Zdir )
private

Definition at line 1191 of file LVL1TGCTrigger.cxx.

1191 {
1192 // old scheme
1193 // if (dR==0) return (Zdir>0 ? -1 : 1);
1194 // return (dR*Zdir>0 ? 1 : -1);
1195 return (dR >=0 ? 1 : -1 );
1196}

◆ getLPTTypeInRawData()

int LVL1TGCTrigger::LVL1TGCTrigger::getLPTTypeInRawData ( int type)
private

Definition at line 1200 of file LVL1TGCTrigger.cxx.

1201{
1202 switch(type) {
1203 case WTSB :
1205 case WDSB :
1207 case STSB :
1209 case SDSB :
1211 case WISB :
1213 case SISB :
1215 default :
1216 return -1;
1217 }
1218}
@ SLB_TYPE_TRIPLET_WIRE
Definition TgcRawData.h:34
@ SLB_TYPE_INNER_WIRE
Definition TgcRawData.h:36
@ SLB_TYPE_TRIPLET_STRIP
Definition TgcRawData.h:35
@ SLB_TYPE_INNER_STRIP
Definition TgcRawData.h:37
@ SLB_TYPE_DOUBLET_STRIP
Definition TgcRawData.h:33
@ SLB_TYPE_DOUBLET_WIRE
Definition TgcRawData.h:32

◆ getMaskedChannel()

StatusCode LVL1TGCTrigger::LVL1TGCTrigger::getMaskedChannel ( )
private

Definition at line 1043 of file LVL1TGCTrigger.cxx.

1044{
1045 std::string fname=m_MaskFileName12.value();
1046 if (fname.empty()) return StatusCode::SUCCESS;
1047
1048 std::string fullName = PathResolver::find_file (fname, "PWD");
1049 if( fullName.empty())
1050 fullName = PathResolver::find_file (fname, "DATAPATH");
1051
1052 std::ifstream fin(fullName.c_str());
1053 if (!fin) {
1054 ATH_MSG_FATAL("Cannot open file " << (fullName.empty() ? fname : fullName));
1055 return StatusCode::FAILURE;
1056 } else {
1057 ATH_MSG_INFO("Use mask file : " << fullName);
1058 }
1059 // read database ------------------------------------------------------------------------------
1060 std::vector<std::string> mask;
1061 std::string aLine;
1062 while(getline(fin,aLine)) {
1063 if (aLine.compare(0,3,"///")!=0) break;
1064 }
1065 int id_type = atoi(aLine.c_str());
1066 while(getline(fin,aLine)) {
1067 if (!aLine.empty()) mask.push_back(aLine);
1068 }
1069 fin.close();
1070
1071 //
1072 std::vector<int> ids;
1073 Identifier ID;
1074 int nmasked=0, nfired=0;
1075 for(int ich=0; ich<(int)mask.size(); ich++) {
1076 std::string ch = mask[ich];
1077 extractFromString(ch, ids);
1078 int OnOff=ids[0]; // 0=off(masked) 1=on(fired)
1079 //
1080 if (id_type==1 && ids.size()==8) { // online
1081 int sysno1 = (ids[1]==-99 ? -1 : ids[1]); int sysno2=(ids[1]==-99 ? 1 : ids[1]);// -1(B) 1(F)
1082 int octno1 = (ids[2]==-99 ? 0 : ids[2]); int octno2=(ids[2]==-99 ? 7 : ids[2]);
1083 for(int sysno=sysno1; sysno<=sysno2; sysno+=2) {
1084 for(int octno=octno1; octno<=octno2; octno++) {
1085 bool status = m_cabling->getOfflineIDfromOnlineID(ID,sysno,octno,
1086 ids[3],ids[4],ids[5],ids[6],ids[7]);
1087 ATH_MSG_VERBOSE( (OnOff==0 ? "Mask" : "Fire") << " : offlineID=" << ID
1088 << " sys=" << sysno << " oct=" << octno << " modno=" << ids[3]
1089 << " layerno=" << ids[4] << " rNumber=" << ids[5]
1090 << " strip=" << ids[6] << " chno=" << ids[7] );
1091
1092 if (!status) {
1093 ATH_MSG_WARNING("This onlineID is not valid and cannot be converted to offline ID." );
1094 ATH_MSG_WARNING("sys=" << sysno << " oct=" << octno << " modno=" << ids[3]
1095 << " layerno=" << ids[4] << " rNumber=" << ids[5]
1096 << " strip=" << ids[6] << " chno=" << ids[7] );
1097 } else {
1098 m_MaskedChannel.insert(std::map<Identifier, int>::value_type(ID, OnOff));
1099 if (OnOff==0) nmasked+=1;
1100 else if (OnOff==1) nfired+=1;
1101 }
1102 }
1103 }
1104
1105 } else if (id_type==2 && ids.size()==6) { // readout id
1106 int sysno1 = (ids[1]==-99 ? 103 : ids[1]); int sysno2=(ids[1]==-99 ? 104 : ids[1]);// 103(F), 104(B)
1107 int octno1 = (ids[2]==-99 ? 0 : ids[2]); int octno2=(ids[2]==-99 ? 7 : ids[2]);
1108 for(int sysno=sysno1; sysno<=sysno2; sysno+=1) {
1109 for(int octno=octno1; octno<=octno2; octno++) {
1110 bool status = m_cabling->getOfflineIDfromReadoutID(ID, sysno,octno,ids[3],ids[4],ids[5]);
1111 ATH_MSG_VERBOSE( (OnOff==0 ? "Mask" : "Fire") << " : offlineID=" << ID
1112 << " subdetectorID=" << sysno << " rodId=" << octno << " sswID=" << ids[3]
1113 << " SBLoc=" << ids[4] << " channelId=" << ids[5] );
1114 if (!status) {
1115 ATH_MSG_WARNING("This readoutID is not valid and cannot be converted to offline ID " );
1116 ATH_MSG_WARNING("subdetectorID=" << sysno << " rodId=" << octno << " sswID=" << ids[3]
1117 << " SBLoc=" << ids[4] << " channelId=" << ids[5] );
1118 } else {
1119 m_MaskedChannel.insert(std::map<Identifier, int>::value_type(ID, OnOff));
1120 if (OnOff==0) nmasked+=1;
1121 else if (OnOff==1) nfired+=1;
1122 }
1123 }
1124 }
1125
1126 } else if (id_type==3 && ids.size()==2) { // offline id
1127 ID = Identifier((unsigned int)ids[1]);
1128 ATH_MSG_DEBUG((OnOff==0 ? "Mask" : "Fire") << " : offlineID=" << ID);
1129 m_MaskedChannel.insert(std::map<Identifier, int>::value_type(ID, OnOff));
1130 if (OnOff==0) nmasked+=1;
1131 else if (OnOff==1) nfired+=1;
1132
1133 } else {
1134 ATH_MSG_INFO("Invalid input. Idtype or number of parameters are invalid: idtype=" << id_type
1135 << " number of elements = " << ids.size() );
1136 return StatusCode::FAILURE;
1137 }
1138 }
1139 //
1140 ATH_MSG_INFO("Total number of masked channels ... " << nmasked);
1141 ATH_MSG_INFO("Total number of fired channels ... " << nfired);
1142 //
1143 return StatusCode::SUCCESS;
1144}
std::vector< Identifier > ID
void extractFromString(const std::string &, std::vector< int > &)
StringProperty m_MaskFileName12
property, see LVL1TGCTrigger::LVL1TGCTrigger
static std::string find_file(const std::string &logical_file_name, const std::string &search_path)

◆ initialize()

StatusCode LVL1TGCTrigger::LVL1TGCTrigger::initialize ( )
overridevirtual

Definition at line 68 of file LVL1TGCTrigger.cxx.

69{
70 ATH_MSG_DEBUG("LVL1TGCTrigger::initialize()");
71
72 m_debuglevel = (msgLevel() <= MSG::DEBUG); // save if threshold for debug
73
74 m_tgcArgs.set_MSGLEVEL(msgLevel());
75 m_tgcArgs.set_SHPT_ORED( m_SHPTORED.value() );
76 m_tgcArgs.set_USE_INNER( m_USEINNER.value() );
77 m_tgcArgs.set_INNER_VETO( m_INNERVETO.value() );
78 m_tgcArgs.set_TILE_MU( m_TILEMU.value() );
79 m_tgcArgs.set_USE_NSW( m_USENSW.value() );
80 m_tgcArgs.set_USE_BIS78( m_USEBIS78.value() );
81 m_tgcArgs.set_FORCE_NSW_COIN( m_FORCENSWCOIN.value() );
82
83 m_tgcArgs.set_USE_CONDDB( m_USE_CONDDB.value() );
84 m_tgcArgs.set_useRun3Config( m_useRun3Config.value() );
85
86 m_tgcArgs.set_NSWSideInfo( m_NSWSideInfo.value() );
87
88 ATH_CHECK( m_readCondKey.initialize(!m_useRun3Config.value()) );
89 ATH_CHECK( m_readLUTs_CondKey.initialize(m_useRun3Config.value()) );
90
91 // CondDB is not available for Run3 config. set USE_CONDDB to false to avoid errors.
92 // will be removed the below part.
93 if(m_useRun3Config.value()){
94 m_tgcArgs.set_USE_CONDDB(false);
95 }
96
97 // initialize TGCDataBase
98 m_db = new TGCDatabaseManager(&m_tgcArgs, m_readCondKey, m_readLUTs_CondKey);
99
100 // initialize the TGCcabling
102
103 // create TGCElectronicsSystem
104 m_system = std::make_unique<TGCElectronicsSystem>(&m_tgcArgs,m_db);
105
106 m_TimingManager = std::make_unique<TGCTimingManager>(m_readCondKey);
107 m_TimingManager->setBunchCounter(0);
108
110
111 // read and write handle key
112 ATH_CHECK(m_keyTgcRdoIn.initialize());
113 ATH_CHECK(m_keyTgcDigit.initialize());
114 ATH_CHECK(m_keyTileMu.initialize());
115 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)
116 ATH_CHECK(m_keyBIS78TrigOut.initialize(tgcArgs()->USE_BIS78())); // to be updated as well
117 ATH_CHECK(m_muctpiPhase1Key.initialize(tgcArgs()->useRun3Config()));
118 ATH_CHECK(m_keyTgcRdo.initialize(tgcArgs()->useRun3Config()));
120
121 // clear mask channel map
122 m_MaskedChannel.clear();
123
124 return StatusCode::SUCCESS;
125}
SG::ReadCondHandleKey< TGCTriggerLUTs > m_readLUTs_CondKey
SG::ReadHandleKey< ByteStreamMetadataContainer > m_bsMetaDataContRHKey
std::unique_ptr< TGCTimingManager > m_TimingManager

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ msg()

MsgStream & AthCommonMsg< Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ processOneBunch()

StatusCode LVL1TGCTrigger::LVL1TGCTrigger::processOneBunch ( const TgcDigitContainer * tgc_container,
LVL1MUONIF::Lvl1MuCTPIInputPhase1 * muctpiinputPhase1,
std::map< std::pair< int, int >, std::unique_ptr< TgcRdo > > & tgcrdo )
private

Definition at line 255 of file LVL1TGCTrigger.cxx.

258{
259 ATH_MSG_DEBUG("start processOneBunch: for BC=" << m_bctagInProcess);
260
261 std::map<Identifier, int> tgcDigitIDs;
262 std::map<Identifier, int>::iterator itCh;
263
264 // doMaskOperation (masked & fired)
265 doMaskOperation(tgc_container, tgcDigitIDs);
266
267 // fill ASDOut to this event
268 TGCEvent event;
269 fillTGCEvent(tgcDigitIDs, event);
270 tgcDigitIDs.clear();
271
272 // process trigger electronics emulation...
273 m_TimingManager->increaseBunchCounter();
274 m_system->distributeSignal(&event);
275
276 // EIFI trigger bits for SL are cleared.
277 m_innerTrackletSlotHolder.clearTriggerBits();
278
279 // PatchPanel, SlaveBoard
281 for( int j=0; j<m_system->getNumberOfOctant(); j+=1){
282 for( int k=0; k<m_system->getNumberOfModule(); k+=1){
283 TGCSector* sector = m_system->getSector(i,j,k);
284 if((sector!=0)&&(sector->hasHit())){
286 m_TimingManager->startPatchPanel(sector, m_db);
287 m_TimingManager->startSlaveBoard(sector);
288 if (m_OutputTgcRDO.value()) recordRdoSLB(sector, tgcrdo);
289 // EIFI trigger bits for SL are filled in this method.
290 }
291 }
292 }
293 }
294
295 // HighPtBoard, SectorLogic
296 const int muctpiBcId_offset = TgcDigit::BC_CURRENT;
297 int muctpiBcId = m_bctagInProcess - muctpiBcId_offset;
298 for(int i=0; i< LVL1TGC::kNSide; i++) {
299 int sectoraddr_endcap = 0;
300 int sectoraddr_forward = 0;
301 for(int j=0; j<m_system->getNumberOfOctant(); j+=1){
302 for(int k=0; k<m_system->getNumberOfModule(); k+=1){
303 if(k>=9) continue;// skip Inner TGC
304 TGCSector* sector = m_system->getSector(i,j,k);
305 if(sector==0) continue;
306
307 m_TimingManager->startHighPtBoard(sector);
308 if (m_OutputTgcRDO.value()) recordRdoHPT(sector, tgcrdo);
309
310 // EIFI trigger bits are checked if Endcap
311 if(sector->getRegionType() == TGCRegionType::ENDCAP && sector->getSL()) {
312 if((sector->hasHit())){
313 // Pointers to store EIFI trigger bits for Endcap SL
314 const TGCInnerTrackletSlot* innerTrackletSlots[TGCInnerTrackletSlotHolder::NUMBER_OF_SLOTS_PER_TRIGGER_SECTOR]
315 = {0, 0, 0, 0};
316 m_innerTrackletSlotHolder.getInnerTrackletSlots(i, j, k, innerTrackletSlots);
317 sector->getSL()->setInnerTrackletSlots(innerTrackletSlots);
318 }
319 }
320 m_TimingManager->startSectorLogic(sector);
321 if(sector->hasHit()) sector->clearNumberOfHit();
322
323 // Fill inner (EIFI/Tile) words
324 if (m_OutputTgcRDO.value() && m_tgcArgs.USE_INNER()) recordRdoInner(sector, tgcrdo);
325
326 // Fill Lvl1MuCTPInput
327 if (m_OutputTgcRDO.value()) recordRdoSL(sector, tgcrdo);
328
329 size_t tgcsystem=0,subsystem=0;
332
333 std::shared_ptr<TGCTrackSelectorOut> trackSelectorOut;
334 sector->getSL()->getTrackSelectorOutput(trackSelectorOut);
335
336 std::shared_ptr<LVL1TGC::TGCNSW> nsw = m_system->getNSW();
337 int module = sector->getModuleId();
338 int sectorId;
339 if(sector->getRegionType() == TGCRegionType::ENDCAP) {
340 LVL1MUONIF::Lvl1MuEndcapSectorLogicDataPhase1 sldata;
342 if(trackSelectorOut != 0) FillSectorLogicData(&sldata,trackSelectorOut.get());
343
344 if ( m_tgcArgs.USE_NSW() ){
345 sectorId = ((module/3)*2+module%3) + sector->getOctantId()*6;
346 std::shared_ptr<const LVL1TGC::NSWTrigOut> pNSWOut = nsw->getOutput(sector->getRegionType(),
347 sector->getSideId(),
348 sectorId);
349 if ( pNSWOut ){
350 // set monitoring flag
351 for(bool NSWmonitor : pNSWOut->getNSWmonitor() ){
352 if ( NSWmonitor ) {
353 sldata.nsw(true);
354 break;
355 }
356 }
357 }
358 }
359 muctpiinputPhase1->setSectorLogicData(sldata,tgcsystem,subsystem,sectoraddr_endcap++,muctpiBcId);
360 } else if(sector->getRegionType() == TGCRegionType::FORWARD) {
361 LVL1MUONIF::Lvl1MuForwardSectorLogicDataPhase1 sldata;
362 tgcsystem = LVL1MUONIF::Lvl1MuCTPIInputPhase1::idForwardSystem();
363 if(trackSelectorOut != 0) FillSectorLogicData(&sldata,trackSelectorOut.get());
364
365 if ( m_tgcArgs.USE_NSW() ) {
366 sectorId = (module/3) + sector->getOctantId()*3;
367 std::shared_ptr<const LVL1TGC::NSWTrigOut> pNSWOut = nsw->getOutput(sector->getRegionType(),
368 sector->getSideId(),
369 sectorId);
370 if ( pNSWOut ){
371 // set monitoring flag
372 for(bool NSWmonitor : pNSWOut->getNSWmonitor() ){
373 if ( NSWmonitor ) {
374 sldata.nsw(true);
375 break;
376 }
377 }
378 }
379 }
380 muctpiinputPhase1->setSectorLogicData(sldata,tgcsystem,subsystem,sectoraddr_forward++,muctpiBcId);
381 }
382
383 trackSelectorOut.get()->reset();
384
385
386 } // k Module
387 } // j Octant
388 } // i Side
389
390 event.Clear();
391
392 return StatusCode::SUCCESS;
393}
if(febId1==febId2)
void setSectorLogicData(const Lvl1MuSectorLogicDataPhase1 &data, size_t systemAddress, size_t subSystemAddress, size_t sectorAddress, int bcid=0)
void recordRdoHPT(TGCSector *, std::map< std::pair< int, int >, std::unique_ptr< TgcRdo > > &)
void recordRdoInner(TGCSector *, std::map< std::pair< int, int >, std::unique_ptr< TgcRdo > > &)
void recordRdoSL(TGCSector *, std::map< std::pair< int, int >, std::unique_ptr< TgcRdo > > &)
void fillTGCEvent(const std::map< Identifier, int > &, TGCEvent &)
void recordRdoSLB(TGCSector *, std::map< std::pair< int, int >, std::unique_ptr< TgcRdo > > &)
BooleanProperty m_OutputTgcRDO
property, see LVL1TGCTrigger::LVL1TGCTrigger
void FillSectorLogicData(LVL1MUONIF::Lvl1MuSectorLogicDataPhase1 *sldata, const TGCTrackSelectorOut *trackSelectorOut)
void doMaskOperation(const TgcDigitContainer *, std::map< Identifier, int > &)
TGCSide
The sides of TGC (A- or C-side)

◆ recordRdoHPT()

void LVL1TGCTrigger::LVL1TGCTrigger::recordRdoHPT ( TGCSector * sector,
std::map< std::pair< int, int >, std::unique_ptr< TgcRdo > > & tgcrdo )
private

Definition at line 670 of file LVL1TGCTrigger.cxx.

672{
673 if(sector->hasHit() == false) return;
674
675 // readoutID
676 int subDetectorId, rodId, sswId, sbLoc, secId;
677
678 // get numbering scheme info from cabling svc
679 int startEndcapSector, coverageOfEndcapSector;
680 int startForwardSector, coverageOfForwardSector;
681 rodId = 1;
682 m_cabling->getCoveragefromSRodID(rodId,
683 startEndcapSector,
684 coverageOfEndcapSector,
685 startForwardSector,
686 coverageOfForwardSector
687 ) ;
688
690
691 // HPTID
692 bool isAside, isEndcap, isStrip; int phi;
693 isAside = (sector->getSideId()==0);
694 isEndcap = (sector->getRegionType() == TGCRegionType::ENDCAP);
695 int module = sector->getModuleId();
696 // sector Id = 0..47 (Endcap) 0..23 (forward)
697 int sectorId;
698 if (isEndcap){
699 sectorId = ((module/3)*2+module%3) + sector->getOctantId()*6;
700 } else {
701 sectorId = (module/3) + sector->getOctantId()*3;
702 }
703 // secId for TgcRawData
704 // 0-3(EC), 0-1(FWD) for new TGCcabling (1/12sector)
705 // 0-5(EC), 0-2(FWD) for new TGCcabling (octant)
706 if (isEndcap){
707 secId = sectorId % coverageOfEndcapSector;
708 } else {
709 secId = sectorId % coverageOfForwardSector;
710 }
711 // phi=1-48(EC), 1-24(FWD) in detector ID scheme
712 phi = (isEndcap ? (sectorId+46)%48+1 : (sectorId+23)%24+1);
713
714 for(int itype=0; itype<2; itype++) { // loop over HPB type(wire/strip)
715 isStrip = (itype==0 ? 0 : 1); // 0=wire 1=strip
716 for(unsigned int ihpb=0; ihpb<sector->getNumberOfHPB(itype); ihpb++) { // loop over # of HPB per sector
717 TGCHighPtBoard * hpb = sector->getHPB(itype, ihpb);
718 if (0==hpb) continue;
719 TGCHighPtChipOut * out = hpb->getOutput();
720 if (0==out) continue;
721
722 // get ReadoutID
723 bool status = m_cabling->getReadoutIDfromHPTID(phi, isAside, isEndcap, isStrip, hpb->getId(),
724 subDetectorId, rodId, sswId, sbLoc);
725 if (!status) {
726 ATH_MSG_WARNING("TGCcablignSvc::getReadoutIDfromHPTID fails");
727 continue;
728 }
729
730 // loop over chip and candidate
731 for(int ichip=0; ichip<NumberOfChip; ichip++) { // NumberOfChip=2
732 for(int icand=0; icand<TGCHighPtChipOut::s_NHitInTrackSelector; icand++) {
733 if (!out->getSel(ichip, icand)) continue; // should be 1 or 2
734 int chip = ichip;
735 int index = ihpb;
736 int hitId = out->getHitID(ichip, icand);
737 m_cabling->getRDOHighPtIDfromSimHighPtID(!isEndcap, isStrip,
738 index, chip, hitId);
739 bool isHPT = out->getPt(ichip,icand)==PtHigh ? 1 : 0;
740 std::unique_ptr<TgcRawData> rawdata(new TgcRawData(bcTag,
741 static_cast<uint16_t>(subDetectorId),
742 static_cast<uint16_t>(rodId),
743 l1Id,
744 bcId,
745 isStrip, (!isEndcap), secId, chip, icand,
746 isHPT, hitId,
747 out->getPos(ichip, icand),
748 out->getDev(ichip, icand),
749 0));
750 addRawData(std::move(rawdata), tgcrdo);
751
752 // Print
753 ATH_MSG_DEBUG( "recordRdoHPT : bdTag =" << bcTag
754 << " side=" << ( (isAside)? "A" : "C")
755 << (isEndcap ? "EC" : "FWD")
756 << " w/s=" << ( (isStrip)? "s" : "w")
757 << " id=" << hpb->getId()
758 << " ecId=" << secId
759 << " chip=" << ichip
760 << " cand=" << icand
761 << " block=" << out->getHitID(ichip, icand)
762 << " subMatrix=" << out->getPos(ichip, icand)
763 << " dev=" << out->getDev(ichip, icand)
764 << " srod=" << rodId << " sswId=" << sswId << " SBLoc=" << sbLoc );
765
766 // Strip HPT hit may be duplicated
767 if ( m_tgcArgs.SHPT_ORED() &&
768 isEndcap && isStrip &&
769 (chip==1) ) {
770 int oredId = -1;
771 if (hitId == 1) oredId = 5;
772 else if (hitId == 2) oredId = 6;
773 else if (hitId == 5) oredId = 1;
774 else if (hitId == 6) oredId = 2;
775 if (oredId >=0) {
776 std::unique_ptr<TgcRawData> rawdata2(
777 new TgcRawData(bcTag,
778 static_cast<uint16_t>(subDetectorId),
779 static_cast<uint16_t>(rodId),
780 l1Id,
781 bcId,
782 isStrip, (!isEndcap), secId, chip, icand,
783 isHPT, oredId,
784 out->getPos(ichip, icand),
785 out->getDev(ichip, icand),
786 0));
787 addRawData(std::move(rawdata2), tgcrdo);
788 }
790
791 }
792
793 }
794 }
795 // end loop of candidate and chip
796
797 } // end loop for # of HPB per sector
798 } // end loop for HPB type
799}
uint16_t bcId(uint32_t data)
unsigned bcTag(unsigned bcBitMap)
bool addRawData(std::unique_ptr< TgcRawData > rawdata, std::map< std::pair< int, int >, std::unique_ptr< TgcRdo > > &tgcrdo)
static constexpr int s_NHitInTrackSelector
const int NumberOfChip
setWord1 uint16_t

◆ recordRdoInner()

void LVL1TGCTrigger::LVL1TGCTrigger::recordRdoInner ( TGCSector * sector,
std::map< std::pair< int, int >, std::unique_ptr< TgcRdo > > & tgcrdo )
private

Definition at line 803 of file LVL1TGCTrigger.cxx.

805{
806 bool isAside = sector->getSideId()==0;
807 bool isEndcap = (sector->getRegionType() == TGCRegionType::ENDCAP);
808 if (!isEndcap) return;
809
810 // sector Id = 0..47, phi = 1..48
811 int module = sector->getModuleId();
812 int octant = sector->getOctantId();
813 int sectorId = ((module/3)*2+module%3) + octant*6;
814 int phi = (sectorId+46)%48+1;
815
816 // get readout ID
817 int subDetectorId=0, rodId=0, sswId=0, sbLoc=0;
818
819 bool status = m_cabling->getSReadoutIDfromSLID(phi, isAside, isEndcap,
820 subDetectorId, rodId, sswId, sbLoc);
821 if (!status) {
822 ATH_MSG_WARNING("TGCcablingSvc::ReadoutIDfromSLID fails in recordRdoInner()" );
823 return;
824 }
825
826 // secID for TGCRawData
827 // 0-3(EC), 0-1(FWD) for 1/12 sector
828 // 0-15(EC), 0-7(FWD) for 1/3 sector covered by SROD in RUn3
829 int startEndcapSector, coverageOfEndcapSector;
830 int startForwardSector, coverageOfForwardSector;
831 if (!m_cabling->getCoveragefromSRodID(rodId,
832 startEndcapSector,
833 coverageOfEndcapSector,
834 startForwardSector,
835 coverageOfForwardSector
836 ) )
837 {
838 ATH_MSG_WARNING("LVL1TGCTrigger::recordRdoInner --- bad rodId " << rodId );
839 return;
840 }
841
842 int secId = 0;
843 if (isEndcap){
844 secId = sectorId % coverageOfEndcapSector;
845 } else {
846 secId = sectorId % coverageOfForwardSector;
847 }
848
849 uint16_t bcTag = m_CurrentBunchTag, l1Id = 0, bcId = 0;
850
851 // EIFI
853
854 const TGCInnerTrackletSlot* innerTrackletSlots[n_slots] = {0, 0, 0, 0};
855 m_innerTrackletSlotHolder.getInnerTrackletSlots(sector->getSideId(),
856 octant, module, innerTrackletSlots);
857
858 std::array<int, n_slots>inner_eifi;
859 m_innerTrackletSlotHolder.getInnerTrackletBits(innerTrackletSlots, inner_eifi);
860
861 for (int i_slot = 0; i_slot < n_slots; i_slot++) {
862 if (inner_eifi[i_slot] > 0) {
863 std::unique_ptr<TgcRawData> rawdata_eifi(new TgcRawData(bcTag,
864 static_cast<uint16_t>(subDetectorId),
865 static_cast<uint16_t>(rodId),
866 l1Id,
867 bcId,
868 (!isEndcap),
869 secId, /*to be checked*/
870 static_cast<uint16_t>(inner_eifi[i_slot]),
871 0, /*fi*/
872 static_cast<uint16_t>(i_slot) /*chamber Id*/));
873 addRawData(std::move(rawdata_eifi), tgcrdo);
874 }
875 }
876
877 // Tile
878 int inner_tile = m_system->getTMDB()->getInnerTileBits(sector->getSideId(), sectorId);
879
880 if (inner_tile > 0) {
881 //TgcRawData * rawdata_tile = new TgcRawData(bcTag,
882 //std::shared_ptr<TgcRawData> rawdata_tile (
883 std::unique_ptr<TgcRawData> rawdata_tile (new TgcRawData(bcTag,
884 static_cast<uint16_t>(subDetectorId),
885 static_cast<uint16_t>(rodId),
886 l1Id,
887 bcId,
888 (!isEndcap),
889 secId,
890 inner_tile,
891 0 /*bcid*/ ));
892 addRawData(std::move(rawdata_tile), tgcrdo);
893 }
894
895 // NSW
896 TGCRegionType region = sector->getRegionType();
897 if ( m_USENSW ) {
898 std::shared_ptr<const LVL1TGC::NSWTrigOut> nsw_trigout = m_system->getNSW()->getOutput(region, !isAside, sectorId);
899 for ( int icand=0; icand<(int)nsw_trigout->getNSWeta().size(); icand++ ){
900 std::unique_ptr<TgcRawData> rawdata_nsw (new TgcRawData(bcTag,
901 static_cast<uint16_t>(subDetectorId),
902 static_cast<uint16_t>(rodId),
903 l1Id,
904 bcId,
905 (!isEndcap),
906 static_cast<uint16_t>(secId), /*?*/
907 static_cast<uint16_t>(nsw_trigout->getNSWeta().at(icand)),
908 static_cast<uint16_t>(nsw_trigout->getNSWphi().at(icand)),
909 static_cast<uint16_t>(icand), //nswcand
910 static_cast<uint16_t>(nsw_trigout->getNSWDtheta().at(icand)),
911 0, //nswphires
912 0, //nswlowres
913 static_cast<uint16_t>(nsw_trigout->getNSWTriggerProcessor().at(icand))));
914 addRawData(std::move(rawdata_nsw), tgcrdo);
915 }
916 }
917
918 // RPC BIS78
919 if ( m_USEBIS78 ) {
920 std::shared_ptr<const LVL1TGC::BIS78TrigOut> bis78_trigout = m_system->getBIS78()->getOutput(sectorId);
921 for ( int icand=0; icand<(int)bis78_trigout->getBIS78eta().size(); icand++ ){
922 std::unique_ptr<TgcRawData> rawdata_bis78 (new TgcRawData(bcTag,
923 static_cast<uint16_t>(subDetectorId),
924 static_cast<uint16_t>(rodId),
925 l1Id,
926 bcId,
927 (!isEndcap),
928 static_cast<uint16_t>(secId), /*?*/
929 static_cast<uint16_t>(bis78_trigout->getBIS78eta().at(icand)),
930 static_cast<uint16_t>(bis78_trigout->getBIS78phi().at(icand)),
931 static_cast<uint16_t>(icand),
932 static_cast<uint16_t>(bis78_trigout->getBIS78Deta().at(icand)),
933 static_cast<uint16_t>(bis78_trigout->getBIS78Dphi().at(icand))));
934 addRawData(std::move(rawdata_bis78), tgcrdo);
935 }
936 }
937}

◆ recordRdoSL()

void LVL1TGCTrigger::LVL1TGCTrigger::recordRdoSL ( TGCSector * sector,
std::map< std::pair< int, int >, std::unique_ptr< TgcRdo > > & tgcrdo )
private

Definition at line 940 of file LVL1TGCTrigger.cxx.

942{
943 // check if whether trigger output exists or not
944 std::shared_ptr<TGCTrackSelectorOut> selectorOut;
945 sector->getSL()->getTrackSelectorOutput(selectorOut);
946
947 if (selectorOut == nullptr) return;
948 if (selectorOut->getNCandidate() == 0) return;
949
950 // trigger info
951 // bool cand3plus = 0;
952 bool isEndcap = (sector->getRegionType() == TGCRegionType::ENDCAP);
953 bool isAside = (sector->getSideId()==0);
954 bool veto=0;
955 int phi=0, index=0, threshold=0, roi=0;
956 int Zdir= (isAside) ? 1 : -1;
957
958 // sector Id = 0..47 (Endcap) 0..23 (forward)
959 int module = sector->getModuleId();
960 int sectorId;
961 if (isEndcap){
962 sectorId = ((module/3)*2+module%3) + sector->getOctantId()*6;
963 } else {
964 sectorId = (module/3) + sector->getOctantId()*3;
965 }
966
967 // secID for TGCRawData
968 // 0-3(EC), 0-1(FWD) for new TGCcabling (1/12sector)
969 // 0-5(EC), 0-2(FWD) for new TGCcabling (octant)
970 int startEndcapSector, coverageOfEndcapSector;
971 int startForwardSector, coverageOfForwardSector;
972 int rodId = 1;
973 m_cabling->getCoveragefromSRodID(rodId,
974 startEndcapSector,
975 coverageOfEndcapSector,
976 startForwardSector,
977 coverageOfForwardSector
978 ) ;
979 int secId = 0;
980 if (isEndcap){
981 secId = sectorId % coverageOfEndcapSector;
982 } else {
983 secId = sectorId % coverageOfForwardSector;
984 }
985
986 // phi=1-48(EC), 1-24(FWD) in detector ID scheme
987 phi = (isEndcap ? (sectorId+46)%48+1 : (sectorId+23)%24+1);
988
989 // get readout ID
990 int subDetectorId = 0, sswId = 0, sbLoc = 0;
991 bool status = m_cabling->getSReadoutIDfromSLID(phi, isAside, isEndcap,
992 subDetectorId, rodId, sswId, sbLoc);
993 if (!status) {
994 ATH_MSG_WARNING("TGCcablignSvc::ReadoutIDfromSLID fails"
995 << (isEndcap ? " Endcap-" : " Forward-")
996 << (isAside ? "A " : "C ")
997 << " phi=" << phi );
998 return;
999 }
1000
1001 // bool overlap = 0;
1002 int inner=0, coinFlag=0;
1004 for (unsigned int icand=0; icand < (unsigned int)selectorOut->getNCandidate(); ++icand) {
1005 index=icand;
1006 bool muplus = getCharge(selectorOut->getDR(icand), Zdir)==1 ? 1 : 0;
1007 threshold = selectorOut->getPtLevel(icand);
1008 roi = ((selectorOut->getR(icand))<<2)+(selectorOut->getPhi(icand));
1009 if (selectorOut->getInnerVeto(icand)) veto = 1;
1010 else veto = 0;
1011
1012 inner = selectorOut->getInnerCoincidenceFlag(icand);
1013 coinFlag = selectorOut->getCoincidenceType(icand);
1014
1015 // create TgcRawData
1016 std::unique_ptr<TgcRawData> rawdata(new TgcRawData(bcTag,
1017 static_cast<uint16_t>(subDetectorId),
1018 static_cast<uint16_t>(rodId),
1019 l1Id,
1020 bcId,
1021 (!isEndcap), secId,
1022 inner,
1023 coinFlag,
1024 muplus, threshold, roi));
1025 addRawData(std::move(rawdata), tgcrdo);
1026
1027 ATH_MSG_DEBUG("recordRdoSL : bcTag =" << bcTag
1028 << " side=" << (isAside ? "A " : "C ")
1029 << " reg=" << (isEndcap ? "EC" : "FWD")
1030 << " phi=" << phi
1031 << " cand=" << index
1032 << " charge=" << (muplus ? "mu+" : "mu-")
1033 << " thre=" << threshold
1034 << " veto=" << veto
1035 << " roi=" << roi
1036 << " srod=" << rodId << " sswId=" << sswId << " SBLoc=" << sbLoc
1037 << " inner=" << inner << " coinFlag=" << coinFlag );
1038 }
1039 }
std::vector< std::string > veto
these patterns are anded
Definition listroot.cxx:191

◆ recordRdoSLB()

void LVL1TGCTrigger::LVL1TGCTrigger::recordRdoSLB ( TGCSector * sector,
std::map< std::pair< int, int >, std::unique_ptr< TgcRdo > > & tgcrdo )
private

Definition at line 546 of file LVL1TGCTrigger.cxx.

548{
550 // readoutID
551 int subDetectorId, rodId, sswId, sbLoc, secId, secIdEIFI;
552 // SLBID
553 bool isAside, isEndcap; int phi, moduleType, id, phiEIFI;
554 isAside = (sector->getSideId()==0 ? 1 : 0);
555 isEndcap = (sector->getRegionType() == TGCRegionType::ENDCAP ? 1 : 0);
556 int module = sector->getModuleId();
557 // OnlineID moduleNumber
558 // <---- phi ----
559 // EC: 7 6 4 3 1 0 11 10 9
560 // FWD: 8 5 2 14 13 12
561 // [M1, M2, M3] [EI/FI]
562 // secId=0-5(EC), 0-2(FWD) for TgcRawData
563 secId = (isEndcap ? (module/3)*2+module%3 : module/3);
564 // phi=1-48(EC), 1-24(FWD) in detector ID scheme
565 phi = (isEndcap ? (secId+46+sector->getOctantId()*6)%48+1 : (secId+23+sector->getOctantId()*3)%24+1);
566 // secIdEIFI=0-2
567 secIdEIFI = module%3;
568 // phiEIFI=1-24
569 phiEIFI = (secIdEIFI+23+sector->getOctantId()*3)%24+1;
570
571 // SLB
572 const int NumberOfSLBType = 6;
573 // 0: WT, 1: WD, 2: ST, 3: SD, 4: WI 5:SI
574 for(int itype=0; itype<NumberOfSLBType; itype++) {
575 moduleType = getLPTTypeInRawData(itype);
576
577 // loop over all SB of each type
578 for(unsigned int index=0; index<sector->getNumberOfSB(itype); index++) {
579 TGCSlaveBoard * slb = sector->getSB(itype, index);
580 if (0==slb) continue;
581 id = slb->getId();
582 const TGCSlaveBoardOut * out = slb->getOutput();
583 if (0==out) continue;
584
585 bool isEIFI = (moduleType==TgcRawData::SLB_TYPE_INNER_WIRE ||
586 moduleType==TgcRawData::SLB_TYPE_INNER_STRIP);
587
588 // get ReadoutID
589 bool status =
590 m_cabling->getReadoutIDfromSLBID((isEIFI ? phiEIFI : phi),
591 isAside, isEndcap,
592 moduleType, id,
593 subDetectorId, rodId,
594 sswId, sbLoc);
595 if (!status) {
596 ATH_MSG_DEBUG("TGCcablignSvc::getReadoutIDfromSLBID fails");
597 ATH_MSG_DEBUG( "phi=" << phi
598 << " side=" << ((isAside) ? "A": "C")
599 << " region=" << ((isEndcap) ? "Endcap" : "Forward")
600 << " type=" << moduleType
601 << " id=" << id
602 << " subDetectorId=" << subDetectorId
603 << " rodId=" << rodId
604 << " sswId=" << sswId
605 << " sbLoc=" << sbLoc);
606 continue;
607 }
608
609 // fill TgcRawData
610 for(int iData=0; iData<out->getNumberOfData(); iData++) { // max 8
611 if (!out->getHit(iData)) continue;
612
613 // see TGCcabling/TGCId.h (WD=0,SD,WT,ST,SI,WI). Same as TgcRawData
614 TgcRawData::SlbType type = (TgcRawData::SlbType)moduleType;
615 int subMat = iData % 4;
616 int seg = 0;
617 if (type==TgcRawData::SLB_TYPE_TRIPLET_STRIP ) {
618 if (iData<4) seg= 1;
619 // 13.Jan.2011 reversed by Hisaya
620 // because Layer swap in TGCStripTripletSB::doCoincidence()
621 } else if ( (type==TgcRawData::SLB_TYPE_INNER_WIRE ) ||
622 (type==TgcRawData::SLB_TYPE_INNER_STRIP) ) {
623 seg= iData/4;
624 }
625 std::unique_ptr<TgcRawData> rawdata(new TgcRawData(bcTag,
626 static_cast<uint16_t>(subDetectorId),
627 static_cast<uint16_t>(rodId),
628 static_cast<uint16_t>(sswId),
629 static_cast<uint16_t>(sbLoc),
630 l1Id, bcId,
631 type, out->getDev(iData), seg, subMat,
632 out->getPos(iData)));
633 addRawData(std::move(rawdata), tgcrdo);
634
635 // EIFI trigger bits for SL are filled.
636 if(isEIFI) {
637 bool setEIFITriggerBit =
638 m_innerTrackletSlotHolder.setTriggerBit(sector->getSideId(),
639 phiEIFI,
640 (isEndcap ?
641 TGCInnerTrackletSlot::EI : TGCInnerTrackletSlot::FI),
642 (type==TgcRawData::SLB_TYPE_INNER_WIRE ?
643 TGCInnerTrackletSlot::WIRE : TGCInnerTrackletSlot::STRIP),
644 static_cast<unsigned int>(subMat),
645 true);
646
647 if(!setEIFITriggerBit) {
648 ATH_MSG_INFO("Fail to set Inner trigger bit of"
649 << " sideId= " << sector->getSideId()
650 << " slotId= " << phiEIFI
651 << " region= " << (isEndcap ? "EI" : "FI")
652 << " readout= " << (type==TgcRawData::SLB_TYPE_INNER_WIRE ? "WIRE" : "STRIP")
653 << " subMat(iBit)= " << static_cast<unsigned int>(subMat) );
654 }
655 }
656
657 ATH_MSG_DEBUG(" recordRdoSLB : reg=" << (isEndcap ? "EC" : "FWD")
658 << " srod=" << rodId << " sswId=" << sswId
659 << " SBLoc=" << sbLoc << " type=" << itype
660 << " iData(subMat:seg)=" << iData << " pos="
661 << out->getPos(iData) << " dev=" << out->getDev(iData) );
662 }
663 // end of filling TgcRawData
664
665 } // end of loop over SB
666 } // end loop for SLB type
667}

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ start()

StatusCode LVL1TGCTrigger::LVL1TGCTrigger::start ( )
overridevirtual

Definition at line 1147 of file LVL1TGCTrigger.cxx.

1147 {
1148 if (m_bsMetaDataContRHKey.key().empty()) return StatusCode::SUCCESS;
1149
1150 ATH_MSG_DEBUG("Retrieving Detector Mask from ByteStream metadata container");
1152 if (bsmdc.isValid() && !bsmdc->empty()) {
1153 const ByteStreamMetadata* metadata = bsmdc->front();
1154 uint64_t detMaskLeast = metadata->getDetectorMask();
1155 uint64_t detMaskMost = metadata->getDetectorMask2();
1156
1157 std::vector<eformat::SubDetector> subDetOff;
1158 eformat::helper::DetectorMask(~detMaskLeast, ~detMaskMost).sub_detectors(subDetOff);
1159 auto sideA = std::find_if(subDetOff.begin(), subDetOff.end(), [](const eformat::SubDetector &s) {
1160 return (s == eformat::MUON_MMEGA_ENDCAP_A_SIDE || s == eformat::MUON_STGC_ENDCAP_A_SIDE); });
1161 auto sideC = std::find_if(subDetOff.begin(), subDetOff.end(), [](const eformat::SubDetector &s) {
1162 return (s == eformat::MUON_MMEGA_ENDCAP_C_SIDE || s == eformat::MUON_STGC_ENDCAP_C_SIDE); });
1163
1164 if (sideA != std::end(subDetOff)) tgcArgs()->set_NSWSideInfo(m_NSWSideInfo.value().erase(0,1));
1165 else if (sideC != std::end(subDetOff)) tgcArgs()->set_NSWSideInfo(m_NSWSideInfo.value().erase(1,1));
1166 else if (sideA != std::end(subDetOff) && sideC != std::end(subDetOff)) tgcArgs()->set_NSWSideInfo("");
1167 }
1168 return StatusCode::SUCCESS;
1169}
void set_NSWSideInfo(const std::string &v)
unsigned int constexpr sideC
Definition RPDUtils.h:15
unsigned int constexpr sideA
Definition RPDUtils.h:16
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())

◆ sysInitialize()

StatusCode AthAlgorithm::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Algorithm > >.

Reimplemented in AthAnalysisAlgorithm, AthFilterAlgorithm, AthHistogramAlgorithm, and PyAthena::Alg.

Definition at line 66 of file AthAlgorithm.cxx.

66 {
68
69 if (sc.isFailure()) {
70 return sc;
71 }
72 ServiceHandle<ICondSvc> cs("CondSvc",name());
73 for (auto h : outputHandles()) {
74 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
75 // do this inside the loop so we don't create the CondSvc until needed
76 if ( cs.retrieve().isFailure() ) {
77 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
78 return StatusCode::SUCCESS;
79 }
80 if (cs->regHandle(this,*h).isFailure()) {
81 sc = StatusCode::FAILURE;
82 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
83 << " with CondSvc");
84 }
85 }
86 }
87 return sc;
88}
virtual StatusCode sysInitialize() override
Override sysInitialize.
AthCommonDataStore(const std::string &name, T... args)
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ tgcArgs()

TGCArguments * LVL1TGCTrigger::LVL1TGCTrigger::tgcArgs ( )
inlineprivate

Definition at line 180 of file LVL1TGCTrigger.h.

180 {
181 return &m_tgcArgs;
182}

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_bctagInProcess

uint16_t LVL1TGCTrigger::LVL1TGCTrigger::m_bctagInProcess {TgcDigit::BC_UNDEFINED}
private

Definition at line 139 of file LVL1TGCTrigger.h.

◆ m_bsMetaDataContRHKey

SG::ReadHandleKey<ByteStreamMetadataContainer> LVL1TGCTrigger::LVL1TGCTrigger::m_bsMetaDataContRHKey {this, "ByteStreamMetadataRHKey", "ByteStreamMetadata", "Location to retrieve the detector mask"}
private

Definition at line 173 of file LVL1TGCTrigger.h.

173{this, "ByteStreamMetadataRHKey", "ByteStreamMetadata", "Location to retrieve the detector mask"};

◆ m_cabling

ServiceHandle<MuonTGC_CablingSvc> LVL1TGCTrigger::LVL1TGCTrigger::m_cabling {this, "TGCCablingSvc", "MuonTGC_CablingSvc", ""}
private

Definition at line 160 of file LVL1TGCTrigger.h.

160{this, "TGCCablingSvc", "MuonTGC_CablingSvc", ""};

◆ m_CurrentBunchTag

ShortProperty LVL1TGCTrigger::LVL1TGCTrigger::m_CurrentBunchTag {this,"CurrentBunchTag",TgcDigit::BC_CURRENT}
private

property, see LVL1TGCTrigger::LVL1TGCTrigger

Definition at line 120 of file LVL1TGCTrigger.h.

120{this,"CurrentBunchTag",TgcDigit::BC_CURRENT};

◆ m_db

TGCDatabaseManager* LVL1TGCTrigger::LVL1TGCTrigger::m_db
private

Definition at line 141 of file LVL1TGCTrigger.h.

◆ m_debuglevel

bool LVL1TGCTrigger::LVL1TGCTrigger::m_debuglevel
private

Definition at line 154 of file LVL1TGCTrigger.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthAlgorithm::m_extendedExtraObjects
privateinherited

Definition at line 79 of file AthAlgorithm.h.

◆ m_firstTime

bool LVL1TGCTrigger::LVL1TGCTrigger::m_firstTime {true}
private

Definition at line 138 of file LVL1TGCTrigger.h.

138{true};

◆ m_FORCENSWCOIN

BooleanProperty LVL1TGCTrigger::LVL1TGCTrigger::m_FORCENSWCOIN {this,"FORCENSWCOIN",true}
private

Definition at line 132 of file LVL1TGCTrigger.h.

132{this,"FORCENSWCOIN",true}; // flag to enable innerCoincidenceFlag at the TGC sectors expecting NSW hits even if there is no NSW hit

◆ m_FULLCW

BooleanProperty LVL1TGCTrigger::LVL1TGCTrigger::m_FULLCW {this,"FULLCW",false}
private

Definition at line 129 of file LVL1TGCTrigger.h.

129{this,"FULLCW",false}; // flag for using differne CW for each octant

◆ m_innerTrackletSlotHolder

TGCInnerTrackletSlotHolder LVL1TGCTrigger::LVL1TGCTrigger::m_innerTrackletSlotHolder
private

Definition at line 148 of file LVL1TGCTrigger.h.

◆ m_INNERVETO

BooleanProperty LVL1TGCTrigger::LVL1TGCTrigger::m_INNERVETO {this,"INNERVETO",true}
private

Definition at line 128 of file LVL1TGCTrigger.h.

128{this,"INNERVETO",true}; // flag for using VETO by Inner Station for SL

◆ m_keyBIS78TrigOut

SG::ReadHandleKey<Muon::RpcBis78_TrigRawDataContainer> LVL1TGCTrigger::LVL1TGCTrigger::m_keyBIS78TrigOut {this,"BIS78Trig_Input","BIS78TrigContainer","Location of RpcBis78_TrigRawDataContainer"}
private

Definition at line 167 of file LVL1TGCTrigger.h.

167{this,"BIS78Trig_Input","BIS78TrigContainer","Location of RpcBis78_TrigRawDataContainer"};

◆ m_keyMuCTPIInput_TGC

StringProperty LVL1TGCTrigger::LVL1TGCTrigger::m_keyMuCTPIInput_TGC {this,"MuCTPIInput_TGC","L1MuctpiStoreTGC"}
private

Definition at line 117 of file LVL1TGCTrigger.h.

117{this,"MuCTPIInput_TGC","L1MuctpiStoreTGC"};

◆ m_keyNSWTrigOut

SG::ReadHandleKey<Muon::NSW_TrigRawDataContainer> LVL1TGCTrigger::LVL1TGCTrigger::m_keyNSWTrigOut {this,"NSWTrigger_Input","L1_NSWTrigContainer","Location of NSW_TrigRawDataContainer"}
private

Definition at line 166 of file LVL1TGCTrigger.h.

166{this,"NSWTrigger_Input","L1_NSWTrigContainer","Location of NSW_TrigRawDataContainer"};

◆ m_keyTgcDigit

SG::ReadHandleKey<TgcDigitContainer> LVL1TGCTrigger::LVL1TGCTrigger::m_keyTgcDigit {this,"InputData_perEvent","TGC_DIGITS","Location of TgcDigitContainer"}
private

Definition at line 164 of file LVL1TGCTrigger.h.

164{this,"InputData_perEvent","TGC_DIGITS","Location of TgcDigitContainer"};

◆ m_keyTgcRdo

SG::WriteHandleKey<TgcRdoContainer> LVL1TGCTrigger::LVL1TGCTrigger::m_keyTgcRdo {this,"TgcRdo","TGCRDO2","Location of TgcRdoContainer"}
private

Definition at line 162 of file LVL1TGCTrigger.h.

162{this,"TgcRdo","TGCRDO2","Location of TgcRdoContainer"};

◆ m_keyTgcRdoIn

SG::ReadHandleKey<TgcRdoContainer> LVL1TGCTrigger::LVL1TGCTrigger::m_keyTgcRdoIn {this,"InputRDO","TGCRDO","Location of input TgcRdoContainer"}
private

Definition at line 163 of file LVL1TGCTrigger.h.

163{this,"InputRDO","TGCRDO","Location of input TgcRdoContainer"};

◆ m_keyTileMu

SG::ReadHandleKey<TileMuonReceiverContainer> LVL1TGCTrigger::LVL1TGCTrigger::m_keyTileMu {this,"TileMuRcv_Input","TileMuRcvCnt","Location of TileMuonReceiverContainer"}
private

Definition at line 165 of file LVL1TGCTrigger.h.

165{this,"TileMuRcv_Input","TileMuRcvCnt","Location of TileMuonReceiverContainer"};

◆ m_MaskedChannel

std::map<Identifier, int> LVL1TGCTrigger::LVL1TGCTrigger::m_MaskedChannel
private

mask channel map

Definition at line 176 of file LVL1TGCTrigger.h.

◆ m_MaskFileName12

StringProperty LVL1TGCTrigger::LVL1TGCTrigger::m_MaskFileName12 {this,"MaskFileName12",""}
private

property, see LVL1TGCTrigger::LVL1TGCTrigger

Definition at line 119 of file LVL1TGCTrigger.h.

119{this,"MaskFileName12",""};

◆ m_muctpiPhase1Key

SG::WriteHandleKey<LVL1MUONIF::Lvl1MuCTPIInputPhase1> LVL1TGCTrigger::LVL1TGCTrigger::m_muctpiPhase1Key {this, "MuctpiPhase1LocationTGC", "L1MuctpiStoreTGC", "Location of muctpiPhase1 for Tgc"}
private

Definition at line 170 of file LVL1TGCTrigger.h.

170{this, "MuctpiPhase1LocationTGC", "L1MuctpiStoreTGC", "Location of muctpiPhase1 for Tgc"};

◆ m_nEventInSector

int LVL1TGCTrigger::LVL1TGCTrigger::m_nEventInSector
private

Definition at line 145 of file LVL1TGCTrigger.h.

◆ m_NSWSideInfo

StringProperty LVL1TGCTrigger::LVL1TGCTrigger::m_NSWSideInfo {this,"NSWSideInfo",""}
private

Definition at line 136 of file LVL1TGCTrigger.h.

136{this,"NSWSideInfo",""};// Information about NSW geometry. It should be "" or "AC" or "A" or "C"

◆ m_OutputTgcRDO

BooleanProperty LVL1TGCTrigger::LVL1TGCTrigger::m_OutputTgcRDO {this,"OutputTgcRDO",true}
private

property, see LVL1TGCTrigger::LVL1TGCTrigger

Definition at line 122 of file LVL1TGCTrigger.h.

122{this,"OutputTgcRDO",true};

◆ m_ProcessAllBunches

BooleanProperty LVL1TGCTrigger::LVL1TGCTrigger::m_ProcessAllBunches {this,"ProcessAllBunhes",true}
private

Definition at line 121 of file LVL1TGCTrigger.h.

121{this,"ProcessAllBunhes",true};

◆ m_readCondKey

SG::ReadCondHandleKey<TGCTriggerData> LVL1TGCTrigger::LVL1TGCTrigger::m_readCondKey {this,"ReadCondKey","TGCTriggerData"}
private

Definition at line 168 of file LVL1TGCTrigger.h.

168{this,"ReadCondKey","TGCTriggerData"};

◆ m_readLUTs_CondKey

SG::ReadCondHandleKey<TGCTriggerLUTs> LVL1TGCTrigger::LVL1TGCTrigger::m_readLUTs_CondKey {this,"ReadLUTCondKey","TGCTriggerLUTs"}
private

Definition at line 169 of file LVL1TGCTrigger.h.

169{this,"ReadLUTCondKey","TGCTriggerLUTs"};

◆ m_SHPTORED

BooleanProperty LVL1TGCTrigger::LVL1TGCTrigger::m_SHPTORED {this, "SHPTORED", true}
private

Definition at line 126 of file LVL1TGCTrigger.h.

126{this, "SHPTORED", true}; //< flag for E1/E2 chamber ORED in Strip HPT

◆ m_system

std::unique_ptr<TGCElectronicsSystem> LVL1TGCTrigger::LVL1TGCTrigger::m_system
private

Definition at line 143 of file LVL1TGCTrigger.h.

◆ m_tgcArgs

TGCArguments LVL1TGCTrigger::LVL1TGCTrigger::m_tgcArgs
private

Definition at line 156 of file LVL1TGCTrigger.h.

◆ m_TILEMU

BooleanProperty LVL1TGCTrigger::LVL1TGCTrigger::m_TILEMU {this,"TILEMU",true}
private

Definition at line 130 of file LVL1TGCTrigger.h.

130{this,"TILEMU",true}; // flag for using TileMu

◆ m_TimingManager

std::unique_ptr<TGCTimingManager> LVL1TGCTrigger::LVL1TGCTrigger::m_TimingManager
private

Definition at line 142 of file LVL1TGCTrigger.h.

◆ m_USE_CONDDB

BooleanProperty LVL1TGCTrigger::LVL1TGCTrigger::m_USE_CONDDB {this, "USE_CONDDB", true}
private

Definition at line 125 of file LVL1TGCTrigger.h.

125{this, "USE_CONDDB", true}; //< flag to use the Condition DB

◆ m_USEBIS78

BooleanProperty LVL1TGCTrigger::LVL1TGCTrigger::m_USEBIS78 {this,"USEBIS78",false}
private

Definition at line 133 of file LVL1TGCTrigger.h.

133{this,"USEBIS78",false}; // flag for using RPC BIS78

◆ m_USEINNER

BooleanProperty LVL1TGCTrigger::LVL1TGCTrigger::m_USEINNER {this, "USEINNER", true}
private

Definition at line 127 of file LVL1TGCTrigger.h.

127{this, "USEINNER", true}; //< flag for using Inner Station for SL

◆ m_USENSW

BooleanProperty LVL1TGCTrigger::LVL1TGCTrigger::m_USENSW {this,"USENSW",false}
private

Definition at line 131 of file LVL1TGCTrigger.h.

131{this,"USENSW",false}; // flag for using NSW

◆ m_useRun3Config

BooleanProperty LVL1TGCTrigger::LVL1TGCTrigger::m_useRun3Config {this,"useRun3Config",false}
private

Definition at line 134 of file LVL1TGCTrigger.h.

134{this,"useRun3Config",false}; // flag for using switch between Run3 and Run2 algorithms

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: