ATLAS Offline Software
Loading...
Searching...
No Matches
DerivationFramework::Select_onia2mumu Class Reference

#include <Select_onia2mumu.h>

Inheritance diagram for DerivationFramework::Select_onia2mumu:
Collaboration diagram for DerivationFramework::Select_onia2mumu:

Public Member Functions

 Select_onia2mumu (const std::string &t, const std::string &n, const IInterface *p)
StatusCode initialize () override
 inirialization and finalization
virtual StatusCode addBranches (const EventContext &ctx) const override
 : augmentation and selection Retrieved vertices are augmented with usual information.

Private Member Functions

void ProcessVertex (xAOD::BPhysHypoHelper &, xAOD::BPhysHelper::pv_type) const

Private Attributes

ToolHandle< Trk::V0Toolsm_v0Tools
 tools
std::string m_hypoName
 job options
SG::ReadHandleKey< xAOD::VertexContainerm_inputVtxContainerName
 name of the input container name
std::vector< double > m_trkMasses
 track mass hypotheses
double m_massHypo
 vertex mass hypothesis
double m_massMax
 invariant mass range
double m_massMin
 invariant mass range
double m_chi2Max
 max chi2 cut
double m_lxyMin
 min lxy cut
int m_DoVertexType
 Allows user to skip certain vertexes - bitwise test 7==all(111).
bool m_do3d
SG::WriteDecorHandleKey< xAOD::VertexContainerm_passKey {this, "WriteDecorHandleKey", m_inputVtxContainerName, "passed" }

Detailed Description

Definition at line 32 of file Select_onia2mumu.h.

Constructor & Destructor Documentation

◆ Select_onia2mumu()

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

Definition at line 26 of file Select_onia2mumu.cxx.

28 :
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 }
SG::ReadHandleKey< xAOD::VertexContainer > m_inputVtxContainerName
name of the input container name
double m_massMin
invariant mass range
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
constexpr double muonMassInMeV
the mass of the muon (in MeV)

Member Function Documentation

◆ addBranches()

StatusCode DerivationFramework::Select_onia2mumu::addBranches ( const EventContext & ctx) const
overridevirtual

: augmentation and selection Retrieved vertices are augmented with usual information.

Selection is performed and each candidate is decorated with the Char_t flag named "passed_"+name() to indicate whether if the candidate passed the selection. This flag is then used by the event selection tool and by the vertex thinning tool.

Definition at line 134 of file Select_onia2mumu.cxx.

135 {
136 SG::ReadHandle<xAOD::VertexContainer> oniaContainer(m_inputVtxContainerName, ctx);
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;
143 SG::WriteDecorHandle<xAOD::VertexContainer, Char_t> passflag(m_passKey, ctx);
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
186 if(pass && onia.lxy(xAOD::BPhysHelper::PV_MAX_SUM_PT2) < m_lxyMin) {
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 }
#define ATH_MSG_WARNING(x)
#define ATLAS_THREAD_SAFE
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_passKey
void ProcessVertex(xAOD::BPhysHypoHelper &, xAOD::BPhysHelper::pv_type) const
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".

◆ initialize()

StatusCode DerivationFramework::Select_onia2mumu::initialize ( )
override

inirialization and finalization

Definition at line 53 of file Select_onia2mumu.cxx.

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 }
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x)
#define CHECK(...)
Evaluate an expression and check for errors.

◆ ProcessVertex()

void DerivationFramework::Select_onia2mumu::ProcessVertex ( xAOD::BPhysHypoHelper & onia,
xAOD::BPhysHelper::pv_type pv_t ) const
private

Definition at line 70 of file Select_onia2mumu.cxx.

70 {
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 }
#define BPHYS_CHECK(EXP)
Useful CHECK macro.
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.
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
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 setTauErr(const float val, const pv_type vertexType=BPhysHelper::PV_MIN_A0, const tau_type tauType=BPhysHypoHelper::TAU_CONST_MASS)
proper decay time error
Vertex_v1 Vertex
Define the latest version of the vertex class.

Member Data Documentation

◆ m_chi2Max

double DerivationFramework::Select_onia2mumu::m_chi2Max
private

max chi2 cut

Definition at line 63 of file Select_onia2mumu.h.

◆ m_do3d

bool DerivationFramework::Select_onia2mumu::m_do3d
private

Definition at line 66 of file Select_onia2mumu.h.

◆ m_DoVertexType

int DerivationFramework::Select_onia2mumu::m_DoVertexType
private

Allows user to skip certain vertexes - bitwise test 7==all(111).

Definition at line 65 of file Select_onia2mumu.h.

◆ m_hypoName

std::string DerivationFramework::Select_onia2mumu::m_hypoName
private

job options

name of the mass hypothesis. E.g. Jpis, Upsi, etc. Will be used as a prefix for decorations

Definition at line 57 of file Select_onia2mumu.h.

◆ m_inputVtxContainerName

SG::ReadHandleKey<xAOD::VertexContainer> DerivationFramework::Select_onia2mumu::m_inputVtxContainerName
private

name of the input container name

Definition at line 58 of file Select_onia2mumu.h.

◆ m_lxyMin

double DerivationFramework::Select_onia2mumu::m_lxyMin
private

min lxy cut

Definition at line 64 of file Select_onia2mumu.h.

◆ m_massHypo

double DerivationFramework::Select_onia2mumu::m_massHypo
private

vertex mass hypothesis

Definition at line 60 of file Select_onia2mumu.h.

◆ m_massMax

double DerivationFramework::Select_onia2mumu::m_massMax
private

invariant mass range

Definition at line 61 of file Select_onia2mumu.h.

◆ m_massMin

double DerivationFramework::Select_onia2mumu::m_massMin
private

invariant mass range

Definition at line 62 of file Select_onia2mumu.h.

◆ m_passKey

SG::WriteDecorHandleKey<xAOD::VertexContainer> DerivationFramework::Select_onia2mumu::m_passKey {this, "WriteDecorHandleKey", m_inputVtxContainerName, "passed" }
private

Definition at line 67 of file Select_onia2mumu.h.

67{this, "WriteDecorHandleKey", m_inputVtxContainerName, "passed" };

◆ m_trkMasses

std::vector<double> DerivationFramework::Select_onia2mumu::m_trkMasses
private

track mass hypotheses

Definition at line 59 of file Select_onia2mumu.h.

◆ m_v0Tools

ToolHandle<Trk::V0Tools> DerivationFramework::Select_onia2mumu::m_v0Tools
private

tools

Definition at line 53 of file Select_onia2mumu.h.


The documentation for this class was generated from the following files: