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
45 virtual std::unique_ptr<TrackAssociator> uclone() const override { return std::make_unique<Associator_DeltaRMatcher>(*this); }
46
47 virtual double distance( const TIDA::Track* t0, const TIDA::Track* t1 ) const override {
48 double deta = t0->eta()-t1->eta();
49 double dphi = t0->phi()-t1->phi();
50 if ( dphi> M_PI ) dphi-=2*M_PI;
51 if ( dphi<-M_PI ) dphi+=2*M_PI;
52 return std::sqrt( deta*deta + dphi*dphi );
53 }
54
55};
56
57
58
59
61
62public:
63
64 Associator_SecondBestpTMatcher(const std::string& name, double d) :
66 { }
67
69
70
71 virtual std::unique_ptr<TrackAssociator> uclone() const override { return std::make_unique<Associator_SecondBestpTMatcher>(*this); }
72
73 virtual double distance( const TIDA::Track* t0, const TIDA::Track* t1 ) const override {
74 double dpT = fabs( t0->pT()/1000 - t1->pT()/1000 );
75 //std::cout << "pT dist = " << dpT << " dpT / pT = " << dpT/fabs(t0->pT()/1000) << std::endl;
76 return dpT/(fabs(t0->pT()/1000));
77 }
78
79};
80
81
82
84
85public:
86
87 Associator_BestDeltaRMatcher(const std::string& name, double d) :
89 { }
90
92
93
94 virtual std::unique_ptr<TrackAssociator> uclone() const override { return std::make_unique<Associator_BestDeltaRMatcher>(*this); }
95
96 virtual double distance( const TIDA::Track* t0, const TIDA::Track* t1 ) const override {
97 double deta = t0->eta()-t1->eta();
98 double dphi = t0->phi()-t1->phi();
99 if ( dphi> M_PI ) dphi-=2*M_PI;
100 if ( dphi<-M_PI ) dphi+=2*M_PI;
101 return std::sqrt( deta*deta + dphi*dphi );
102 }
103
104};
105
106
107
108
109
110
111
112
114
115public:
116
117 Associator_BestDeltaRZMatcher(const std::string& name, double deta=0.05, double dphi=0.05, double dzed=5) :
118 Associator_BestMatcher(name, 1),
119 m_deta2(deta*deta),
120 m_dphi2(dphi*dphi),
121 m_dzed2(dzed*dzed)
122 { }
123
125
126
127 virtual std::unique_ptr<TrackAssociator> uclone() const override { return std::make_unique<Associator_BestDeltaRZMatcher>(*this); }
128
129 virtual double distance( const TIDA::Track* t0, const TIDA::Track* t1 ) const override {
130 double deta = t0->eta()-t1->eta();
131 double dphi = t0->phi()-t1->phi(); if ( dphi> M_PI ) dphi-=2*M_PI; if ( dphi<-M_PI ) dphi+=2*M_PI;
132 double dzed = t0->z0()-t1->z0();
133
134 double dr = std::sqrt( deta*deta/m_deta2 + dphi*dphi/m_dphi2 + dzed*dzed/m_dzed2 );
135
136 // std::cout << "RZ matcher dr: " << dr
137 // << "\t : \t" << deta*deta/m_deta2 << "\t" << dphi*dphi/m_dphi2 << "\t" << dzed*dzed/m_dzed2 << "\t" << *t1
138 // << std::endl;
139
140 return dr;
141 }
142
143protected:
144
145 double m_deta2;
146 double m_dphi2;
147 double m_dzed2;
148
149};
150
151
152
153
154
156 // public Clonable<Associator_BestDeltaRZSinThetaMatcher, TrackAssociator>,
157
158public:
159
160 Associator_BestDeltaRZSinThetaMatcher(const std::string& name, double deta=0.05, double dphi=0.05, double dzed=5) :
161 Associator_BestMatcher(name, 1),
162 m_deta2(deta*deta),
163 m_dphi2(dphi*dphi),
164 m_dzed2(dzed*dzed)
165 {
166 // std::cout << "Associator: Best RZ Matcher" << std::endl;
167 }
168
170
171
172 virtual std::unique_ptr<TrackAssociator> uclone() const override { return std::make_unique<Associator_BestDeltaRZSinThetaMatcher>(*this); }
173
174 virtual double distance( const TIDA::Track* t0, const TIDA::Track* t1 ) const override {
175 double theta = 2*std::atan(std::exp(-t1->eta()));
176
177 double deta = t0->eta()-t1->eta();
178 double dphi = t0->phi()-t1->phi(); if ( dphi> M_PI ) dphi-=2*M_PI; if ( dphi<-M_PI ) dphi+=2*M_PI;
179
180 double dzed = (t0->z0()-t1->z0())*std::sin(theta);
181
182 double dr = std::sqrt( deta*deta/m_deta2 + dphi*dphi/m_dphi2 + dzed*dzed/m_dzed2 );
183
184 // std::cout << "RZ matcher dr: " << dr
185 // << "\t : \t" << deta*deta/m_deta2 << "\t" << dphi*dphi/m_dphi2 << "\t" << dzed*dzed/m_dzed2 << "\t" << *t1
186 // << std::endl;
187
188 return dr;
189 }
190
191protected:
192
193 double m_deta2;
194 double m_dphi2;
195 double m_dzed2;
196
197};
198
199
200
201
203 // public Clonable<Associator_BestSigmaMatcher, TrackAssociator>,
204
205public:
206
207 Associator_BestSigmaMatcher(const std::string& name, double dsigma=1) :
208 Associator_BestMatcher(name, dsigma) {
209 }
210
212
213
214 virtual std::unique_ptr<TrackAssociator> uclone() const override { return std::make_unique<Associator_BestSigmaMatcher>(*this); }
215
216 virtual double distance( const TIDA::Track* t0, const TIDA::Track* t1 ) const override {
217 double deta = t1->eta()-t0->eta();
218 double dphi = t1->phi()-t0->phi();
219 if ( dphi> M_PI ) dphi-=2*M_PI;
220 if ( dphi<-M_PI ) dphi+=2*M_PI;
221 double dzed = t1->z0()-t0->z0();
222
223 // std::cout << *t0 << "\n" << *t1 << "\ndphi : " << dphi << std::endl;
224
225 deta /= t1->deta();
226 dphi /= t1->dphi();
227 dzed /= t1->dz0();
228
229 double dr = std::sqrt( deta*deta + dphi*dphi + dzed*dzed );
230
231 // std::cout << "Sigma matcher dr: " << dr
232 // << "\t : \t" << deta*deta << "\t" << dphi*dphi << "\t" << dzed*dzed << "\t" << *t1
233 // << std::endl;
234
235 return dr;
236 }
237
238};
239
240
241
242
244 // public Clonable<Associator_BestDetlaPhiMatcher, TrackAssociator>,
245
246public:
247
248 Associator_BestDeltaPhiMatcher(const std::string& name, double p) :
249 Associator_BestMatcher(name, p)
250 { }
251
253
254
255 virtual std::unique_ptr<TrackAssociator> uclone() const override { return std::make_unique<Associator_BestDeltaPhiMatcher>(*this); }
256
257 virtual double distance( const TIDA::Track* t0, const TIDA::Track* t1 ) const override {
258 double dphi = t0->phi()-t1->phi();
259 if ( dphi> M_PI ) dphi-=2*M_PI;
260 if ( dphi<-M_PI ) dphi+=2*M_PI;
261 return std::fabs( dphi );
262 }
263
264};
265
266
267
268
269#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
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
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 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 double distance(const TIDA::Track *t0, const TIDA::Track *t1) const 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
Associator_DeltaRMatcher(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_SecondBestpTMatcher(const std::string &name, double d)