Skip to content
Snippets Groups Projects
Commit 16bfe41c authored by Walter Lampl's avatar Walter Lampl
Browse files

Merge branch 'Trk_Track_setFitQuality_isvalid' into 'master'

Trk::Track add setFitQuality and isValid method

See merge request atlas/athena!37359
parents 9758768c e06dd186
No related branches found
No related tags found
No related merge requests found
...@@ -95,14 +95,20 @@ namespace Trk ...@@ -95,14 +95,20 @@ namespace Trk
public: public:
friend class TrackSlimmingTool; friend class TrackSlimmingTool;
Track (); //!<needed by POOL. DO NOT USE YOURSELF! /**
* Default constructor
* Here for POOL and simple tests.
* The track will return isValid() == false.
* It is not expected to be used in
* production.
*/
Track ();
/** /**
* Full constructor * Full constructor
* *
* Pass everything possible to form a track, including * Pass everything possible to form a track.
* As usual, since the FitQuality and the vectors are passed by * The Track assumes ownership of the pointers.
* pointer, they will be owned by the Track (i.e. the Track will
* delete them)
* *
* <b>PLEASE NOTE!</b> * <b>PLEASE NOTE!</b>
* if there is more than one Perigee in trackStateOnSurfaces * if there is more than one Perigee in trackStateOnSurfaces
...@@ -128,16 +134,25 @@ namespace Trk ...@@ -128,16 +134,25 @@ namespace Trk
virtual ~Track (); //!< destructor virtual ~Track (); //!< destructor
/**
* returns true if the track has non-nullptr
* fitQuality and DataVector<const TrackStateOnSurface>*
*/
bool isValid() const;
/** /**
* return fit quality. this pointer is NULL (==0) if no FitQuality * return fit quality pointer. It will be nullptr if no FitQuality
* is assigned to the Track * is assigned to the Track
*/ */
const FitQuality* fitQuality () const { const FitQuality* fitQuality () const;
return m_fitQuality;
}
/**
* set FitQuality. The Track takes ownership.
*/
void setFitQuality(const FitQuality* quality);
/** /**
* return Perigee. this pointer is NULL (==0) if no perigee parameters * return Perigee. Can be nullptr if no perigee parameters
* were assigned to the Track. * were assigned to the Track.
* *
* This method performs lazy initialization and caches the result. * This method performs lazy initialization and caches the result.
...@@ -151,8 +166,8 @@ namespace Trk ...@@ -151,8 +166,8 @@ namespace Trk
* Return a pointer to a vector of TrackParameters. * Return a pointer to a vector of TrackParameters.
* It is created Lazily by this method and then cached. * It is created Lazily by this method and then cached.
* *
* The pointer will be NULL (==0) if the track was created * The pointer will be nullptr if the track was created
* without parameters. * without parameters.
* *
* In general, it will be defined and will have at least one entry * In general, it will be defined and will have at least one entry
* *
...@@ -272,7 +287,7 @@ namespace Trk ...@@ -272,7 +287,7 @@ namespace Trk
* for example, TrackParameter, RIO_OnTrack and FitQualityOnSurface * for example, TrackParameter, RIO_OnTrack and FitQualityOnSurface
*/ */
DataVector<const TrackStateOnSurface>* m_trackStateVector{nullptr}; DataVector<const TrackStateOnSurface>* m_trackStateVector{nullptr};
/** /**
* A vector of TrackParameters: these can be any of the classes that * A vector of TrackParameters: these can be any of the classes that
* derive from Trk::TrackParameters, for example, Perigee, MeasuredPerigee, * derive from Trk::TrackParameters, for example, Perigee, MeasuredPerigee,
...@@ -302,7 +317,6 @@ namespace Trk ...@@ -302,7 +317,6 @@ namespace Trk
*/ */
CxxUtils::CachedValue<DataVector<const MeasurementBase>> m_cachedOutlierVector; CxxUtils::CachedValue<DataVector<const MeasurementBase>> m_cachedOutlierVector;
/** /**
* A pointer to the Track's Perigee parameters. * A pointer to the Track's Perigee parameters.
* *
...@@ -310,7 +324,7 @@ namespace Trk ...@@ -310,7 +324,7 @@ namespace Trk
* or MeasuredPerigee parameter * or MeasuredPerigee parameter
*/ */
CxxUtils::CachedValue<const Perigee*> m_perigeeParameters; CxxUtils::CachedValue<const Perigee*> m_perigeeParameters;
/** /**
* A pointer to the Track's FitQuality. This is guaranteed to * A pointer to the Track's FitQuality. This is guaranteed to
......
...@@ -4,13 +4,24 @@ ...@@ -4,13 +4,24 @@
namespace Trk { namespace Trk {
inline bool
Track::isValid() const
{
return (m_fitQuality && m_trackStateVector);
}
inline const FitQuality*
Track::fitQuality() const
{
return m_fitQuality;
}
inline const DataVector<const TrackStateOnSurface>* inline const DataVector<const TrackStateOnSurface>*
Track::trackStateOnSurfaces() const Track::trackStateOnSurfaces() const
{ {
return m_trackStateVector; return m_trackStateVector;
} }
inline DataVector<const TrackStateOnSurface>* inline DataVector<const TrackStateOnSurface>*
Track::trackStateOnSurfaces() Track::trackStateOnSurfaces()
{ {
......
...@@ -194,6 +194,10 @@ Trk::Track::~Track() ...@@ -194,6 +194,10 @@ Trk::Track::~Track()
const DataVector<const Trk::TrackParameters>* Trk::Track::trackParameters() const const DataVector<const Trk::TrackParameters>* Trk::Track::trackParameters() const
{ {
if(!m_trackStateVector){
return nullptr;
}
// Do work only if it is not valid. // Do work only if it is not valid.
if ( !m_cachedParameterVector.isValid()){ if ( !m_cachedParameterVector.isValid()){
// create cached parameter vector (which DOES NOT OWN ELEMENTS ... // create cached parameter vector (which DOES NOT OWN ELEMENTS ...
...@@ -255,16 +259,15 @@ void Trk::Track::findPerigeeImpl() const ...@@ -255,16 +259,15 @@ void Trk::Track::findPerigeeImpl() const
const Trk::Perigee* const Trk::Perigee*
Trk::Track::perigeeParameters() const Trk::Track::perigeeParameters() const
{ {
if (!m_perigeeParameters.isValid()) { if (!m_perigeeParameters.isValid()) {
// findPerigee performs the setting of the parameters // findPerigee performs the setting of the parameters
// i.e does the CachedValue set // i.e does the CachedValue set
findPerigeeImpl(); findPerigeeImpl();
} }
//Return payload if valid // Return payload if valid
if(m_perigeeParameters.isValid()){ if (m_perigeeParameters.isValid()) {
return *(m_perigeeParameters.ptr()); return *(m_perigeeParameters.ptr());
} }
return nullptr; return nullptr;
...@@ -272,9 +275,12 @@ Trk::Track::perigeeParameters() const ...@@ -272,9 +275,12 @@ Trk::Track::perigeeParameters() const
const DataVector<const Trk::MeasurementBase>* Trk::Track::measurementsOnTrack() const const DataVector<const Trk::MeasurementBase>* Trk::Track::measurementsOnTrack() const
{ {
if (!m_trackStateVector) {
return nullptr;
}
// We only need to do work if not valid. // We only need to do work if not valid.
if ( m_trackStateVector and !m_cachedMeasurementVector.isValid()){ if (!m_cachedMeasurementVector.isValid()){
// create new DataVector which DOES NOT OWN ELEMENTS . // create new DataVector which DOES NOT OWN ELEMENTS .
DataVector< const Trk::MeasurementBase> tmpMeasurementVector(SG::VIEW_ELEMENTS); DataVector< const Trk::MeasurementBase> tmpMeasurementVector(SG::VIEW_ELEMENTS);
// for measurements on track it is very likely that #(meas) ~ #(TSOS)-> reserve(#(TSOS)) // for measurements on track it is very likely that #(meas) ~ #(TSOS)-> reserve(#(TSOS))
...@@ -299,6 +305,9 @@ const DataVector<const Trk::MeasurementBase>* Trk::Track::measurementsOnTrack() ...@@ -299,6 +305,9 @@ const DataVector<const Trk::MeasurementBase>* Trk::Track::measurementsOnTrack()
const DataVector<const Trk::MeasurementBase>* Trk::Track::outliersOnTrack() const const DataVector<const Trk::MeasurementBase>* Trk::Track::outliersOnTrack() const
{ {
if (!m_trackStateVector) {
return nullptr;
}
//We only need to do work if not valid //We only need to do work if not valid
if ( !m_cachedOutlierVector.isValid()){ if ( !m_cachedOutlierVector.isValid()){
// create new DataVector which DOES NOT OWN ELEMENTS . // create new DataVector which DOES NOT OWN ELEMENTS .
...@@ -318,7 +327,14 @@ const DataVector<const Trk::MeasurementBase>* Trk::Track::outliersOnTrack() cons ...@@ -318,7 +327,14 @@ const DataVector<const Trk::MeasurementBase>* Trk::Track::outliersOnTrack() cons
return m_cachedOutlierVector.ptr(); return m_cachedOutlierVector.ptr();
} }
void Trk::Track::setTrackStateOnSurfaces(DataVector<const Trk::TrackStateOnSurface>* input) void Trk::Track::setFitQuality(const FitQuality* quality)
{
delete m_fitQuality;
m_fitQuality = quality;
}
void Trk::Track::setTrackStateOnSurfaces(
DataVector<const Trk::TrackStateOnSurface>* input)
{ {
delete m_trackStateVector; // delete existing delete m_trackStateVector; // delete existing
m_trackStateVector = input; // add new m_trackStateVector = input; // add new
......
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