13using Athena::Units::cm;
30 return StatusCode::SUCCESS;
43 for (
const auto& key :
m_keys) {
47 if (FormatTool->AddToEvent(
dataTypeName(), key.key() +
"_xAOD", &
data).isFailure()) {
57 return StatusCode::SUCCESS;
86 x.reserve(
x.size()+NVtx);
87 y.reserve(
y.size()+NVtx);
88 z.reserve(
z.size()+NVtx);
90 vertexType.reserve(vertexType.size()+NVtx);
91 primVxCand.reserve(primVxCand.size()+NVtx);
92 covMatrix.reserve(covMatrix.size()+NVtx);
93 numTracks.reserve(numTracks.size()+NVtx);
94 tracks.reserve(tracks.size()+NVtx);
95 sgkey.reserve(sgkey.size()+NVtx);
101 for ( ; VertexItr != cont->
end(); ++VertexItr) {
103 ATH_MSG_DEBUG(
" Vertex #" << counter++ <<
" : x = " << (*VertexItr)->x()/
cm <<
", y = "
104 << (*VertexItr)->y()/
cm <<
", z[GeV] = " << (*VertexItr)->z()/
cm
105 <<
", vertexType = " << (*VertexItr)->vertexType()
106 <<
", chiSquared = " << (*VertexItr)->chiSquared()
107 <<
", numberDoF = " << (*VertexItr)->numberDoF());
113 vertexType.emplace_back(
DataType((*VertexItr)->vertexType()));
115 if ((*VertexItr)->vertexType() == 1 ){
116 primVxCand.emplace_back( 1 );
118 primVxCand.emplace_back( 0 );
123 covMatrix.emplace_back(
DataType(
"2 -.1 .5 -.01 0.002 .01"));
126 if ( (*VertexItr)->numberDoF() != 0 ){
127 chi2val = (*VertexItr)->chiSquared()/(*VertexItr)->numberDoF() ;
137 const std::vector< ElementLink< xAOD::TrackParticleContainer > > tpLinks = (*VertexItr)->trackParticleLinks();
140 unsigned int tp_size = tpLinks.size();
141 numTracks.emplace_back(
DataType( tp_size ));
143 for(
unsigned int tp = 0; tp<tp_size; ++tp)
148 <<
", collection : " << tpl.
key()
149 <<
", Tracks : " << tp <<
" out of " << tp_size <<
", own count: " << trkCnt++);
151 if ( tpl.
index() < 1000 ){
166 DataMap[
"vertexType"] = vertexType;
167 DataMap[
"primVxCand"] = primVxCand;
168 DataMap[
"covMatrix multiple=\"6\""] = covMatrix;
169 DataMap[
"numTracks"] = numTracks;
174 if ((numTracks.size()) != 0){
176 double NTracksPerVertex = tracks.size()*1./numTracks.size();
177 std::string tag =
"tracks multiple=\"" +
DataType(NTracksPerVertex).toString()+
"\"";
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
char data[hepevt_bytes_allocation_ATLAS]
Wrapper to avoid constant divisions when using units.
DataModel_detail::const_iterator< DataVector > const_iterator
typename DataVectorBase< xAOD::Vertex_v1 >::Base::size_type size_type
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
index_type index() const
Get the index of the element inside of its container.
sgkey_t key() const
Get the key that we reference, as a hash.
xAODVertexRetriever(const std::string &type, const std::string &name, const IInterface *parent)
Standard Constructor.
const DataMap getData(const xAOD::VertexContainer *)
Puts the variables into a DataMap.
virtual StatusCode retrieve(ToolHandle< IFormatTool > &FormatTool)
For each Vertex collections retrieve basic parameters.
virtual StatusCode initialize()
virtual std::string dataTypeName() const
Return the name of the data type that is generated by this retriever.
Gaudi::Property< std::string > m_tracksName
SG::ReadHandleKeyArray< xAOD::VertexContainer > m_keys
virtual bool isValid() override final
Can the handle be successfully dereferenced?
double chi2(TH1 *h0, TH1 *h1)
This header is shared inbetween the C-style server thread and the C++ Athena ServerSvc.
std::map< std::string, DataVect > DataMap
std::vector< DataType > DataVect
Defines a map with a key and a vector of DataType objects e.g.
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".