ATLAS Offline Software
EnergyLossMonitor.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 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/INTupleSvc.h"
13 #include "GaudiKernel/ISvcLocator.h"
14 #include "GaudiKernel/SmartDataPtr.h"
15 
16 
17 // constructor
18 Trk::EnergyLossMonitor::EnergyLossMonitor(const std::string& t, const std::string& n, const IInterface* p) :
19  AthAlgTool(t,n,p),
20  m_ntupleSvc{},
21  m_outputNtuplePath("/NTUPLES/FILE1/EnergyLossMonitor/SingleTrackEnergyLoss"),
22  m_outputNtupleDescription("Output of the Trk::EnergyLossMonitor AlgTool"),
23  m_currentStep(0)
24 {
25  declareInterface<IEnergyLossMonitor>(this);
26  declareProperty("NtuplePath", m_outputNtuplePath);
27  declareProperty("NtupleDescription", m_outputNtupleDescription);
28 }
29 
30 // Athena standard methods
31 // initialize
33 {
34  // Retrieve the NTuple Service
35  StatusCode sc = service( "NTupleSvc", m_ntupleSvc );
36  if (sc.isFailure()){
37  ATH_MSG_FATAL( "Couldn't get pointer to Ntuple service ! " );
38  return StatusCode::FAILURE;
39  } else {
40  NTuplePtr ntr(m_ntupleSvc, m_outputNtuplePath);
41  if (!ntr)
42  ntr = m_ntupleSvc->book(m_outputNtuplePath, CLID_ColumnWiseTuple, m_outputNtupleDescription);
43  if (ntr){
44  sc = ntr->addItem("Steps", m_steps, 0, 5000);
45  // Initial paramters
46  sc = ntr->addItem("InitialP", m_initialP, 0., 1000000.);
47  sc = ntr->addItem("InitialE", m_initialE, 0., 1000000.);
48  sc = ntr->addItem("InitialEta", m_initialEta, -4., 4.);
49  sc = ntr->addItem("InitialPhi", m_initialPhi, -4., 4.);
50  // kinematics
51  sc = ntr->addItem("Eta", m_steps, m_eta);
52  sc = ntr->addItem("Phi", m_steps, m_phi);
53  // Beam Pipe
54  sc = ntr->addItem("Energy", m_steps, m_E);
55  sc = ntr->addItem("Momentum", m_steps, m_p);
56  sc = ntr->addItem("Eta", m_steps, m_eta);
57  sc = ntr->addItem("Phi", m_steps, m_phi);
58  sc = ntr->addItem("MaterialHitX", m_steps, m_hitX);
59  sc = ntr->addItem("MaterialHitY", m_steps, m_hitY);
60  sc = ntr->addItem("MaterialHitZ", m_steps, m_hitZ);
61  sc = ntr->addItem("MaterialHitR", m_steps, m_hitR);
62 
63  } else {
64  ATH_MSG_ERROR( "Ntuple booking failed!" );
65  return StatusCode::FAILURE;
66  }
67  }
68  ATH_MSG_DEBUG("initialize() successful" );
69  return sc;
70 }
71 
72 // finalize
74 {
75  ATH_MSG_DEBUG("finalize() successful");
76  return StatusCode::SUCCESS;
77 }
78 
79 
81  double E,
82  double eta,
83  double phi)
84 {
85  m_initialP = p;
86  m_initialE = E;
87  m_initialEta = eta;
88  m_initialPhi = phi;
89  m_currentStep = 0;
90 }
91 
93  const Amg::Vector3D& mom,
94  double mass)
95 {
96 
97  // Geant4 first step protection
98  if (pos.mag() > 0.01 && m_currentStep < 5000){
99  double p = mom.mag();
100  m_E[m_currentStep] = sqrt(p*p+mass*mass);
101  m_p[m_currentStep] = p;
102  m_eta[m_currentStep] = mom.eta();
103  m_phi[m_currentStep] = mom.phi();
104  m_hitX[m_currentStep] = pos.x();
105  m_hitY[m_currentStep] = pos.y();
106  m_hitZ[m_currentStep] = pos.z();
107  m_hitR[m_currentStep] = pos.perp();
108  m_currentStep++;
109  }
110 }
111 
113 {
114  m_steps = m_currentStep;
115  StatusCode sc = m_ntupleSvc->writeRecord(m_outputNtuplePath);
116  if (sc.isFailure()){
117  ATH_MSG_WARNING( "Couldn't write ntuple record!" );
118  }
119 }
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
Trk::EnergyLossMonitor::initializeTrack
virtual void initializeTrack(double p, double E, double eta, double phi)
Initialize State.
Definition: EnergyLossMonitor.cxx:80
Trk::EnergyLossMonitor::recordTrackState
virtual void recordTrackState(const Amg::Vector3D &pos, const Amg::Vector3D &mom, double mass)
Record a single TrackState.
Definition: EnergyLossMonitor.cxx:92
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
Trk::EnergyLossMonitor::finalizeTrack
virtual void finalizeTrack()
Finalization State.
Definition: EnergyLossMonitor.cxx:112
Trk::EnergyLossMonitor::finalize
StatusCode finalize()
Definition: EnergyLossMonitor.cxx:73
dqt_zlumi_pandas.mass
mass
Definition: dqt_zlumi_pandas.py:170
Trk::EnergyLossMonitor::EnergyLossMonitor
EnergyLossMonitor(const std::string &, const std::string &, const IInterface *)
standard AlgTool constructor / destructor
Definition: EnergyLossMonitor.cxx:18
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
Trk::EnergyLossMonitor::initialize
StatusCode initialize()
standard Athena methods
Definition: EnergyLossMonitor.cxx:32
ParticleGun_EoverP_Config.mom
mom
Definition: ParticleGun_EoverP_Config.py:63
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
beamspotman.n
n
Definition: beamspotman.py:731
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
EnergyLossMonitor.h
VP1PartSpect::E
@ E
Definition: VP1PartSpectFlags.h:21
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
Trk::phi
@ phi
Definition: ParamDefs.h:81
AthAlgTool
Definition: AthAlgTool.h:26