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

#include <Thin_vtxTrk.h>

Inheritance diagram for DerivationFramework::Thin_vtxTrk:
Collaboration diagram for DerivationFramework::Thin_vtxTrk:

Public Member Functions

 Thin_vtxTrk (const std::string &t, const std::string &n, const IInterface *p)
 ~Thin_vtxTrk ()
StatusCode initialize ()
StatusCode finalize ()
virtual StatusCode doThinning (const EventContext &ctx) const

Private Attributes

StringProperty m_streamName { this, "StreamName", "", "Name of the stream being thinned" }
std::atomic< unsigned int > m_ntot
std::atomic< unsigned int > m_npass
double m_acceptanceR
std::atomic< unsigned int > m_nVtxTot
std::atomic< unsigned int > m_nVtxPass
SG::ThinningHandleKey< xAOD::TrackParticleContainerm_trackParticleContainerName
SG::ThinningHandleKeyArray< xAOD::VertexContainerm_vertexContainerName
std::vector< std::string > m_passFlags
SG::ReadDecorHandleKeyArray< xAOD::VertexContainerm_passArray {this, "INTERNALARRAY", {}}
bool m_thinTracks
bool m_noFlags

Detailed Description

Definition at line 29 of file Thin_vtxTrk.h.

Constructor & Destructor Documentation

◆ Thin_vtxTrk()

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

Definition at line 19 of file Thin_vtxTrk.cxx.

19 :
20 base_class(t,n,p),
21 m_ntot(0),
22 m_npass(0),
23 m_acceptanceR(-1.), // Do not add tracks within a cone from the vertex by default
24 m_nVtxTot(0),
25 m_nVtxPass(0),
26 m_noFlags(false)
27{
28 declareProperty("TrackParticleContainerName", m_trackParticleContainerName = "InDetTrackParticles");
29 declareProperty("VertexContainerNames" , m_vertexContainerName);
30 declareProperty("PassFlags" , m_passFlags);
31 declareProperty("AcceptanceRadius" , m_acceptanceR);
32 declareProperty("IgnoreFlags" , m_noFlags);
33 declareProperty("ThinTracks" , m_thinTracks = true);
34}
std::atomic< unsigned int > m_nVtxTot
Definition Thin_vtxTrk.h:41
std::atomic< unsigned int > m_npass
Definition Thin_vtxTrk.h:39
std::atomic< unsigned int > m_nVtxPass
Definition Thin_vtxTrk.h:41
std::vector< std::string > m_passFlags
Definition Thin_vtxTrk.h:45
std::atomic< unsigned int > m_ntot
Definition Thin_vtxTrk.h:39
SG::ThinningHandleKey< xAOD::TrackParticleContainer > m_trackParticleContainerName
Definition Thin_vtxTrk.h:43
SG::ThinningHandleKeyArray< xAOD::VertexContainer > m_vertexContainerName
Definition Thin_vtxTrk.h:44

◆ ~Thin_vtxTrk()

DerivationFramework::Thin_vtxTrk::~Thin_vtxTrk ( )
default

Member Function Documentation

◆ doThinning()

StatusCode DerivationFramework::Thin_vtxTrk::doThinning ( const EventContext & ctx) const
virtual

Definition at line 88 of file Thin_vtxTrk.cxx.

89{
90 // Retrieve main TrackParticle collection
91 SG::ThinningHandle<xAOD::TrackParticleContainer> importedTrackParticles(m_trackParticleContainerName, ctx);
92
93 // Check the event contains tracks
94 unsigned int nTracks = importedTrackParticles->size();
95 if (nTracks==0) return StatusCode::SUCCESS;
96
97 // Set up a trackMask with the same entries as the full TrackParticle collection
98 std::vector<bool> trackMask(nTracks,false); // default: don't keep any tracks
99 m_ntot += nTracks;
100 int nVtxTot =0;
101 int nVtxPass=0;
102
103 std::unordered_map<std::string, SG::ReadDecorHandle<xAOD::VertexContainer, Char_t>> handles;
104 handles.reserve(m_passArray.size());
105 for(const auto &key : m_passArray){
106 auto it = handles.emplace(std::piecewise_construct, std::forward_as_tuple(key.key()), std::forward_as_tuple(key, ctx));
107 if(!(*it.first).second.isPresent()) return StatusCode::FAILURE;
108 }
109
110 // retieve vertex
111 for(const auto& name : m_vertexContainerName){
112 SG::ThinningHandle<xAOD::VertexContainer> vertexContainer(name, ctx);
113 std::vector<bool> vtxMask(vertexContainer->size(), false); // default: don't keep any vertices
114
115 // loop over vertices
116 int k = 0;
117 for(auto vtxItr = vertexContainer->begin(); vtxItr!=vertexContainer->end(); ++vtxItr, ++k) {
118 const xAOD::Vertex* vtx = *vtxItr;
119 nVtxTot++;
120
121 // check if the vertex passed the required selections criteria
122 bool passed = false;
123 for(std::vector<std::string>::const_iterator flagItr = m_passFlags.begin(); flagItr!=m_passFlags.end(); ++flagItr) {
124 std::string lookupstr = name.key() + '.' + (*flagItr);
125 const auto& handle = handles.at(lookupstr);
126 if(handle(*vtx) != 0) {
127 passed = true;
128 break;
129 }
130 } // end of loop over flags
131
132 if(passed || m_noFlags) {
133 // vertex passed the selection
134 vtxMask[k] = true;
135 nVtxPass++;
136
137 // Add tracks according to DR selection
138 if(m_acceptanceR > 0.){
139
140 // determine the sum of the tracks at vertex as centre for the cone
141 TLorentzVector centreCandidate;
142 for(uint j=0; j<vtx->nTrackParticles(); ++j) {
143 centreCandidate += vtx->trackParticle(j)->p4();
144 }
145
146 for(uint i=0; i<nTracks; ++i) {
147 if(!trackMask[i]) { // do this only for tracks that haven't been selected, yet
148 const xAOD::TrackParticle* track = (*importedTrackParticles)[i];
149 if(centreCandidate.DeltaR(track->p4()) < m_acceptanceR) trackMask[i]= true;
150 }
151 }
152 }// end adding tracks according to DR selection
153
154 if(m_thinTracks) {
155 // loop over all tracks
156 for(uint i=0; i<nTracks; ++i) {
157 if(!trackMask[i]) { // do this only for tracks that haven't been selected, yet
158 const xAOD::TrackParticle* track = (*importedTrackParticles)[i];
159 // loop over tracks at vertex
160 for(uint j=0; j<vtx->nTrackParticles(); ++j) {
161 if(vtx->trackParticle(j) == track) {
162 trackMask[i] = true; // accept track
163 }
164 } // end of loop over tracks at vertex
165 }
166 } // end of loop over all tracks
167 }
168 }
169 } // end of loop over vertices
170
171 // Execute the thinning service based on the vtxMask.
172 vertexContainer.keep(vtxMask);
173 }
174
175 // Count up the trackMask contents
176 m_npass += std::accumulate(trackMask.begin(), trackMask.end(), 0);
177 m_nVtxTot += nVtxTot;
178 m_nVtxPass+= nVtxPass;
179 if(m_thinTracks || m_acceptanceR > 0.) {
180 // Execute the thinning service based on the trackMask. Finish.
181 importedTrackParticles.keep(trackMask);
182 }
183
184 return StatusCode::SUCCESS;
185}
bool passed(DecisionID id, const DecisionIDContainer &)
checks if required decision ID is in the set of IDs in the container
unsigned int uint
SG::ReadDecorHandleKeyArray< xAOD::VertexContainer > m_passArray
Definition Thin_vtxTrk.h:46
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
size_t nTrackParticles() const
Get the number of tracks associated with this vertex.
const TrackParticle * trackParticle(size_t i) const
Get the pointer to a given track that was used in vertex reco.
virtual void handle(const Incident &inc)
Handle end of run incidents to save the metadata at that point.
float j(const xAOD::IParticle &, const xAOD::TrackMeasurementValidation &hit, const Eigen::Matrix3d &jab_inv)
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.

◆ finalize()

StatusCode DerivationFramework::Thin_vtxTrk::finalize ( )

Definition at line 78 of file Thin_vtxTrk.cxx.

79{
80 ATH_MSG_VERBOSE("finalize() ...");
81 ATH_MSG_INFO("Processed "<< m_ntot <<" tracks, "<< m_npass<< " were retained ");
82 ATH_MSG_INFO("Processed "<< m_nVtxTot <<" vertices, "<< m_nVtxPass<< " were retained ");
83
84 return StatusCode::SUCCESS;
85}
#define ATH_MSG_INFO(x)
#define ATH_MSG_VERBOSE(x)

◆ initialize()

StatusCode DerivationFramework::Thin_vtxTrk::initialize ( )

Definition at line 40 of file Thin_vtxTrk.cxx.

41{
42 // Decide which collections need to be checked for ID TrackParticles
43 ATH_MSG_VERBOSE("initialize() ...");
45
46
47 if( m_noFlags){
48 ATH_MSG_INFO("IgnoreFlags is set, all vertices in the container will be kept");
49 }
50
51 if( ! m_noFlags){
52 if (m_passFlags.empty()) {
53 ATH_MSG_FATAL("No pass flags provided for thinning.");
54 return StatusCode::FAILURE;
55 } else {
56 for(auto itr = m_passFlags.begin(); itr!=m_passFlags.end(); ++itr) {
57 ATH_MSG_INFO("Vertices must pass the \"" << *itr << "\" selection");
58 }
59 }
60 }
61
62 if (m_acceptanceR > 0.) {
63 ATH_MSG_INFO("Extra tracks must be within cone of "<<m_acceptanceR<<" from vertex candidate.");
64 }
65
66 for(auto &handle : m_vertexContainerName){
67 ATH_CHECK(handle.initialize(m_streamName));
68 }
69 for(const auto &tracknames : m_vertexContainerName){
70 for(const auto &str : m_passFlags){
71 m_passArray.emplace_back(tracknames.key() + '.' + str);
72 }
73 }
74 ATH_CHECK(m_passArray.initialize());
75 return StatusCode::SUCCESS;
76}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_FATAL(x)

Member Data Documentation

◆ m_acceptanceR

double DerivationFramework::Thin_vtxTrk::m_acceptanceR
private

Definition at line 40 of file Thin_vtxTrk.h.

◆ m_noFlags

bool DerivationFramework::Thin_vtxTrk::m_noFlags
private

Definition at line 48 of file Thin_vtxTrk.h.

◆ m_npass

std::atomic<unsigned int> DerivationFramework::Thin_vtxTrk::m_npass
private

Definition at line 39 of file Thin_vtxTrk.h.

◆ m_ntot

std::atomic<unsigned int> DerivationFramework::Thin_vtxTrk::m_ntot
mutableprivate

Definition at line 39 of file Thin_vtxTrk.h.

◆ m_nVtxPass

std::atomic<unsigned int> DerivationFramework::Thin_vtxTrk::m_nVtxPass
private

Definition at line 41 of file Thin_vtxTrk.h.

◆ m_nVtxTot

std::atomic<unsigned int> DerivationFramework::Thin_vtxTrk::m_nVtxTot
mutableprivate

Definition at line 41 of file Thin_vtxTrk.h.

◆ m_passArray

SG::ReadDecorHandleKeyArray<xAOD::VertexContainer> DerivationFramework::Thin_vtxTrk::m_passArray {this, "INTERNALARRAY", {}}
private

Definition at line 46 of file Thin_vtxTrk.h.

46{this, "INTERNALARRAY", {}};

◆ m_passFlags

std::vector<std::string> DerivationFramework::Thin_vtxTrk::m_passFlags
private

Definition at line 45 of file Thin_vtxTrk.h.

◆ m_streamName

StringProperty DerivationFramework::Thin_vtxTrk::m_streamName { this, "StreamName", "", "Name of the stream being thinned" }
private

Definition at line 38 of file Thin_vtxTrk.h.

38{ this, "StreamName", "", "Name of the stream being thinned" };

◆ m_thinTracks

bool DerivationFramework::Thin_vtxTrk::m_thinTracks
private

Definition at line 47 of file Thin_vtxTrk.h.

◆ m_trackParticleContainerName

SG::ThinningHandleKey<xAOD::TrackParticleContainer> DerivationFramework::Thin_vtxTrk::m_trackParticleContainerName
private

Definition at line 43 of file Thin_vtxTrk.h.

◆ m_vertexContainerName

SG::ThinningHandleKeyArray<xAOD::VertexContainer> DerivationFramework::Thin_vtxTrk::m_vertexContainerName
private

Definition at line 44 of file Thin_vtxTrk.h.


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