ATLAS Offline Software
Loading...
Searching...
No Matches
Analysis_Missed.cxx
Go to the documentation of this file.
1
9
10
11#include <cmath>
12
15
16
18
19 // Create track number histograms
20 m_h_ntrack = new TH1D(std::string(m_name+"-ntracks").c_str(), std::string(m_name+" n tracks").c_str(), 10, -0.5, 9.5);
21 m_h_ntrackfrac = new TH1D(std::string(m_name+"-ntracksfrac").c_str(), std::string(m_name+" n tracks fraction").c_str(), 20, -0.5, 1.5);
24
25 // Create track parameter histograms
26 m_h_eta = new TH1D(std::string(m_name+"-eta").c_str(), std::string(m_name+" eta distribution").c_str(), 100, -3, 3);
27 m_h_phi = new TH1D(std::string(m_name+"-phi").c_str(), std::string(m_name+" phi distribution").c_str(), 100, -3.15, 3.15);
28 m_h_z0 = new TH1D(std::string(m_name+"-z0").c_str(), std::string(m_name+" z0 distribution").c_str(), 100, -200.0, 200.0);
29 m_h_d0 = new TH1D(std::string(m_name+"-d0").c_str(), std::string(m_name+" d0 distribution").c_str(), 100, -5.0, 5.0);
30 m_h_pT = new TH1D(std::string(m_name+"-pT").c_str(), std::string(m_name+" pT distribution").c_str(), 100, -10000, 10000);
31 m_h_chi2 = new TH1D(std::string(m_name+"-chi2").c_str(), std::string(m_name+" chi2 distribution").c_str(), 1000, -10, 990);
38
39 // Create track hit histograms
40 m_h_blay = new TH1D(std::string(m_name+"-blay").c_str(), std::string(m_name+" blayer").c_str(), 2, -0.5, 1.5);
41 m_h_pixel = new TH1D(std::string(m_name+"-pixel").c_str(), std::string(m_name+" pixel").c_str(), 10, -0.5, 9.5);
42 m_h_sct = new TH1D(std::string(m_name+"-sct").c_str(), std::string(m_name+" sct").c_str(), 12, -0.5, 11.5);
43 m_h_silicon = new TH1D(std::string(m_name+"-silicon").c_str(), std::string(m_name+" silicon").c_str(), 20, -0.5, 19.5);
44 m_h_straw = new TH1D(std::string(m_name+"-straw").c_str(), std::string(m_name+" straw").c_str(), 40, -0.5, 39.5);
45 m_h_tr = new TH1D(std::string(m_name+"-tr").c_str(), std::string(m_name+" tr").c_str(), 40, -0.5, 39.5);
46 m_h_patt = new TH1D(std::string(m_name+"-pattern").c_str(), std::string(m_name+" pattern").c_str(), 19, -0.5, 18.5);
47 m_h_firstpatt = new TH1D(std::string(m_name+"-firstpattern").c_str(), std::string(m_name+" first pattern").c_str(), 19, -0.5, 18.5);
56
57 // Create 2D histograms
58
59 m_h_etaphi = new TH2D(std::string(m_name+"-etaphi").c_str(), std::string(m_name+" etaphi").c_str(), 100, -3.0, 3.0, 100, -3.15, 3.15);
60 m_h_etapatt = new TH2D(std::string(m_name+"-etapatt").c_str(), std::string(m_name+" etapatt").c_str(), 19, -0.5, 18.5, 100, -3.0, 3.0);
61 m_h_phipatt = new TH2D(std::string(m_name+"-phipatt").c_str(), std::string(m_name+" phipatt").c_str(), 19, -0.5, 18.5, 100, -3.15, 3.15);
65
66}
67
68
72
73
74
75void Analysis_Missed::execute(const std::vector<TIDA::Track*>& referenceTracks,
76 const std::vector<TIDA::Track*>& testTracks,
77 TrackAssociator* /*associator*/) {
78
79
80 // Get authors
81 int mainAuthor=-1; int countMain=0;
82 int testAuthor=-1; int countTest=0;
83 std::vector<TIDA::Track*>::const_iterator test, testEnd=testTracks.end();
84 for(test=testTracks.begin(); test!=testEnd; ++test) {
85 // Check main author
86 if(mainAuthor==-1) mainAuthor=(*test)->author();
87 // Check test author
88 if(testAuthor==-1&&((*test)->author()!=mainAuthor)) testAuthor=(*test)->author();
89 // Count tracks
90 if((*test)->author()==mainAuthor) countMain++;
91 if((*test)->author()==testAuthor) countTest++;
92 }
93
94 // Fill track number histograms
95 if(testAuthor<mainAuthor) {
96 m_h_ntrack->Fill((double)(countMain));
97 m_h_ntrackfrac->Fill((double)(countMain-countTest)/((double)countMain));
98 }
99
100 if(mainAuthor==-1 || testAuthor==-1) return;
101
102 // Loop over test tracks
103 std::vector<TIDA::Track*>::const_iterator test2, test2End=testTracks.end();
104 std::vector<TIDA::Track*>::const_iterator ref, refEnd=referenceTracks.end();
105 for(test=testTracks.begin(); test!=testEnd; ++test) {
106
107 // Check pT
108 if(fabs((*test)->pT())<2000) continue;
109 if(fabs((*test)->eta())>1.5) continue;
110
111 // Check author
112 if((*test)->author()!=mainAuthor) continue;
113
114 // Get test parameters
115 double testEta = (*test)->eta();
116 double testPhi = phi((*test)->phi());
117 double testZ0 = (*test)->z0();
118 double testD0 = (*test)->a0();
119 double testPT = (*test)->pT();
120 double testChi2 = (*test)->chi2();
121
122 // Get test hits
123 double testBlay = (*test)->bLayerHits();
124 double testPixel = (*test)->pixelHits();
125 double testSct = (*test)->sctHits();
126 double testSilicon = (*test)->siHits();
127 double testStraw = (*test)->strawHits();
128 double testTr = (*test)->trHits();
129
130 unsigned int testPattern = (*test)->hitPattern();
131
132 // Matches
133 bool matchOffline=false;
134 bool matchOnline=false;
135
136 // Loop over reference tracks
137 for(ref=referenceTracks.begin(); ref!=refEnd; ++ref){
138 // Get ref parameters
139 double refEta = (*ref)->eta();
140 double refPhi = phi((*ref)->phi());
141 // Check matching
142 if(deltaR(testEta, refEta, testPhi, refPhi)<0.05) matchOffline=true;
143 }
144 if(!matchOffline) continue;
145
146 // Loop over test tracks
147 for(test2=testTracks.begin(); test2!=test2End; ++test2) {
148 // Check author
149 if((*test2)->author()!=testAuthor) continue;
150 // Get ref parameters
151 double test2Eta = (*test2)->eta();
152 double test2Phi = phi((*test2)->phi());
153 // Check matching
154 if(deltaR(testEta, test2Eta, testPhi, test2Phi)<0.05) matchOnline=true;
155 }
156
157 if(!matchOnline) {
158
159 std::cout << "MISSING TRACK FOUND!" << std::endl;
160
161 // Fill parameter distribution plots
162 m_h_etaphi->Fill(testEta,testPhi);
163 m_h_eta->Fill(testEta);
164 m_h_phi->Fill(testPhi);
165 m_h_z0->Fill(testZ0);
166 m_h_d0->Fill(testD0);
167 m_h_pT->Fill(testPT);
168 m_h_chi2->Fill(testChi2);
169
170 // Fill hit distribution plots
171 m_h_blay->Fill(testBlay);
172 m_h_pixel->Fill(testPixel);
173 m_h_sct->Fill(testSct);
174 m_h_silicon->Fill(testSilicon);
175 m_h_straw->Fill(testStraw);
176 m_h_tr->Fill(testTr);
177
178 // Fill pattern plots
179 bool first=true;
180 for(int i=0;i<19;i++) {
181 if((testPattern&(int)pow(2,i))!=0) {
182 m_h_patt->Fill(i);
183 if(first){m_h_firstpatt->Fill(i);first=false;}
184 m_h_etapatt->Fill(i,testEta);
185 m_h_phipatt->Fill(i,testPhi);
186 }
187 }
188 }
189 }
190}
191
192
193
197
198
199
200double Analysis_Missed::phi(double p) {
201 if(p < -M_PI) p += 2*M_PI;
202 if(p > M_PI) p -= 2*M_PI;
203 return p;
204}
205
206double Analysis_Missed::deltaR(double eta1, double eta2, double phi1, double phi2){
207 return sqrt((eta1-eta2)*(eta1-eta2) + (phi1-phi2)*(phi1-phi2));
208}
const boost::regex ref(r_ef)
#define M_PI
Scalar phi() const
phi method
TIDA::Associator< TIDA::Track > TrackAssociator
constexpr int pow(int base, int exp) noexcept
virtual void execute(const std::vector< TIDA::Track * > &referenceTracks, const std::vector< TIDA::Track * > &testTracks, TrackAssociator *associator)
Analysis_Missed(const std::string &name)
double phi(double p)
double deltaR(double eta1, double eta2, double phi1, double phi2)
virtual void finalise()
virtual void initialise()
standard operation interface
void addHistogram(TH1 *h)
std::string m_name
identifier of the of the analysis - also used for the root directory into which the histograms are pu...
const std::string & name() const
return identifier
TrackAnalysis(const std::string &name)
the beam test parts are not really usable in a multithreaded environment