ATLAS Offline Software
Loading...
Searching...
No Matches
MdtTwinDriftCircleVariables.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
7namespace MuonValR4{
8
10 const std::string& inContainer,
11 MSG::Level msgLvl,
12 const std::string& collName):
13 TesterModuleBase{tree, inContainer + collName, msgLvl},
14 m_key{inContainer},
15 m_collName{collName}{
16 }
20 bool MdtTwinDriftCircleVariables::fill(const EventContext& ctx){
21 const ActsTrk::GeometryContext& gctx{getGeoCtx(ctx)};
22
23 SG::ReadHandle inContainer{m_key, ctx};
24 if (!inContainer.isPresent()) {
25 ATH_MSG_FATAL("Failed to retrieve "<<m_key.fullKey());
26 return false;
27 }
29 for (const xAOD::MdtTwinDriftCircle* dc : m_dumpedPRDS){
30 dump(gctx, *dc);
31 }
33 for (const xAOD::MdtTwinDriftCircle* dc : *inContainer) {
34 const MuonGMR4::MdtReadoutElement* re = dc->readoutElement();
35 const Identifier id{re->measurementId(dc->measurementHash())};
36 if ((m_applyFilter && !m_filteredChamb.count(idHelperSvc()->chamberId(id))) ||
37 m_idOutIdxMap.find(id) != m_idOutIdxMap.end()){
38 ATH_MSG_VERBOSE("Skip "<<idHelperSvc()->toString(id));
39 continue;
40 }
41 dump(gctx, *dc);
42 }
43
44 m_filteredChamb.clear();
45 m_idOutIdxMap.clear();
46 m_dumpedPRDS.clear();
47 return true;
48 }
53 m_applyFilter = true;
54 m_filteredChamb.insert(idHelperSvc()->chamberId(chamberId));
55 }
57 m_applyFilter = true;
59 const Identifier id{re->measurementId(dc.measurementHash())};
60
61 const auto insert_itr = m_idOutIdxMap.insert(std::make_pair(id, m_idOutIdxMap.size()));
62 if (insert_itr.second) {
63 m_dumpedPRDS.push_back(&dc);
64 }
65 return insert_itr.first->second;
66 }
68 const xAOD::MdtTwinDriftCircle& dc) {
70 const Identifier id{re->measurementId(dc.measurementHash())};
71
72
73 ATH_MSG_VERBOSE("Filling information for "<<idHelperSvc()->toString(id));
74
75
76 const Amg::Vector3D tubePos{re->center(gctx, dc.measurementHash())};
77 m_id.push_back(id);
78 m_globPos.push_back(tubePos);
79 m_driftRadius.push_back(dc.driftRadius());
81 m_twinLocZ.push_back(dc.posAlongWire());
83 m_tdcCounts.push_back(dc.tdc());
84 m_adcCounts.push_back(dc.adc());
85
86 m_twinTdcCounts.push_back(dc.twinTdc());
87 m_twinAdcCounts.push_back(dc.twinAdc());
88 m_twinTube.push_back(dc.twinTube());
89 m_twinLayer.push_back(dc.twinLayer());
90 }
91}
const boost::regex re(r_e)
#define ATH_MSG_FATAL(x)
#define ATH_MSG_VERBOSE(x)
Handle class for reading from StoreGate.
bool msgLvl(const MSG::Level lvl) const
Test the output level.
VectorBranch< uint16_t > & m_twinTube
Tube number of the twin.
void enableSeededDump()
Activates the seeded dump of the branch.
VectorBranch< float > & m_twinLocZ
Local z coordinate along the drift tube.
VectorBranch< uint8_t > & m_twinLayer
Tube layer of the twin.
ThreeVectorBranch m_globPos
Position of the Mdt drift circle in the global frame.
SG::ReadHandleKey< xAOD::MdtTwinDriftCircleContainer > m_key
std::unordered_map< Identifier, unsigned int > m_idOutIdxMap
Map of Identifiers to the position index inside the vector.
VectorBranch< float > & m_driftRadiusUncert
Uncertainty on the drift radius measurement.
VectorBranch< uint16_t > & m_twinAdcCounts
Adc counts of the twin measurement.
VectorBranch< uint16_t > & m_adcCounts
Adc counts of the measurement.
void dump(const ActsTrk::GeometryContext &gctx, const xAOD::MdtTwinDriftCircle &dc)
std::vector< const xAOD::MdtTwinDriftCircle * > m_dumpedPRDS
Vector of PRDs parsed via the external mechanism. These measurements are parsed first.
VectorBranch< uint16_t > & m_twinTdcCounts
Tdc counts of the twin measurement.
VectorBranch< uint16_t > & m_tdcCounts
tdc counts of the measurement
void dumpAllHitsInChamber(const Identifier &chamberId)
All hits from this particular chamber identifier are dumped to the output including the ones from the...
bool m_applyFilter
Apply a filter to dump the prds.
MdtTwinDriftCircleVariables(MuonTesterTree &tree, const std::string &inContainer, MSG::Level msgLvl=MSG::Level::INFO, const std::string &collName="MdtTwinPrd")
bool fill(const EventContext &ctx) override final
The fill method checks if enough information is provided such that the branch is cleared from the inf...
MdtIdentifierBranch m_id
Identifier of the Mdt.
unsigned int push_back(const xAOD::MdtTwinDriftCircle &dc)
Push back the drift circle measurement to the output.
VectorBranch< float > & m_driftRadius
Dirft radius of the associated drit circle.
VectorBranch< float > & m_twinUncertLocZ
Uncertainty on the local z measurement along the wire.
std::unordered_set< Identifier > m_filteredChamb
Set of chambers to be dumped.
const Muon::IMuonIdHelperSvc * idHelperSvc() const
TesterModuleBase(MuonTesterTree &tree, const std::string &grp_name, MSG::Level msglvl=MSG::Level::INFO)
const ActsTrk::GeometryContext & getGeoCtx(const EventContext &ctx) const
bool declare_dependency(Key &key)
Declares the ReadHandle/ ReadCondHandleKey as data dependency of the algorithm.
TTree * tree() override final
Returns the underlying TTree object.
bool isPresent() const
Is the referenced object present in SG?
float driftRadiusUncert() const
Returns the uncertainty on the drift radius.
const MuonGMR4::MdtReadoutElement * readoutElement() const
Retrieve the associated MdtReadoutElement.
float driftRadius() const
Returns the drift radius.
IdentifierHash measurementHash() const
Returns the hash of the measurement channel (tube (x) layer)
int16_t adc() const
Returns the ADC (typically range is 0 to 250)
int16_t tdc() const
Returns the TDC (typically range is 0 to 2500)
float posAlongWire() const
Returns the coordinate along the wire.
float posAlongWireUncert() const
Returns the uncertainty on the coordinate along the wire.
int16_t twinTdc() const
Returns the TDC (typically range is 0 to 2500)
uint8_t twinLayer() const
Returns the layer number of the associated twin channel (1-4)
uint16_t twinTube() const
Returns the tube number of the associated twin channel (1-120)
int16_t twinAdc() const
Returns the ADC (typically range is 0 to 250)
Eigen::Matrix< double, 3, 1 > Vector3D
std::string toString(const Parameters &pars)
Dumps the parameters into a string with labels in front of each number.
Lightweight algorithm to read xAOD MDT sim hits and (fast-digitised) drift circles from SG and fill a...
-event-from-file
MdtTwinDriftCircle_v1 MdtTwinDriftCircle