ATLAS Offline Software
Select_onia2mumu.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 // Select_onia2mumu.cxx
8 // Author: Daniel Scheirich <daniel.scheirich@cern.ch>
9 // Based on the Integrated Simulation Framework
10 //
11 // Basic Jpsi->mu mu derivation example
12 
14 
19 #include <vector>
20 #include <string>
21 
22 namespace DerivationFramework {
23 
25  const std::string& n,
26  const IInterface* p) :
27  AthAlgTool(t,n,p),
28  m_v0Tools("Trk::V0Tools")
29  {
30  declareInterface<DerivationFramework::IAugmentationTool>(this);
31 
32  // Declare tools
33  declareProperty("V0Tools", m_v0Tools);
34 
35  // Declare user-defined properties
36 
37  declareProperty("HypothesisName" , m_hypoName = "A");
38  declareProperty("InputVtxContainerName", m_inputVtxContainerName = "JpsiCandidates");
39  declareProperty("TrkMasses" , m_trkMasses = std::vector<double>(2, 105.658) );
40  declareProperty("VtxMassHypo" , m_massHypo = 3096.916 );
41  declareProperty("MassMax" , m_massMax = 6000);
42  declareProperty("MassMin" , m_massMin = 2000);
43  declareProperty("Chi2Max" , m_chi2Max = 200);
44  declareProperty("DoVertexType" , m_DoVertexType = 7);
45  declareProperty("LxyMin" , m_lxyMin = std::numeric_limits<double>::lowest());
46  declareProperty("Do3d" , m_do3d = false);
47 
48  }
49 
50  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
51 
53  {
54 
55  ATH_MSG_DEBUG("in initialize()");
56 
57  // retrieve V0 tools
58  CHECK( m_v0Tools.retrieve() );
59  ATH_CHECK(m_inputVtxContainerName.initialize());
60 
61  return StatusCode::SUCCESS;
62 
63  }
64 
65  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
66 
68  constexpr float errConst = -9999999;
69  const xAOD::Vertex* pv = onia.pv(pv_t);
70  if(pv) {
71  // decorate the vertex.
72  // Proper decay time assuming constant mass hypothesis m_massHypo
73  BPHYS_CHECK( onia.setTau( m_v0Tools->tau(onia.vtx(), pv, m_massHypo),
74  pv_t,
76  // Proper decay time assuming error constant mass hypothesis m_massHypo
77  BPHYS_CHECK( onia.setTauErr( m_v0Tools->tauError(onia.vtx(), pv, m_massHypo),
78  pv_t,
80 
81  BPHYS_CHECK( onia.setTau( m_v0Tools->tau(onia.vtx(), pv, m_trkMasses),
82  pv_t,
84 
85  BPHYS_CHECK( onia.setTauErr( m_v0Tools->tauError(onia.vtx(), pv, m_trkMasses),
86  pv_t,
88 
89  //enum pv_type {PV_MAX_SUM_PT2, PV_MIN_A0, PV_MIN_Z0, PV_MIN_Z0_BA};
90  }else{
91 
92 
93  BPHYS_CHECK( onia.setTau(errConst, pv_t,
95  // Proper decay time assuming error constant mass hypothesis m_massHypo
96  BPHYS_CHECK( onia.setTauErr( errConst,
97  pv_t,
99 
100  BPHYS_CHECK( onia.setTau( errConst,
101  pv_t,
103 
104  BPHYS_CHECK( onia.setTauErr( errConst,
105  pv_t,
107  }
108 
109  if(m_do3d){
110  BPHYS_CHECK( onia.setTau3d( pv ? m_v0Tools->tau3D(onia.vtx(), pv, m_massHypo) : errConst,
111  pv_t,
113  // Proper decay time assuming error constant mass hypothesis m_massHypo
114  BPHYS_CHECK( onia.setTau3dErr( pv ? m_v0Tools->tau3DError(onia.vtx(), pv, m_massHypo) : errConst,
115  pv_t,
117 
118  BPHYS_CHECK( onia.setTau3d( pv ? m_v0Tools->tau3D(onia.vtx(), pv, m_trkMasses) : errConst,
119  pv_t,
121 
122  BPHYS_CHECK( onia.setTau3dErr( pv ? m_v0Tools->tau3DError(onia.vtx(), pv, m_trkMasses) : errConst,
123  pv_t,
125 
126  }
127 
128  }
129 
130 
132  {
133 
135  SG::auxid_set_t decor_auxids;
136 
137  bool doPt = (m_DoVertexType & 1) != 0;
138  bool doA0 = (m_DoVertexType & 2) != 0;
139  bool doZ0 = (m_DoVertexType & 4) != 0;
140  bool doZ0BA = (m_DoVertexType & 8) != 0;
141  // loop over onia candidates and perform selection and augmentation
142  xAOD::VertexContainer::const_iterator oniaItr = oniaContainer->begin();
143  for(; oniaItr!=oniaContainer->end(); ++oniaItr) {
144  // create BPhysHypoHelper
145  xAOD::BPhysHypoHelper onia(m_hypoName, *oniaItr, &decor_auxids);
146  if((*oniaItr)->nTrackParticles() != m_trkMasses.size())
147  ATH_MSG_WARNING("Vertex has " << (*oniaItr)->nTrackParticles() << " while provided masses " << m_trkMasses.size());
148  //----------------------------------------------------
149  // decorate the vertex
150  //----------------------------------------------------
151  // a) invariant mass and error
152  if( !onia.setMass(m_trkMasses) ) ATH_MSG_WARNING("Decoration onia.setMass failed");
153 
154  double massErr = m_v0Tools->invariantMassError(onia.vtx(), m_trkMasses);
155  if( !onia.setMassErr(massErr) ) ATH_MSG_WARNING("Decoration onia.setMassErr failed");
156 
157  // b) proper decay time and error:
158  // retrieve the refitted PV (or the original one, if the PV refitting was turned off)
163 
164  //----------------------------------------------------
165  // perform the selection (i.e. flag the vertex)
166  //----------------------------------------------------
167  // flag the vertex indicating that it is selected by this selector
168  onia.setPass(true);
169 
170  // now we check othe cuts. if one of them didn't pass, set the flag to 0
171  // and continue to the next candidate:
172 
173  // 1) invariant mass cut
174  if( onia.mass() < m_massMin || onia.mass() > m_massMax) {
175  onia.setPass(false); // flag as failed
176  continue;
177  }
178 
179  // 2) chi2 cut
180  if( onia.vtx()->chiSquared() > m_chi2Max) {
181  onia.setPass(false);; // flag as failed
182  continue;
183  }
184  // 3) lxy cut
186  onia.setPass(false);; // flag as failed
187  continue;
188  }
189 
190  } // end of loop over onia candidates
191 
192  // Lock the decorations we just produced.
194  const_cast<xAOD::VertexContainer*> (oniaContainer.cptr());
195  for (SG::auxid_t auxid : decor_auxids) {
196  onia_nc->lockDecoration (auxid);
197  }
198 
199  // all OK
200  return StatusCode::SUCCESS;
201  }
202 
203  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
204 
205 
206 }
DerivationFramework::Select_onia2mumu::initialize
StatusCode initialize() override
inirialization and finalization
Definition: Select_onia2mumu.cxx:52
xAOD::BPhysHypoHelper::setMass
bool setMass(const float val)
Set given invariant mass and its error.
Definition: BPhysHypoHelper.cxx:52
V0Tools.h
DerivationFramework::Select_onia2mumu::addBranches
virtual StatusCode addBranches() const override
: augmentation and selection Retrieved vertices are augmented with usual information.
Definition: Select_onia2mumu.cxx:131
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
xAOD::BPhysHypoHelper::setTau3dErr
bool setTau3dErr(const float val, const pv_type vertexType=BPhysHelper::PV_MIN_A0, const tau_type tauType=BPhysHypoHelper::TAU_CONST_MASS)
proper decay time error
Definition: BPhysHypoHelper.cxx:322
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
xAOD::BPhysHypoHelper::setTauErr
bool setTauErr(const float val, const pv_type vertexType=BPhysHelper::PV_MIN_A0, const tau_type tauType=BPhysHypoHelper::TAU_CONST_MASS)
proper decay time error
Definition: BPhysHypoHelper.cxx:179
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
DerivationFramework::Select_onia2mumu::ProcessVertex
void ProcessVertex(xAOD::BPhysHypoHelper &, xAOD::BPhysHelper::pv_type) const
Definition: Select_onia2mumu.cxx:67
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
DerivationFramework::Select_onia2mumu::m_chi2Max
double m_chi2Max
max chi2 cut
Definition: Select_onia2mumu.h:63
DerivationFramework::Select_onia2mumu::m_trkMasses
std::vector< double > m_trkMasses
track mass hypotheses
Definition: Select_onia2mumu.h:59
DerivationFramework::Select_onia2mumu::m_v0Tools
ToolHandle< Trk::V0Tools > m_v0Tools
tools
Definition: Select_onia2mumu.h:53
DerivationFramework::Select_onia2mumu::m_massMax
double m_massMax
invariant mass range
Definition: Select_onia2mumu.h:61
xAOD::BPhysHelper::PV_MIN_Z0
@ PV_MIN_Z0
Definition: BPhysHelper.h:475
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
xAOD::BPhysHypoHelper::TAU_INV_MASS
@ TAU_INV_MASS
Definition: BPhysHypoHelper.h:140
DerivationFramework::Select_onia2mumu::m_massHypo
double m_massHypo
vertex mass hypothesis
Definition: Select_onia2mumu.h:60
Select_onia2mumu.h
SG::auxid_t
size_t auxid_t
Identifier for a particular aux data item.
Definition: AuxTypes.h:27
xAOD::BPhysHypoHelper
Definition: BPhysHypoHelper.h:73
BPHYS_CHECK
#define BPHYS_CHECK(EXP)
Useful CHECK macro.
Definition: BPhysHelper.h:738
xAOD::BPhysHypoHelper::mass
float mass() const
Get invariant mass and its error.
Definition: BPhysHypoHelper.cxx:42
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
xAOD::BPhysHelper::pv_type
pv_type
: Enum type of the PV
Definition: BPhysHelper.h:475
xAOD::BPhysHypoHelper::setPass
bool setPass(bool passVal)
get the pass flag for this hypothesis
Definition: BPhysHypoHelper.cxx:367
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::Select_onia2mumu::m_hypoName
std::string m_hypoName
job options
Definition: Select_onia2mumu.h:57
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
BPhysHypoHelper.h
: B-physics xAOD helpers.
xAOD::BPhysHelper::PV_MIN_A0
@ PV_MIN_A0
Definition: BPhysHelper.h:475
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
DerivationFramework
THE reconstruction tool.
Definition: ParticleSortingAlg.h:24
xAOD::BPhysHypoHelper::TAU_CONST_MASS
@ TAU_CONST_MASS
Definition: BPhysHypoHelper.h:140
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
DerivationFramework::Select_onia2mumu::m_inputVtxContainerName
SG::ReadHandleKey< xAOD::VertexContainer > m_inputVtxContainerName
name of the input container name
Definition: Select_onia2mumu.h:58
DerivationFramework::Select_onia2mumu::m_do3d
bool m_do3d
Definition: Select_onia2mumu.h:66
DerivationFramework::Select_onia2mumu::m_massMin
double m_massMin
invariant mass range
Definition: Select_onia2mumu.h:62
xAOD::BPhysHypoHelper::setTau3d
bool setTau3d(const float val, const pv_type vertexType=BPhysHelper::PV_MIN_A0, const tau_type tauType=BPhysHypoHelper::TAU_CONST_MASS)
proper decay time
Definition: BPhysHypoHelper.cxx:286
xAOD::BPhysHelper::vtx
const xAOD::Vertex * vtx() const
Getter method for the cached xAOD::Vertex.
Definition: BPhysHelper.h:108
xAOD::BPhysHelper::PV_MAX_SUM_PT2
@ PV_MAX_SUM_PT2
Definition: BPhysHelper.h:475
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
xAOD::BPhysHelper::lxy
float lxy(const pv_type vertexType=BPhysHelper::PV_MIN_A0)
Get the transverse decay distance and its error measured between the refitted primary vertex of type ...
Definition: BPhysHelper.cxx:866
VertexContainer.h
xAOD::Vertex_v1::chiSquared
float chiSquared() const
Returns the of the vertex fit as float.
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.changerun.pv
pv
Definition: changerun.py:81
xAOD::BPhysHelper::pv
const xAOD::Vertex * pv(const pv_type vertexType=BPhysHelper::PV_MIN_A0)
Get the refitted collision vertex of type pv_type.
Definition: BPhysHelper.cxx:796
DerivationFramework::Select_onia2mumu::m_DoVertexType
int m_DoVertexType
Allows user to skip certain vertexes - bitwise test 7==all(111)
Definition: Select_onia2mumu.h:65
DerivationFramework::Select_onia2mumu::m_lxyMin
double m_lxyMin
min lxy cut
Definition: Select_onia2mumu.h:64
SG::auxid_set_t
A set of aux data identifiers.
Definition: AuxTypes.h:47
ATLAS_THREAD_SAFE
#define ATLAS_THREAD_SAFE
Definition: checker_macros.h:211
AthAlgTool
Definition: AthAlgTool.h:26
DerivationFramework::Select_onia2mumu::Select_onia2mumu
Select_onia2mumu(const std::string &t, const std::string &n, const IInterface *p)
Definition: Select_onia2mumu.cxx:24
checker_macros.h
Define macros for attributes used to control the static checker.
xAOD::BPhysHypoHelper::setTau
bool setTau(const float val, const pv_type vertexType=BPhysHelper::PV_MIN_A0, const tau_type tauType=BPhysHypoHelper::TAU_CONST_MASS)
: Set the proper decay time and error.
Definition: BPhysHypoHelper.cxx:143
xAOD::BPhysHelper::PV_MIN_Z0_BA
@ PV_MIN_Z0_BA
Definition: BPhysHelper.h:475
xAOD::BPhysHypoHelper::setMassErr
bool setMassErr(const float val)
invariant mass error
Definition: BPhysHypoHelper.cxx:57
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.