Skip to content
Snippets Groups Projects
Commit c3359cc4 authored by Christos Anastopoulos's avatar Christos Anastopoulos
Browse files

Using CachedValue to fix the Vertex_v1 for MT

parent da980c76
9 merge requests!58791DataQualityConfigurations: Modify L1Calo config for web display,!46784MuonCondInterface: Enable thread-safety checking.,!46776Updated LArMonitoring config file for WD to match new files produced using MT,!45405updated ART test cron job,!42417Draft: DIRE and VINCIA Base Fragments for Pythia 8.3,!28528Revert 63f845ae,!27054Atr20369 210,!26342Monopole: Handle fractionally charged particles,!20696Using CachedValue to fix the Vertex_v1 for MT
......@@ -19,18 +19,15 @@ namespace xAOD {
Vertex_v1::Vertex_v1()
: SG::AuxElement(),
m_position(), m_positionCached( false ),
m_covariance(), m_covarianceCached( false ) {
m_position(),
m_covariance() {
}
Vertex_v1::Vertex_v1( const Vertex_v1& other )
: SG::AuxElement(),
m_position( other.m_position ),
m_positionCached( other.m_positionCached ),
m_covariance( other.m_covariance ),
m_covarianceCached( other.m_covarianceCached ) {
m_covariance( other.m_covariance ){
//copy aux store content (only the stuffs already loaded in memory!)
this->makePrivateStore( other );
}
......@@ -84,15 +81,16 @@ namespace xAOD {
const Amg::Vector3D& Vertex_v1::position() const {
// Cache the position if necessary:
if( ! m_positionCached ) {
m_position( 0 ) = x();
m_position( 1 ) = y();
m_position( 2 ) = z();
m_positionCached = true;
if( ! m_position.isValid() ) {
Amg::Vector3D tmpPosition;
tmpPosition( 0 ) = x();
tmpPosition( 1 ) = y();
tmpPosition( 2 ) = z();
m_position.set(tmpPosition);
}
// Return the object:
return m_position;
return *(m_position.ptr());
}
void Vertex_v1::setPosition( const Amg::Vector3D& position ) {
......@@ -101,25 +99,22 @@ namespace xAOD {
setX( position( 0 ) );
setY( position( 1 ) );
setZ( position( 2 ) );
// Update the cache:
m_position = position;
m_positionCached = true;
// Reset the cache
m_position.reset();
return;
}
const AmgSymMatrix(3)& Vertex_v1::covariancePosition() const {
// Cache the covariance matrix if necessary:
if( ! m_covarianceCached ) {
if( ! m_covariance.isValid() ) {
// The matrix is now cached:
Amg::expand(covariance().begin(),covariance().end(),m_covariance);
m_covarianceCached = true;
AmgSymMatrix(3) tmpCovariance;
Amg::expand(covariance().begin(),covariance().end(),tmpCovariance);
m_covariance.set(tmpCovariance);
}
// Return the cached object:
return m_covariance;
return *(m_covariance.ptr());
}
void Vertex_v1::setCovariancePosition( const AmgSymMatrix(3)& cov ) {
......@@ -130,11 +125,7 @@ namespace xAOD {
// Set the persistent variable:
setCovariance( vec );
// Cache the variable:
m_covariance = cov;
m_covarianceCached = true;
m_covariance.reset();
return;
}
......@@ -344,17 +335,12 @@ namespace xAOD {
return;
}
//
/////////////////////////////////////////////////////////////////////////////
/// This function is used by ROOT to reset the object after a new object
/// was read into an existing memory location.
///
/*
* Reset the cache
*/
void Vertex_v1::resetCache() {
m_positionCached = false;
m_covarianceCached = false;
m_position.reset();
m_covariance.reset();
return;
}
......
......@@ -4,9 +4,7 @@
<!-- Vertex_v1 dictionaries: -->
<class name="xAOD::Vertex_v1" >
<field name="m_position" transient="true" />
<field name="m_positionCached" transient="true" />
<field name="m_covariance" transient="true" />
<field name="m_covarianceCached" transient="true" />
</class>
<read sourceClass="xAOD::Vertex_v1" version="[1-]"
targetClass="xAOD::Vertex_v1" source="" target="" >
......
// Dear emacs, this is -*- c++ -*-
// Dear emacs, this is -*- c++ -*-
/*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/
// $Id: Vertex_v1.h 575751 2013-12-16 16:45:36Z krasznaa $
#ifndef XAODTRACKING_VERSIONS_VERTEX_V1_H
#define XAODTRACKING_VERSIONS_VERTEX_V1_H
// System include(s):
#include <vector>
// Core include(s):
#include "AthContainers/AuxElement.h"
#include "AthLinks/ElementLink.h"
// EDM include(s):
#include "EventPrimitives/EventPrimitives.h"
#include "GeoPrimitives/GeoPrimitives.h"
#ifndef XAOD_STANDALONE
#ifndef XAOD_MANACORE
# include "VxVertex/VxTrackAtVertex.h"
#endif // not XAOD_MANACORE
#endif // not XAOD_STANDALONE
// xAOD include(s):
#include "xAODTracking/TrackingPrimitives.h"
#include "xAODTracking/TrackParticleContainerFwd.h"
#include "xAODTracking/NeutralParticleContainer.h"
#include "xAODBase/ObjectType.h"
// Local include(s):
#include "xAODTracking/TrackingPrimitives.h"
namespace xAOD {
/// Class describing a Vertex.
///
/// @author Kirill Prokofiev <Kirill.Prokofev@cern.ch>
/// @author Attila Krasznahorkay <Attila.Krasznahorkay@cern.ch>
/// @author Ruslan Mashinistov <Ruslan.Mashinistov@cern.ch>
/// @nosubgrouping
///
class Vertex_v1 : public SG::AuxElement {
public:
/// Default constructor
Vertex_v1();
/// Copy constructor
Vertex_v1(const Vertex_v1& other);
/// Assignment operator. This can involve creating and copying an Auxilary store, and so should be used sparingly.
Vertex_v1& operator=(const Vertex_v1& tp );
/// A little helper function for identifying the type in template code
Type::ObjectType type() const;
/// Returns the x position
float x() const;
/// Sets the x position
void setX( float value );
/// Returns the y position
float y() const;
/// Sets the y position
void setY( float value );
/// Returns the z position
float z() const;
/// Sets the z position
void setZ( float value );
/// Returns the covariance matrix as a simple vector of values
const std::vector< float >& covariance() const;
/// Sets the covariance matrix as a simple vector of values
void setCovariance( const std::vector< float >& value );
/// Returns the 3-pos
const Amg::Vector3D& position() const;
/// Sets the 3-position
void setPosition( const Amg::Vector3D& position );
/// Returns the vertex covariance matrix
const AmgSymMatrix(3)& covariancePosition() const;
/// Sets the vertex covariance matrix
void setCovariancePosition( const AmgSymMatrix(3)& covariancePosition );
/// @name Fit quality functions
/// @{
/// Returns the @f$ \chi^2 @f$ of the vertex fit as float.
float chiSquared() const;
/// Returns the number of degrees of freedom of the vertex fit as float.
float numberDoF() const;
/// Set the 'Fit Quality' information.
void setFitQuality( float chiSquared, float numberDoF );
/// @}
/// The type of the vertex
VxType::VertexType vertexType() const;
/// Set the type of the vertex
void setVertexType( VxType::VertexType vType );
#if ( ! defined(XAOD_STANDALONE) ) && ( ! defined(XAOD_MANACORE) )
/// Non-const access to the VxTrackAtVertex vector
std::vector< Trk::VxTrackAtVertex >& vxTrackAtVertex();
/// Const access to the vector of tracks fitted to the vertex (may not exist!)
const std::vector< Trk::VxTrackAtVertex >& vxTrackAtVertex() const;
/// Check if VxTrackAtVertices are attached to the object
bool vxTrackAtVertexAvailable() const;
#endif // not XAOD_STANDALONE and not XAOD_MANACORE
/// @name Track particle contents operations
/// @{
/// Type for the associated track particles
typedef std::vector< ElementLink< xAOD::TrackParticleContainer > >
TrackParticleLinks_t;
/// Get all the particles associated with the vertex
const TrackParticleLinks_t& trackParticleLinks() const;
/// Set all track particle links at once
void setTrackParticleLinks( const TrackParticleLinks_t& trackParticles );
/// Get all the track weights
const std::vector< float >& trackWeights() const;
/// Set all the track weights
void setTrackWeights( const std::vector< float >& weights );
/// Type for the associated neutral particles
typedef std::vector< ElementLink< xAOD::NeutralParticleContainer > > NeutralParticleLinks_t;
/// Get all the particles associated with the vertex
const NeutralParticleLinks_t& neutralParticleLinks() const;
/// Set all neutral particle links at once
void setNeutralParticleLinks( const NeutralParticleLinks_t& neutralParticles );
/// Get all the neutral weights
const std::vector< float >& neutralWeights() const;
/// Set all the neutral weights
void setNeutralWeights( const std::vector< float >& weights );
/// Get the pointer to a given track that was used in vertex reco.
const TrackParticle* trackParticle( size_t i ) const;
/// Get the weight of a given track in the vertex reconstruction
float trackWeight( size_t i ) const;
/// Get the number of tracks associated with this vertex
size_t nTrackParticles() const;
/// Get the pointer to a given neutral that was used in vertex reco.
const NeutralParticle* neutralParticle( size_t i ) const;
/// Get the weight of a given neutral in the vertex reconstruction
float neutralWeight( size_t i ) const;
/// Get the number of neutrals associated with this vertex
size_t nNeutralParticles() const;
/// Add a new track to the vertex
void addTrackAtVertex( const ElementLink< TrackParticleContainer >& tr,
float weight = 1.0 );
/// Add a new neutral to the vertex
void addNeutralAtVertex( const ElementLink< NeutralParticleContainer >& tr,
float weight = 1.0 );
/// Remove all tracks from the vertex
void clearTracks();
/// Remove all neutrals from the vertex
void clearNeutrals();
/// @}
/// Reset the internal cache of the object
void resetCache();
private:
/// Cached position of the vertex
mutable Amg::Vector3D m_position;
/// Cache status of the position object
mutable bool m_positionCached;
/// Cached covariance of the vertex
mutable AmgSymMatrix(3) m_covariance;
/// Cache status of the covariance object
mutable bool m_covarianceCached;
}; // end of the Vertex_v1 class definitions
} // end of the xAOD namespace
#include "xAODCore/BaseInfo.h"
SG_BASE (xAOD::Vertex_v1, SG::AuxElement);
#endif // XAODTRACKING_VERSIONS_VERTEX_V1_H
// $Id: Vertex_v1.h 575751 2013-12-16 16:45:36Z krasznaa $
#ifndef XAODTRACKING_VERSIONS_VERTEX_V1_H
#define XAODTRACKING_VERSIONS_VERTEX_V1_H
// System include(s):
#include <vector>
// Core include(s):
#include "AthContainers/AuxElement.h"
#include "AthLinks/ElementLink.h"
// EDM include(s):
#include "EventPrimitives/EventPrimitives.h"
#include "GeoPrimitives/GeoPrimitives.h"
#ifndef XAOD_STANDALONE
#ifndef XAOD_MANACORE
# include "VxVertex/VxTrackAtVertex.h"
#endif // not XAOD_MANACORE
#endif // not XAOD_STANDALONE
// xAOD include(s):
#include "xAODTracking/TrackingPrimitives.h"
#include "xAODTracking/TrackParticleContainerFwd.h"
#include "xAODTracking/NeutralParticleContainer.h"
#include "xAODBase/ObjectType.h"
// Local include(s):
#include "xAODTracking/TrackingPrimitives.h"
//MT CachedValue
#include "CxxUtils/CachedValue.h"
namespace xAOD {
/// Class describing a Vertex.
///
/// @author Kirill Prokofiev <Kirill.Prokofev@cern.ch>
/// @author Attila Krasznahorkay <Attila.Krasznahorkay@cern.ch>
/// @author Ruslan Mashinistov <Ruslan.Mashinistov@cern.ch>
/// @nosubgrouping
///
class Vertex_v1 : public SG::AuxElement {
public:
/// Default constructor
Vertex_v1();
/// Copy constructor
Vertex_v1(const Vertex_v1& other);
/// Assignment operator. This can involve creating and copying an Auxilary store, and so should be used sparingly.
Vertex_v1& operator=(const Vertex_v1& tp );
/// A little helper function for identifying the type in template code
Type::ObjectType type() const;
/// Returns the x position
float x() const;
/// Sets the x position
void setX( float value );
/// Returns the y position
float y() const;
/// Sets the y position
void setY( float value );
/// Returns the z position
float z() const;
/// Sets the z position
void setZ( float value );
/// Returns the covariance matrix as a simple vector of values
const std::vector< float >& covariance() const;
/// Sets the covariance matrix as a simple vector of values
void setCovariance( const std::vector< float >& value );
/// Returns the 3-pos
const Amg::Vector3D& position() const;
/// Sets the 3-position
void setPosition( const Amg::Vector3D& position );
/// Returns the vertex covariance matrix
const AmgSymMatrix(3)& covariancePosition() const;
/// Sets the vertex covariance matrix
void setCovariancePosition( const AmgSymMatrix(3)& covariancePosition );
/// @name Fit quality functions
/// @{
/// Returns the @f$ \chi^2 @f$ of the vertex fit as float.
float chiSquared() const;
/// Returns the number of degrees of freedom of the vertex fit as float.
float numberDoF() const;
/// Set the 'Fit Quality' information.
void setFitQuality( float chiSquared, float numberDoF );
/// @}
/// The type of the vertex
VxType::VertexType vertexType() const;
/// Set the type of the vertex
void setVertexType( VxType::VertexType vType );
#if ( ! defined(XAOD_STANDALONE) ) && ( ! defined(XAOD_MANACORE) )
/// Non-const access to the VxTrackAtVertex vector
std::vector< Trk::VxTrackAtVertex >& vxTrackAtVertex();
/// Const access to the vector of tracks fitted to the vertex (may not exist!)
const std::vector< Trk::VxTrackAtVertex >& vxTrackAtVertex() const;
/// Check if VxTrackAtVertices are attached to the object
bool vxTrackAtVertexAvailable() const;
#endif // not XAOD_STANDALONE and not XAOD_MANACORE
/// @name Track particle contents operations
/// @{
/// Type for the associated track particles
typedef std::vector< ElementLink< xAOD::TrackParticleContainer > >
TrackParticleLinks_t;
/// Get all the particles associated with the vertex
const TrackParticleLinks_t& trackParticleLinks() const;
/// Set all track particle links at once
void setTrackParticleLinks( const TrackParticleLinks_t& trackParticles );
/// Get all the track weights
const std::vector< float >& trackWeights() const;
/// Set all the track weights
void setTrackWeights( const std::vector< float >& weights );
/// Type for the associated neutral particles
typedef std::vector< ElementLink< xAOD::NeutralParticleContainer > > NeutralParticleLinks_t;
/// Get all the particles associated with the vertex
const NeutralParticleLinks_t& neutralParticleLinks() const;
/// Set all neutral particle links at once
void setNeutralParticleLinks( const NeutralParticleLinks_t& neutralParticles );
/// Get all the neutral weights
const std::vector< float >& neutralWeights() const;
/// Set all the neutral weights
void setNeutralWeights( const std::vector< float >& weights );
/// Get the pointer to a given track that was used in vertex reco.
const TrackParticle* trackParticle( size_t i ) const;
/// Get the weight of a given track in the vertex reconstruction
float trackWeight( size_t i ) const;
/// Get the number of tracks associated with this vertex
size_t nTrackParticles() const;
/// Get the pointer to a given neutral that was used in vertex reco.
const NeutralParticle* neutralParticle( size_t i ) const;
/// Get the weight of a given neutral in the vertex reconstruction
float neutralWeight( size_t i ) const;
/// Get the number of neutrals associated with this vertex
size_t nNeutralParticles() const;
/// Add a new track to the vertex
void addTrackAtVertex( const ElementLink< TrackParticleContainer >& tr,
float weight = 1.0 );
/// Add a new neutral to the vertex
void addNeutralAtVertex( const ElementLink< NeutralParticleContainer >& tr,
float weight = 1.0 );
/// Remove all tracks from the vertex
void clearTracks();
/// Remove all neutrals from the vertex
void clearNeutrals();
/// @}
/// Reset the internal cache of the object
void resetCache();
private:
/// Cached position of the vertex
CxxUtils::CachedValue<Amg::Vector3D> m_position;
/// Cached covariance of the vertex
CxxUtils::CachedValue<AmgSymMatrix(3)> m_covariance;
}; // end of the Vertex_v1 class definitions
} // end of the xAOD namespace
#include "xAODCore/BaseInfo.h"
SG_BASE (xAOD::Vertex_v1, SG::AuxElement);
#endif // XAODTRACKING_VERSIONS_VERTEX_V1_H
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment