ATLAS Offline Software
Loading...
Searching...
No Matches
Reco_mumu.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
6// Reco_mumu.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 "Reco_mumu.h"
17#include "BPhysPVTools.h"
18
19
20namespace DerivationFramework {
21
22 Reco_mumu::Reco_mumu(const std::string& t,
23 const std::string& n,
24 const IInterface* p) :
25 base_class(t,n,p) {
26 }
27
28 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
29
31 {
32
33 ATH_MSG_DEBUG("in initialize()");
34
35 // retrieve V0 tools
36 CHECK( m_v0Tools.retrieve() );
37
38 // get the JpsiFinder tool
39 CHECK( m_jpsiFinder.retrieve() );
40
41 // get the PrimaryVertexRefitter tool
42 CHECK( m_pvRefitter.retrieve() );
43
44 // Get the beam spot service
45 CHECK( m_eventInfo_key.initialize() );
46
47 ATH_CHECK(m_CollectionsToCheck.initialize());
48 ATH_CHECK(m_pvContainerKey.initialize());
49 ATH_CHECK(m_outContainerKey.initialize());
51 return StatusCode::SUCCESS;
52 }
53
54
55
56 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
57
58 StatusCode Reco_mumu::addBranches(const EventContext& ctx) const
59 {
60 bool callJpsiFinder = true;
62 for( SG::ReadHandle<xAOD::VertexContainer> vertContainer : m_CollectionsToCheck.makeHandles(ctx)){
63 if (!vertContainer.isValid()){
64 ATH_MSG_FATAL("Failed to retrieve "<<vertContainer.key());
65 return StatusCode::FAILURE;
66 }
67 if(vertContainer->size() == 0) {
68 callJpsiFinder = false;
69 ATH_MSG_DEBUG("Container VertexContainer (" << vertContainer.key() << ") is empty");
70 break;//No point checking other containers
71 }
72 }
73 }
74
75 // Jpsi container and its auxilliary store
76 std::unique_ptr<xAOD::VertexContainer> vtxContainer = std::make_unique<xAOD::VertexContainer>();
77 std::unique_ptr<xAOD::VertexAuxContainer> vtxAuxContainer = std::make_unique<xAOD::VertexAuxContainer>();
78 vtxContainer->setStore(vtxAuxContainer.get());
79
80 std::unique_ptr<xAOD::VertexContainer> refPvContainer =std::make_unique<xAOD::VertexContainer>();
81 std::unique_ptr<xAOD::VertexAuxContainer> refPvAuxContainer = std::make_unique<xAOD::VertexAuxContainer>();
82 refPvContainer->setStore(refPvAuxContainer.get());
83
84
85 if(callJpsiFinder) {
86 //----------------------------------------------------
87 // call Jpsi finder
88 //----------------------------------------------------
89 ATH_CHECK(m_jpsiFinder->performSearch(ctx, *vtxContainer));
90
91 //----------------------------------------------------
92 // retrieve primary vertices
93 //----------------------------------------------------
95 if (!pvContainer.isValid()){
96 ATH_MSG_FATAL("Failed to retrieve "<<m_pvContainerKey.fullKey());
97 return StatusCode::FAILURE;
98 }
99 //----------------------------------------------------
100 // Try to retrieve refitted primary vertices
101 //----------------------------------------------------
102
103 // Give the helper class the ptr to v0tools and beamSpotsSvc to use
105 if(not evt.isValid()) ATH_MSG_ERROR("Cannot Retrieve " << m_eventInfo_key.key() );
106
107 // Give the helper class the ptr to v0tools and beamSpotsSvc to use
108 BPhysPVTools helper(&(*m_v0Tools), evt.cptr());
109 helper.SetMinNTracksInPV(m_PV_minNTracks);
110 helper.SetSave3d(m_do3d);
111
112 if(m_refitPV && vtxContainer->size()){
113 ATH_CHECK(helper.FillCandwithRefittedVertices(vtxContainer.get(), pvContainer.cptr(), refPvContainer.get(), &(*m_pvRefitter) , m_PV_max, m_DoVertexType));
114 }else if (!m_refitPV && vtxContainer->size()){
115 ATH_CHECK(helper.FillCandExistingVertices(vtxContainer.get(), pvContainer.cptr(), m_DoVertexType));
116 }
117 }
118 //----------------------------------------------------
119 // save in the StoreGate
120 //----------------------------------------------------
122 ATH_CHECK(out_handle.record(std::move(vtxContainer), std::move(vtxAuxContainer)));
123 if(m_refitPV) {
125 ATH_CHECK(refitHandle.record(std::move(refPvContainer), std::move(refPvAuxContainer)));
126 }
127
128 return StatusCode::SUCCESS;
129 }
130}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_FATAL(x)
#define ATH_MSG_DEBUG(x)
#define CHECK(...)
Evaluate an expression and check for errors.
SG::ReadHandleKey< xAOD::VertexContainer > m_pvContainerKey
Definition Reco_mumu.h:54
Gaudi::Property< bool > m_checkCollections
Definition Reco_mumu.h:51
ToolHandle< Analysis::ICandidateSearch > m_jpsiFinder
Definition Reco_mumu.h:39
Gaudi::Property< int > m_PV_max
Definition Reco_mumu.h:47
StatusCode initialize() override
Definition Reco_mumu.cxx:30
Reco_mumu(const std::string &t, const std::string &n, const IInterface *p)
Definition Reco_mumu.cxx:22
Gaudi::Property< bool > m_do3d
Definition Reco_mumu.h:50
SG::WriteHandleKey< xAOD::VertexContainer > m_outContainerKey
Definition Reco_mumu.h:57
Gaudi::Property< unsigned int > m_PV_minNTracks
Definition Reco_mumu.h:49
ToolHandle< Analysis::PrimaryVertexRefitter > m_pvRefitter
Definition Reco_mumu.h:40
SG::ReadHandleKeyArray< xAOD::VertexContainer > m_CollectionsToCheck
Definition Reco_mumu.h:53
Gaudi::Property< bool > m_refitPV
Definition Reco_mumu.h:46
SG::WriteHandleKey< xAOD::VertexContainer > m_refContainerKey
Definition Reco_mumu.h:56
StatusCode addBranches(const EventContext &ctx) const override
Definition Reco_mumu.cxx:58
ToolHandle< Trk::V0Tools > m_v0Tools
tools
Definition Reco_mumu.h:38
Gaudi::Property< int > m_DoVertexType
Definition Reco_mumu.h:48
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfo_key
Definition Reco_mumu.h:41
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
THE reconstruction tool.