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