ATLAS Offline Software
GenericObjectThinning.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // GenericObjectThinning.cxx, (c) ATLAS Detector software
8 // Author: James Catmore (James.Catmore@cern.ch)
9 // Removes all ID tracks which do not pass a user-defined cut
10 
13 #include "GaudiKernel/ThreadLocalContext.h"
14 #include <vector>
15 #include <string>
16 
17 // Constructor
19  const std::string& n,
20  const IInterface* p ) :
21 base_class(t,n,p),
22 m_selectionString(""),
23 m_ntot(0),
24 m_npass(0)
25 {
26  declareProperty("SelectionString", m_selectionString);
27 }
28 
29 // Destructor
31 }
32 
33 // Athena initialize and finalize
35 {
36  ATH_MSG_VERBOSE("initialize() ...");
37  if (m_selectionString.empty()) {
38  ATH_MSG_FATAL("No selection string provided!");
39  return StatusCode::FAILURE;
40  } else {ATH_MSG_INFO("Selection string: " << m_selectionString);}
41 
42  // Set up the text-parsing machinery for thinning the tracks directly according to user cuts
43  if (!m_selectionString.empty()) {
44  ATH_CHECK(initializeParser( m_selectionString) );
45  }
46 
47  //check xAOD::InDetTrackParticle collection
48  ATH_CHECK( m_SGKey.initialize (m_streamName) );
49  ATH_MSG_INFO("Using " << m_SGKey << "as the source collection");
50 
51  return StatusCode::SUCCESS;
52 }
53 
55 {
56  ATH_MSG_VERBOSE("finalize() ...");
57  ATH_MSG_INFO("Processed "<< m_ntot <<" objects, "<< m_npass<< " were retained ");
58  ATH_CHECK(finalizeParser());
59  return StatusCode::SUCCESS;
60 }
61 
62 // The thinning itself
64 {
65  const EventContext& ctx = Gaudi::Hive::currentContext();
66 
67  // Retrieve main object collection
69 
70  // Check the event contains objects
71  unsigned int nObjects = particles->size();
72  if (nObjects==0) return StatusCode::SUCCESS;
73 
74  // Set up a mask with the same entries as the full collection
75  std::vector<bool> mask;
76  mask.assign(nObjects,false); // default: don't keep any tracks
77  m_ntot += nObjects;
78 
79  // Execute the text parser and update the mask
80  if (m_parser) {
81  std::vector<int> entries = m_parser->evaluateAsVector();
82  unsigned int nEntries = entries.size();
83  // check the sizes are compatible
84  if (nObjects != nEntries ) {
85  ATH_MSG_ERROR("Sizes incompatible! Are you sure your selection string used the same collection as the input collection??");
86  return StatusCode::FAILURE;
87  } else {
88  // set mask
89  for (unsigned int i=0; i<nObjects; ++i) if (entries[i]==1) mask[i]=true;
90  }
91  }
92  // Count the mask
93  m_npass += std::count (mask.begin(), mask.end(), true);
94 
95  // Execute the thinning based on the mask. Finish.
96  particles.keep (mask);
97 
98  return StatusCode::SUCCESS;
99 }
100 
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
ThinningHandle.h
Handle for requesting thinning for a data object.
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
XMLtoHeader.count
count
Definition: XMLtoHeader.py:85
DerivationFramework::GenericObjectThinning::GenericObjectThinning
GenericObjectThinning(const std::string &t, const std::string &n, const IInterface *p)
Definition: GenericObjectThinning.cxx:18
python.utils.AtlRunQueryLookup.mask
string mask
Definition: AtlRunQueryLookup.py:460
SG::ThinningHandle
Handle for requesting thinning for a data object.
Definition: ThinningHandle.h:84
DerivationFramework::GenericObjectThinning::~GenericObjectThinning
~GenericObjectThinning()
Definition: GenericObjectThinning.cxx:30
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
lumiFormat.i
int i
Definition: lumiFormat.py:85
beamspotman.n
n
Definition: beamspotman.py:731
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
DerivationFramework::GenericObjectThinning::doThinning
virtual StatusCode doThinning() const override
Definition: GenericObjectThinning.cxx:63
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
GenericObjectThinning.h
DerivationFramework::GenericObjectThinning::initialize
virtual StatusCode initialize() override
Definition: GenericObjectThinning.cxx:34
LArG4FSStartPointFilter.particles
list particles
Definition: LArG4FSStartPointFilter.py:84
entries
double entries
Definition: listroot.cxx:49
dqBeamSpot.nEntries
int nEntries
Definition: dqBeamSpot.py:73
DerivationFramework::GenericObjectThinning::m_selectionString
std::string m_selectionString
Definition: GenericObjectThinning.h:41
DerivationFramework::GenericObjectThinning::finalize
virtual StatusCode finalize() override
Definition: GenericObjectThinning.cxx:54