18#ifndef TRIGIDR4MONITORING_BESTMATCH_H
19#define TRIGIDR4MONITORING_BESTMATCH_H
31template<
typename T,
typename R=T>
42 virtual std::unique_ptr<TIDA::Associator<T,R>>
uclone()
const override {
return std::make_unique<TDeltaRMatcher<T,R>>(*this); }
44 virtual double distance(
const T*
t0,
const R* t1 )
const override {
45 double deta =
t0->eta()-t1->eta();
46 double dphi =
t0->phi()-t1->phi();
49 return ( deta*deta + dphi*dphi );
56template<
typename T,
typename R=T>
67 virtual std::unique_ptr<TIDA::Associator<T,R>>
uclone()
const override {
return std::make_unique<TSecondBestpTMatcher<T,R>>(*this); }
69 virtual double distance(
const T*
t0,
const R* t1 )
const override {
70 double dpT = fabs(
t0->pt() - t1->pt() );
71 return dpT/(fabs(
t0->pt()));
79template<
typename T,
typename R=T>
84 TDeltaRZMatcher(
const std::string& name,
double deta=0.05,
double dphi=0.05,
double dzed=5) :
93 virtual std::unique_ptr<TIDA::Associator<T,R>>
uclone()
const override {
return std::make_unique<TDeltaRZMatcher<T,R>>(*this); }
95 virtual double distance(
const T*
t0,
const R* t1 )
const override {
96 double deta =
t0->eta()-t1->eta();
97 double dphi =
t0->phi()-t1->phi();
if ( dphi>
M_PI ) dphi-=2*
M_PI;
if ( dphi<-
M_PI ) dphi+=2*
M_PI;
98 double dzed =
t0->z0()-t1->z0();
116template<
typename T,
typename R=T>
130 virtual std::unique_ptr<TIDA::Associator<T,R>>
uclone()
const override {
return std::make_unique<TDeltaRZSinThetaMatcher<T,R>>(*this); }
132 virtual double distance(
const T*
t0,
const R* t1 )
const override {
133 double theta = 2*std::atan(std::exp(-t1->eta()));
135 double deta =
t0->eta()-t1->eta();
136 double dphi =
t0->phi()-t1->phi();
if ( dphi>
M_PI ) dphi-=2*
M_PI;
if ( dphi<-
M_PI ) dphi+=2*
M_PI;
138 double dzed = (
t0->z0()-t1->z0())*std::sin(
theta);
155template<
typename T,
typename R=T>
166 virtual std::unique_ptr<TIDA::Associator<T,R>>
uclone()
const override {
return std::make_unique<TSigmaMatcher<T,R>>(*this); }
168 virtual double distance(
const T*
t0,
const R* t1 )
const override {
169 double deta = t1->eta()-
t0->eta();
170 double dphi = t1->phi()-
t0->phi();
173 double dzed = t1->z0()-
t0->z0();
179 double dr = std::sqrt( deta*deta + dphi*dphi + dzed*dzed );
189template<
typename T,
typename R=T>
200 virtual std::unique_ptr<TIDA::Associator<T,R>>
uclone()
const override {
return std::make_unique<TDeltaPhiMatcher<T,R>>(*this); }
202 virtual double distance(
const T*
t0,
const R* t1 )
const override {
203 double dphi =
t0->phi()-t1->phi();
206 return std::fabs( dphi );
214template<
typename T,
typename R=T>
225 virtual std::unique_ptr<TIDA::Associator<T,R>>
uclone()
const override {
return std::make_unique<TDeltaZMatcher<T,R>>(*this); }
227 virtual double distance(
const T*
t0,
const R* t1 )
const override {
228 double dzed =
t0->z()-t1->z();
229 return std::fabs( dzed );
Scalar theta() const
theta method
truely generic template class of a best matching algorithm based on an efficient implementation of th...
BestMatcher(const std::string &name, double d)
virtual std::unique_ptr< TIDA::Associator< T, R > > uclone() const override
virtual double distance(const T *t0, const R *t1) const override
virtual ~TDeltaPhiMatcher()
TDeltaPhiMatcher(const std::string &name, double p)
virtual ~TDeltaRMatcher()
TDeltaRMatcher(const std::string &name, double d)
virtual std::unique_ptr< TIDA::Associator< T, R > > uclone() const override
virtual double distance(const T *t0, const R *t1) const override
virtual std::unique_ptr< TIDA::Associator< T, R > > uclone() const override
TDeltaRZMatcher(const std::string &name, double deta=0.05, double dphi=0.05, double dzed=5)
virtual double distance(const T *t0, const R *t1) const override
virtual ~TDeltaRZMatcher()
virtual ~TDeltaRZSinThetaMatcher()
virtual double distance(const T *t0, const R *t1) const override
virtual std::unique_ptr< TIDA::Associator< T, R > > uclone() const override
TDeltaRZSinThetaMatcher(const std::string &name, double deta=0.05, double dphi=0.05, double dzed=5)
virtual std::unique_ptr< TIDA::Associator< T, R > > uclone() const override
virtual double distance(const T *t0, const R *t1) const override
virtual ~TDeltaZMatcher()
TDeltaZMatcher(const std::string &name, double p)
TSecondBestpTMatcher(const std::string &name, double d)
virtual ~TSecondBestpTMatcher()
virtual std::unique_ptr< TIDA::Associator< T, R > > uclone() const override
virtual double distance(const T *t0, const R *t1) const override
virtual std::unique_ptr< TIDA::Associator< T, R > > uclone() const override
TSigmaMatcher(const std::string &name, double dsigma=1)
virtual double distance(const T *t0, const R *t1) const override