ATLAS Offline Software
Select_onia2mumu.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2017 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 
18 #include <vector>
19 #include <string>
20 
21 namespace DerivationFramework {
22 
24  const std::string& n,
25  const IInterface* p) :
26  AthAlgTool(t,n,p),
27  m_v0Tools("Trk::V0Tools")
28  {
29  declareInterface<DerivationFramework::IAugmentationTool>(this);
30 
31  // Declare tools
32  declareProperty("V0Tools", m_v0Tools);
33 
34  // Declare user-defined properties
35 
36  declareProperty("HypothesisName" , m_hypoName = "A");
37  declareProperty("InputVtxContainerName", m_inputVtxContainerName = "JpsiCandidates");
38  declareProperty("TrkMasses" , m_trkMasses = std::vector<double>(2, 105.658) );
39  declareProperty("VtxMassHypo" , m_massHypo = 3096.916 );
40  declareProperty("MassMax" , m_massMax = 6000);
41  declareProperty("MassMin" , m_massMin = 2000);
42  declareProperty("Chi2Max" , m_chi2Max = 200);
43  declareProperty("DoVertexType" , m_DoVertexType = 7);
44  declareProperty("LxyMin" , m_lxyMin = std::numeric_limits<double>::lowest());
45  declareProperty("Do3d" , m_do3d = false);
46 
47  }
48 
49  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
50 
52  {
53 
54  ATH_MSG_DEBUG("in initialize()");
55 
56  // retrieve V0 tools
57  CHECK( m_v0Tools.retrieve() );
58  ATH_CHECK(m_inputVtxContainerName.initialize());
59 
60  return StatusCode::SUCCESS;
61 
62  }
63 
64  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
65 
67  constexpr float errConst = -9999999;
68  const xAOD::Vertex* pv = onia.pv(pv_t);
69  if(pv) {
70  // decorate the vertex.
71  // Proper decay time assuming constant mass hypothesis m_massHypo
72  BPHYS_CHECK( onia.setTau( m_v0Tools->tau(onia.vtx(), pv, m_massHypo),
73  pv_t,
75  // Proper decay time assuming error constant mass hypothesis m_massHypo
76  BPHYS_CHECK( onia.setTauErr( m_v0Tools->tauError(onia.vtx(), pv, m_massHypo),
77  pv_t,
79 
80  BPHYS_CHECK( onia.setTau( m_v0Tools->tau(onia.vtx(), pv, m_trkMasses),
81  pv_t,
83 
84  BPHYS_CHECK( onia.setTauErr( m_v0Tools->tauError(onia.vtx(), pv, m_trkMasses),
85  pv_t,
87 
88  //enum pv_type {PV_MAX_SUM_PT2, PV_MIN_A0, PV_MIN_Z0, PV_MIN_Z0_BA};
89  }else{
90 
91 
92  BPHYS_CHECK( onia.setTau(errConst, pv_t,
94  // Proper decay time assuming error constant mass hypothesis m_massHypo
95  BPHYS_CHECK( onia.setTauErr( errConst,
96  pv_t,
98 
99  BPHYS_CHECK( onia.setTau( errConst,
100  pv_t,
102 
103  BPHYS_CHECK( onia.setTauErr( errConst,
104  pv_t,
106  }
107 
108  if(m_do3d){
109  BPHYS_CHECK( onia.setTau3d( pv ? m_v0Tools->tau3D(onia.vtx(), pv, m_massHypo) : errConst,
110  pv_t,
112  // Proper decay time assuming error constant mass hypothesis m_massHypo
113  BPHYS_CHECK( onia.setTau3dErr( pv ? m_v0Tools->tau3DError(onia.vtx(), pv, m_massHypo) : errConst,
114  pv_t,
116 
117  BPHYS_CHECK( onia.setTau3d( pv ? m_v0Tools->tau3D(onia.vtx(), pv, m_trkMasses) : errConst,
118  pv_t,
120 
121  BPHYS_CHECK( onia.setTau3dErr( pv ? m_v0Tools->tau3DError(onia.vtx(), pv, m_trkMasses) : errConst,
122  pv_t,
124 
125  }
126 
127  }
128 
129 
131  {
132 
134 
135  bool doPt = (m_DoVertexType & 1) != 0;
136  bool doA0 = (m_DoVertexType & 2) != 0;
137  bool doZ0 = (m_DoVertexType & 4) != 0;
138  bool doZ0BA = (m_DoVertexType & 8) != 0;
139  // loop over onia candidates and perform selection and augmentation
140  xAOD::VertexContainer::const_iterator oniaItr = oniaContainer->begin();
141  for(; oniaItr!=oniaContainer->end(); ++oniaItr) {
142  // create BPhysHypoHelper
143  xAOD::BPhysHypoHelper onia(m_hypoName, *oniaItr);
144  if((*oniaItr)->nTrackParticles() != m_trkMasses.size())
145  ATH_MSG_WARNING("Vertex has " << (*oniaItr)->nTrackParticles() << " while provided masses " << m_trkMasses.size());
146  //----------------------------------------------------
147  // decorate the vertex
148  //----------------------------------------------------
149  // a) invariant mass and error
150  if( !onia.setMass(m_trkMasses) ) ATH_MSG_WARNING("Decoration onia.setMass failed");
151 
152  double massErr = m_v0Tools->invariantMassError(onia.vtx(), m_trkMasses);
153  if( !onia.setMassErr(massErr) ) ATH_MSG_WARNING("Decoration onia.setMassErr failed");
154 
155  // b) proper decay time and error:
156  // retrieve the refitted PV (or the original one, if the PV refitting was turned off)
161 
162  //----------------------------------------------------
163  // perform the selection (i.e. flag the vertex)
164  //----------------------------------------------------
165  // flag the vertex indicating that it is selected by this selector
166  onia.setPass(true);
167 
168  // now we check othe cuts. if one of them didn't pass, set the flag to 0
169  // and continue to the next candidate:
170 
171  // 1) invariant mass cut
172  if( onia.mass() < m_massMin || onia.mass() > m_massMax) {
173  onia.setPass(false); // flag as failed
174  continue;
175  }
176 
177  // 2) chi2 cut
178  if( onia.vtx()->chiSquared() > m_chi2Max) {
179  onia.setPass(false);; // flag as failed
180  continue;
181  }
182  // 3) lxy cut
184  onia.setPass(false);; // flag as failed
185  continue;
186  }
187 
188  } // end of loop over onia candidates
189 
190  // all OK
191  return StatusCode::SUCCESS;
192  }
193 
194  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
195 
196 
197 }
DerivationFramework::Select_onia2mumu::initialize
StatusCode initialize() override
inirialization and finalization
Definition: Select_onia2mumu.cxx:51
xAOD::BPhysHypoHelper::setMass
bool setMass(const float val)
Set given invariant mass and its error.
Definition: BPhysHypoHelper.cxx:49
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:130
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:319
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
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:176
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:66
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:137
DerivationFramework::Select_onia2mumu::m_massHypo
double m_massHypo
vertex mass hypothesis
Definition: Select_onia2mumu.h:60
Select_onia2mumu.h
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:39
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:364
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-physcis 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:137
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:283
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
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:23
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:140
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:54
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.