ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Simulation
G4Atlas
G4AtlasTests
src
MuonHitTestToolBase.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
MuonHitTestToolBase.h
"
6
7
#include "
GeneratorObjects/McEventCollection.h
"
8
#include "
MuonReadoutGeometry/MuonDetectorManager.h
"
9
10
11
#include "TH1D.h"
12
#include "TH2D.h"
13
#include <math.h>
14
15
#include "
TruthUtils/MagicNumbers.h
"
16
17
MuonHitTestToolBase::MuonHitTestToolBase
(
const
std::string&
type
,
const
std::string& name,
const
IInterface* parent)
18
:
SimTestToolBase
(
type
, name, parent),
19
m_detname
(
"MDT"
),
20
m_pMuonMgr
(0),
21
m_muonevnt
(0),
m_muonrun
(0),
22
m_muoneta
(0),
m_muontheta
(0),
m_muonphi
(0),
23
m_muonzResid
(0),
m_muonphiResid
(0),
24
m_muondetBarrel
(0),
m_muonlongView
(0),
25
m_eta
(0),
m_theta
(0),
m_phi
(0),
26
m_zResid
(0),
m_phiResid
(0),
27
m_detBarrel
(0),
m_longView
(0)
28
29
{
30
declareProperty(
"BarrelEtaCut"
,
m_BarrelEtaCut
=99.);
31
declareProperty(
"DetectorName"
,
m_detname
=
"MDT"
);
32
33
}
34
35
StatusCode
MuonHitTestToolBase::executeCheckEventInfo
()
36
{
37
SG::ReadHandle<xAOD::EventInfo>
eventInfo (
m_eventInfoKey
,Gaudi::Hive::currentContext());
38
ATH_CHECK
(eventInfo.
isValid
());
39
uint64_t evt = eventInfo->eventNumber();
40
int
numrun = eventInfo->runNumber();
41
ATH_MSG_VERBOSE
(
"Processing EventInfo event #"
<< evt<<
" run: "
<< numrun);
42
m_muonevnt
->Fill(evt);
43
m_muonrun
->Fill(numrun);
44
const
McEventCollection
* mcEvent;
45
CHECK
(evtStore()->retrieve(mcEvent,
m_key
));
46
47
// *AS* Why only if mcEvent ==1? when would there be more than one event?
48
if
(mcEvent->
size
()!=1) {
49
m_direction
=
Amg::Vector3D
(0.,0.,0.);
50
return
StatusCode::SUCCESS;
51
}
52
53
// *AS* Why this (double) loop, if only the last entry is preserved?
54
// changed it to take the gen particle
55
DataVector<HepMC::GenEvent>::const_iterator
e;
56
for
(e=mcEvent->
begin
();e!=mcEvent->
end
(); ++e) {
57
for
(
auto
p: (**e)) {
58
if
( !
HepMC::is_simulation_particle
(p)) {
59
Amg::Vector3D
temp_momentum(p->momentum().px(),
60
p->momentum().py(),
61
p->momentum().pz());
62
m_direction
= temp_momentum.unit();
63
break
;
64
}
65
}
66
}
67
return
StatusCode::SUCCESS;
68
}
69
70
StatusCode
MuonHitTestToolBase::executeFillHistos
(
const
Amg::Vector3D
& u) {
72
73
if
(
m_direction
.perp() > 0 && fabs(
m_direction
.eta())<
m_BarrelEtaCut
){
74
//mdtdet->Fill(u.x(),u.y());
75
m_muondetBarrel
->Fill(u.x(),u.y());
76
m_detBarrel
->Fill(u.x(),u.y());
77
}
78
79
double
rad=sqrt(u.x()*u.x()+u.y()*u.y());
80
m_muonlongView
->Fill(u.z(),rad);
81
m_longView
->Fill(u.z(),rad);
82
83
// //m_direction vector is filled with truth above, so here it is wrong (no eta, theta, phi of the hit!!!)
84
// *AS* why not use "u"?
85
// theta->Fill(m_direction.theta());
86
// theta->Fill(m_direction.theta());
87
// eta->Fill(m_direction.eta());
88
// eta->Fill(m_direction.eta());
89
// phi->Fill(m_direction.phi());
90
// phi->Fill(m_direction.phi());
91
92
if
(
m_direction
.perp() > 0) {
93
m_muonzResid
->Fill(u.cross(
m_direction
).dot(
m_direction
.cross(
Amg::Vector3D
(0,0,1)).unit()));
94
m_muonphiResid
->Fill(u.cross(
m_direction
).z());
95
96
m_zResid
->Fill(u.cross(
m_direction
).dot(
m_direction
.cross(
Amg::Vector3D
(0,0,1)).unit()));
97
m_phiResid
->Fill(u.cross(
m_direction
).z());
98
}
99
else
{
100
m_muonzResid
->Fill(0);
101
m_muonphiResid
->Fill(0);
102
m_zResid
->Fill(0);
103
m_phiResid
->Fill(0);
104
}
105
106
return
StatusCode::SUCCESS;
107
}
108
109
110
111
StatusCode
MuonHitTestToolBase::initialize
() {
112
113
CHECK
(detStore()->retrieve(
m_pMuonMgr
));
114
ATH_CHECK
(
m_eventInfoKey
.initialize());
115
116
//MuonSpectrometer
121
122
m_path
+=
"Muon/"
;
123
// will only create new if not already registered (uses m_path)
124
_TH1D
(
m_muonevnt
,
"event_num"
,100,0.,1000.);
125
_TH1D
(
m_muonrun
,
"run_num"
,100,-300.,300.);
126
127
/*
128
TH1D *etamuon=new TH1D("muonhitpos_eta","muonhitpos_eta",50,-5.,5.);
129
registerHistogram("/truth/muonhitpos_eta",etamuon);
130
131
TH1D *theta=new TH1D("muonhitpos_theta","muonhitpos_theta",50,-10.,10.);
132
registerHistogram("/truth/muonhitpos_theta",theta);
133
134
TH1D *phimuon=new TH1D("muonhitpos_phi","muonhitpos_phi",50,-5.,5.);
135
registerHistogram("/truth/muonhitpos_phi",phimuon);
136
*/
137
138
_TH1D
(
m_muonzResid
,
"muonhitpos_zResid"
,50,-300.,300.);
139
_TH1D
(
m_muonphiResid
,
"muonhitpos_phiResid"
,50,-300.,300.);
140
141
_TH2D
(
m_muondetBarrel
,
"muondet_barrel"
,200,-11000.,11000.,200,-11000.,11000.);
142
_TH2D
(
m_muonlongView
,
"muonlong_view"
,200,-24000.,24000.,200,0.,13000.);
143
// ================================================================================
144
145
m_path
+=
m_detname
+
"/"
;
146
// book Histograms
150
/*
151
TH1D *eta=new TH1D("hitpos_eta","hitpos_eta",50,-5.,5.);
152
registerHistogram("/truth/hitpos_eta",eta);
153
154
TH1D *theta=new TH1D("hitpos_theta","hitpos_theta",50,-10.,10.);
155
registerHistogram("/truth/hitpos_theta",theta);
156
157
TH1D *phi=new TH1D("hitpos_phi","hitpos_phi",50,-5.,5.);
158
registerHistogram("/truth/hitpos_phi",phi);
159
*/
160
_TH1D
(
m_zResid
,(
m_detname
+
"_hitpos_zResid"
).c_str(),50,-300.,300.);
161
_TH1D
(
m_phiResid
,(
m_detname
+
"_hitpos_phiResid"
).c_str(),50,-300.,300.);
162
163
_TH2D
(
m_detBarrel
,(
m_detname
+
"_det_barrel"
).c_str(),200,-11000.,11000.,200,-11000.,11000.);
164
_TH2D
(
m_longView
,(
m_detname
+
"_long_view"
).c_str(),200,-24000.,24000.,200,0.,14000.);
165
166
return
StatusCode::SUCCESS;
167
168
}
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition
AthMsgStreamMacros.h:28
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition
Control/AthenaKernel/AthenaKernel/errorcheck.h:422
MagicNumbers.h
McEventCollection.h
MuonDetectorManager.h
MuonHitTestToolBase.h
_TH2D
#define _TH2D(var, name, nbinx, xmin, xmax, nbiny, ymin, ymax)
Definition
SimTestHisto.h:91
_TH1D
#define _TH1D(var, name, nbin, xmin, xmax)
Definition
SimTestHisto.h:52
DataVector::const_iterator
DataModel_detail::const_iterator< DataVector > const_iterator
Standard const_iterator.
Definition
DataVector.h:838
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
McEventCollection
This defines the McEventCollection, which is really just an ObjectVector of McEvent objectsFile: Gene...
Definition
McEventCollection.h:31
MuonHitTestToolBase::m_zResid
TH1 * m_zResid
Definition
MuonHitTestToolBase.h:53
MuonHitTestToolBase::m_phi
TH1 * m_phi
Definition
MuonHitTestToolBase.h:52
MuonHitTestToolBase::m_muonlongView
TH2 * m_muonlongView
Definition
MuonHitTestToolBase.h:50
MuonHitTestToolBase::m_muonphi
TH1 * m_muonphi
Definition
MuonHitTestToolBase.h:48
MuonHitTestToolBase::m_theta
TH1 * m_theta
Definition
MuonHitTestToolBase.h:52
MuonHitTestToolBase::m_direction
Amg::Vector3D m_direction
Definition
MuonHitTestToolBase.h:58
MuonHitTestToolBase::executeFillHistos
StatusCode executeFillHistos(const Amg::Vector3D &)
Definition
MuonHitTestToolBase.cxx:70
MuonHitTestToolBase::m_detname
std::string m_detname
Definition
MuonHitTestToolBase.h:37
MuonHitTestToolBase::m_muonzResid
TH1 * m_muonzResid
Definition
MuonHitTestToolBase.h:49
MuonHitTestToolBase::m_pMuonMgr
const MuonGM::MuonDetectorManager * m_pMuonMgr
Definition
MuonHitTestToolBase.h:38
MuonHitTestToolBase::m_longView
TH2 * m_longView
Definition
MuonHitTestToolBase.h:54
MuonHitTestToolBase::m_muonevnt
TH1 * m_muonevnt
Definition
MuonHitTestToolBase.h:47
MuonHitTestToolBase::m_muoneta
TH1 * m_muoneta
Definition
MuonHitTestToolBase.h:48
MuonHitTestToolBase::m_phiResid
TH1 * m_phiResid
Definition
MuonHitTestToolBase.h:53
MuonHitTestToolBase::m_BarrelEtaCut
double m_BarrelEtaCut
MDT barrel eta cut, applicable to the MDT 2D cross section plot.
Definition
MuonHitTestToolBase.h:44
MuonHitTestToolBase::m_muonrun
TH1 * m_muonrun
Definition
MuonHitTestToolBase.h:47
MuonHitTestToolBase::m_muontheta
TH1 * m_muontheta
Definition
MuonHitTestToolBase.h:48
MuonHitTestToolBase::m_eventInfoKey
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
SG key for Event Info.
Definition
MuonHitTestToolBase.h:41
MuonHitTestToolBase::m_eta
TH1 * m_eta
Definition
MuonHitTestToolBase.h:52
MuonHitTestToolBase::m_detBarrel
TH2 * m_detBarrel
Definition
MuonHitTestToolBase.h:54
MuonHitTestToolBase::MuonHitTestToolBase
MuonHitTestToolBase(const std::string &type, const std::string &name, const IInterface *parent)
Definition
MuonHitTestToolBase.cxx:17
MuonHitTestToolBase::m_muonphiResid
TH1 * m_muonphiResid
Definition
MuonHitTestToolBase.h:49
MuonHitTestToolBase::m_muondetBarrel
TH2 * m_muondetBarrel
Definition
MuonHitTestToolBase.h:50
MuonHitTestToolBase::executeCheckEventInfo
StatusCode executeCheckEventInfo()
Definition
MuonHitTestToolBase.cxx:35
MuonHitTestToolBase::initialize
virtual StatusCode initialize() override
Definition
MuonHitTestToolBase.cxx:111
SG::ReadHandle
Definition
StoreGate/StoreGate/ReadHandle.h:67
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
SimTestHisto::m_path
std::string m_path
Definition
SimTestHisto.h:34
SimTestToolBase::m_key
std::string m_key
The MC truth key.
Definition
SimTestToolBase.h:34
SimTestToolBase::SimTestToolBase
SimTestToolBase(const std::string &type, const std::string &name, const IInterface *parent)
Definition
SimTestToolBase.cxx:11
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition
GeoPrimitives.h:47
HepMC::is_simulation_particle
bool is_simulation_particle(const T &p)
Method to establish if a particle (or barcode) was created during the simulation (TODO update to be s...
Definition
MagicNumbers.h:322
type
Generated on
for ATLAS Offline Software by
1.17.0