ATLAS Offline Software
Loading...
Searching...
No Matches
PFMatchInterfaces.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
5/*
6 * PFMatchInterfaces.h
7 *
8 * Created on: 03.04.2014
9 * Author: tlodd
10 */
11
12#ifndef PFMATCHINTERFACES_H_
13#define PFMATCHINTERFACES_H_
14
15#include <vector>
16#include <cassert>
17
18#include "eflowRec/eflowUtil.h"
20
21namespace PFMatch {
22
24#define TrackLayer eflowCalo
25
26/* The track and cluster abstract interface classes */
27
28class ITrack {
29protected:
30 ITrack() { }
31public:
32 virtual ~ITrack() { }
33
35};
36
37class ICluster {
38protected:
40public:
41 virtual ~ICluster () { }
42
43 virtual double eta() const = 0;
44 virtual double phi() const = 0;
45 virtual double etaMean() const = 0;
46 virtual double phiMean() const = 0;
47 virtual double etaVariance() const = 0;
48 virtual double phiVariance() const = 0;
49 virtual bool calVarianceStatus() const = 0;
50 //set functions
51 virtual void etaMean(double) = 0;
52 virtual void phiMean(double) = 0;
53 virtual void etaVariance(double) = 0;
54 virtual void phiVariance(double) = 0;
55 virtual void setCalVarianceStatus() = 0;
56 //
57 virtual unsigned int nCells() const = 0;
58 virtual const std::vector<double>& cellPhi() const = 0;
59 virtual const std::vector<double>& cellEta() const = 0;
60};
61
62
63/* Position base class */
64
65class IPosition {
66protected:
68public:
69 virtual ~IPosition() { }
70};
71
72
73/* PositionProvider dummy base class */
74
76protected:
78public:
79 virtual ~IPositionProvider() { }
80};
81
82/* PositionProviderInterface */
83
84template <class ObjectType, class PositionType>
86protected:
88
89public:
90 virtual ~PositionProvider() {}
91 virtual PositionType getPosition(ObjectType* cluster) const = 0;
92
93};
94
95template <class PositionType>
96class ClusterPositionProvider: public PositionProvider<ICluster, PositionType> { };
97
98template <class PositionType>
99class TrackPositionProvider: public PositionProvider<ITrack, PositionType> { };
100
101/* Distance calculator interface */
102
103template<class TrackPositionType, class ClusterPositionType>
105protected:
107public:
109
110 virtual double distanceBetween(const TrackPositionType& position1, const ClusterPositionType& position2) const = 0;
111};
112
113
114/* The distance provider */
115
117protected:
119public:
120 virtual ~IDistanceProvider() { }
121
122 virtual double distanceBetween(ITrack* track, ICluster* cluster) const = 0;
123};
124
125template<class TrackPositionType, class ClusterPositionType>
127public:
128 DistanceProvider(std::unique_ptr<IPositionProvider> trackPosition,
129 std::unique_ptr<IPositionProvider> clusterPosition,
130 std::unique_ptr<DistanceCalculator<TrackPositionType, ClusterPositionType> > distanceCalculator):
131 // dynamic_cast to ensure that the right distance provider classes are received
132 m_trackPosition(dynamic_cast<TrackPositionProvider<TrackPositionType>*>(trackPosition.release())),
133 m_clusterPosition(dynamic_cast<ClusterPositionProvider<ClusterPositionType>*>(clusterPosition.release())),
134 m_distanceCalculator(std::move(distanceCalculator)) {
135 // in debug builds we check the pointer validity here to catch a problem early on
136 assert(m_trackPosition.get());
137 assert(m_clusterPosition.get());
138 assert(m_distanceCalculator.get());
139 }
140 virtual ~DistanceProvider() {}
141
142 double distanceBetween(ITrack* track, ICluster* cluster) const {
143 TrackPositionProvider<TrackPositionType>* trackPositionProvider = m_trackPosition.get();
145 return m_distanceCalculator->distanceBetween(trackPositionProvider->getPosition(track),clusterPositionProvider->getPosition(cluster));
146 }
147
148private:
149 std::unique_ptr<TrackPositionProvider<TrackPositionType> > m_trackPosition;
150 std::unique_ptr<ClusterPositionProvider<ClusterPositionType> > m_clusterPosition;
151 std::unique_ptr<DistanceCalculator<TrackPositionType, ClusterPositionType> > m_distanceCalculator;
152};
153
154
155}
156
157#endif /* PFMATCHINTERFACES_H_ */
ObjectType
Definition BaseObject.h:11
virtual double distanceBetween(const TrackPositionType &position1, const ClusterPositionType &position2) const =0
std::unique_ptr< ClusterPositionProvider< ClusterPositionType > > m_clusterPosition
DistanceProvider(std::unique_ptr< IPositionProvider > trackPosition, std::unique_ptr< IPositionProvider > clusterPosition, std::unique_ptr< DistanceCalculator< TrackPositionType, ClusterPositionType > > distanceCalculator)
double distanceBetween(ITrack *track, ICluster *cluster) const
std::unique_ptr< DistanceCalculator< TrackPositionType, ClusterPositionType > > m_distanceCalculator
std::unique_ptr< TrackPositionProvider< TrackPositionType > > m_trackPosition
virtual void etaMean(double)=0
virtual double etaMean() const =0
virtual bool calVarianceStatus() const =0
virtual void setCalVarianceStatus()=0
virtual double phiMean() const =0
virtual void etaVariance(double)=0
virtual unsigned int nCells() const =0
virtual double phiVariance() const =0
virtual const std::vector< double > & cellPhi() const =0
virtual const std::vector< double > & cellEta() const =0
virtual double phi() const =0
virtual void phiVariance(double)=0
virtual void phiMean(double)=0
virtual double etaVariance() const =0
virtual double eta() const =0
virtual double distanceBetween(ITrack *track, ICluster *cluster) const =0
virtual eflowEtaPhiPosition etaPhiInLayer(LayerType layer) const =0
virtual PositionType getPosition(ObjectType *cluster) const =0
static std::string release
Definition computils.h:50
eflowCalo::LAYER LayerType
STL namespace.