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