ATLAS Offline Software
Loading...
Searching...
No Matches
Associator_BestMatch.h
Go to the documentation of this file.
1/* emacs: this is -*- c++ -*- */
12
13
14#ifndef TIDAUTILS_ASSOCIATOR_BESTMATCH_H
15#define TIDAUTILS_ASSOCIATOR_BESTMATCH_H
16
17#include <set>
18#include <map>
19#include <cmath>
20
21
24
26
27
28
30
31
32
33
35
36public:
37
38 Associator_DeltaRMatcher(const std::string& name, double d) :
40 { }
41
43
44 virtual TrackAssociator* clone() override { return new Associator_DeltaRMatcher(*this); }
45
46 virtual std::unique_ptr<TrackAssociator> uclone() const override { return std::make_unique<Associator_DeltaRMatcher>(*this); }
47
48 virtual double distance( const TIDA::Track* t0, const TIDA::Track* t1 ) const override {
49 double deta = t0->eta()-t1->eta();
50 double dphi = t0->phi()-t1->phi();
51 if ( dphi> M_PI ) dphi-=2*M_PI;
52 if ( dphi<-M_PI ) dphi+=2*M_PI;
53 return std::sqrt( deta*deta + dphi*dphi );
54 }
55
56};
57
58
59
60
62
63public:
64
65 Associator_SecondBestpTMatcher(const std::string& name, double d) :
67 { }
68
70
71 virtual TrackAssociator* clone() override { return new Associator_SecondBestpTMatcher(*this); }
72
73 virtual std::unique_ptr<TrackAssociator> uclone() const override { return std::make_unique<Associator_SecondBestpTMatcher>(*this); }
74
75 virtual double distance( const TIDA::Track* t0, const TIDA::Track* t1 ) const override {
76 double dpT = fabs( t0->pT()/1000 - t1->pT()/1000 );
77 //std::cout << "pT dist = " << dpT << " dpT / pT = " << dpT/fabs(t0->pT()/1000) << std::endl;
78 return dpT/(fabs(t0->pT()/1000));
79 }
80
81};
82
83
84
86
87public:
88
89 Associator_BestDeltaRMatcher(const std::string& name, double d) :
91 { }
92
94
95 virtual TrackAssociator* clone() override { return new Associator_BestDeltaRMatcher(*this); }
96
97 virtual std::unique_ptr<TrackAssociator> uclone() const override { return std::make_unique<Associator_BestDeltaRMatcher>(*this); }
98
99 virtual double distance( const TIDA::Track* t0, const TIDA::Track* t1 ) const override {
100 double deta = t0->eta()-t1->eta();
101 double dphi = t0->phi()-t1->phi();
102 if ( dphi> M_PI ) dphi-=2*M_PI;
103 if ( dphi<-M_PI ) dphi+=2*M_PI;
104 return std::sqrt( deta*deta + dphi*dphi );
105 }
106
107};
108
109
110
111
112
113
114
115
117
118public:
119
120 Associator_BestDeltaRZMatcher(const std::string& name, double deta=0.05, double dphi=0.05, double dzed=5) :
121 Associator_BestMatcher(name, 1),
122 m_deta2(deta*deta),
123 m_dphi2(dphi*dphi),
124 m_dzed2(dzed*dzed)
125 { }
126
128
129 virtual TrackAssociator* clone() override { return new Associator_BestDeltaRZMatcher(*this); }
130
131 virtual std::unique_ptr<TrackAssociator> uclone() const override { return std::make_unique<Associator_BestDeltaRZMatcher>(*this); }
132
133 virtual double distance( const TIDA::Track* t0, const TIDA::Track* t1 ) const override {
134 double deta = t0->eta()-t1->eta();
135 double dphi = t0->phi()-t1->phi(); if ( dphi> M_PI ) dphi-=2*M_PI; if ( dphi<-M_PI ) dphi+=2*M_PI;
136 double dzed = t0->z0()-t1->z0();
137
138 double dr = std::sqrt( deta*deta/m_deta2 + dphi*dphi/m_dphi2 + dzed*dzed/m_dzed2 );
139
140 // std::cout << "RZ matcher dr: " << dr
141 // << "\t : \t" << deta*deta/m_deta2 << "\t" << dphi*dphi/m_dphi2 << "\t" << dzed*dzed/m_dzed2 << "\t" << *t1
142 // << std::endl;
143
144 return dr;
145 }
146
147protected:
148
149 double m_deta2;
150 double m_dphi2;
151 double m_dzed2;
152
153};
154
155
156
157
158
160 // public Clonable<Associator_BestDeltaRZSinThetaMatcher, TrackAssociator>,
161
162public:
163
164 Associator_BestDeltaRZSinThetaMatcher(const std::string& name, double deta=0.05, double dphi=0.05, double dzed=5) :
165 Associator_BestMatcher(name, 1),
166 m_deta2(deta*deta),
167 m_dphi2(dphi*dphi),
168 m_dzed2(dzed*dzed)
169 {
170 // std::cout << "Associator: Best RZ Matcher" << std::endl;
171 }
172
174
175 virtual TrackAssociator* clone() override { return new Associator_BestDeltaRZSinThetaMatcher(*this); }
176
177 virtual std::unique_ptr<TrackAssociator> uclone() const override { return std::make_unique<Associator_BestDeltaRZSinThetaMatcher>(*this); }
178
179 virtual double distance( const TIDA::Track* t0, const TIDA::Track* t1 ) const override {
180 double theta = 2*std::atan(std::exp(-t1->eta()));
181
182 double deta = t0->eta()-t1->eta();
183 double dphi = t0->phi()-t1->phi(); if ( dphi> M_PI ) dphi-=2*M_PI; if ( dphi<-M_PI ) dphi+=2*M_PI;
184
185 double dzed = (t0->z0()-t1->z0())*std::sin(theta);
186
187 double dr = std::sqrt( deta*deta/m_deta2 + dphi*dphi/m_dphi2 + dzed*dzed/m_dzed2 );
188
189 // std::cout << "RZ matcher dr: " << dr
190 // << "\t : \t" << deta*deta/m_deta2 << "\t" << dphi*dphi/m_dphi2 << "\t" << dzed*dzed/m_dzed2 << "\t" << *t1
191 // << std::endl;
192
193 return dr;
194 }
195
196protected:
197
198 double m_deta2;
199 double m_dphi2;
200 double m_dzed2;
201
202};
203
204
205
206
208 // public Clonable<Associator_BestSigmaMatcher, TrackAssociator>,
209
210public:
211
212 Associator_BestSigmaMatcher(const std::string& name, double dsigma=1) :
213 Associator_BestMatcher(name, dsigma) {
214 }
215
217
218 virtual TrackAssociator* clone() override { return new Associator_BestSigmaMatcher(*this); }
219
220 virtual std::unique_ptr<TrackAssociator> uclone() const override { return std::make_unique<Associator_BestSigmaMatcher>(*this); }
221
222 virtual double distance( const TIDA::Track* t0, const TIDA::Track* t1 ) const override {
223 double deta = t1->eta()-t0->eta();
224 double dphi = t1->phi()-t0->phi();
225 if ( dphi> M_PI ) dphi-=2*M_PI;
226 if ( dphi<-M_PI ) dphi+=2*M_PI;
227 double dzed = t1->z0()-t0->z0();
228
229 // std::cout << *t0 << "\n" << *t1 << "\ndphi : " << dphi << std::endl;
230
231 deta /= t1->deta();
232 dphi /= t1->dphi();
233 dzed /= t1->dz0();
234
235 double dr = std::sqrt( deta*deta + dphi*dphi + dzed*dzed );
236
237 // std::cout << "Sigma matcher dr: " << dr
238 // << "\t : \t" << deta*deta << "\t" << dphi*dphi << "\t" << dzed*dzed << "\t" << *t1
239 // << std::endl;
240
241 return dr;
242 }
243
244};
245
246
247
248
250 // public Clonable<Associator_BestDetlaPhiMatcher, TrackAssociator>,
251
252public:
253
254 Associator_BestDeltaPhiMatcher(const std::string& name, double p) :
255 Associator_BestMatcher(name, p)
256 { }
257
259
260 virtual TrackAssociator* clone() override { return new Associator_BestDeltaPhiMatcher(*this); }
261
262 virtual std::unique_ptr<TrackAssociator> uclone() const override { return std::make_unique<Associator_BestDeltaPhiMatcher>(*this); }
263
264 virtual double distance( const TIDA::Track* t0, const TIDA::Track* t1 ) const override {
265 double dphi = t0->phi()-t1->phi();
266 if ( dphi> M_PI ) dphi-=2*M_PI;
267 if ( dphi<-M_PI ) dphi+=2*M_PI;
268 return std::fabs( dphi );
269 }
270
271};
272
273
274
275
276#endif // TIDAUTILS_ASSOCIATOR_BESTMATCH_H
#define M_PI
Scalar theta() const
theta method
BestMatcher< TIDA::Track > Associator_BestMatcher
truely generic template class of a best matching algorithm based on an efficient implementation of th...
static Double_t t0
TIDA::Associator< TIDA::Track > TrackAssociator
virtual TrackAssociator * clone() override
virtual double distance(const TIDA::Track *t0, const TIDA::Track *t1) const override
Associator_BestDeltaPhiMatcher(const std::string &name, double p)
virtual std::unique_ptr< TrackAssociator > uclone() const override
virtual TrackAssociator * clone() override
Associator_BestDeltaRMatcher(const std::string &name, double d)
virtual std::unique_ptr< TrackAssociator > uclone() const override
virtual double distance(const TIDA::Track *t0, const TIDA::Track *t1) const override
Associator_BestDeltaRZMatcher(const std::string &name, double deta=0.05, double dphi=0.05, double dzed=5)
virtual TrackAssociator * clone() override
virtual std::unique_ptr< TrackAssociator > uclone() const override
virtual double distance(const TIDA::Track *t0, const TIDA::Track *t1) const override
Associator_BestDeltaRZSinThetaMatcher(const std::string &name, double deta=0.05, double dphi=0.05, double dzed=5)
virtual std::unique_ptr< TrackAssociator > uclone() const override
virtual double distance(const TIDA::Track *t0, const TIDA::Track *t1) const override
virtual TrackAssociator * clone() override
virtual double distance(const TIDA::Track *t0, const TIDA::Track *t1) const override
virtual TrackAssociator * clone() override
Associator_BestSigmaMatcher(const std::string &name, double dsigma=1)
virtual std::unique_ptr< TrackAssociator > uclone() const override
virtual double distance(const TIDA::Track *t0, const TIDA::Track *t1) const override
virtual std::unique_ptr< TrackAssociator > uclone() const override
virtual TrackAssociator * clone() override
Associator_DeltaRMatcher(const std::string &name, double d)
virtual TrackAssociator * clone() override
virtual std::unique_ptr< TrackAssociator > uclone() const override
virtual double distance(const TIDA::Track *t0, const TIDA::Track *t1) const override
Associator_SecondBestpTMatcher(const std::string &name, double d)