ATLAS Offline Software
Analysis_Missed.cxx
Go to the documentation of this file.
1 
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 
70 
71 }
72 
73 
74 
75 void 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 
195 
196 }
197 
198 
199 
200 double 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 
206 double Analysis_Missed::deltaR(double eta1, double eta2, double phi1, double phi2){
207  return sqrt((eta1-eta2)*(eta1-eta2) + (phi1-phi2)*(phi1-phi2));
208 }
Analysis_Missed::m_h_etapatt
TH2 * m_h_etapatt
Definition: Analysis_Missed.h:73
TIDA::Associator
Definition: TIDAAssociator.h:24
Track.h
Analysis_Missed::initialise
virtual void initialise()
standard operation interface
Definition: Analysis_Missed.cxx:69
Analysis_Missed::m_h_etaphi
TH2 * m_h_etaphi
Definition: Analysis_Missed.h:72
Analysis_Missed::m_h_patt
TH1 * m_h_patt
Definition: Analysis_Missed.h:68
Analysis_Missed::m_h_eta
TH1 * m_h_eta
Definition: Analysis_Missed.h:54
ParticleGun_SamplingFraction.eta2
eta2
Definition: ParticleGun_SamplingFraction.py:96
Analysis_Missed::phi
double phi(double p)
Definition: Analysis_Missed.cxx:200
Analysis_Missed::m_h_silicon
TH1 * m_h_silicon
Definition: Analysis_Missed.h:65
Analysis_Missed::m_h_blay
TH1 * m_h_blay
Definition: Analysis_Missed.h:62
python.TrigConfigSvcUtils.test2
def test2()
Definition: TrigConfigSvcUtils.py:985
M_PI
#define M_PI
Definition: ActiveFraction.h:11
Analysis_Missed::finalise
virtual void finalise()
Definition: Analysis_Missed.cxx:194
xAOD::eta1
setEt setPhi setE277 setWeta2 eta1
Definition: TrigEMCluster_v1.cxx:41
Analysis_Missed::m_h_pT
TH1 * m_h_pT
Definition: Analysis_Missed.h:58
Analysis_Missed::m_h_chi2
TH1 * m_h_chi2
Definition: Analysis_Missed.h:59
TrigInDetValidation_Base.test
test
Definition: TrigInDetValidation_Base.py:147
Analysis_Missed::m_h_ntrackfrac
TH1 * m_h_ntrackfrac
Definition: Analysis_Missed.h:51
Analysis_Missed::Analysis_Missed
Analysis_Missed(const std::string &name)
Definition: Analysis_Missed.cxx:17
Analysis_Missed::m_h_firstpatt
TH1 * m_h_firstpatt
Definition: Analysis_Missed.h:69
Analysis_Missed::execute
virtual void execute(const std::vector< TIDA::Track * > &referenceTracks, const std::vector< TIDA::Track * > &testTracks, TrackAssociator *associator)
Definition: Analysis_Missed.cxx:75
Analysis_Missed::m_h_phipatt
TH2 * m_h_phipatt
Definition: Analysis_Missed.h:74
Analysis_Missed::m_h_ntrack
TH1 * m_h_ntrack
Definition: Analysis_Missed.h:50
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
Analysis_Missed::m_h_phi
TH1 * m_h_phi
Definition: Analysis_Missed.h:55
lumiFormat.i
int i
Definition: lumiFormat.py:85
TrackAnalysis
Definition: TrackAnalysis.h:32
Analysis_Missed::m_h_sct
TH1 * m_h_sct
Definition: Analysis_Missed.h:64
Analysis_Missed::deltaR
double deltaR(double eta1, double eta2, double phi1, double phi2)
Definition: Analysis_Missed.cxx:206
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
Analysis_Missed.h
TrackAnalysis::addHistogram
void addHistogram(TH1 *h)
Definition: TrackAnalysis.h:97
Analysis_Missed::m_h_d0
TH1 * m_h_d0
Definition: Analysis_Missed.h:56
Analysis_Missed::m_h_tr
TH1 * m_h_tr
Definition: Analysis_Missed.h:67
ref
const boost::regex ref(r_ef)
Analysis_Missed::m_h_pixel
TH1 * m_h_pixel
Definition: Analysis_Missed.h:63
DeMoScan.first
bool first
Definition: DeMoScan.py:536
Analysis_Missed::m_h_z0
TH1 * m_h_z0
Definition: Analysis_Missed.h:57
pow
constexpr int pow(int base, int exp) noexcept
Definition: ap_fixedTest.cxx:15
TrackAnalysis::m_name
std::string m_name
identifier of the of the analysis - also used for the root directory into which the histograms are pu...
Definition: TrackAnalysis.h:145
Analysis_Missed::m_h_straw
TH1 * m_h_straw
Definition: Analysis_Missed.h:66