ATLAS Offline Software
Loading...
Searching...
No Matches
TrackMatchDeltaRCosmic.h
Go to the documentation of this file.
1/* emacs: this is -*- c++ -*- */
13
14
15#ifndef TRIGINDETANALYSISUTILS_TRACKMATCHDELTARCOSMIC_H
16#define TRIGINDETANALYSISUTILS_TRACKMATCHDELTARCOSMIC_H
17
18#include <iostream>
19#include <string>
20#include <cmath>
21#include <map>
22
23
26
27
29
30public:
31
32 TrackMatchDeltaRCosmic(const std::string& name, double R) :
33 TrackAssociator(name), m_R2(R*R)
34 { }
35
37
38 // virtual void match( const std::vector<Track*>& ref, const std::vector<Track*>& test ) {
39 virtual void match(const std::vector<TIDA::Track*>& s1,
40 const std::vector<TIDA::Track*>& s2 )
41 {
42 clear();
43
44 const std::vector<TIDA::Track*>& ref = s1;
45 const std::vector<TIDA::Track*>& test = s2;
46
47 // loop over reference tracks
48 for ( int i=ref.size() ; i-- ; ) {
49
50 TIDA::Track* reftrack = ref[i];
51
52 // find the closest track
53 TIDA::Track* tmptrack = NULL;
54 double R2min = 0;
55
56 // loop over test tracks
57 for ( int j=test.size() ; j-- ; ) {
58
59 TIDA::Track* testtrack = test[j];
60
61 double R2tmp = deltaR2( reftrack, testtrack );
62 double R2PItmp = deltaR2PI( reftrack, testtrack );
63
64 if ( R2PItmp<R2tmp ) R2tmp = R2PItmp;
65
66 // found a close track
67 if ( tmptrack==NULL || R2tmp<R2min ) {
68 R2min = R2tmp;
69 tmptrack = testtrack;
70 }
71 }
72
73 // is this inside the delta R specification?
74 if ( tmptrack && R2min<m_R2 ) {
75 mmatched.insert( map_type::value_type(reftrack,tmptrack) );
76 mrevmatched.insert( map_type::value_type(tmptrack,reftrack) );
77
78 std::cout << "\t\tSUTT matched " << *reftrack << "\t -> \t" << *tmptrack << "\tDr=" << R2min << std::endl;
79 }
80 }
81 }
82
83
84 virtual double deltaR2PI( const TIDA::Track* reftrack, const TIDA::Track* testtrack ) {
85 double deta = reftrack->eta()+testtrack->eta();
86 double dphi = reftrack->phi()-testtrack->phi()-M_PI;
87 if ( dphi> M_PI ) dphi-=2*M_PI;
88 if ( dphi<-M_PI ) dphi+=2*M_PI;
89 return deta*deta+dphi*dphi;
90 }
91
92 virtual double deltaR2( const TIDA::Track* reftrack, const TIDA::Track* testtrack ) {
93 double deta = reftrack->eta()-testtrack->eta();
94 double dphi = reftrack->phi()-testtrack->phi();
95 if ( dphi> M_PI ) dphi-=2*M_PI;
96 if ( dphi<-M_PI ) dphi+=2*M_PI;
97 return deta*deta+dphi*dphi;
98 }
99
100private:
101
102 double m_R2;
103
104};
105
106
107inline std::ostream& operator<<(std::ostream& s, const TrackMatchDeltaRCosmic& /*tm*/) {
108 return s;
109}
110
111
112#endif // TRIGINDETANALYSISUTILS_TRACKMATCHDELTARCOSMIC_H
const boost::regex ref(r_ef)
#define M_PI
TIDA::Associator< TIDA::Track > TrackAssociator
std::ostream & operator<<(std::ostream &s, const TrackMatchDeltaRCosmic &)
virtual double deltaR2(const TIDA::Track *reftrack, const TIDA::Track *testtrack)
virtual double deltaR2PI(const TIDA::Track *reftrack, const TIDA::Track *testtrack)
TrackMatchDeltaRCosmic(const std::string &name, double R)
virtual void match(const std::vector< TIDA::Track * > &s1, const std::vector< TIDA::Track * > &s2)