ATLAS Offline Software
Loading...
Searching...
No Matches
EnergyLossMonitor.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
6// EnergyLossMonitor.cxx, (c) ATLAS Detector software
8
9// InDet include
11// Gaudi
12#include "GaudiKernel/ISvcLocator.h"
13#include "GaudiKernel/SmartDataPtr.h"
14
15
16// constructor
17Trk::EnergyLossMonitor::EnergyLossMonitor(const std::string& t, const std::string& n, const IInterface* p) :
18 AthAlgTool(t,n,p),
19 m_ntupleSvc("NTupleSvc", n),
20 m_outputNtuplePath("/NTUPLES/FILE1/EnergyLossMonitor/SingleTrackEnergyLoss"),
21 m_outputNtupleDescription("Output of the Trk::EnergyLossMonitor AlgTool"),
23{
24 declareInterface<IEnergyLossMonitor>(this);
26 declareProperty("NtupleDescription", m_outputNtupleDescription);
27}
28
29// Athena standard methods
30// initialize
32{
33 // Retrieve the NTuple Service
34 ATH_CHECK( m_ntupleSvc.retrieve() );
35 NTuplePtr ntr(m_ntupleSvc.get(), m_outputNtuplePath);
36 StatusCode sc;
37 if (!ntr) {
38 ntr = m_ntupleSvc->book(m_outputNtuplePath, CLID_ColumnWiseTuple, m_outputNtupleDescription);
39 }
40 if (ntr){
41 sc = ntr->addItem("Steps", m_steps, 0, 5000);
42 // Initial paramters
43 sc = ntr->addItem("InitialP", m_initialP, 0., 1000000.);
44 sc = ntr->addItem("InitialE", m_initialE, 0., 1000000.);
45 sc = ntr->addItem("InitialEta", m_initialEta, -4., 4.);
46 sc = ntr->addItem("InitialPhi", m_initialPhi, -4., 4.);
47 // kinematics
48 sc = ntr->addItem("Eta", m_steps, m_eta);
49 sc = ntr->addItem("Phi", m_steps, m_phi);
50 // Beam Pipe
51 sc = ntr->addItem("Energy", m_steps, m_E);
52 sc = ntr->addItem("Momentum", m_steps, m_p);
53 sc = ntr->addItem("Eta", m_steps, m_eta);
54 sc = ntr->addItem("Phi", m_steps, m_phi);
55 sc = ntr->addItem("MaterialHitX", m_steps, m_hitX);
56 sc = ntr->addItem("MaterialHitY", m_steps, m_hitY);
57 sc = ntr->addItem("MaterialHitZ", m_steps, m_hitZ);
58 sc = ntr->addItem("MaterialHitR", m_steps, m_hitR);
59
60 } else {
61 ATH_MSG_ERROR( "Ntuple booking failed!" );
62 return StatusCode::FAILURE;
63 }
64 ATH_MSG_DEBUG("initialize() successful" );
65 return sc;
66}
67
68// finalize
70{
71 ATH_MSG_DEBUG("finalize() successful");
72 return StatusCode::SUCCESS;
73}
74
75
77 double E,
78 double eta,
79 double phi)
80{
81 m_initialP = p;
82 m_initialE = E;
85 m_currentStep = 0;
86}
87
89 const Amg::Vector3D& mom,
90 double mass)
91{
92
93 // Geant4 first step protection
94 if (pos.mag() > 0.01 && m_currentStep < 5000){
95 double p = mom.mag();
96 m_E[m_currentStep] = sqrt(p*p+mass*mass);
97 m_p[m_currentStep] = p;
98 m_eta[m_currentStep] = mom.eta();
99 m_phi[m_currentStep] = mom.phi();
100 m_hitX[m_currentStep] = pos.x();
101 m_hitY[m_currentStep] = pos.y();
102 m_hitZ[m_currentStep] = pos.z();
103 m_hitR[m_currentStep] = pos.perp();
105 }
106}
107
109{
111 StatusCode sc = m_ntupleSvc->writeRecord(m_outputNtuplePath);
112 if (sc.isFailure()){
113 ATH_MSG_WARNING( "Couldn't write ntuple record!" );
114 }
115}
Scalar eta() const
pseudorapidity method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
static Double_t sc
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
NTuple::Item< float > m_initialE
NTuple::Array< float > m_hitX
NTuple::Array< float > m_phi
virtual void initializeTrack(double p, double E, double eta, double phi)
Initialize State.
virtual void finalizeTrack()
Finalization State.
NTuple::Array< float > m_hitR
NTuple::Item< long > m_steps
Step variables.
std::string m_outputNtupleDescription
NTuple::Array< float > m_hitY
ServiceHandle< INTupleSvc > m_ntupleSvc
Ntuple Business.
NTuple::Array< float > m_p
NTuple::Item< float > m_initialEta
NTuple::Item< float > m_initialP
Initial variables.
int m_currentStep
Ntuple helper.
StatusCode initialize()
standard Athena methods
virtual void recordTrackState(const Amg::Vector3D &pos, const Amg::Vector3D &mom, double mass)
Record a single TrackState.
NTuple::Array< float > m_hitZ
NTuple::Array< float > m_eta
NTuple::Item< float > m_initialPhi
EnergyLossMonitor(const std::string &, const std::string &, const IInterface *)
standard AlgTool constructor / destructor
NTuple::Array< float > m_E
Eigen::Matrix< double, 3, 1 > Vector3D
@ phi
Definition ParamDefs.h:75