ATLAS Offline Software
PhysicsAnalysis
PrimaryDPDMaker
src
muonTrkTrackThinTool.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3
*/
4
6
// muonTrkTrackThinTool.cxx, (c) ATLAS Detector software
8
// Author: Saminder Dhaliwal (s.dhaliwal@cern.ch)
9
// Follows closely from dimuonTaggingTool and DerviationFrameworkExamples
10
11
// STL includes
12
#include <algorithm>
13
#include <iostream>
14
15
// FrameWork includes
16
#include "Gaudi/Property.h"
17
// StoreGate
18
#include "
StoreGate/DataHandle.h
"
19
#include "
StoreGate/ThinningHandle.h
"
20
#include "GaudiKernel/ThreadLocalContext.h"
21
22
23
#include "
PrimaryDPDMaker/muonTrkTrackThinTool.h
"
24
//#include "AthenaKernel/errorcheck.h"
25
#include <vector>
26
#include <string>
27
28
// xAOD containers
29
#include "
xAODMuon/MuonContainer.h
"
30
#include "
xAODTracking/TrackParticleContainer.h
"
31
32
// Constructor
33
muonTrkTrackThinTool::muonTrkTrackThinTool
(
const
std::string&
name
,ISvcLocator* pSvcLocator):
34
AthReentrantAlgorithm
(
name
, pSvcLocator) {
35
}
36
// Athena initialize and finalize
37
StatusCode
muonTrkTrackThinTool::initialize
()
38
{
39
ATH_MSG_VERBOSE
(
"initialize() ..."
);
40
ATH_CHECK
(
m_trackCollKey
.initialize (
m_streamName
) );
41
ATH_CHECK
(
m_muonReadKey
.initialize());
42
return
StatusCode::SUCCESS;
43
}
44
45
StatusCode
muonTrkTrackThinTool::finalize
()
46
{
47
ATH_MSG_VERBOSE
(
"finalize() ..."
);
48
ATH_MSG_INFO
(
"muonTrkTrackThinTool Filter number of muons PASSED "
<<
m_pass
<<
" FROM "
<<
m_All
);
49
ATH_MSG_INFO
(
"muonTrkTrackThinTool Filter number of Trk::Track PASSED "
<<
m_trackpass
<<
" FROM "
<<
m_trackAll
);
50
return
StatusCode::SUCCESS;
51
}
52
53
// The thinning itself
54
StatusCode
muonTrkTrackThinTool::execute
(
const
EventContext& ctx )
const
{
55
56
SG::ThinningHandle<TrackCollection>
alltracks (
m_trackCollKey
, ctx);
57
58
if
(alltracks->empty()){
59
ATH_MSG_DEBUG
(
"------------- Track Collection is empty, collection type: "
<<
m_trackCollKey
.key());
60
return
StatusCode::SUCCESS;
61
}
62
63
std::vector<bool>
mask_t
;
64
mask_t
.resize(alltracks->size(),
false
);
65
m_trackAll
+= alltracks->size();
66
67
// Retrieve the muons:
68
SG::ReadHandle<xAOD::MuonContainer>
muonHandle(
m_muonReadKey
, ctx);
69
if
(!muonHandle.
isValid
()){
70
ATH_MSG_ERROR
(
"Could not read "
<<
m_muonReadKey
);
71
return
StatusCode::FAILURE;
72
}
73
74
const
xAOD::MuonContainer
* muons = muonHandle.
cptr
();
75
76
77
m_All
+= muons->
size
();
78
79
// Loop over muon:
80
for
(
const
auto
*
muon
: *muons ) {
81
m_pass
++;
82
const
xAOD::TrackParticle
* muon_tp = 0;
83
//Needed the below 'if' statements to separate trackparticle cases
84
if
(
m_trackCollKey
.key() ==
"MuonSpectrometerTracks"
)
85
muon_tp =
muon
->trackParticle(xAOD::Muon::MuonSpectrometerTrackParticle);
86
87
if
(
m_trackCollKey
.key() ==
"CombinedMuonTracks"
)
88
muon_tp =
muon
->trackParticle(xAOD::Muon::CombinedTrackParticle);
89
90
if
(
m_trackCollKey
.key() ==
"MSOnlyExtrapolatedTracks"
)
91
muon_tp =
muon
->trackParticle(xAOD::Muon::MSOnlyExtrapolatedMuonSpectrometerTrackParticle);
92
93
if
(
m_trackCollKey
.key() ==
"ExtrapolatedMuonTracks"
)
94
muon_tp =
muon
->trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
95
96
97
if
(!muon_tp) {
98
ATH_MSG_DEBUG
(
"------------- No muon track particle "
);
99
continue
;
// segtagged muons
100
}
101
102
//using element link rather than "const Trk::Track* muontr = muontp->track();"
103
//avoids an additional loop over track collection
104
const
ElementLink< TrackCollection >
& muontr_link = muon_tp->
trackLink
();
105
if
(!muontr_link.
isValid
()){
106
ATH_MSG_DEBUG
(
"------------- Elementlink from trackparticle to trk::track not valid"
);
107
continue
;
//This shouldn't happen
108
}
109
110
int
trIndex = muontr_link.
index
();
111
if
(trIndex <
int
(
mask_t
.size())){
112
mask_t
[trIndex] =
true
;
113
m_trackpass
++;
114
}
115
}
//close muon loop
116
117
118
alltracks.
keep
(
mask_t
);
119
120
return
StatusCode::SUCCESS;
121
}
xAOD::muon
@ muon
Definition:
TrackingPrimitives.h:195
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition:
AthMsgStreamMacros.h:31
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
ThinningHandle.h
Handle for requesting thinning for a data object.
SG::ReadHandle
Definition:
StoreGate/StoreGate/ReadHandle.h:70
muonTrkTrackThinTool::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition:
muonTrkTrackThinTool.cxx:54
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition:
AthMsgStreamMacros.h:28
DataHandle.h
ElementLink::isValid
bool isValid() const
Test to see if the link can be dereferenced.
SG::ThinningHandle
Handle for requesting thinning for a data object.
Definition:
ThinningHandle.h:84
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition:
AthReentrantAlgorithm.h:83
muonTrkTrackThinTool::m_pass
std::atomic< int > m_pass
Definition:
muonTrkTrackThinTool.h:37
Run1::Chip::mask_t
cool::Int32 mask_t
Definition:
openCoraCool.cxx:63
SG::ThinningHandleBase::keep
void keep(size_t ndx)
Mark that index ndx in the container should be kept (not thinned away).
Definition:
ThinningHandleBase.cxx:68
muonTrkTrackThinTool::m_All
std::atomic< int > m_All
Definition:
muonTrkTrackThinTool.h:36
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition:
AthMsgStreamMacros.h:33
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
muonTrkTrackThinTool::initialize
virtual StatusCode initialize() override
Definition:
muonTrkTrackThinTool.cxx:37
ATH_CHECK
#define ATH_CHECK
Definition:
AthCheckMacros.h:40
DataVector
Derived DataVector<T>.
Definition:
DataVector.h:794
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
muonTrkTrackThinTool.h
ElementLink< TrackCollection >
name
std::string name
Definition:
Control/AthContainers/Root/debug.cxx:228
muonTrkTrackThinTool::m_trackCollKey
SG::ThinningHandleKey< TrackCollection > m_trackCollKey
Definition:
muonTrkTrackThinTool.h:44
xAOD::TrackParticle_v1::trackLink
const ElementLink< TrackCollection > & trackLink() const
Returns a link (which can be invalid) to the Trk::Track which was used to make this TrackParticle.
Definition:
TrackParticle_v1.cxx:779
muonTrkTrackThinTool::m_trackAll
std::atomic< int > m_trackAll
Definition:
muonTrkTrackThinTool.h:38
MuonContainer.h
muonTrkTrackThinTool::m_trackpass
std::atomic< int > m_trackpass
Definition:
muonTrkTrackThinTool.h:39
muonTrkTrackThinTool::muonTrkTrackThinTool
muonTrkTrackThinTool(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters.
Definition:
muonTrkTrackThinTool.cxx:33
muonTrkTrackThinTool::finalize
virtual StatusCode finalize() override
Definition:
muonTrkTrackThinTool.cxx:45
ElementLink::index
index_type index() const
Get the index of the element inside of its container.
Definition:
A/AthLinks/ElementLink.h:148
muonTrkTrackThinTool::m_streamName
StringProperty m_streamName
Definition:
muonTrkTrackThinTool.h:42
muonTrkTrackThinTool::m_muonReadKey
SG::ReadHandleKey< xAOD::MuonContainer > m_muonReadKey
Definition:
muonTrkTrackThinTool.h:47
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition:
TrackParticle_v1.h:43
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
TrackParticleContainer.h
Generated on Sun Dec 22 2024 21:15:32 for ATLAS Offline Software by
1.8.18