ATLAS Offline Software
Loading...
Searching...
No Matches
DerivationFramework::AugOriginalCounts Class Reference

Augmentation with primary vertex counts (before thinning) More...

#include <AugOriginalCounts.h>

Inheritance diagram for DerivationFramework::AugOriginalCounts:
Collaboration diagram for DerivationFramework::AugOriginalCounts:

Public Member Functions

 AugOriginalCounts (const std::string &t, const std::string &n, const IInterface *p)
 Main constructor.
virtual StatusCode addBranches (const EventContext &ctx) const override
 Main method called for each event.
virtual StatusCode initialize () override

Private Attributes

job options
SG::WriteDecorHandleKey< xAOD::EventInfom_OrigPVNTracks {this, "DO_NOT_SET1", "", "internal property"}
SG::WriteDecorHandleKey< xAOD::EventInfom_OrigNTracksKeys {this, "DO_NOT_SET2", "", "internal property"}
SG::WriteDecorHandleKey< xAOD::EventInfom_OrigNTracksLRTKeys {this, "DO_NOT_SET22", "", "internal property"}
SG::WriteDecorHandleKey< xAOD::EventInfom_OrigNtype0 {this, "DO_NOT_SET3", "", "internal property"}
SG::WriteDecorHandleKey< xAOD::EventInfom_OrigNtype1 {this, "DO_NOT_SET4", "", "internal property"}
SG::WriteDecorHandleKey< xAOD::EventInfom_OrigNtype2 {this, "DO_NOT_SET5", "", "internal property"}
SG::WriteDecorHandleKey< xAOD::EventInfom_OrigNtype3 {this, "DO_NOT_SET6", "", "internal property"}
SG::WriteDecorHandleKey< xAOD::EventInfom_OrigNtypeUnknown {this, "DO_NOT_SET7", "", "internal property"}
SG::WriteDecorHandleKey< xAOD::VertexContainerm_OrigSqrtPt2Sum {this, "DO_NOT_SET8", "", "internal property"}
SG::WriteDecorHandleKey< xAOD::VertexContainerm_d_nPVTracks {this, "DO_NOT_SET9", "", "internal property"}
SG::ReadHandleKey< xAOD::TrackParticleContainerm_TrackContainername
SG::ReadHandleKey< xAOD::TrackParticleContainerm_TrackContainerLRTname
SG::ReadHandleKey< xAOD::VertexContainerm_PVContainername
bool m_addPVCountsByType
bool m_addNTracksToPVs
bool m_addSqrtPt2SumToPVs

Detailed Description

Augmentation with primary vertex counts (before thinning)

This tool adds primary vertex counts and track counts to the EventInfo container in order to preserve them in case the primary vertex or track collections are thinned.

Job options

NameDescription
TrackContainername of the TrackParticle container to be used
VertexContainername of the Vertex container to be used
AddPVCountsByTypeadd PV counts by PV type (default: false)

Definition at line 60 of file AugOriginalCounts.h.

Constructor & Destructor Documentation

◆ AugOriginalCounts()

DerivationFramework::AugOriginalCounts::AugOriginalCounts ( const std::string & t,
const std::string & n,
const IInterface * p )

Main constructor.

Definition at line 17 of file AugOriginalCounts.cxx.

19 :
20 base_class(t,n,p),
21 m_TrackContainername("InDetTrackParticles"),
22 m_TrackContainerLRTname("InDetLargeD0TrackParticles"),
23 m_PVContainername("PrimaryVertices")
24 {
25
26 declareProperty("TrackContainer", m_TrackContainername);
27 declareProperty("TrackLRTContainer", m_TrackContainerLRTname);
28 declareProperty("VertexContainer", m_PVContainername);
29 declareProperty("AddPVCountsByType", m_addPVCountsByType = false);
30 // decorate PVs with track counts and/or sqrt(sum(pt^2))
31 // (needed if track collection will be thinned)
32 declareProperty("AddNTracksToPVs", m_addNTracksToPVs = false);
33 declareProperty("AddSqrtPt2SumToPVs", m_addSqrtPt2SumToPVs = false);
34 }
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_TrackContainerLRTname
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_TrackContainername
SG::ReadHandleKey< xAOD::VertexContainer > m_PVContainername

Member Function Documentation

◆ addBranches()

StatusCode DerivationFramework::AugOriginalCounts::addBranches ( const EventContext & ctx) const
overridevirtual

Main method called for each event.

Definition at line 89 of file AugOriginalCounts.cxx.

90 {
91
92
93 if(!m_PVContainername.empty()){
94
95 SG::WriteDecorHandle<xAOD::EventInfo, int> PV_count(m_OrigPVNTracks, ctx);
96 SG::ReadHandle<xAOD::VertexContainer> vertices(m_PVContainername, ctx);
97 if(!PV_count.isAvailable()) PV_count(0) = vertices->size();
98
99 if ( m_addPVCountsByType ) {
100 SG::WriteDecorHandle<xAOD::EventInfo, int> PV0_count(m_OrigNtype0, ctx);
101 SG::WriteDecorHandle<xAOD::EventInfo, int> PV1_count(m_OrigNtype1, ctx);
102 SG::WriteDecorHandle<xAOD::EventInfo, int> PV2_count(m_OrigNtype2, ctx);
103 SG::WriteDecorHandle<xAOD::EventInfo, int> PV3_count(m_OrigNtype3, ctx);
104 SG::WriteDecorHandle<xAOD::EventInfo, int> PVUnk_count(m_OrigNtypeUnknown, ctx);
105
106 // now count
107 constexpr int nvtypes = 5;
108 int nvtc[] = {0, 0, 0, 0, 0};
109 for (auto vtx : *vertices) {
110 VxType::VertexType vt = vtx->vertexType();
111 if ( vt >=0 && vt < nvtypes ) {
112 nvtc[vt]++; // vertex types 0 - 3
113 } else {
114 nvtc[nvtypes-1]++; // unknown
115 }
116 }
117 if(!PV0_count.isAvailable()) PV0_count(0) = nvtc[0];
118 if(!PV1_count.isAvailable()) PV1_count(0) = nvtc[1];
119 if(!PV2_count.isAvailable()) PV2_count(0) = nvtc[2];
120 if(!PV3_count.isAvailable()) PV3_count(0) = nvtc[3];
121 if(!PVUnk_count.isAvailable()) PVUnk_count(0) = nvtc[4];
122 } // m_addPVCountsByType
123
124 // decorate PVs with track counts
125 // (needed if track collection will be thinned)
126 if ( m_addNTracksToPVs ) {
127 SG::WriteDecorHandle<xAOD::VertexContainer, int> d_nPVTracks(m_d_nPVTracks, ctx);
128 if(!d_nPVTracks.isAvailable()){
129 for (auto vtx : *vertices) {
130 d_nPVTracks(*vtx) = (int)vtx->nTrackParticles();
131 }
132 }
133 } // m_addNTracksToPVs
134
135 // decorate PVs with sqrt(sum(pt^2)) of tracks
136 // (needed if track collection will be thinned)
137 if ( m_addSqrtPt2SumToPVs ) {
138 SG::WriteDecorHandle<xAOD::VertexContainer, float> d_pvSqrtPt2Sum(m_OrigSqrtPt2Sum, ctx);
139 if(!d_pvSqrtPt2Sum.isAvailable()){
140 for (auto vtx : *vertices) {
141 float sqrtPt2Sum(0.);
142 for (auto tp : vtx->trackParticleLinks()) {
143 sqrtPt2Sum += std::sqrt(pow((*tp)->pt(),2));
144 }
145 d_pvSqrtPt2Sum(*vtx) = sqrtPt2Sum;
146 }
147 }
148 } // m_addSqrtPt2SumToPVs
149 }
150
151 if(!m_TrackContainername.empty()){
152 SG::ReadHandle<xAOD::TrackParticleContainer> tracks(m_TrackContainername, ctx);
153 SG::WriteDecorHandle<xAOD::EventInfo, int> track_count(m_OrigNTracksKeys, ctx);
154 if(!track_count.isAvailable()) track_count(0) = tracks->size();
155 }
156 if(!m_TrackContainerLRTname.empty()){
157 SG::ReadHandle<xAOD::TrackParticleContainer> tracks(m_TrackContainerLRTname, ctx);
158 SG::WriteDecorHandle<xAOD::EventInfo, int> track_count(m_OrigNTracksLRTKeys, ctx);
159 if(!track_count.isAvailable()) track_count(0) = tracks->size();
160 }
161
162 return StatusCode::SUCCESS;
163 }
constexpr int pow(int base, int exp) noexcept
SG::WriteDecorHandleKey< xAOD::EventInfo > m_OrigPVNTracks
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_d_nPVTracks
SG::WriteDecorHandleKey< xAOD::EventInfo > m_OrigNTracksKeys
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_OrigSqrtPt2Sum
SG::WriteDecorHandleKey< xAOD::EventInfo > m_OrigNtypeUnknown
SG::WriteDecorHandleKey< xAOD::EventInfo > m_OrigNtype0
SG::WriteDecorHandleKey< xAOD::EventInfo > m_OrigNtype3
SG::WriteDecorHandleKey< xAOD::EventInfo > m_OrigNTracksLRTKeys
SG::WriteDecorHandleKey< xAOD::EventInfo > m_OrigNtype1
SG::WriteDecorHandleKey< xAOD::EventInfo > m_OrigNtype2
VertexType
Vertex types.
setRawEt setRawPhi int

◆ initialize()

StatusCode DerivationFramework::AugOriginalCounts::initialize ( )
overridevirtual

Definition at line 36 of file AugOriginalCounts.cxx.

37 {
41
42 if(!m_PVContainername.empty()){
43 std::string pvstring = "EventInfo.OriginalCount_";
44 pvstring += m_PVContainername.key();
45 m_OrigPVNTracks = std::move(pvstring);
46 ATH_CHECK(m_OrigPVNTracks.initialize());
47 }
48 if ( m_addPVCountsByType ) {
49 std::string pv0string = "EventInfo.OriginalCount_type0_"+m_PVContainername.key();
50 std::string pv1string = "EventInfo.OriginalCount_type1_"+m_PVContainername.key();
51 std::string pv2string = "EventInfo.OriginalCount_type2_"+m_PVContainername.key();
52 std::string pv3string = "EventInfo.OriginalCount_type3_"+m_PVContainername.key();
53 std::string pvUstring = "EventInfo.OriginalCount_typeUnknown_"+m_PVContainername.key();
54 m_OrigNtype0 = std::move(pv0string);
55 m_OrigNtype1 = std::move(pv1string);
56 m_OrigNtype2 = std::move(pv2string);
57 m_OrigNtype3 = std::move(pv3string);
58 m_OrigNtypeUnknown = std::move(pvUstring);
59 ATH_CHECK(m_OrigNtype0.initialize());
60 ATH_CHECK(m_OrigNtype1.initialize());
61 ATH_CHECK(m_OrigNtype2.initialize());
62 ATH_CHECK(m_OrigNtype3.initialize());
63 ATH_CHECK(m_OrigNtypeUnknown.initialize());
64 }
66 std::string trackcon = m_PVContainername.key();
67 trackcon += ".OriginalCount_";
68 trackcon += m_TrackContainername.key();
69 m_OrigSqrtPt2Sum = std::move(trackcon);
70 ATH_CHECK(m_OrigSqrtPt2Sum.initialize());
71 }
72 if ( m_addNTracksToPVs ) {
73 std::string name = m_PVContainername.key();
74 name+= ".OrigNTracks";
75 m_d_nPVTracks = std::move(name);
76 ATH_CHECK(m_d_nPVTracks.initialize());
77 }
78 if(!m_TrackContainername.empty()){
79 m_OrigNTracksKeys = "EventInfo.OriginalCount_" + m_TrackContainername.key();
80 ATH_CHECK(m_OrigNTracksKeys.initialize());
81 }
82 if(!m_TrackContainerLRTname.empty()){
83 m_OrigNTracksLRTKeys = "EventInfo.OriginalCount_" + m_TrackContainerLRTname.key();
84 ATH_CHECK(m_OrigNTracksLRTKeys.initialize());
85 }
86 return StatusCode::SUCCESS;
87 }
#define ATH_CHECK
Evaluate an expression and check for errors.

Member Data Documentation

◆ m_addNTracksToPVs

bool DerivationFramework::AugOriginalCounts::m_addNTracksToPVs
private

Definition at line 87 of file AugOriginalCounts.h.

◆ m_addPVCountsByType

bool DerivationFramework::AugOriginalCounts::m_addPVCountsByType
private

Definition at line 86 of file AugOriginalCounts.h.

◆ m_addSqrtPt2SumToPVs

bool DerivationFramework::AugOriginalCounts::m_addSqrtPt2SumToPVs
private

Definition at line 88 of file AugOriginalCounts.h.

◆ m_d_nPVTracks

SG::WriteDecorHandleKey<xAOD::VertexContainer> DerivationFramework::AugOriginalCounts::m_d_nPVTracks {this, "DO_NOT_SET9", "", "internal property"}
private

Definition at line 82 of file AugOriginalCounts.h.

82{this, "DO_NOT_SET9", "", "internal property"};

◆ m_OrigNTracksKeys

SG::WriteDecorHandleKey<xAOD::EventInfo> DerivationFramework::AugOriginalCounts::m_OrigNTracksKeys {this, "DO_NOT_SET2", "", "internal property"}
private

Definition at line 73 of file AugOriginalCounts.h.

73{this, "DO_NOT_SET2", "", "internal property"};

◆ m_OrigNTracksLRTKeys

SG::WriteDecorHandleKey<xAOD::EventInfo> DerivationFramework::AugOriginalCounts::m_OrigNTracksLRTKeys {this, "DO_NOT_SET22", "", "internal property"}
private

Definition at line 74 of file AugOriginalCounts.h.

74{this, "DO_NOT_SET22", "", "internal property"};

◆ m_OrigNtype0

SG::WriteDecorHandleKey<xAOD::EventInfo> DerivationFramework::AugOriginalCounts::m_OrigNtype0 {this, "DO_NOT_SET3", "", "internal property"}
private

Definition at line 75 of file AugOriginalCounts.h.

75{this, "DO_NOT_SET3", "", "internal property"};

◆ m_OrigNtype1

SG::WriteDecorHandleKey<xAOD::EventInfo> DerivationFramework::AugOriginalCounts::m_OrigNtype1 {this, "DO_NOT_SET4", "", "internal property"}
private

Definition at line 76 of file AugOriginalCounts.h.

76{this, "DO_NOT_SET4", "", "internal property"};

◆ m_OrigNtype2

SG::WriteDecorHandleKey<xAOD::EventInfo> DerivationFramework::AugOriginalCounts::m_OrigNtype2 {this, "DO_NOT_SET5", "", "internal property"}
private

Definition at line 77 of file AugOriginalCounts.h.

77{this, "DO_NOT_SET5", "", "internal property"};

◆ m_OrigNtype3

SG::WriteDecorHandleKey<xAOD::EventInfo> DerivationFramework::AugOriginalCounts::m_OrigNtype3 {this, "DO_NOT_SET6", "", "internal property"}
private

Definition at line 78 of file AugOriginalCounts.h.

78{this, "DO_NOT_SET6", "", "internal property"};

◆ m_OrigNtypeUnknown

SG::WriteDecorHandleKey<xAOD::EventInfo> DerivationFramework::AugOriginalCounts::m_OrigNtypeUnknown {this, "DO_NOT_SET7", "", "internal property"}
private

Definition at line 79 of file AugOriginalCounts.h.

79{this, "DO_NOT_SET7", "", "internal property"};

◆ m_OrigPVNTracks

SG::WriteDecorHandleKey<xAOD::EventInfo> DerivationFramework::AugOriginalCounts::m_OrigPVNTracks {this, "DO_NOT_SET1", "", "internal property"}
private

Definition at line 72 of file AugOriginalCounts.h.

72{this, "DO_NOT_SET1", "", "internal property"};

◆ m_OrigSqrtPt2Sum

SG::WriteDecorHandleKey<xAOD::VertexContainer> DerivationFramework::AugOriginalCounts::m_OrigSqrtPt2Sum {this, "DO_NOT_SET8", "", "internal property"}
private

Definition at line 81 of file AugOriginalCounts.h.

81{this, "DO_NOT_SET8", "", "internal property"};

◆ m_PVContainername

SG::ReadHandleKey<xAOD::VertexContainer> DerivationFramework::AugOriginalCounts::m_PVContainername
private

Definition at line 85 of file AugOriginalCounts.h.

◆ m_TrackContainerLRTname

SG::ReadHandleKey<xAOD::TrackParticleContainer> DerivationFramework::AugOriginalCounts::m_TrackContainerLRTname
private

Definition at line 84 of file AugOriginalCounts.h.

◆ m_TrackContainername

SG::ReadHandleKey<xAOD::TrackParticleContainer> DerivationFramework::AugOriginalCounts::m_TrackContainername
private

Definition at line 83 of file AugOriginalCounts.h.


The documentation for this class was generated from the following files: