ATLAS Offline Software
Loading...
Searching...
No Matches
TGCRDOVariables.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
8#include "MuonRDO/TgcRdo.h"
9
10using namespace Muon;
11namespace MuonPRDTest {
12 TGCRDOVariables::TGCRDOVariables(MuonTesterTree& tree, const std::string& container_name, MSG::Level msglvl, ServiceHandle<MuonTGC_CablingSvc> cabling_svc) :
13 PrdTesterModule(tree, "RDO_TGC", msglvl), m_key{container_name}, m_tgcCabling{cabling_svc} {}
15
16 bool TGCRDOVariables::fill(const EventContext& ctx) {
17 ATH_MSG_DEBUG("do fillTGCRDOVariables()");
18 const MuonGM::MuonDetectorManager* MuonDetMgr = getDetMgr(ctx);
19 if (!MuonDetMgr) { return false; }
20 SG::ReadHandle<TgcRdoContainer> tgcrdoContainer{m_key, ctx};
21 if (!tgcrdoContainer.isValid()) {
22 ATH_MSG_FATAL("Failed to retrieve tgc rdo container " << m_key.fullKey());
23 return false;
24 }
25 ATH_MSG_DEBUG("retrieved TGC rdo Container with size " << tgcrdoContainer->size());
26
27 if (tgcrdoContainer->size() == 0) ATH_MSG_DEBUG(" TGC rdo Container empty ");
28 unsigned int n_rdo{0};
29 for (const TgcRdo* coll : *tgcrdoContainer) {
30 ATH_MSG_DEBUG("processing collection with size " << coll->size());
31 for (const TgcRawData* rdo: *coll) {
32
33 bool orFlag = m_tgcCabling->isOredChannel(rdo->subDetectorId(),
34 rdo->rodId(),
35 rdo->sswId(),
36 rdo->slbId(),
37 rdo->bitpos());
38
39 Identifier Id;
40 bool e_found = m_tgcCabling->getElementIDfromReadoutID(Id,
41 rdo->subDetectorId(),
42 rdo->rodId(),
43 rdo->sswId(),
44 rdo->slbId(),
45 rdo->bitpos(),
46 orFlag);
47 if (!e_found) {
48 ATH_MSG_ERROR("could not find Identifier from TgcRawData");
49 return false;
50 }
51
52 const MuonGM::TgcReadoutElement* rdoEl = MuonDetMgr->getTgcReadoutElement(Id);
53 if (!rdoEl) {
54 ATH_MSG_ERROR("The TGC hit "<<idHelperSvc()->toString(Id)<<" does not have a detector element attached. That should actually never happen");
55 return false;
56 }
57
58 m_TGC_rdo_id.push_back(Id);
59 Amg::Vector2D localStripPos(0.,0.);
60 if ( rdoEl->stripPosition(Id,localStripPos) ) {
61 m_TGC_rdo_localPosX.push_back(localStripPos.x());
62 m_TGC_rdo_localPosY.push_back(localStripPos.y());
63 ATH_MSG_DEBUG("TGC RDO: local pos.: x=" << localStripPos[0] << ", y=" << localStripPos[1]);
64 } else {
65 ATH_MSG_WARNING("TGC RDO: local Strip position not defined");
66 }
67
68 // asking the detector element to transform this local to the global position
69 Amg::Vector3D globalStripPos(0., 0., 0.);
70 rdoEl->surface(Id).localToGlobal(localStripPos,Amg::Vector3D(0.,0.,0.),globalStripPos);
71 m_TGC_rdo_globalPos.push_back(globalStripPos);
72
73 ++n_rdo;
74 }
75 }
76 m_TGC_nRDO = n_rdo;
77 ATH_MSG_DEBUG(" finished fillTGCRDOVariables()");
78 return true;
79 }
80}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_FATAL(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
virtual const Trk::PlaneSurface & surface() const override
access to chamber surface (phi orientation), uses the first gas gap
The MuonDetectorManager stores the transient representation of the Muon Spectrometer geometry and pro...
const TgcReadoutElement * getTgcReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
A TgcReadoutElement corresponds to a single TGC chamber; therefore typically a TGC station contains s...
virtual bool stripPosition(const Identifier &id, Amg::Vector2D &pos) const override
strip position If the strip number is outside the range of valid strips, the function will return fal...
const MuonGM::MuonDetectorManager * getDetMgr(const EventContext &ctx) const
const Muon::IMuonIdHelperSvc * idHelperSvc() const
PrdTesterModule(MuonTesterTree &tree, const std::string &grp_name, MSG::Level msglvl)
SG::ReadHandleKey< TgcRdoContainer > m_key
ThreeVectorBranch m_TGC_rdo_globalPos
TGCRDOVariables(MuonTesterTree &tree, const std::string &container_name, MSG::Level msglvl, ServiceHandle< MuonTGC_CablingSvc > cabling_svc)
VectorBranch< float > & m_TGC_rdo_localPosX
bool declare_keys() override final
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...
VectorBranch< float > & m_TGC_rdo_localPosY
ServiceHandle< MuonTGC_CablingSvc > m_tgcCabling
ScalarBranch< unsigned int > & m_TGC_nRDO
TgcIdentifierBranch m_TGC_rdo_id
bool declare_dependency(Key &key)
Declares the ReadHandle/ ReadCondHandleKey as data dependency of the algorithm.
TTree * tree() override final
Returns the underlying TTree object.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
An unit object of TGC ROD output.
Definition TgcRawData.h:23
virtual void localToGlobal(const Amg::Vector2D &locp, const Amg::Vector3D &mom, Amg::Vector3D &glob) const override final
Specified for PlaneSurface: LocalToGlobal method without dynamic memory allocation.
Eigen::Matrix< double, 2, 1 > Vector2D
Eigen::Matrix< double, 3, 1 > Vector3D
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
std::string toString(CscStripStatus cstat)
Return a string description of a CSC cluster status flag.