Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Private Types | Private Attributes | List of all members
DerivationFramework::PseudoTrackSelector Class Reference

Class-algorithm for pseudo track selection. More...

#include <PseudoTrackSelector.h>

Inheritance diagram for DerivationFramework::PseudoTrackSelector:
Collaboration diagram for DerivationFramework::PseudoTrackSelector:

Public Member Functions

 PseudoTrackSelector (const std::string &t, const std::string &n, const IInterface *p)
 Standard Algotithm methods:
More...
 
virtual ~PseudoTrackSelector ()
 
StatusCode initialize ()
 
StatusCode execute ()
 
StatusCode finalize ()
 
virtual StatusCode addBranches () const
 

Protected Member Functions

void fillRecoReplacedWithPseudo (const xAOD::TrackParticleContainer *recoTrackParticleCol, const xAOD::TrackParticleContainer *pseudoTrackParticleCol, xAOD::TrackParticleContainer *outputCol, bool onlyFromB=false, bool onlyNotFromB=false) const
 Output track collection. More...
 
void fillRecoPlusPseudo (const xAOD::TrackParticleContainer *recoTrackParticleCol, const xAOD::TrackParticleContainer *pseudoTrackParticleCol, xAOD::TrackParticleContainer *outputCol, bool onlyFromB=false, bool onlyNotFromB=false) const
 
void fillRecoNoFakes (const xAOD::TrackParticleContainer *recoTrackParticleCol, xAOD::TrackParticleContainer *outputCol, bool onlyFromB=false, bool onlyNotFromB=false) const
 

Static Protected Member Functions

static const xAOD::TruthParticlegetTruth (const xAOD::TrackParticle *track)
 

Protected Attributes

SG::ReadHandleKey< xAOD::TrackParticleContainerm_in_recoTrackParticleLocation
 Protected data:
More...
 
SG::ReadHandleKey< xAOD::TrackParticleContainerm_in_pseudoTrackParticleLocation
 Reco track collection. More...
 
SG::WriteHandleKey< xAOD::TrackParticleContainerm_out_recoReplacedWithPseudo
 Pseudo track collection. More...
 
SG::WriteHandleKey< xAOD::TrackParticleContainerm_out_recoReplacedWithPseudoFromB
 Output track collection. More...
 
SG::WriteHandleKey< xAOD::TrackParticleContainerm_out_recoReplacedWithPseudoNotFromB
 Output track collection. More...
 
SG::WriteHandleKey< xAOD::TrackParticleContainerm_out_recoPlusPseudo
 Output track collection. More...
 
SG::WriteHandleKey< xAOD::TrackParticleContainerm_out_recoPlusPseudoFromB
 Output track collection. More...
 
SG::WriteHandleKey< xAOD::TrackParticleContainerm_out_recoPlusPseudoNotFromB
 Output track collection. More...
 
SG::WriteHandleKey< xAOD::TrackParticleContainerm_out_recoNoFakes
 Output track collection. More...
 
SG::WriteHandleKey< xAOD::TrackParticleContainerm_out_recoNoFakesFromB
 Output track collection. More...
 
SG::WriteHandleKey< xAOD::TrackParticleContainerm_out_recoNoFakesNotFromB
 Output track collection. More...
 

Private Types

typedef ElementLink< xAOD::TruthParticleContainerTruthLink
 

Private Attributes

ToolHandle< InDet::IInDetTrackTruthOriginToolm_trackOriginTool {this, "trackTruthOriginTool", "InDet::InDetTrackTruthOriginTool", "truth track origin tool"}
 

Detailed Description

Class-algorithm for pseudo track selection.

Definition at line 31 of file PseudoTrackSelector.h.

Member Typedef Documentation

◆ TruthLink

Definition at line 85 of file PseudoTrackSelector.h.

Constructor & Destructor Documentation

◆ PseudoTrackSelector()

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

Standard Algotithm methods:

Reco track collection.

Pseudo track collection.

Output track collection.

Output track collection.

Output track collection.

Output track collection.

Output track collection.

Output track collection.

Output track collection.

Output track collection.

Output track collection.

Definition at line 27 of file PseudoTrackSelector.cxx.

29  : base_class(t,n,p)
30  {
31  // The default goal of this selector is to create a track collection from a subset of pseudo tracks
32  declareProperty("RecoTrackParticleLocation", m_in_recoTrackParticleLocation);
33  declareProperty("PseudoTrackParticleLocation", m_in_pseudoTrackParticleLocation);
34  declareProperty("OutputRecoReplacedWithPseudo", m_out_recoReplacedWithPseudo);
35  declareProperty("OutputRecoReplacedWithPseudoFromB", m_out_recoReplacedWithPseudoFromB);
36  declareProperty("OutputRecoReplacedWithPseudoNotFromB", m_out_recoReplacedWithPseudoNotFromB);
37  declareProperty("OutputRecoPlusPseudo", m_out_recoPlusPseudo);
38  declareProperty("OutputRecoPlusPseudoFromB", m_out_recoPlusPseudoFromB);
39  declareProperty("OutputRecoPlusPseudoNotFromB", m_out_recoPlusPseudoNotFromB);
40  declareProperty("OutputRecoNoFakes", m_out_recoNoFakes);
41  declareProperty("OutputRecoNoFakesFromB", m_out_recoNoFakesFromB);
42  declareProperty("OutputRecoNoFakesNotFromB", m_out_recoNoFakesNotFromB);
43  }

◆ ~PseudoTrackSelector()

virtual DerivationFramework::PseudoTrackSelector::~PseudoTrackSelector ( )
inlinevirtual

Definition at line 39 of file PseudoTrackSelector.h.

39 {}

Member Function Documentation

◆ addBranches()

StatusCode DerivationFramework::PseudoTrackSelector::addBranches ( ) const
virtual

Definition at line 76 of file PseudoTrackSelector.cxx.

77  {
78  const EventContext& ctx = Gaudi::Hive::currentContext();
79  std::unique_ptr<xAOD::TrackParticleContainer> outputRecoReplacedWithPseudo = std::make_unique<xAOD::TrackParticleContainer>();
80  std::unique_ptr<xAOD::TrackParticleAuxContainer> outputRecoReplacedWithPseudoAux = std::make_unique<xAOD::TrackParticleAuxContainer>();
81  outputRecoReplacedWithPseudo->setStore(outputRecoReplacedWithPseudoAux.get());
82  std::unique_ptr<xAOD::TrackParticleContainer> outputRecoReplacedWithPseudoFromB = std::make_unique<xAOD::TrackParticleContainer>();
83  std::unique_ptr<xAOD::TrackParticleAuxContainer> outputRecoReplacedWithPseudoFromBAux = std::make_unique<xAOD::TrackParticleAuxContainer>();
84  outputRecoReplacedWithPseudoFromB->setStore(outputRecoReplacedWithPseudoFromBAux.get());
85  std::unique_ptr<xAOD::TrackParticleContainer> outputRecoReplacedWithPseudoNotFromB = std::make_unique<xAOD::TrackParticleContainer>();
86  std::unique_ptr<xAOD::TrackParticleAuxContainer> outputRecoReplacedWithPseudoNotFromBAux = std::make_unique<xAOD::TrackParticleAuxContainer>();
87  outputRecoReplacedWithPseudoNotFromB->setStore(outputRecoReplacedWithPseudoNotFromBAux.get());
88  std::unique_ptr<xAOD::TrackParticleContainer> outputRecoPlusPseudo = std::make_unique<xAOD::TrackParticleContainer>();
89  std::unique_ptr<xAOD::TrackParticleAuxContainer> outputRecoPlusPseudoAux = std::make_unique<xAOD::TrackParticleAuxContainer>();
90  outputRecoPlusPseudo->setStore(outputRecoPlusPseudoAux.get());
91  std::unique_ptr<xAOD::TrackParticleContainer> outputRecoPlusPseudoFromB = std::make_unique<xAOD::TrackParticleContainer>();
92  std::unique_ptr<xAOD::TrackParticleAuxContainer> outputRecoPlusPseudoFromBAux = std::make_unique<xAOD::TrackParticleAuxContainer>();
93  outputRecoPlusPseudoFromB->setStore(outputRecoPlusPseudoFromBAux.get());
94  std::unique_ptr<xAOD::TrackParticleContainer> outputRecoPlusPseudoNotFromB = std::make_unique<xAOD::TrackParticleContainer>();
95  std::unique_ptr<xAOD::TrackParticleAuxContainer> outputRecoPlusPseudoNotFromBAux = std::make_unique<xAOD::TrackParticleAuxContainer>();
96  outputRecoPlusPseudoNotFromB->setStore(outputRecoPlusPseudoNotFromBAux.get());
97  std::unique_ptr<xAOD::TrackParticleContainer> outputRecoNoFakes = std::make_unique<xAOD::TrackParticleContainer>();
98  std::unique_ptr<xAOD::TrackParticleAuxContainer> outputRecoNoFakesAux = std::make_unique<xAOD::TrackParticleAuxContainer>();
99  outputRecoNoFakes->setStore(outputRecoNoFakesAux.get());
100  std::unique_ptr<xAOD::TrackParticleContainer> outputRecoNoFakesFromB = std::make_unique<xAOD::TrackParticleContainer>();
101  std::unique_ptr<xAOD::TrackParticleAuxContainer> outputRecoNoFakesFromBAux = std::make_unique<xAOD::TrackParticleAuxContainer>();
102  outputRecoNoFakesFromB->setStore(outputRecoNoFakesFromBAux.get());
103  std::unique_ptr<xAOD::TrackParticleContainer> outputRecoNoFakesNotFromB = std::make_unique<xAOD::TrackParticleContainer>();
104  std::unique_ptr<xAOD::TrackParticleAuxContainer> outputRecoNoFakesNotFromBAux = std::make_unique<xAOD::TrackParticleAuxContainer>();
105  outputRecoNoFakesNotFromB->setStore(outputRecoNoFakesNotFromBAux.get());
106 
107  // retrieve reco and pseudo tracks
110 
111  // fail if containers not available
112  if (!recoTrackParticleCol.isValid()){
113  ATH_MSG_ERROR( m_in_recoTrackParticleLocation.key() << " not valid!" );
114  return StatusCode::FAILURE;
115  }
116  if (!pseudoTrackParticleCol.isValid()){
117  ATH_MSG_ERROR( m_in_pseudoTrackParticleLocation.key() << " not valid!" );
118  return StatusCode::FAILURE;
119  }
120 
121  // select subset of tracks
122  fillRecoReplacedWithPseudo(recoTrackParticleCol.cptr(), pseudoTrackParticleCol.cptr(), outputRecoReplacedWithPseudo.get());
123  fillRecoReplacedWithPseudo(recoTrackParticleCol.cptr(), pseudoTrackParticleCol.cptr(), outputRecoReplacedWithPseudoFromB.get(), true, false);
124  fillRecoReplacedWithPseudo(recoTrackParticleCol.cptr(), pseudoTrackParticleCol.cptr(), outputRecoReplacedWithPseudoNotFromB.get(), false, true);
125  fillRecoPlusPseudo(recoTrackParticleCol.cptr(), pseudoTrackParticleCol.cptr(), outputRecoPlusPseudo.get());
126  fillRecoPlusPseudo(recoTrackParticleCol.cptr(), pseudoTrackParticleCol.cptr(), outputRecoPlusPseudoFromB.get(), true, false);
127  fillRecoPlusPseudo(recoTrackParticleCol.cptr(), pseudoTrackParticleCol.cptr(), outputRecoPlusPseudoNotFromB.get(), false, true);
128  fillRecoNoFakes(recoTrackParticleCol.cptr(), outputRecoNoFakes.get());
129  fillRecoNoFakes(recoTrackParticleCol.cptr(), outputRecoNoFakesFromB.get(), true, false);
130  fillRecoNoFakes(recoTrackParticleCol.cptr(), outputRecoNoFakesNotFromB.get(), false, true);
131 
132  // Write tracks to store
133  ATH_MSG_DEBUG("outputRecoReplacedWithPseudo has "<<outputRecoReplacedWithPseudo.get()->size()<<" tracks");
135  ATH_CHECK(h_write_recoReplacedWithPseudo.record(std::move(outputRecoReplacedWithPseudo), std::move(outputRecoReplacedWithPseudoAux)));
136  ATH_MSG_DEBUG("wrote "<<m_out_recoReplacedWithPseudo<<" to store");
137 
138  ATH_MSG_DEBUG("outputRecoReplacedWithPseudoFromB has "<<outputRecoReplacedWithPseudoFromB.get()->size()<<" tracks");
140  ATH_CHECK(h_write_recoReplacedWithPseudoFromB.record(std::move(outputRecoReplacedWithPseudoFromB), std::move(outputRecoReplacedWithPseudoFromBAux)));
141  ATH_MSG_DEBUG("wrote "<<m_out_recoReplacedWithPseudoFromB<<" to store");
142 
143  ATH_MSG_DEBUG("outputRecoReplacedWithPseudoNotFromB has "<<outputRecoReplacedWithPseudoNotFromB.get()->size()<<" tracks");
144  SG::WriteHandle<xAOD::TrackParticleContainer> h_write_recoReplacedWithPseudoNotFromB(m_out_recoReplacedWithPseudoNotFromB, ctx);
145  ATH_CHECK(h_write_recoReplacedWithPseudoNotFromB.record(std::move(outputRecoReplacedWithPseudoNotFromB), std::move(outputRecoReplacedWithPseudoNotFromBAux)));
146  ATH_MSG_DEBUG("wrote "<<m_out_recoReplacedWithPseudoNotFromB<<" to store");
147 
148  ATH_MSG_DEBUG("outputRecoPlusPseudo has "<<outputRecoPlusPseudo.get()->size()<<" tracks");
150  ATH_CHECK(h_write_recoPlusPseudo.record(std::move(outputRecoPlusPseudo), std::move(outputRecoPlusPseudoAux)));
151  ATH_MSG_DEBUG("wrote "<<m_out_recoPlusPseudo<<" to store");
152 
153  ATH_MSG_DEBUG("outputRecoPlusPseudoFromB has "<<outputRecoPlusPseudoFromB.get()->size()<<" tracks");
155  ATH_CHECK(h_write_recoPlusPseudoFromB.record(std::move(outputRecoPlusPseudoFromB), std::move(outputRecoPlusPseudoFromBAux)));
156  ATH_MSG_DEBUG("wrote "<<m_out_recoPlusPseudoFromB<<" to store");
157 
158  ATH_MSG_DEBUG("outputRecoPlusPseudoNotFromB has "<<outputRecoPlusPseudoNotFromB.get()->size()<<" tracks");
160  ATH_CHECK(h_write_recoPlusPseudoNotFromB.record(std::move(outputRecoPlusPseudoNotFromB), std::move(outputRecoPlusPseudoNotFromBAux)));
161  ATH_MSG_DEBUG("wrote "<<m_out_recoPlusPseudoNotFromB<<" to store");
162 
163  ATH_MSG_DEBUG("outputRecoNoFakes has "<<outputRecoNoFakes.get()->size()<<" tracks");
165  ATH_CHECK(h_write_recoNoFakes.record(std::move(outputRecoNoFakes), std::move(outputRecoNoFakesAux)));
166  ATH_MSG_DEBUG("wrote "<<m_out_recoNoFakes<<" to store");
167 
168  ATH_MSG_DEBUG("outputRecoNoFakesFromB has "<<outputRecoNoFakesFromB.get()->size()<<" tracks");
170  ATH_CHECK(h_write_recoNoFakesFromB.record(std::move(outputRecoNoFakesFromB), std::move(outputRecoNoFakesFromBAux)));
171  ATH_MSG_DEBUG("wrote "<<m_out_recoNoFakesFromB<<" to store");
172 
173  ATH_MSG_DEBUG("outputRecoNoFakesNotFromB has "<<outputRecoNoFakesNotFromB.get()->size()<<" tracks");
175  ATH_CHECK(h_write_recoNoFakesNotFromB.record(std::move(outputRecoNoFakesNotFromB), std::move(outputRecoNoFakesNotFromBAux)));
176  ATH_MSG_DEBUG("wrote "<<m_out_recoNoFakesNotFromB<<" to store");
177 
178  return StatusCode::SUCCESS;
179  }

◆ execute()

StatusCode DerivationFramework::PseudoTrackSelector::execute ( )

◆ fillRecoNoFakes()

void DerivationFramework::PseudoTrackSelector::fillRecoNoFakes ( const xAOD::TrackParticleContainer recoTrackParticleCol,
xAOD::TrackParticleContainer outputCol,
bool  onlyFromB = false,
bool  onlyNotFromB = false 
) const
protected

Definition at line 339 of file PseudoTrackSelector.cxx.

343  {
344  ATH_MSG_DEBUG("Start fillRecoNoFakes with onlyFromB = "<<onlyFromB<<" and onlyNotFromB = "<<onlyNotFromB);
345  // loop over tracks, accept them and add them into output collection
346  if((recoTrackParticleCol && !recoTrackParticleCol->empty())){
347  ATH_MSG_DEBUG("Size of reco track particle collection " << recoTrackParticleCol->size());
348  int n_saved = 0;
349  static const SG::ConstAccessor< float > acc_truthProb("truthMatchProbability");
350 
351  // loop over tracks
352  for(const auto *const tp_reco: *recoTrackParticleCol){
353  // place cut on truth match probability
354  if (!onlyFromB && !onlyNotFromB){
355  if( acc_truthProb( *tp_reco ) < 0.5) {
356  ATH_MSG_DEBUG("Fake track!");
357  continue;
358  }
359  }
360  int origin = m_trackOriginTool->getTrackOrigin(tp_reco);
361  ATH_MSG_DEBUG("fromB: "<<InDet::TrkOrigin::isFromB(origin));
362  if (onlyFromB && InDet::TrkOrigin::isFromB(origin)){
363  if( acc_truthProb( *tp_reco ) < 0.5) {
364  ATH_MSG_DEBUG("Fake track fromB!");
365  continue;
366  }
367  }
368  if (onlyNotFromB && !InDet::TrkOrigin::isFromB(origin)){
369  if( acc_truthProb( *tp_reco ) < 0.5) {
370  ATH_MSG_DEBUG("Fake track notFromB!");
371  continue;
372  }
373  }
374  // add track into output
375  xAOD::TrackParticle* newTrackParticle = new xAOD::TrackParticle(*tp_reco);
376  outputCol->push_back(newTrackParticle);
377  n_saved++;
378  }
379  ATH_MSG_DEBUG("Size of output track particle collection " << outputCol->size() <<" (sanity: "<<n_saved<<")");
380  }
381  }

◆ fillRecoPlusPseudo()

void DerivationFramework::PseudoTrackSelector::fillRecoPlusPseudo ( const xAOD::TrackParticleContainer recoTrackParticleCol,
const xAOD::TrackParticleContainer pseudoTrackParticleCol,
xAOD::TrackParticleContainer outputCol,
bool  onlyFromB = false,
bool  onlyNotFromB = false 
) const
protected

Definition at line 271 of file PseudoTrackSelector.cxx.

276  {
277  ATH_MSG_DEBUG("Start fillRecoPlusPseudo with onlyFromB = "<<onlyFromB<<" and onlyNotFromB = "<<onlyNotFromB);
278  // loop over tracks, accept them and add them into output collection
279  if((recoTrackParticleCol && !recoTrackParticleCol->empty()) &&
280  (pseudoTrackParticleCol && !pseudoTrackParticleCol->empty())) {
281  ATH_MSG_DEBUG("Size of reco track particle collection " << recoTrackParticleCol->size());
282  ATH_MSG_DEBUG("Size of pseudo track particle collection " << pseudoTrackParticleCol->size());
283  int n_saved = 0;
284  // Start by keeping reco tracks
285  for(const auto *const tp_reco: *recoTrackParticleCol){
286  xAOD::TrackParticle* newTrackParticle = new xAOD::TrackParticle(*tp_reco);
287  outputCol->push_back(newTrackParticle);
288  n_saved++;
289  }
290  // Now add pseudo tracks that are not matched to reco tracks
291  for(const auto *const tp_pseudo: *pseudoTrackParticleCol){
292  bool match_found = false;
293  const xAOD::TruthParticle* truth_pseudo = getTruth(tp_pseudo);
294  for(const auto *const tp_reco: *recoTrackParticleCol){
295  // Get truth particle
296  const xAOD::TruthParticle* truth_reco = getTruth(tp_reco);
297  if (truth_reco){
298  if (truth_reco == truth_pseudo){
299  ATH_MSG_DEBUG("reco track has truth-matched pseudo track!");
300  match_found = true;
301  break;
302  }
303  }
304  else{
305  ATH_MSG_DEBUG("no truth particle for reco track!");
306  }
307  }
308  if(!match_found){
309  ATH_MSG_DEBUG("no match found, so adding pseudo track to output");
310  if(!onlyFromB && !onlyNotFromB){
311  xAOD::TrackParticle* newTrackParticle = new xAOD::TrackParticle(*tp_pseudo);
312  outputCol->push_back(newTrackParticle);
313  n_saved++;
314  ATH_MSG_DEBUG("saving pseudo track");
315  }
316  int origin = m_trackOriginTool->getTrackOrigin(tp_pseudo);
317  ATH_MSG_DEBUG("fromB: "<<InDet::TrkOrigin::isFromB(origin));
318  if(onlyFromB && InDet::TrkOrigin::isFromB(origin)){
319  xAOD::TrackParticle* newTrackParticle = new xAOD::TrackParticle(*tp_pseudo);
320  outputCol->push_back(newTrackParticle);
321  n_saved++;
322  ATH_MSG_DEBUG("saving fromB pseudo track");
323  }
324  if(onlyNotFromB && !InDet::TrkOrigin::isFromB(origin)){
325  xAOD::TrackParticle* newTrackParticle = new xAOD::TrackParticle(*tp_pseudo);
326  outputCol->push_back(newTrackParticle);
327  n_saved++;
328  ATH_MSG_DEBUG("saving notFromB pseudo track");
329  }
330  }
331  else{
332  ATH_MSG_DEBUG("match found so not adding pseudo track to output");
333  }
334  }
335  ATH_MSG_DEBUG("Size of output track particle collection " << outputCol->size() <<" (sanity: "<<n_saved<<")");
336  }
337  }

◆ fillRecoReplacedWithPseudo()

void DerivationFramework::PseudoTrackSelector::fillRecoReplacedWithPseudo ( const xAOD::TrackParticleContainer recoTrackParticleCol,
const xAOD::TrackParticleContainer pseudoTrackParticleCol,
xAOD::TrackParticleContainer outputCol,
bool  onlyFromB = false,
bool  onlyNotFromB = false 
) const
protected

Output track collection.

Protected methods:

Routines that selects the relevant (pseudo) tracks.

Definition at line 185 of file PseudoTrackSelector.cxx.

190  {
191  ATH_MSG_DEBUG("Start fillRecoReplacedWithPseudo with onlyFromB = "<<onlyFromB<<" and onlyNotFromB = "<<onlyNotFromB);
192  // loop over tracks, accept them and add them into output collection
193  if((recoTrackParticleCol && !recoTrackParticleCol->empty()) &&
194  (pseudoTrackParticleCol && !pseudoTrackParticleCol->empty())) {
195  ATH_MSG_DEBUG("Size of reco track particle collection " << recoTrackParticleCol->size());
196  ATH_MSG_DEBUG("Size of pseudo track particle collection " << pseudoTrackParticleCol->size());
197  int n_saved = 0;
198  // loop over reco tracks
199  for(const auto *const tp_reco: *recoTrackParticleCol){
200  // Get truth particle
201  const xAOD::TruthParticle* truth_reco = getTruth(tp_reco);
202  if (truth_reco){
203  bool match_found = false;
204  // loop over pseudo tracks to look for a match
205  for(const auto *const tp_pseudo: *pseudoTrackParticleCol){
206  const xAOD::TruthParticle* truth_pseudo = getTruth(tp_pseudo);
207  if (truth_reco == truth_pseudo){
208  ATH_MSG_DEBUG("reco track has truth-matched pseudo track!");
209  match_found = true;
210  // add pseudo track into output
211  if (!onlyFromB && !onlyNotFromB){
212  xAOD::TrackParticle* newTrackParticle = new xAOD::TrackParticle(*tp_pseudo);
213  outputCol->push_back(newTrackParticle);
214  n_saved++;
215  ATH_MSG_DEBUG("saving pseudo track");
216  }
217  // Check origin of track
218  int origin = m_trackOriginTool->getTrackOrigin(tp_pseudo);
219  ATH_MSG_DEBUG("fromB: "<<InDet::TrkOrigin::isFromB(origin));
220  if (onlyFromB){
221  if (InDet::TrkOrigin::isFromB(origin)){
222  // Track is from B hadron, replace with pseudo track
223  xAOD::TrackParticle* newTrackParticle = new xAOD::TrackParticle(*tp_pseudo);
224  outputCol->push_back(newTrackParticle);
225  n_saved++;
226  ATH_MSG_DEBUG("saving fromB pseudo track");
227  }
228  else{
229  // Track is not from B hadron, keep reco track
230  xAOD::TrackParticle* newTrackParticle = new xAOD::TrackParticle(*tp_reco);
231  outputCol->push_back(newTrackParticle);
232  n_saved++;
233  ATH_MSG_DEBUG("keeping notFromB reco track");
234  }
235  }
236  if (onlyNotFromB){
237  if (!InDet::TrkOrigin::isFromB(origin)){
238  // Track is not from B hadron, replace with pseudo track
239  xAOD::TrackParticle* newTrackParticle = new xAOD::TrackParticle(*tp_pseudo);
240  outputCol->push_back(newTrackParticle);
241  n_saved++;
242  ATH_MSG_DEBUG("saving notFromB pseudo track");
243  }
244  else{
245  // Track is from B hadron, keep reco track
246  xAOD::TrackParticle* newTrackParticle = new xAOD::TrackParticle(*tp_reco);
247  outputCol->push_back(newTrackParticle);
248  n_saved++;
249  ATH_MSG_DEBUG("keeping FromB reco track");
250  }
251  }
252  // Found match and replaced relevant track
253  break;
254  }
255  else{
256  ATH_MSG_VERBOSE("truth-matched pseudo track not found yet...");
257  }
258  }
259  if(!match_found){
260  ATH_MSG_DEBUG("reco track that has truth link DOES NOT have truth-matched pseudo track! :(");
261  }
262  }
263  else{
264  ATH_MSG_DEBUG("no truth particle for reco track!");
265  }
266  }
267  ATH_MSG_DEBUG("Size of output track particle collection " << outputCol->size() <<" (sanity: "<<n_saved<<")");
268  }
269  }

◆ finalize()

StatusCode DerivationFramework::PseudoTrackSelector::finalize ( )

Definition at line 71 of file PseudoTrackSelector.cxx.

72  {
73  return StatusCode::SUCCESS;
74  }

◆ getTruth()

const xAOD::TruthParticle * DerivationFramework::PseudoTrackSelector::getTruth ( const xAOD::TrackParticle track)
staticprotected

Definition at line 383 of file PseudoTrackSelector.cxx.

383  {
384  // create a pointer to a truth particle which will correspond to this track
385  const xAOD::TruthParticle* linkedTruthParticle = nullptr;
386 
387  // if the track doesnt't have a valid truth link, skip to the next track
388  // in practice, all tracks seem to have a truth link, but we need to also
389  // check whether it's valid
390  static const SG::ConstAccessor<TruthLink> truthParticleLinkAcc("truthParticleLink");
391  if ( !truthParticleLinkAcc.isAvailable(*track) ) {
392  return nullptr;
393  }
394 
395  // retrieve the link and check its validity
396  const TruthLink &link = truthParticleLinkAcc(*track);
397 
398  // a missing or invalid link implies truth particle has been dropped from
399  // the truth record at some stage - probably it was a pileup or low pT GEANT
400  // particle.
401  if(!link or !link.isValid()) {
402  return nullptr;
403  }
404 
405  // seems safe to access and return the linked truth particle
406  linkedTruthParticle = (*link);
407  return linkedTruthParticle;
408  }

◆ initialize()

StatusCode DerivationFramework::PseudoTrackSelector::initialize ( )

Member Data Documentation

◆ m_in_pseudoTrackParticleLocation

SG::ReadHandleKey<xAOD::TrackParticleContainer> DerivationFramework::PseudoTrackSelector::m_in_pseudoTrackParticleLocation
protected

Reco track collection.


Definition at line 50 of file PseudoTrackSelector.h.

◆ m_in_recoTrackParticleLocation

SG::ReadHandleKey<xAOD::TrackParticleContainer> DerivationFramework::PseudoTrackSelector::m_in_recoTrackParticleLocation
protected

Protected data:

Definition at line 49 of file PseudoTrackSelector.h.

◆ m_out_recoNoFakes

SG::WriteHandleKey<xAOD::TrackParticleContainer> DerivationFramework::PseudoTrackSelector::m_out_recoNoFakes
protected

Output track collection.

Definition at line 57 of file PseudoTrackSelector.h.

◆ m_out_recoNoFakesFromB

SG::WriteHandleKey<xAOD::TrackParticleContainer> DerivationFramework::PseudoTrackSelector::m_out_recoNoFakesFromB
protected

Output track collection.

Definition at line 58 of file PseudoTrackSelector.h.

◆ m_out_recoNoFakesNotFromB

SG::WriteHandleKey<xAOD::TrackParticleContainer> DerivationFramework::PseudoTrackSelector::m_out_recoNoFakesNotFromB
protected

Output track collection.

Definition at line 59 of file PseudoTrackSelector.h.

◆ m_out_recoPlusPseudo

SG::WriteHandleKey<xAOD::TrackParticleContainer> DerivationFramework::PseudoTrackSelector::m_out_recoPlusPseudo
protected

Output track collection.

Definition at line 54 of file PseudoTrackSelector.h.

◆ m_out_recoPlusPseudoFromB

SG::WriteHandleKey<xAOD::TrackParticleContainer> DerivationFramework::PseudoTrackSelector::m_out_recoPlusPseudoFromB
protected

Output track collection.

Definition at line 55 of file PseudoTrackSelector.h.

◆ m_out_recoPlusPseudoNotFromB

SG::WriteHandleKey<xAOD::TrackParticleContainer> DerivationFramework::PseudoTrackSelector::m_out_recoPlusPseudoNotFromB
protected

Output track collection.

Definition at line 56 of file PseudoTrackSelector.h.

◆ m_out_recoReplacedWithPseudo

SG::WriteHandleKey<xAOD::TrackParticleContainer> DerivationFramework::PseudoTrackSelector::m_out_recoReplacedWithPseudo
protected

Pseudo track collection.

Definition at line 51 of file PseudoTrackSelector.h.

◆ m_out_recoReplacedWithPseudoFromB

SG::WriteHandleKey<xAOD::TrackParticleContainer> DerivationFramework::PseudoTrackSelector::m_out_recoReplacedWithPseudoFromB
protected

Output track collection.

Definition at line 52 of file PseudoTrackSelector.h.

◆ m_out_recoReplacedWithPseudoNotFromB

SG::WriteHandleKey<xAOD::TrackParticleContainer> DerivationFramework::PseudoTrackSelector::m_out_recoReplacedWithPseudoNotFromB
protected

Output track collection.

Definition at line 53 of file PseudoTrackSelector.h.

◆ m_trackOriginTool

ToolHandle< InDet::IInDetTrackTruthOriginTool > DerivationFramework::PseudoTrackSelector::m_trackOriginTool {this, "trackTruthOriginTool", "InDet::InDetTrackTruthOriginTool", "truth track origin tool"}
private

Definition at line 87 of file PseudoTrackSelector.h.


The documentation for this class was generated from the following files:
DerivationFramework::PseudoTrackSelector::m_out_recoNoFakesNotFromB
SG::WriteHandleKey< xAOD::TrackParticleContainer > m_out_recoNoFakesNotFromB
Output track collection.
Definition: PseudoTrackSelector.h:59
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
SG::ConstAccessor< float >
DerivationFramework::PseudoTrackSelector::m_out_recoReplacedWithPseudo
SG::WriteHandleKey< xAOD::TrackParticleContainer > m_out_recoReplacedWithPseudo
Pseudo track collection.
Definition: PseudoTrackSelector.h:51
DerivationFramework::PseudoTrackSelector::m_out_recoReplacedWithPseudoNotFromB
SG::WriteHandleKey< xAOD::TrackParticleContainer > m_out_recoReplacedWithPseudoNotFromB
Output track collection.
Definition: PseudoTrackSelector.h:53
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
DerivationFramework::PseudoTrackSelector::m_trackOriginTool
ToolHandle< InDet::IInDetTrackTruthOriginTool > m_trackOriginTool
Definition: PseudoTrackSelector.h:87
DerivationFramework::PseudoTrackSelector::m_in_recoTrackParticleLocation
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_in_recoTrackParticleLocation
Protected data:
Definition: PseudoTrackSelector.h:49
xAOD::TrackParticle
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Definition: Event/xAOD/xAODTracking/xAODTracking/TrackParticle.h:13
DerivationFramework::PseudoTrackSelector::m_out_recoPlusPseudoNotFromB
SG::WriteHandleKey< xAOD::TrackParticleContainer > m_out_recoPlusPseudoNotFromB
Output track collection.
Definition: PseudoTrackSelector.h:56
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
DerivationFramework::PseudoTrackSelector::fillRecoNoFakes
void fillRecoNoFakes(const xAOD::TrackParticleContainer *recoTrackParticleCol, xAOD::TrackParticleContainer *outputCol, bool onlyFromB=false, bool onlyNotFromB=false) const
Definition: PseudoTrackSelector.cxx:339
beamspotman.n
n
Definition: beamspotman.py:731
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:37
DerivationFramework::PseudoTrackSelector::m_out_recoNoFakesFromB
SG::WriteHandleKey< xAOD::TrackParticleContainer > m_out_recoNoFakesFromB
Output track collection.
Definition: PseudoTrackSelector.h:58
DerivationFramework::PseudoTrackSelector::fillRecoPlusPseudo
void fillRecoPlusPseudo(const xAOD::TrackParticleContainer *recoTrackParticleCol, const xAOD::TrackParticleContainer *pseudoTrackParticleCol, xAOD::TrackParticleContainer *outputCol, bool onlyFromB=false, bool onlyNotFromB=false) const
Definition: PseudoTrackSelector.cxx:271
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
DerivationFramework::PseudoTrackSelector::fillRecoReplacedWithPseudo
void fillRecoReplacedWithPseudo(const xAOD::TrackParticleContainer *recoTrackParticleCol, const xAOD::TrackParticleContainer *pseudoTrackParticleCol, xAOD::TrackParticleContainer *outputCol, bool onlyFromB=false, bool onlyNotFromB=false) const
Output track collection.
Definition: PseudoTrackSelector.cxx:185
InDet::TrkOrigin::isFromB
bool isFromB(int origin)
from B decay chain including B-->D
Definition: InDetTrackTruthOriginDefs.h:111
DerivationFramework::PseudoTrackSelector::m_out_recoReplacedWithPseudoFromB
SG::WriteHandleKey< xAOD::TrackParticleContainer > m_out_recoReplacedWithPseudoFromB
Output track collection.
Definition: PseudoTrackSelector.h:52
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::PseudoTrackSelector::m_in_pseudoTrackParticleLocation
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_in_pseudoTrackParticleLocation
Reco track collection.
Definition: PseudoTrackSelector.h:50
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
DerivationFramework::PseudoTrackSelector::m_out_recoNoFakes
SG::WriteHandleKey< xAOD::TrackParticleContainer > m_out_recoNoFakes
Output track collection.
Definition: PseudoTrackSelector.h:57
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:73
DerivationFramework::PseudoTrackSelector::m_out_recoPlusPseudo
SG::WriteHandleKey< xAOD::TrackParticleContainer > m_out_recoPlusPseudo
Output track collection.
Definition: PseudoTrackSelector.h:54
DerivationFramework::PseudoTrackSelector::m_out_recoPlusPseudoFromB
SG::WriteHandleKey< xAOD::TrackParticleContainer > m_out_recoPlusPseudoFromB
Output track collection.
Definition: PseudoTrackSelector.h:55
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
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.
DerivationFramework::PseudoTrackSelector::getTruth
static const xAOD::TruthParticle * getTruth(const xAOD::TrackParticle *track)
Definition: PseudoTrackSelector.cxx:383
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.