ATLAS Offline Software
AugOriginalCounts.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
3 */
4 
10 #include "AugOriginalCounts.h"
12 #include "GaudiKernel/EventContext.h"
13 
14 using namespace xAOD;
15 namespace DerivationFramework {
16 
17  AugOriginalCounts::AugOriginalCounts(const std::string& t,
18  const std::string& n,
19  const IInterface* p) :
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  }
35 
37  {
41 
42  if(!m_PVContainername.empty()){
43  std::string pvstring = "EventInfo.OriginalCount_";
44  pvstring += m_PVContainername.key();
45  m_OrigPVNTracks = std::move(pvstring);
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);
64  }
65  if ( m_addSqrtPt2SumToPVs ) {
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  }
79  m_OrigNTracksKeys = "EventInfo.OriginalCount_" + m_TrackContainername.key();
81  }
83  m_OrigNTracksLRTKeys = "EventInfo.OriginalCount_" + m_TrackContainerLRTname.key();
85  }
86  return StatusCode::SUCCESS;
87  }
88 
90  {
91 
92  const EventContext& ctx = Gaudi::Hive::currentContext();
93 
94  if(!m_PVContainername.empty()){
95 
98  if(!PV_count.isAvailable()) PV_count(0) = vertices->size();
99 
100  if ( m_addPVCountsByType ) {
106 
107  // now count
108  constexpr int nvtypes = 5;
109  int nvtc[] = {0, 0, 0, 0, 0};
110  for (auto vtx : *vertices) {
111  VxType::VertexType vt = vtx->vertexType();
112  if ( vt >=0 && vt < nvtypes ) {
113  nvtc[vt]++; // vertex types 0 - 3
114  } else {
115  nvtc[nvtypes-1]++; // unknown
116  }
117  }
118  if(!PV0_count.isAvailable()) PV0_count(0) = nvtc[0];
119  if(!PV1_count.isAvailable()) PV1_count(0) = nvtc[1];
120  if(!PV2_count.isAvailable()) PV2_count(0) = nvtc[2];
121  if(!PV3_count.isAvailable()) PV3_count(0) = nvtc[3];
122  if(!PVUnk_count.isAvailable()) PVUnk_count(0) = nvtc[4];
123  } // m_addPVCountsByType
124 
125  // decorate PVs with track counts
126  // (needed if track collection will be thinned)
127  if ( m_addNTracksToPVs ) {
129  if(!d_nPVTracks.isAvailable()){
130  for (auto vtx : *vertices) {
131  d_nPVTracks(*vtx) = (int)vtx->nTrackParticles();
132  }
133  }
134  } // m_addNTracksToPVs
135 
136  // decorate PVs with sqrt(sum(pt^2)) of tracks
137  // (needed if track collection will be thinned)
138  if ( m_addSqrtPt2SumToPVs ) {
140  if(!d_pvSqrtPt2Sum.isAvailable()){
141  for (auto vtx : *vertices) {
142  float sqrtPt2Sum(0.);
143  for (auto tp : vtx->trackParticleLinks()) {
144  sqrtPt2Sum += std::sqrt(pow((*tp)->pt(),2));
145  }
146  d_pvSqrtPt2Sum(*vtx) = sqrtPt2Sum;
147  }
148  }
149  } // m_addSqrtPt2SumToPVs
150  }
151 
155  if(!track_count.isAvailable()) track_count(0) = tracks->size();
156  }
160  if(!track_count.isAvailable()) track_count(0) = tracks->size();
161  }
162 
163  return StatusCode::SUCCESS;
164  }
165 }
DerivationFramework::AugOriginalCounts::m_PVContainername
SG::ReadHandleKey< xAOD::VertexContainer > m_PVContainername
Definition: AugOriginalCounts.h:85
SG::WriteDecorHandle::isAvailable
bool isAvailable()
Test to see if this variable exists in the store, for the referenced object.
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
DerivationFramework::AugOriginalCounts::m_OrigPVNTracks
SG::WriteDecorHandleKey< xAOD::EventInfo > m_OrigPVNTracks
Definition: AugOriginalCounts.h:72
ParticleTest.tp
tp
Definition: ParticleTest.py:25
xAOD
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
Definition: ICaloAffectedTool.h:24
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
DerivationFramework::AugOriginalCounts::m_OrigNtype1
SG::WriteDecorHandleKey< xAOD::EventInfo > m_OrigNtype1
Definition: AugOriginalCounts.h:76
xAOD::VxType::VertexType
VertexType
Vertex types.
Definition: TrackingPrimitives.h:570
DerivationFramework::AugOriginalCounts::initialize
virtual StatusCode initialize() override
Definition: AugOriginalCounts.cxx:36
DerivationFramework::AugOriginalCounts::m_addNTracksToPVs
bool m_addNTracksToPVs
Definition: AugOriginalCounts.h:87
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
DerivationFramework::AugOriginalCounts::m_OrigNTracksLRTKeys
SG::WriteDecorHandleKey< xAOD::EventInfo > m_OrigNTracksLRTKeys
Definition: AugOriginalCounts.h:74
DerivationFramework::AugOriginalCounts::m_OrigNtypeUnknown
SG::WriteDecorHandleKey< xAOD::EventInfo > m_OrigNtypeUnknown
Definition: AugOriginalCounts.h:79
beamspotman.n
n
Definition: beamspotman.py:729
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition: StoreGate/StoreGate/WriteDecorHandle.h:100
DerivationFramework::AugOriginalCounts::m_addPVCountsByType
bool m_addPVCountsByType
Definition: AugOriginalCounts.h:86
WriteDecorHandle.h
Handle class for adding a decoration to an object.
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
DerivationFramework::AugOriginalCounts::m_OrigNtype3
SG::WriteDecorHandleKey< xAOD::EventInfo > m_OrigNtype3
Definition: AugOriginalCounts.h:78
DerivationFramework
THE reconstruction tool.
Definition: ParticleSortingAlg.h:24
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
DerivationFramework::AugOriginalCounts::addBranches
virtual StatusCode addBranches() const override
Main method called for each event.
Definition: AugOriginalCounts.cxx:89
DerivationFramework::AugOriginalCounts::m_d_nPVTracks
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_d_nPVTracks
Definition: AugOriginalCounts.h:82
DerivationFramework::AugOriginalCounts::m_addSqrtPt2SumToPVs
bool m_addSqrtPt2SumToPVs
Definition: AugOriginalCounts.h:88
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
DerivationFramework::AugOriginalCounts::m_OrigNTracksKeys
SG::WriteDecorHandleKey< xAOD::EventInfo > m_OrigNTracksKeys
Definition: AugOriginalCounts.h:73
DerivationFramework::AugOriginalCounts::m_OrigNtype2
SG::WriteDecorHandleKey< xAOD::EventInfo > m_OrigNtype2
Definition: AugOriginalCounts.h:77
DerivationFramework::AugOriginalCounts::m_OrigNtype0
SG::WriteDecorHandleKey< xAOD::EventInfo > m_OrigNtype0
Definition: AugOriginalCounts.h:75
AugOriginalCounts.h
Augmentation with primary vertex counts (before thinning)
validateBDTTau.vt
vt
Definition: validateBDTTau.py:43
DerivationFramework::AugOriginalCounts::m_TrackContainerLRTname
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_TrackContainerLRTname
Definition: AugOriginalCounts.h:84
DerivationFramework::AugOriginalCounts::m_OrigSqrtPt2Sum
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_OrigSqrtPt2Sum
Definition: AugOriginalCounts.h:81
SG::WriteDecorHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
DerivationFramework::AugOriginalCounts::m_TrackContainername
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_TrackContainername
Definition: AugOriginalCounts.h:83
pow
constexpr int pow(int base, int exp) noexcept
Definition: ap_fixedTest.cxx:15
SG::AllowEmpty
@ AllowEmpty
Definition: StoreGate/StoreGate/VarHandleKey.h:30
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.