ATLAS Offline Software
Loading...
Searching...
No Matches
AsgMaskSelectionTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4
6
7
8
9//
10// includes
11//
12
14
15#include <cmath>
16
17//
18// method implementations
19//
20
21namespace CP
22{
23
24 StatusCode AsgMaskSelectionTool ::
25 initialize ()
26 {
27 if(m_selVars.size() != m_selMasks.size()) {
28 ATH_MSG_ERROR("Property selectionMasks has different size to selectionVars. Please check your configuration");
29 return StatusCode::FAILURE;
30 }
31 // Could also warn if there are fewer values, but we don't have to force users to set where irrelevant.
32 // Maybe warn unless the size is 0, in which case assume all default?
33
34 for(size_t index=0; index<m_selVars.size(); ++index) {
35 const std::string& thisVar = m_selVars[index];
36 if (thisVar.empty()) {
37 ATH_MSG_ERROR("Empty string passed as selection variable!");
38 return StatusCode::FAILURE;
39 } else {
40 // Setup acceptInfo and create accessor to read variable on execute
41 m_accept.addCut (thisVar, thisVar);
42 std::unique_ptr<ISelectionReadAccessor> accessor;
43 ATH_CHECK (makeSelectionReadAccessor (thisVar, accessor));
44 m_acc_selVars.push_back (std::move (accessor));
45 }
46 }
47
48 return StatusCode::SUCCESS;
49 }
50
51 const asg::AcceptInfo& AsgMaskSelectionTool ::
52 getAcceptInfo () const
53 {
54 return m_accept;
55 }
56
57 asg::AcceptData AsgMaskSelectionTool ::
58 accept (const xAOD::IParticle *particle) const
59 {
61 for(std::size_t cutIndex=0; cutIndex<m_accept.getNCuts(); ++cutIndex) {
62 // Apply mask and test
63 int mask = m_selMasks[cutIndex];
64 ATH_MSG_VERBOSE("Now testing var \"" << m_selVars[cutIndex] << "\" requiring value " << mask);
65 accept.setCutResult (cutIndex, ((m_acc_selVars[cutIndex]->getBits (*particle) & mask ) == 0 ));
66 }
67
68 return accept;
69 }
70}
71
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_VERBOSE(x)
virtual asg::AcceptData accept(const xAOD::IParticle *part) const override
The main accept method: the actual cuts are applied here.
std::vector< std::unique_ptr< ISelectionReadAccessor > > m_acc_selVars
Gaudi::Property< std::vector< unsigned int > > m_selMasks
Gaudi::Property< std::vector< std::string > > m_selVars
tool properties
asg::AcceptInfo m_accept
the asg::AcceptInfo we are using
Class providing the definition of the 4-vector interface.
Select isolated Photons, Electrons and Muons.
StatusCode makeSelectionReadAccessor(const std::string &expr, std::unique_ptr< ISelectionReadAccessor > &accessor, bool defaultToChar)
make the ISelectionReadAccessor for the given name
Definition index.py:1