ATLAS Offline Software
Loading...
Searching...
No Matches
Associator_DeltaEtaPhi.h
Go to the documentation of this file.
1/* emacs: this is -*- c++ -*- */
10
13
14
15#ifndef TrigInDetAnalysisUtils_Associator_DeltaEtaPhi_H
16#define TrigInDetAnalysisUtils_Associator_DeltaEtaPhi_H
17
18
19#include <iostream>
20#include <string>
21#include <cmath>
22#include <map>
23
26
27
29
30public:
31
32 Associator_DeltaEtaPhi(const std::string& name, double deltaEta, double deltaPhi) : TrackAssociator(name), m_deltaEta(deltaEta), m_deltaPhi(deltaPhi) {}
33
35
36 virtual TrackAssociator* clone() override { return new Associator_DeltaEtaPhi(*this); }
37
38 virtual void match(const std::vector<TIDA::Track*>& referenceTracks,
39 const std::vector<TIDA::Track*>& testTracks) {
40
41 // Clear previously filled association map
42 clear();
43
44
45 // Loop over reference tracks
46 std::vector<TIDA::Track*>::const_iterator reference, referenceEnd=referenceTracks.end();
47 for(reference=referenceTracks.begin(); reference!=referenceEnd; reference++) {
48
49 // std::cout << "Offline = " << (*reference)->eta() << " " << (*reference)->phi() << " " << (*reference)->pT() << std::endl;
50
51 // Loop over test tracks and find the closest
52 TIDA::Track* bestMatch = NULL;
53 double bestDeltaR=1000;
54
55 std::vector<TIDA::Track*>::const_iterator test, testEnd=testTracks.end();
56 for(test=testTracks.begin(); test!=testEnd; test++) {
57
58 // Evaluate distance between reference and test tracks
59 double deta = (*reference)->eta() - (*test)->eta();
60 double dphi = (*reference)->phi() - (*test)->phi();
61 if(dphi>M_PI) dphi-=2*M_PI;
62 if(dphi<-M_PI) dphi+=2*M_PI;
63
64 if (fabs(deta)>m_deltaEta || fabs(dphi)>m_deltaPhi) continue;
65
66 double deltaR = (deta*deta)/(m_deltaEta*m_deltaEta)+(dphi*dphi)/(m_deltaPhi*m_deltaPhi);
67
68 // Check if this is the best match so far
69 if(bestMatch==NULL || deltaR<bestDeltaR) {
70 bestDeltaR = deltaR;
71 bestMatch = (*test);
72 }
73 }
74
75 // Check if the best match is within delta R specifications
76 if(bestMatch) {
77 // Create reference->test and test->reference associations
78 mmatched.insert(map_type::value_type(*reference, bestMatch));
79 mrevmatched.insert(map_type::value_type(bestMatch, *reference));
80 //std::cout << "Matched = " << bestMatch->eta() << " "<< bestMatch->phi() << " " << bestMatch->pT() << std::endl;
81 }
82 }
83 }
84
85private:
86
87 double m_deltaEta;
88 double m_deltaPhi;
89
90};
91
92
93#endif // TrigInDetAnalysisUtils_Associator_DeltaEtaPhi_H
94
#define M_PI
Scalar deltaPhi(const MatrixBase< Derived > &vec) const
Scalar deltaR(const MatrixBase< Derived > &vec) const
TIDA::Associator< TIDA::Track > TrackAssociator
Associator_DeltaEtaPhi(const std::string &name, double deltaEta, double deltaPhi)
virtual void match(const std::vector< TIDA::Track * > &referenceTracks, const std::vector< TIDA::Track * > &testTracks)
virtual TrackAssociator * clone() override