ATLAS Offline Software
InDetVertexSplitterHist.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
10 
11 #include "GaudiKernel/MsgStream.h"
12 #include "GaudiKernel/ITHistSvc.h"
13 
14 #include "VxVertex/VxContainer.h"
15 #include "VxVertex/VxCandidate.h"
18 
20 
23 
24 #include "TFitter.h"
25 #include <algorithm>
26 #include <cmath>
27 #include <sstream>
28 
31 
33  ISvcLocator* pSvcLocator) :
34  AthAlgorithm(name, pSvcLocator),
35  m_thistSvc("THistSvc",name),
36  m_ntuple(nullptr)
37 {
38  declareProperty("SpitVxContainer",m_splitVxName = "SplitVxCandidates");
39  declareProperty("HistService",m_thistSvc);
40 
41 }
42 
46 
48 
51 
53  ATH_MSG_DEBUG("Initializing InDetVertexSplitterHist");
54 
55  StatusCode sc = StatusCode::SUCCESS;
56 
57  m_ntuple = new TTree("splitVertex","Split Vertices");
58 
59  m_ntuple->Branch("odd",&m_oddBranch,"tracks_odd/I:x_odd/F:y_odd:z_odd:c00_odd:c01_odd:c11_odd:c22_odd");
60  m_ntuple->Branch("even",&m_evenBranch,"tracks_even/I:x_even/F:y_even:z_even:c00_even:c01_even:c11_even:c22_even");
61  m_ntuple->Branch("meta",&m_metaData,"run/I:lumi:event");
62  sc = m_thistSvc->regTree("/AANT/ntuple",m_ntuple);
63 
64  return StatusCode::SUCCESS;
65 }
66 
69 
71  ATH_MSG_DEBUG("in finalize()");
72 
73  return StatusCode::SUCCESS;
74 
75 }
76 
79 
81 
82  ATH_MSG_DEBUG("in execute()");
83 
84  StatusCode sc = StatusCode::SUCCESS;
85 
86  sc = makeSplitHist();
87  if (sc.isFailure()) {
88  return sc;
89  }
90 
91  return sc;
92 }
93 
95 
97  ATH_MSG_DEBUG("in makeSplitHist()");
98 
99  StatusCode sc = StatusCode::SUCCESS;
100 
101  const VxContainer* vxCont = nullptr;
102  sc = evtStore()->retrieve(vxCont, m_splitVxName);
103  if(sc.isSuccess()){
104  ATH_MSG_DEBUG("Retrieved vertex container " << m_splitVxName);
105  }
106  else{
107  ATH_MSG_WARNING("Failed to retrieve vertex container " << m_splitVxName);
108  return StatusCode::FAILURE;
109  }
110 
111  int vcsize = ((int)vxCont->size() - 1)/2;
112  int vxi = 0;
113  while ( vxi < vcsize){
114  const Trk::VxCandidate *vxContO = vxCont->at(2*vxi);
115  const Trk::VxCandidate *vxContE = vxCont->at(2*vxi+1);
116  if( vxContO->vxTrackAtVertex()->empty() or vxContE->vxTrackAtVertex()->empty())
117  {ATH_MSG_DEBUG("Found a vertex with no tracks, skipping it");}
118  else{
119  float xo = vxContO->recVertex().position().x();
120  float xeo = vxContO->recVertex().covariancePosition()(0,0);
121  float yo = vxContO->recVertex().position().y();
122  float yeo = vxContO->recVertex().covariancePosition()(1,1);
123  float zo = vxContO->recVertex().position().z();
124  float zeo =vxContO->recVertex().covariancePosition()(2,2);
125  float cxyo = vxContO->recVertex().covariancePosition()(0,1);
126  int so = vxContO->vxTrackAtVertex()->size();
127 
128  float xe = vxContE->recVertex().position().x();
129  float xee = vxContE->recVertex().covariancePosition()(0,0);
130  float ye = vxContE->recVertex().position().y();
131  float yee = vxContE->recVertex().covariancePosition()(1,1);
132  float ze = vxContE->recVertex().position().z();
133  float zee =vxContE->recVertex().covariancePosition()(2,2);
134  float cxye = vxContE->recVertex().covariancePosition()(0,1);
135  int se = vxContE->vxTrackAtVertex()->size();
136 
137  m_oddBranch.size=so;
138  m_oddBranch.x=xo;
139  m_oddBranch.y=yo;
140  m_oddBranch.z=zo;
141  m_oddBranch.c00=xeo;
142  m_oddBranch.c01=cxyo;
143  m_oddBranch.c11=yeo;
144  m_oddBranch.c22=zeo;
145 
147  m_evenBranch.x=xe;
148  m_evenBranch.y=ye;
149  m_evenBranch.z=ze;
150  m_evenBranch.c00=xee;
151  m_evenBranch.c01=cxye;
152  m_evenBranch.c11=yee;
153  m_evenBranch.c22=zee;
154 
155  const EventContext& ctx = Gaudi::Hive::currentContext();
156  m_metaData.lumi = ctx.eventID().lumi_block();
157  m_metaData.run = ctx.eventID().run_number();
158  m_metaData.event = ctx.eventID().event_number();
159  m_ntuple->Fill();
160  }
161  vxi++;
162  }
163  return StatusCode::SUCCESS;
164 }
165 
InDet::InDetVertexSplitterHist::vertexBranch::x
float x
Definition: InDetVertexSplitterHist.h:58
InDet::InDetVertexSplitterHist::initialize
StatusCode initialize()
Initialize.
Definition: InDetVertexSplitterHist.cxx:52
Trk::VxCandidate::recVertex
const Trk::RecVertex & recVertex(void) const
Returns a reference to reconstructed vertex.
Definition: VxCandidate.h:132
InDet::InDetVertexSplitterHist::m_metaData
metaData m_metaData
Definition: InDetVertexSplitterHist.h:67
InDet::InDetVertexSplitterHist::vertexBranch::c00
float c00
Definition: InDetVertexSplitterHist.h:58
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
InDet::InDetVertexSplitterHist::m_oddBranch
vertexBranch m_oddBranch
Definition: InDetVertexSplitterHist.h:65
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
InDet::InDetVertexSplitterHist::vertexBranch::size
int size
Definition: InDetVertexSplitterHist.h:57
InDet::InDetVertexSplitterHist::execute
StatusCode execute()
Execute - on event by event.
Definition: InDetVertexSplitterHist.cxx:80
keylayer_zslicemap.se
se
Definition: keylayer_zslicemap.py:194
InDet::InDetVertexSplitterHist::m_thistSvc
ServiceHandle< ITHistSvc > m_thistSvc
get a handle on the Hist/TTree registration service
Definition: InDetVertexSplitterHist.h:49
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
InDet::InDetVertexSplitterHist::vertexBranch::c01
float c01
Definition: InDetVertexSplitterHist.h:58
InDet::InDetVertexSplitterHist::metaData::event
int event
Definition: InDetVertexSplitterHist.h:62
AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
Trk::VxCandidate::vxTrackAtVertex
std::vector< Trk::VxTrackAtVertex * > * vxTrackAtVertex(void)
Unconst pointer to the vector of tracks Required by some of the vertex fitters.
Definition: VxCandidate.h:144
InDetVertexSplitterHist.h
InDet::InDetVertexSplitterHist::vertexBranch::z
float z
Definition: InDetVertexSplitterHist.h:58
InDet::InDetVertexSplitterHist::finalize
StatusCode finalize()
Finalize - delete any memory allocation from the heap.
Definition: InDetVertexSplitterHist.cxx:70
InDet::InDetVertexSplitterHist::m_splitVxName
std::string m_splitVxName
Definition: InDetVertexSplitterHist.h:51
McEventCollection.h
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
VxTrackAtVertex.h
VxContainer.h
Trk::Vertex::position
const Amg::Vector3D & position() const
return position of vertex
Definition: Vertex.cxx:72
VxContainer
Definition: VxContainer.h:28
InDet::InDetVertexSplitterHist::makeSplitHist
StatusCode makeSplitHist()
Definition: InDetVertexSplitterHist.cxx:96
AthAlgorithm
Definition: AthAlgorithm.h:47
VxCandidate.h
InDet::InDetVertexSplitterHist::m_evenBranch
vertexBranch m_evenBranch
Definition: InDetVertexSplitterHist.h:66
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
InDet::InDetVertexSplitterHist::metaData::run
int run
Definition: InDetVertexSplitterHist.h:62
EventInfo.h
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Trk::VxCandidate
Definition: VxCandidate.h:27
InDet::InDetVertexSplitterHist::~InDetVertexSplitterHist
~InDetVertexSplitterHist()
Destructor - check up memory allocation delete any memory allocation on the heap.
InDet::InDetVertexSplitterHist::vertexBranch::c11
float c11
Definition: InDetVertexSplitterHist.h:58
InDet::InDetVertexSplitterHist::vertexBranch::y
float y
Definition: InDetVertexSplitterHist.h:58
InDet::InDetVertexSplitterHist::m_ntuple
TTree * m_ntuple
Definition: InDetVertexSplitterHist.h:53
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
InDet::InDetVertexSplitterHist::InDetVertexSplitterHist
InDetVertexSplitterHist(const std::string &name, ISvcLocator *pSvcLocator)
Author: Peter V.
Definition: InDetVertexSplitterHist.cxx:32
InDet::InDetVertexSplitterHist::vertexBranch::c22
float c22
Definition: InDetVertexSplitterHist.h:58
InDet::InDetVertexSplitterHist::metaData::lumi
int lumi
Definition: InDetVertexSplitterHist.h:62