ATLAS Offline Software
Loading...
Searching...
No Matches
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
13#include "Select_onia2mumu.h"
14
20#include <vector>
21#include <string>
23
24namespace DerivationFramework {
25
27 const std::string& n,
28 const IInterface* p) :
29 base_class(t,n,p),
30 m_v0Tools("Trk::V0Tools")
31 {
32
33 // Declare tools
34 declareProperty("V0Tools", m_v0Tools);
35
36 // Declare user-defined properties
37
38 declareProperty("HypothesisName" , m_hypoName = "A");
39 declareProperty("InputVtxContainerName", m_inputVtxContainerName = "JpsiCandidates");
40 declareProperty("TrkMasses" , m_trkMasses = std::vector<double>(2, ParticleConstants::muonMassInMeV) );
41 declareProperty("VtxMassHypo" , m_massHypo = ParticleConstants::JpsiMassInMeV );
42 declareProperty("MassMax" , m_massMax = 6000);
43 declareProperty("MassMin" , m_massMin = 2000);
44 declareProperty("Chi2Max" , m_chi2Max = 200);
45 declareProperty("DoVertexType" , m_DoVertexType = 7);
46 declareProperty("LxyMin" , m_lxyMin = std::numeric_limits<double>::lowest());
47 declareProperty("Do3d" , m_do3d = false);
48
49 }
50
51 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
52
54 {
55
56 ATH_MSG_DEBUG("in initialize()");
57
58 // retrieve V0 tools
59 CHECK( m_v0Tools.retrieve() );
61
62 m_passKey = std::format("passed_{}", m_hypoName);
63 ATH_CHECK( m_passKey.initialize() );
64 return StatusCode::SUCCESS;
65
66 }
67
68 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
69
71 constexpr float errConst = -9999999;
72 const xAOD::Vertex* pv = onia.pv(pv_t);
73 if(pv) {
74 // decorate the vertex.
75 // Proper decay time assuming constant mass hypothesis m_massHypo
76 BPHYS_CHECK( onia.setTau( m_v0Tools->tau(onia.vtx(), pv, m_massHypo),
77 pv_t,
79 // Proper decay time assuming error constant mass hypothesis m_massHypo
80 BPHYS_CHECK( onia.setTauErr( m_v0Tools->tauError(onia.vtx(), pv, m_massHypo),
81 pv_t,
83
84 BPHYS_CHECK( onia.setTau( m_v0Tools->tau(onia.vtx(), pv, m_trkMasses),
85 pv_t,
87
88 BPHYS_CHECK( onia.setTauErr( m_v0Tools->tauError(onia.vtx(), pv, m_trkMasses),
89 pv_t,
91
92 //enum pv_type {PV_MAX_SUM_PT2, PV_MIN_A0, PV_MIN_Z0, PV_MIN_Z0_BA};
93 }else{
94
95
96 BPHYS_CHECK( onia.setTau(errConst, pv_t,
98 // Proper decay time assuming error constant mass hypothesis m_massHypo
99 BPHYS_CHECK( onia.setTauErr( errConst,
100 pv_t,
102
103 BPHYS_CHECK( onia.setTau( errConst,
104 pv_t,
106
107 BPHYS_CHECK( onia.setTauErr( errConst,
108 pv_t,
110 }
111
112 if(m_do3d){
113 BPHYS_CHECK( onia.setTau3d( pv ? m_v0Tools->tau3D(onia.vtx(), pv, m_massHypo) : errConst,
114 pv_t,
116 // Proper decay time assuming error constant mass hypothesis m_massHypo
117 BPHYS_CHECK( onia.setTau3dErr( pv ? m_v0Tools->tau3DError(onia.vtx(), pv, m_massHypo) : errConst,
118 pv_t,
120
121 BPHYS_CHECK( onia.setTau3d( pv ? m_v0Tools->tau3D(onia.vtx(), pv, m_trkMasses) : errConst,
122 pv_t,
124
125 BPHYS_CHECK( onia.setTau3dErr( pv ? m_v0Tools->tau3DError(onia.vtx(), pv, m_trkMasses) : errConst,
126 pv_t,
128
129 }
130
131 }
132
133
134 StatusCode Select_onia2mumu::addBranches(const EventContext& ctx) const
135 {
137 SG::auxid_set_t decor_auxids;
138
139 bool doPt = (m_DoVertexType & 1) != 0;
140 bool doA0 = (m_DoVertexType & 2) != 0;
141 bool doZ0 = (m_DoVertexType & 4) != 0;
142 bool doZ0BA = (m_DoVertexType & 8) != 0;
144 // loop over onia candidates and perform selection and augmentation
145 xAOD::VertexContainer::const_iterator oniaItr = oniaContainer->begin();
146 for(; oniaItr!=oniaContainer->end(); ++oniaItr) {
147 // create BPhysHypoHelper
148 xAOD::BPhysHypoHelper onia(m_hypoName, *oniaItr, &decor_auxids);
149 if((*oniaItr)->nTrackParticles() != m_trkMasses.size())
150 ATH_MSG_WARNING("Vertex has " << (*oniaItr)->nTrackParticles() << " while provided masses " << m_trkMasses.size());
151 //----------------------------------------------------
152 // decorate the vertex
153 //----------------------------------------------------
154 // a) invariant mass and error
155 if( !onia.setMass(m_trkMasses) ) ATH_MSG_WARNING("Decoration onia.setMass failed");
156
157 double massErr = m_v0Tools->invariantMassError(onia.vtx(), m_trkMasses);
158 if( !onia.setMassErr(massErr) ) ATH_MSG_WARNING("Decoration onia.setMassErr failed");
159
160 // b) proper decay time and error:
161 // retrieve the refitted PV (or the original one, if the PV refitting was turned off)
166
167 //----------------------------------------------------
168 // perform the selection (i.e. flag the vertex)
169 //----------------------------------------------------
170 // flag the vertex indicating that it is selected by this selector
171 bool pass = true;
172
173 // now we check othe cuts. if one of them didn't pass, set the flag to 0
174 // and continue to the next candidate:
175
176 // 1) invariant mass cut
177 if( onia.mass() < m_massMin || onia.mass() > m_massMax) {
178 pass = false; // flag as failed
179 }
180
181 // 2) chi2 cut
182 if(pass && onia.vtx()->chiSquared() > m_chi2Max) {
183 pass = false; // flag as failed
184 }
185 // 3) lxy cut
187 pass = false; // flag as failed
188 }
189 passflag(**oniaItr) = pass;
190
191 } // end of loop over onia candidates
192
193 // Lock the decorations we just produced.
195 const_cast<xAOD::VertexContainer*> (oniaContainer.cptr());
196 for (SG::auxid_t auxid : decor_auxids) {
197 onia_nc->lockDecoration (auxid);
198 }
199
200 // all OK
201 return StatusCode::SUCCESS;
202 }
203
204 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
205
206
207}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
#define BPHYS_CHECK(EXP)
Useful CHECK macro.
: B-physics xAOD helpers.
#define CHECK(...)
Evaluate an expression and check for errors.
A number of constexpr particle constants to avoid hardcoding them directly in various places.
Handle class for adding a decoration to an object.
Define macros for attributes used to control the static checker.
#define ATLAS_THREAD_SAFE
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
SG::ReadHandleKey< xAOD::VertexContainer > m_inputVtxContainerName
name of the input container name
virtual StatusCode addBranches(const EventContext &ctx) const override
: augmentation and selection Retrieved vertices are augmented with usual information.
StatusCode initialize() override
inirialization and finalization
Select_onia2mumu(const std::string &t, const std::string &n, const IInterface *p)
double m_massMin
invariant mass range
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_passKey
int m_DoVertexType
Allows user to skip certain vertexes - bitwise test 7==all(111).
ToolHandle< Trk::V0Tools > m_v0Tools
tools
std::vector< double > m_trkMasses
track mass hypotheses
double m_massHypo
vertex mass hypothesis
double m_massMax
invariant mass range
void ProcessVertex(xAOD::BPhysHypoHelper &, xAOD::BPhysHelper::pv_type) const
const_pointer_type cptr()
Dereference the pointer.
Handle class for adding a decoration to an object.
A set of aux data identifiers.
Definition AuxTypes.h:47
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 ...
const xAOD::Vertex * vtx() const
Getter method for the cached xAOD::Vertex.
const xAOD::Vertex * pv(const pv_type vertexType=BPhysHelper::PV_MIN_A0)
Get the refitted collision vertex of type pv_type.
pv_type
: Enum type of the PV
bool setTau3d(const float val, const pv_type vertexType=BPhysHelper::PV_MIN_A0, const tau_type tauType=BPhysHypoHelper::TAU_CONST_MASS)
proper decay time
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
float mass() const
Get invariant mass and its error.
bool setMass(const float val)
Set given invariant mass and its error.
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.
bool setMassErr(const float val)
invariant mass error
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
float chiSquared() const
Returns the of the vertex fit as float.
THE reconstruction tool.
constexpr double muonMassInMeV
the mass of the muon (in MeV)
size_t auxid_t
Identifier for a particular aux data item.
Definition AuxTypes.h:27
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".
Vertex_v1 Vertex
Define the latest version of the vertex class.