Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
MdtCalibDbAlgTest.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "MdtCalibDbAlgTest.h"
6 
7 #include "GaudiKernel/PhysicalConstants.h"
10 #include "GaudiKernel/ITHistSvc.h"
11 #include "TH2D.h"
12 #include "TCanvas.h"
13 
14 using namespace MuonValR4;
15 
17  ATH_MSG_VERBOSE("Initializing MdtCalibDbAlgTest");
18  ATH_CHECK(m_MdtKey.initialize());
20  ATH_CHECK(m_calibrationTool.retrieve());
21  ATH_CHECK(m_idHelperSvc.retrieve());
22  ATH_CHECK(m_tree.init(this));
23  ATH_CHECK(book(TH2D("DriftRadiusVsTime", "DriftRadiusVsTime", 680, 0., 680., 100, 0., 15.), "MdtCalibDbAlgTest", "MdtCalibDbAlgTest"));
24  ATH_CHECK(book(TH2D("DriftVelocityVsTime", "DriftVelocityVsTime", 680, 0., 680., 140, -0.1, 0.6), "MdtCalibDbAlgTest", "MdtCalibDbAlgTest"));
25  ATH_CHECK(book(TH2D("DriftTimeVsRadius", "DriftTimeVsRadius", 100, 0., 15., 680, 0., 680.), "MdtCalibDbAlgTest", "MdtCalibDbAlgTest"));
26  ATH_CHECK(book(TH2D("DriftTimeClosure", "DriftTimeClosure", 680, 0., 680., 680, 0., 680.), "MdtCalibDbAlgTest", "MdtCalibDbAlgTest"));
27 
28  return StatusCode::SUCCESS;
29 }
30 
32  ATH_MSG_VERBOSE("Finalizing MdtCalibDbAlgTest");
34  return StatusCode::SUCCESS;
35 }
36 
38  const EventContext& ctx = Gaudi::Hive::currentContext();
39  SG::ReadHandle mdtContainer{m_MdtKey, ctx};
40  SG::ReadHandle geoCtx{m_geoCtxKey, ctx};
41  ATH_CHECK(mdtContainer.isPresent());
42  ATH_CHECK(geoCtx.isPresent());
43  constexpr double inversePropSpeed = 1. / Gaudi::Units::c_light;
44  for(const xAOD::MdtDriftCircle* mdt : *mdtContainer) {
46  continue;
47  }
48  const MuonGMR4::MdtReadoutElement* mdtRE = mdt->readoutElement();
49  const Amg::Vector3D mdtGlobalTubePos = mdtRE->globalTubePos(*geoCtx, mdt->measurementHash());
50  const float tdcAdj = IMdtCalibrationTool::tdcBinSize * mdt->tdc() - inversePropSpeed * (mdtGlobalTubePos.norm() - 0.5 * mdtRE->activeTubeLength(mdt->measurementHash()));
51  m_out_tdcAdj = tdcAdj;
52  m_out_tdc = mdt->tdc();
53  m_out_driftRadius = mdt->driftRadius();
54  const float driftV = m_calibrationTool->getCalibConstants(ctx, mdt->identify())->rtRelation->rt()->driftVelocity(tdcAdj);
55  std::optional<double> driftTime = m_calibrationTool->getCalibConstants(ctx, mdt->identify())->rtRelation->tr()->driftTime(mdt->driftRadius());
56  const float f_driftTime = static_cast<float>(driftTime.value_or(0.));
57  m_out_driftVelocity = driftV;
58 
59  m_out_stIndex = mdtRE->stationName();
60  m_out_stEta = mdtRE->stationEta();
61  m_out_stPhi = mdtRE->stationPhi();
62  m_out_ml = mdtRE->multilayer();
63  m_out_tl = mdt->tubeLayer();
64  m_out_tube = mdt->driftTube();
65  m_out_globalPos = mdtGlobalTubePos.norm();
66  m_out_globalPosX = mdtGlobalTubePos.x();
67  m_out_globalPosY = mdtGlobalTubePos.y();
68  m_out_globalPosZ = mdtGlobalTubePos.z();
69  m_out_tubeLength = mdtRE->activeTubeLength(mdt->measurementHash());
70  m_out_driftTime = f_driftTime;
71  hist("DriftRadiusVsTime")->Fill(tdcAdj, mdt->driftRadius());
72  hist("DriftVelocityVsTime")->Fill(tdcAdj, driftV);
73  hist("DriftTimeVsRadius")->Fill(mdt->driftRadius(), f_driftTime);
74  hist("DriftTimeClosure")->Fill(tdcAdj, f_driftTime);
75  m_tree.fill(ctx);
76  }
77 
78  return StatusCode::SUCCESS;
79 }
MuonValR4::MdtCalibDbAlgTest::m_out_tubeLength
MuonVal::ScalarBranch< float > & m_out_tubeLength
Definition: MdtCalibDbAlgTest.h:61
MuonValR4::MdtCalibDbAlgTest::m_out_driftTime
MuonVal::ScalarBranch< float > & m_out_driftTime
Definition: MdtCalibDbAlgTest.h:47
MuonVal::MuonTesterTree::init
StatusCode init(OWNER *instance)
Initialize method.
AthHistogramming::book
StatusCode book(const TH1 &hist, const std::string &tDir="", const std::string &stream="")
Simplify the booking and registering (into THistSvc) of histograms.
Definition: AthHistogramming.h:303
MuonValR4::MdtCalibDbAlgTest::m_out_stPhi
MuonVal::ScalarBranch< uint8_t > & m_out_stPhi
Definition: MdtCalibDbAlgTest.h:51
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
MuonValR4::MdtCalibDbAlgTest::initialize
virtual StatusCode initialize() override
Definition: MdtCalibDbAlgTest.cxx:16
MuonGMR4::MdtReadoutElement::activeTubeLength
double activeTubeLength(const IdentifierHash &hash) const
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MdtReadoutElement.cxx:173
MuonValR4::MdtCalibDbAlgTest::m_out_tdcAdj
MuonVal::ScalarBranch< float > & m_out_tdcAdj
Definition: MdtCalibDbAlgTest.h:43
MuonValR4::MdtCalibDbAlgTest::m_geoCtxKey
SG::ReadHandleKey< ActsGeometryContext > m_geoCtxKey
Definition: MdtCalibDbAlgTest.h:38
MuonValR4::MdtCalibDbAlgTest::m_out_globalPos
MuonVal::ScalarBranch< float > & m_out_globalPos
Definition: MdtCalibDbAlgTest.h:57
MuonValR4::MdtCalibDbAlgTest::m_out_tube
MuonVal::ScalarBranch< uint8_t > & m_out_tube
Definition: MdtCalibDbAlgTest.h:54
MuonValR4::MdtCalibDbAlgTest::m_MdtKey
SG::ReadHandleKey< xAOD::MdtDriftCircleContainer > m_MdtKey
Definition: MdtCalibDbAlgTest.h:36
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
MuonValR4::MdtCalibDbAlgTest::m_out_globalPosZ
MuonVal::ScalarBranch< float > & m_out_globalPosZ
Definition: MdtCalibDbAlgTest.h:60
MdtCalibDbAlgTest.h
Muon::MdtStatusDriftTime
@ MdtStatusDriftTime
The tube produced a vaild measurement.
Definition: MdtDriftCircleStatus.h:34
MuonValR4::MdtCalibDbAlgTest::m_out_tdc
MuonVal::ScalarBranch< float > & m_out_tdc
Definition: MdtCalibDbAlgTest.h:44
MuonGMR4::MdtReadoutElement::multilayer
unsigned int multilayer() const
Returns the multi layer of the MdtReadoutElement.
TRT::Hit::driftTime
@ driftTime
Definition: HitInfo.h:43
MuonValR4::MdtCalibDbAlgTest::m_out_stIndex
MuonVal::ScalarBranch< uint8_t > & m_out_stIndex
Definition: MdtCalibDbAlgTest.h:49
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
MuonValR4::MdtCalibDbAlgTest::m_out_driftVelocity
MuonVal::ScalarBranch< float > & m_out_driftVelocity
Definition: MdtCalibDbAlgTest.h:46
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
MuonValR4::MdtCalibDbAlgTest::m_out_globalPosY
MuonVal::ScalarBranch< float > & m_out_globalPosY
Definition: MdtCalibDbAlgTest.h:59
MuonValR4
Lightweight algorithm to read xAOD MDT sim hits and (fast-digitised) drift circles from SG and fill a...
Definition: IPatternVisualizationTool.h:23
MuonGMR4::MdtReadoutElement
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/MdtReadoutElement.h:22
MuonValR4::MdtCalibDbAlgTest::m_calibrationTool
ToolHandle< IMdtCalibrationTool > m_calibrationTool
pointer to MdtCalibSvc
Definition: MdtCalibDbAlgTest.h:40
MuonValR4::MdtCalibDbAlgTest::m_tree
MuonVal::MuonTesterTree m_tree
Definition: MdtCalibDbAlgTest.h:41
MuonValR4::MdtCalibDbAlgTest::m_out_ml
MuonVal::ScalarBranch< uint8_t > & m_out_ml
Definition: MdtCalibDbAlgTest.h:52
python.PhysicalConstants.c_light
float c_light
Definition: PhysicalConstants.py:63
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
MuonValR4::MdtCalibDbAlgTest::m_out_driftRadius
MuonVal::ScalarBranch< float > & m_out_driftRadius
Definition: MdtCalibDbAlgTest.h:45
MuonGMR4::MuonReadoutElement::stationName
int stationName() const
Returns the stationName (BIS, BOS, etc) encoded into the integer.
MuonValR4::MdtCalibDbAlgTest::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MdtCalibDbAlgTest.h:41
MdtReadoutElement.h
MdtFullCalibData.h
MuonValR4::MdtCalibDbAlgTest::m_out_tl
MuonVal::ScalarBranch< uint8_t > & m_out_tl
Definition: MdtCalibDbAlgTest.h:53
MuonValR4::MdtCalibDbAlgTest::finalize
virtual StatusCode finalize() override
Definition: MdtCalibDbAlgTest.cxx:31
MuonValR4::MdtCalibDbAlgTest::execute
virtual StatusCode execute() override
Definition: MdtCalibDbAlgTest.cxx:37
MuonVal::MuonTesterTree::fill
bool fill(const EventContext &ctx)
Fills the tree per call.
Definition: MuonTesterTree.cxx:89
MuonVal::MuonTesterTree::write
StatusCode write()
Finally write the TTree objects.
Definition: MuonTesterTree.cxx:178
MuonGMR4::MdtReadoutElement::globalTubePos
Amg::Vector3D globalTubePos(const ActsGeometryContext &ctx, const Identifier &measId) const
Returns the global position of the tube center.
AthHistogramming::hist
TH1 * hist(const std::string &histName, const std::string &tDir="", const std::string &stream="")
Simplify the retrieval of registered histograms of any type.
Definition: AthHistogramming.cxx:198
MuonValR4::MdtCalibDbAlgTest::m_out_globalPosX
MuonVal::ScalarBranch< float > & m_out_globalPosX
Definition: MdtCalibDbAlgTest.h:58
MuonGMR4::MuonReadoutElement::stationEta
int stationEta() const
Returns the stationEta (positive A site, negative O site)
MuonValR4::MdtCalibDbAlgTest::m_out_stEta
MuonVal::ScalarBranch< int16_t > & m_out_stEta
Definition: MdtCalibDbAlgTest.h:50
xAOD::MdtDriftCircle_v1
https://gitlab.cern.ch/atlas/athena/-/blob/master/MuonSpectrometer/MuonReconstruction/MuonRecEvent/Mu...
Definition: MdtDriftCircle_v1.h:21
IMdtCalibrationTool::tdcBinSize
static constexpr double tdcBinSize
Conversion to go from tdc counts -> drift Time.
Definition: IMdtCalibrationTool.h:38
MuonGMR4::MuonReadoutElement::stationPhi
int stationPhi() const
Returns the stationPhi (1-8) -> sector (2*phi - (isSmall))