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 std::cout << "Associator: Best RZ Matcher" << std::endl;
127 }
128
130
131 virtual TrackAssociator* clone() override { return new Associator_BestDeltaRZMatcher(*this); }
132
133 virtual std::unique_ptr<TrackAssociator> uclone() const override { return std::make_unique<Associator_BestDeltaRZMatcher>(*this); }
134
135 virtual double distance( const TIDA::Track* t0, const TIDA::Track* t1 ) const override {
136 double deta = t0->eta()-t1->eta();
137 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();
139
140 double dr = std::sqrt( deta*deta/m_deta2 + dphi*dphi/m_dphi2 + dzed*dzed/m_dzed2 );
141
142 // std::cout << "RZ matcher dr: " << dr
143 // << "\t : \t" << deta*deta/m_deta2 << "\t" << dphi*dphi/m_dphi2 << "\t" << dzed*dzed/m_dzed2 << "\t" << *t1
144 // << std::endl;
145
146 return dr;
147 }
148
149protected:
150
151 double m_deta2;
152 double m_dphi2;
153 double m_dzed2;
154
155};
156
157
158
159
160
162 // public Clonable<Associator_BestDeltaRZSinThetaMatcher, TrackAssociator>,
163
164public:
165
166 Associator_BestDeltaRZSinThetaMatcher(const std::string& name, double deta=0.05, double dphi=0.05, double dzed=5) :
167 Associator_BestMatcher(name, 1),
168 m_deta2(deta*deta),
169 m_dphi2(dphi*dphi),
170 m_dzed2(dzed*dzed)
171 {
172 std::cout << "Associator: Best RZ Matcher" << std::endl;
173 }
174
176
177 virtual TrackAssociator* clone() override { return new Associator_BestDeltaRZSinThetaMatcher(*this); }
178
179 virtual std::unique_ptr<TrackAssociator> uclone() const override { return std::make_unique<Associator_BestDeltaRZSinThetaMatcher>(*this); }
180
181 virtual double distance( const TIDA::Track* t0, const TIDA::Track* t1 ) const override {
182 double theta = 2*std::atan(std::exp(-t1->eta()));
183
184 double deta = t0->eta()-t1->eta();
185 double dphi = t0->phi()-t1->phi(); if ( dphi> M_PI ) dphi-=2*M_PI; if ( dphi<-M_PI ) dphi+=2*M_PI;
186
187 double dzed = (t0->z0()-t1->z0())*std::sin(theta);
188
189 double dr = std::sqrt( deta*deta/m_deta2 + dphi*dphi/m_dphi2 + dzed*dzed/m_dzed2 );
190
191 // std::cout << "RZ matcher dr: " << dr
192 // << "\t : \t" << deta*deta/m_deta2 << "\t" << dphi*dphi/m_dphi2 << "\t" << dzed*dzed/m_dzed2 << "\t" << *t1
193 // << std::endl;
194
195 return dr;
196 }
197
198protected:
199
200 double m_deta2;
201 double m_dphi2;
202 double m_dzed2;
203
204};
205
206
207
208
210 // public Clonable<Associator_BestSigmaMatcher, TrackAssociator>,
211
212public:
213
214 Associator_BestSigmaMatcher(const std::string& name, double dsigma=1) :
215 Associator_BestMatcher(name, dsigma)
216 {
217 std::cout << "Associator: Best Sigma Matcher" << std::endl;
218 }
219
221
222 virtual TrackAssociator* clone() override { return new Associator_BestSigmaMatcher(*this); }
223
224 virtual std::unique_ptr<TrackAssociator> uclone() const override { return std::make_unique<Associator_BestSigmaMatcher>(*this); }
225
226 virtual double distance( const TIDA::Track* t0, const TIDA::Track* t1 ) const override {
227 double deta = t1->eta()-t0->eta();
228 double dphi = t1->phi()-t0->phi();
229 if ( dphi> M_PI ) dphi-=2*M_PI;
230 if ( dphi<-M_PI ) dphi+=2*M_PI;
231 double dzed = t1->z0()-t0->z0();
232
233 // std::cout << *t0 << "\n" << *t1 << "\ndphi : " << dphi << std::endl;
234
235 deta /= t1->deta();
236 dphi /= t1->dphi();
237 dzed /= t1->dz0();
238
239 double dr = std::sqrt( deta*deta + dphi*dphi + dzed*dzed );
240
241 // std::cout << "Sigma matcher dr: " << dr
242 // << "\t : \t" << deta*deta << "\t" << dphi*dphi << "\t" << dzed*dzed << "\t" << *t1
243 // << std::endl;
244
245 return dr;
246 }
247
248protected:
249
250 double m_deta2;
251 double m_dphi2;
252 double m_dzed2;
253
254};
255
256
257
258
260 // public Clonable<Associator_BestDetlaPhiMatcher, TrackAssociator>,
261
262public:
263
264 Associator_BestDeltaPhiMatcher(const std::string& name, double p) :
265 Associator_BestMatcher(name, p)
266 { }
267
269
270 virtual TrackAssociator* clone() override { return new Associator_BestDeltaPhiMatcher(*this); }
271
272 virtual std::unique_ptr<TrackAssociator> uclone() const override { return std::make_unique<Associator_BestDeltaPhiMatcher>(*this); }
273
274 virtual double distance( const TIDA::Track* t0, const TIDA::Track* t1 ) const override {
275 double dphi = t0->phi()-t1->phi();
276 if ( dphi> M_PI ) dphi-=2*M_PI;
277 if ( dphi<-M_PI ) dphi+=2*M_PI;
278 return std::fabs( dphi );
279 }
280
281};
282
283
284
285
286#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)