ATLAS Offline Software
TRT_Electron_Monitoring_Tool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // **********************************************************************
6 // Class to monitoring TRT HL threshold monitoring by looking at electrons
7 // Created by Benjamin Kaplan (kaplan) 2009-10-14
8 // Major Update by Benjamin Kaplan (kaplan) 2010-06-02
9 // xAOD migration: Steffen Henkelmann
10 // **********************************************************************
11 
13 #include "LWHists/TH1F_LW.h"
14 #include "LWHists/TH2F_LW.h"
15 #include "LWHists/TProfile_LW.h"
21 
22 namespace{
23 constexpr float electron_mass = 0.511 * Gaudi::Units::MeV;
24 constexpr float muon_mass = 105.66 * Gaudi::Units::MeV;
25 constexpr float pion_mass = 139.6 * Gaudi::Units::MeV;
26 
27 constexpr double profile_x_label_size = 0.03;
28 constexpr double profile_y_label_size = 0.03;
29 constexpr double profile_msize = 0.5;
30 constexpr int profile_mcolor = 2;
31 constexpr int profile_mstyle = 2;
32 }
33 
34 // *********************************************************************
35 // Public Methods
36 // *********************************************************************
37 
39 TRT_Electron_Monitoring_Tool( const std::string & type,
40  const std::string & name,
41  const IInterface* parent )
43  m_pTRTHelper (nullptr),
44  m_mgr (nullptr)
45 {
46  declareProperty( "trackName", m_tracksName="InDetTrackParticles" );
47  declareProperty( "electronName", m_electronsName="Electrons");
48  declareProperty( "conversionName", m_conversionName="ConversionCandidate");
49  declareProperty( "muonName", m_muonsName="Muons");
50  declareProperty( "isOnline",m_isOnline = true);
51  declareProperty( "doExpert",m_doExpert = true);
52  declareProperty( "doShift" ,m_doShift = true);
53  declareProperty( "doTracksMon", m_doTracksMon = true);
54  declareProperty( "doMuonMon", m_doMuonMon = true);
55  declareProperty( "doElectronMon", m_doElectronMon = true);
56  declareProperty( "doRecElectrons", m_doRecElectrons = true);
57  declareProperty( "doConversions", m_doConversions = true);
58  declareProperty( "isEMFlag", m_isEMFlag = "Tight");
59  declareProperty( "NEtaBins",m_nEtaBins = 100);
60  declareProperty( "NPhiBins",m_nPhiBins = 100);
61  declareProperty( "NZRBins" ,m_nZRBins = 100);
62  declareProperty( "ZRMax" ,m_ZRMax = 1.0);
63  declareProperty( "useTRTOnly", m_useTRTOnly = false);
64  declareProperty( "NMinTRTHits", m_NMinTRTHits = 0);
65  declareProperty( "pionTRTHitCut",m_PionTRTHitCut = 19);
66 }
67 
69 {
70 }
71 
74 {
75  if(ManagedMonitorToolBase::initialize().isFailure()) return StatusCode::FAILURE;
76  // Get ID helper for TRT to access various detector components
77  // like... straw, straw_layer, layer_or_wheel, phi_module etc...
79  // Retrieve detector manager
80  ATH_CHECK (detStore()->retrieve(m_mgr, "TRT"));
81  if(m_isEMFlag=="Loose") m_isEMType = ISEMLOOSE;
82  else if(m_isEMFlag=="Medium") m_isEMType = ISEMMEDIUM;
83  else if(m_isEMFlag=="Tight") m_isEMType = ISEMTIGHT;
84  else {
85  ATH_MSG_WARNING( "Unrecognized isEM jobOption " << m_isEMFlag );
86  ATH_MSG_WARNING( "Choose from Loose,Medium or Tight" );
87  ATH_MSG_WARNING( "Skipping TRT Electron HT Monitoring! " );
88  m_doElectronMon = false;
89  }
90  return StatusCode::SUCCESS;
91 }
92 
95 {
96  return StatusCode::SUCCESS;
97 }
98 
101 {
102  ATH_MSG_DEBUG( "Booking TRT Electron Histograms" );
103  //Check for keys in Store Gate
104  if(!evtStore()->contains<xAOD::TrackParticleContainer>(m_tracksName))
105  {
106  ATH_MSG_WARNING("No TrackCollection by the name of "<<m_tracksName<<" in storegate");
107  ATH_MSG_WARNING(" Skipping TRT Track HT Monitoring! ");
108  m_doTracksMon = false;
109  }
110  if(!evtStore()->contains<xAOD::ElectronContainer>(m_electronsName))
111  {
112  ATH_MSG_WARNING( "No ElectronCollection by the name of "<<m_electronsName<<" in storegate");
113  ATH_MSG_WARNING(" Skipping TRT Electron HT Monitoring! ");
114  m_doRecElectrons = false;
115  }
116  if(!evtStore()->contains<xAOD::MuonContainer>(m_muonsName))
117  {
118  ATH_MSG_WARNING( "No MuonCollection by the name of "<<m_muonsName<<" in storegate");
119  ATH_MSG_WARNING(" Skipping TRT Muon HT Monitoring! ");
120  m_doMuonMon = false;
121  }
122  if(!evtStore()->contains<xAOD::VertexContainer>(m_conversionName))
123  {
124  ATH_MSG_WARNING( "No VxContainer by the name of "<<m_conversionName<<" in storegate");
125  ATH_MSG_WARNING(" Skipping TRT Conversion HT Monitoring! ");
126  m_doConversions = false;
127  }
128  m_doElectronMon = m_doElectronMon && (m_doRecElectrons || m_doConversions); //Electrons need to be turned on and one of the containers (rec or conv) needs to be available
129 
130 
131  try
132  {
133  MonGroup hl_monGroup_pcand ( this, "TRT//HTMonitoring/ParticleCandidates", run);
134  if(m_doTracksMon){
135  bookGeoHistograms (m_tBarrelA ,"BarrelA" );
136  bookGeoHistograms (m_tBarrelC ,"BarrelC" );
137  bookGeoHistograms (m_tEndCapA ,"EndCapA" );
138  bookGeoHistograms (m_tEndCapC ,"EndCapC" );
139  bookPCandHistograms (hl_monGroup_pcand,m_tPi ,"Pion");
140  }
141  if(m_doMuonMon) bookPCandHistograms(hl_monGroup_pcand,m_tMu,"Muon");
142  if(m_doElectronMon) bookPCandHistograms(hl_monGroup_pcand,m_tEl,"Electron");
143  }
144  catch(const char* hName)
145  {
146  ATH_MSG_FATAL("Could not register histogram " << hName << "!" );
147  return StatusCode::FAILURE;
148  }
149 
150  return StatusCode::SUCCESS;
151 }
152 
153 void
155 bookGeoHistograms( lw_geo_hists_t &hists, const std::string& name)
156 {
157  std::string ZRn = "ZorR";
158  std::string ZRt = "ZorR";
159  float ZRMin = 0;
160  float ZRMax = 1;
161  if(name=="BarrelA"||name=="BarrelC"){
162  ZRn = "Z";
163  ZRt = "|Z|";
164  ZRMin = 0;
165  ZRMax = 800;
166  }
167  if(name=="EndCapA"||name=="EndCapC"){
168  ZRn = "R";
169  ZRt = "R";
170  ZRMin = 640;
171  ZRMax = 1020;
172  }
173  MonGroup hl_monGroup_shift ( this, "TRT//HTMonitoring/"+name, run,ATTRIB_MANAGED,"", "");
174  if( newRunFlag() )
175  {
176  hists.hNTracks = trtBookHistoLW(hl_monGroup_shift, "hNTracks" ,"Number of Tracks per Event in "+name , 150 , 0, 150 , profile_x_label_size, profile_y_label_size, "Number of Tracks", "Frequency");
177  hists.hHTFracTrack = trtBookHistoLW(hl_monGroup_shift, "hHTFracTrack" ,"HT Fraction per Track in "+name , 50 , 0, 1 , profile_x_label_size, profile_y_label_size, "HT Fraction", "Frequency");
178  hists.pHTFracTrackPhi = trtBookHistoLW(hl_monGroup_shift, "pHTFracTrackPhi" ,"HT Fraction per Track vs. Phi in "+name , m_nPhiBins, 0, 360 , 0, 1 , profile_x_label_size, profile_y_label_size, "PHI, degrees", "HT Fraction", profile_msize,profile_mcolor,profile_mstyle);
179  hists.pHTFracStrawZR = trtBookHistoLW(hl_monGroup_shift, "pHTFracStraw"+ZRn ,"HT Fraction per Track vs. "+ZRt+" along the straw in "+name , m_nZRBins, ZRMin, ZRMax , 0, 1 , profile_x_label_size, profile_y_label_size, ZRt+", mm" , "HT Fraction", profile_msize,profile_mcolor,profile_mstyle);
180  if(name=="BarrelA"||name=="BarrelC"){
181  hists.pHTFracStrawZAI = trtBookHistoLW(hl_monGroup_shift, "pHTFracStraw"+ZRn+"GinA" ,"HT Fraction per Track vs. "+ZRt+" along the straw in "+name+" (Gas in Side A)" , m_nZRBins, ZRMin, ZRMax , 0, 1 , profile_x_label_size, profile_y_label_size, ZRt+", mm" , "HT Fraction", profile_msize,profile_mcolor,profile_mstyle);
182  hists.pHTFracStrawZCO = trtBookHistoLW(hl_monGroup_shift, "pHTFracStraw"+ZRn+"GinC" ,"HT Fraction per Track vs. "+ZRt+" along the straw in "+name+" (Gas in Side C)" , m_nZRBins, ZRMin, ZRMax , 0, 1 , profile_x_label_size, profile_y_label_size, ZRt+", mm" , "HT Fraction", profile_msize,profile_mcolor,profile_mstyle);
183  }
184  else{
185  hists.pHTFracStrawZAI = trtBookHistoLW(hl_monGroup_shift, "pHTFracStraw"+ZRn+"GinInner","HT Fraction per Track vs. "+ZRt+" along the straw in "+name+" (Gas in Inner End)" , m_nZRBins, ZRMin, ZRMax , 0, 1 , profile_x_label_size, profile_y_label_size, ZRt+", mm" , "HT Fraction", profile_msize,profile_mcolor,profile_mstyle);
186  hists.pHTFracStrawZCO = trtBookHistoLW(hl_monGroup_shift, "pHTFracStraw"+ZRn+"GinOuter","HT Fraction per Track vs. "+ZRt+" along the straw in "+name+" (Gas in Outer End)" , m_nZRBins, ZRMin, ZRMax , 0, 1 , profile_x_label_size, profile_y_label_size, ZRt+", mm" , "HT Fraction", profile_msize,profile_mcolor,profile_mstyle);
187  }
188  if(m_doElectronMon){
189  hists.pHTFracGammaEl = trtBookHistoLW(hl_monGroup_shift, "pHTFracGammaEl" ,"HT Fraction per e Candidate vs. Lorentz Gamma Factor in "+name , NGAMMABINS, 0, 5 , 0, 1, profile_x_label_size, profile_y_label_size, "Log10(Lorentz Gamma)" , "HT Fraction", profile_msize,profile_mcolor,profile_mstyle);
190  }
191  if(m_doMuonMon){
192  hists.pHTFracGammaMu = trtBookHistoLW(hl_monGroup_shift, "pHTFracGammaMu" ,"HT Fraction per #mu Candidate vs. Lorentz Gamma Factor in "+name , NGAMMABINS, 0, 5 , 0, 1, profile_x_label_size, profile_y_label_size, "Log10(Lorentz Gamma)" , "HT Fraction", profile_msize,profile_mcolor,profile_mstyle);
193  }
194  if(m_doTracksMon){
195  hists.pHTFracGammaPi = trtBookHistoLW(hl_monGroup_shift, "pHTFracGammaPi" ,"HT Fraction per #pi Candidate vs. Lorentz Gamma Factor in "+name , NGAMMABINS, 0, 5 , 0, 1, profile_x_label_size, profile_y_label_size, "Log10(Lorentz Gamma)" , "HT Fraction", profile_msize,profile_mcolor,profile_mstyle);
196  }
198  hists.pHTFracGammaAll = trtBookHistoLW(hl_monGroup_shift, "pHTFracGammaAll" ,"HT Fraction per Candidate vs. Lorentz Gamma Factor in "+name , NGAMMABINS, 0, 5 , 0, 1, profile_x_label_size, profile_y_label_size, "Log10(Lorentz Gamma)" , "HT Fraction", profile_msize,profile_mcolor,profile_mstyle);
199  }
200  }//if( isNewRun )
201  return;
202 }//bookGeoHistograms
203 
204 void
207 {
208 
209  if( newRunFlag() )
210  {
211  hists.hNCand = trtBookHistoLW(monGroup, "hNCand"+name ,"Number of "+name+" Candidates per Event" , 150 , 0, 150 , profile_x_label_size, profile_y_label_size, "Number of "+name+" Candidates", "Frequency");
212  hists.hPIDProb = trtBookHistoLW(monGroup, "hPIDProb"+name ,"PID Likelihood per "+name+" Candidate" , 50 , 0, 1 , profile_x_label_size, profile_y_label_size, "PID Likelihood", "Frequency");
213  hists.pPIDProbEta = trtBookHistoLW(monGroup, "pPIDProbEta"+name ,"PID Likelihood per "+name+" Candidate vs. Eta" , m_nEtaBins, -2, 2 , 0, 1 , profile_x_label_size, profile_y_label_size, "Eta", "PID Likelihood", profile_msize,profile_mcolor,profile_mstyle);
214  hists.hHTFrac = trtBookHistoLW(monGroup, "hHTFrac"+name ,"HT Fraction per "+name+" Candidate" , 50 , 0, 1 , profile_x_label_size, profile_y_label_size, "HT Fraction", "Frequency");
215  hists.pHTFracEta = trtBookHistoLW(monGroup, "pHTFracEta"+name ,"HT Fraction per "+name+" Candidate vs. Eta" , m_nEtaBins, -2, 2 , 0, 1 , profile_x_label_size, profile_y_label_size, "Eta", "HTFraction", profile_msize,profile_mcolor,profile_mstyle);
216  }//if( isNewRun )
217  return;
218 }//bookPCandHistograms
219 
222 {
223  ATH_MSG_DEBUG("Filling TRT Electron Monitor Histograms");
224  m_tBarrelA.N = 0;
225  m_tBarrelC.N = 0;
226  m_tEndCapA.N = 0;
227  m_tEndCapC.N = 0;
228  m_tEl.N = 0;
229  m_tMu.N = 0;
230  m_tPi.N = 0;
231 
232  std::vector<const Trk::Track*> v_usedTrks;
233  loopOverConversions(v_usedTrks);
234  loopOverRecElectrons(v_usedTrks);
235  loopOverMuons(v_usedTrks);
236  loopOverTracks(v_usedTrks);
237 
245 
246  return StatusCode::SUCCESS;
247 }//fillHistograms
248 
249 void
250 TRT_Electron_Monitoring_Tool::loopOverConversions(std::vector<const Trk::Track*> &v_usedTrks)
251 {
252  ATH_MSG_DEBUG( "Entering loopOverConversions." );
253 
254  if(!m_doConversions) return;
255 
257  ATH_MSG_DEBUG( "Conversion Container has " << int(m_conversionContainer->size()) << " entries." );
258 
259  for(const auto* conv_elem : *m_conversionContainer)
260  {
261  const xAOD::Vertex* vertex = conv_elem;
262  double chi2 = vertex->numberDoF()>0 ? vertex->chiSquared()/vertex->numberDoF() : 0;
263  double r = std::sqrt(std::pow(vertex->position().x(),2)+std::pow(vertex->position().y(),2));
264 
265  const std::vector< ElementLink< xAOD::TrackParticleContainer > > tpLinks = conv_elem->trackParticleLinks();
266  int i(-1);
267  for(const auto& tp_elem : tpLinks ){
268  const xAOD::TrackParticle* trkTag = *tp_elem;
269  if(!trkTag) continue;
270  i++;
271  v_usedTrks.push_back( trkTag->track() );
272 
273  if(!m_doElectronMon) continue;
274  //Vertex cuts
275  // the following statement (checking number of TrackParticles in the *primary* vertex of this track)
276  // appears to be a logic error; instead check the nnumber TrackParticles in the conversion vertex
277  //if(trkTag->vertex()->nTrackParticles() != 2) continue;
278  if (vertex->nTrackParticles() != 2) continue;
279  if( chi2 >= 5 ) continue;
280  if( r <= 40 ) continue;
281  const xAOD::TrackParticle* trkProbe = *tpLinks.at((i+1) % 2);
282  if(!trkProbe) continue;
283 
284  if(!conversionQualityCuts(trkTag,trkProbe)) continue;
285  m_tEl.N++;
286  if(!fillAllHistograms( trkProbe, electron_mass, PCAND_EL ))
287  {
288  ATH_MSG_DEBUG( "fillStructHistograms failed!" );
289  }
290  else ATH_MSG_DEBUG( "Conv: fillStructHistograms succeeded!" );
291  }//loop over trackparticles
292  }//loop over vertices
293  }
294  else ATH_MSG_WARNING( "Could not retrieve vertex container this event" );
295  ATH_MSG_DEBUG( "Leaving loopOverConversions." );
296  return;
297 }//loopOverConversions
298 
299 void
301 loopOverRecElectrons (std::vector<const Trk::Track*> &v_usedTrks)
302 {
303  ATH_MSG_DEBUG( "Entering loopOverRecElectrons." );
304  if(!m_doRecElectrons) return;
306  for(const auto p_Electron:*m_electronContainer)
307  {
308  if(not p_Electron) continue;
309  if(!electronQualityCuts(p_Electron)) continue;
310  const xAOD::TrackParticle* trkP = p_Electron->trackParticle();
311  if(!trkP) continue;
312  const Trk::Track *trk = trkP->track();
313  const bool matched = (std::find(v_usedTrks.begin(), v_usedTrks.end(), trk) != v_usedTrks.end());
314  if(matched) continue;
315  v_usedTrks.push_back( trk );
316  m_tEl.N++;
317  if(!fillAllHistograms( trkP, electron_mass, PCAND_EL )){
318  ATH_MSG_DEBUG( "fillStructHistograms failed!" );
319  } else {
320  ATH_MSG_DEBUG( "fillStructHistograms succeeded!" );
321  }
322  }//for(; p_Electron!=m_ElectronCollection->end(); ++p_Electron)
323  }
324  else ATH_MSG_WARNING( "Could not retrieve electron container this event" );
325  ATH_MSG_DEBUG( "Leaving loopOverRecElectrons." );
326  return;
327 }//loopOverRecElectrons
328 
329 void
330 TRT_Electron_Monitoring_Tool::loopOverMuons (std::vector<const Trk::Track*> &v_usedTrks)
331 {
332  ATH_MSG_DEBUG( "Entering loopOverMuons." );
333  if(!m_doMuonMon) return;
334  if(!evtStore()->retrieve(m_muonContainer, m_muonsName).isFailure())
335  {
336  for(const auto p_Muon:*m_muonContainer)
337  {
338  if(!(p_Muon)) continue;
339  if(!muonQualityCuts(p_Muon)) continue;
340  const xAOD::TrackParticle* trkP = p_Muon->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
341  if(!trkP) continue;
342  const Trk::Track *trk = trkP->track();
343  v_usedTrks.push_back( trk );
344  m_tMu.N++;
345  if(!fillAllHistograms( trkP, muon_mass, PCAND_MU )){
346  ATH_MSG_DEBUG( "fillStructHistograms failed!" );
347  }
348  else ATH_MSG_DEBUG( "fillStructHistograms succeeded!" );
349 
350  }//for(; p_Muon!=m_MuonCollection->end(); ++p_Muon)
351  }
352  else ATH_MSG_WARNING( "Could not retrieve muon container this event" );
353  ATH_MSG_DEBUG( "Leaving loopOverMuons." );
354  return;
355 }//loopOverMuons
356 
357 void
358 TRT_Electron_Monitoring_Tool::loopOverTracks (std::vector<const Trk::Track*> &v_usedTrks)
359 {
360  ATH_MSG_DEBUG( "Entering loopOverTracks." );
361  if(!m_doTracksMon) return;
362  if(!evtStore()->retrieve(m_trkpCollection, m_tracksName).isFailure())
363  {
364  for(const auto* tp : *m_trkpCollection)
365  {
367  if(!pionQualityCuts(tp,v_usedTrks)) continue;
368  m_tPi.N++;
369  if(!fillAllHistograms(tp, pion_mass, PCAND_PI ))
370  {
371  ATH_MSG_DEBUG( "fillStructHistograms failed!" );
372  }
373  else ATH_MSG_DEBUG( "fillStructHistograms succeeded!" );
374  }//for(; p_trk!=m_trkCollection->end(); ++p_trk)
375  }
376  else ATH_MSG_WARNING( "Could not retrieve track container this event" );
377  ATH_MSG_DEBUG( "Leaving loopOverTTracks." );
378 }//loopOverTracks
379 
380 
381 bool
383 conversionQualityCuts(const xAOD::TrackParticle* trkTag, const xAOD::TrackParticle* trkProbe)
384 {
385  const Trk::Perigee* perigeeTag = trkTag->track()->perigeeParameters();
386  int chargeTag(0);
387  if (perigeeTag) chargeTag = int(perigeeTag->charge());
388  else
389  {
390  ATH_MSG_WARNING( "Tag Track has no perigee!" );
391  return false;
392  }
393  const Trk::Perigee* perigeeProbe = trkProbe->track()->perigeeParameters();
394  int chargeProbe(0);
395  if (perigeeProbe) chargeProbe = int(perigeeProbe->charge());
396  else
397  {
398  ATH_MSG_WARNING( "Probe Track has no perigee!" );
399  return false;
400  }
401  if(chargeTag!=-1*chargeProbe) return false;
402  int nPix, nSCT, nTRT, nHT, nTRTOut, nHTOut;
403  double HTRatioOut;
404  uint8_t dummy(255);
405  //Check that tag passes cuts
406  nPix = trkTag->summaryValue(dummy,xAOD::numberOfPixelHits)?dummy:-1;
407  nSCT = trkTag->summaryValue(dummy,xAOD::numberOfSCTHits)?dummy:-1;
408  nTRT = trkTag->summaryValue(dummy,xAOD::numberOfTRTHits)?dummy:-1;
410  nTRTOut = trkTag->summaryValue(dummy,xAOD::numberOfTRTOutliers)?dummy:-1;
412  HTRatioOut = nTRT+nTRTOut>0 ? double(nHT+nHTOut)/double(nTRT+nTRTOut) : 0;
413  if(!m_useTRTOnly && nPix+nSCT <= 3 ) return false;
414  if(nTRT+nTRTOut <= 19) return false;
415  if(HTRatioOut <= 0.12) return false;
416  //Check that probe passes cuts
417  nPix = trkProbe->summaryValue(dummy,xAOD::numberOfPixelHits)?dummy:-1;
418  nSCT = trkProbe->summaryValue(dummy,xAOD::numberOfSCTHits)?dummy:-1;
419  nTRT = trkProbe->summaryValue(dummy,xAOD::numberOfTRTHits)?dummy:-1;
421  nTRTOut = trkProbe->summaryValue(dummy,xAOD::numberOfTRTOutliers)?dummy:-1;
423  //
424  if(!m_useTRTOnly && nPix+nSCT <= 3 ) return false;
425  if(nTRT+nTRTOut <= 19) return false;
426  return true;
427 }//conversionQualityCuts
428 
429 bool
431 {
432  bool val_loose=0;
433  bool val_medium=0;
434  bool val_tight=0;
435  if(m_isEMType==ISEMLOOSE && !(electron->passSelection(val_loose, "Loose")==0)) return false;
436  if(m_isEMType==ISEMMEDIUM && !(electron->passSelection(val_medium, "Medium")==0)) return false;
437  if(m_isEMType==ISEMTIGHT && !(electron->passSelection(val_tight, "Tight")==0)) return false;
438  return true;
439 }//electronQualityCuts
440 
441 bool
444 {
445  if(!muon) return false;
446  const xAOD::TrackParticle* trkM = muon->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
447  if(!trkM) return false;
448  uint8_t dummy(255);
449  int nTRT = trkM->summaryValue( dummy , xAOD::numberOfTRTHits )? dummy :-1;
450  int nTRTOut = trkM->summaryValue( dummy , xAOD::numberOfTRTOutliers )? dummy :-1;
451  if(nTRT+nTRTOut <= 0) return false;
452  return true;
453 }//muonQualityCuts
454 
455 bool
456 TRT_Electron_Monitoring_Tool::pionQualityCuts(const xAOD::TrackParticle *trkP,std::vector<const Trk::Track*> &v_usedTrks)
457 {
458  if (std::find(v_usedTrks.begin(), v_usedTrks.end(), trkP->track()) != v_usedTrks.end()) return false;
459  uint8_t dummy(255);
460  int nPix = trkP->summaryValue(dummy,xAOD::numberOfPixelHits)?dummy:-1;
461  int nSCT = trkP->summaryValue(dummy,xAOD::numberOfSCTHits)?dummy:-1;
463  int nTRT = trkP->summaryValue(dummy,xAOD::numberOfTRTHits)?dummy:-1;
464  int nTRTOut = trkP->summaryValue(dummy,xAOD::numberOfTRTOutliers)?dummy:-1;
465  float dEdX = trkP->summaryValue(dummy,xAOD::pixeldEdx)?dummy:-1;
466 
467  if(!m_useTRTOnly && nPix+nSCT <= 3 ) return false;
468  if(!m_useTRTOnly && nBLa <= 0 ) return false;
469  if(nTRT+nTRTOut <= m_PionTRTHitCut) return false;
470  if(dEdX >= 1.6 ) return false;
471 
472  return true;
473 }//pionQualityCuts
474 
475 bool
477 fillAllHistograms (const xAOD::TrackParticle *trkP, float mass, int PCand){
478  uint8_t dummy(255);
479  int nPix = trkP->summaryValue(dummy,xAOD::numberOfPixelHits)?dummy:-1;
480  int nSCT = trkP->summaryValue(dummy,xAOD::numberOfSCTHits)?dummy:-1;
481  if(!m_useTRTOnly && nPix+nSCT <= 3 ) return false;
482  double phi(-999),eta(-999);
483  const Trk::Perigee* perigee = trkP->track()->perigeeParameters();
484  if (perigee)
485  {
486  phi = perigee->momentum().phi()*180/M_PI;
487  if(phi<0) phi +=360;
488  eta = perigee->momentum().eta();
489  }
490  else
491  {
492  ATH_MSG_WARNING( "Track has no perigee!" );
493  return false;
494  }
495  float gamma = 0;
496  if(mass>0){
497  CLHEP::HepLorentzVector hlv;
498  hlv.setVectM( CLHEP::Hep3Vector(perigee->momentum().x(),perigee->momentum().y(),perigee->momentum().z() ),mass);
499  if(hlv.isSpacelike())
500  {
501  ATH_MSG_DEBUG( "Track has Spacelike Lorentz Vector!! Skipping..." );
502  return false;
503  }
504  // Explicitly specify tolerance to avoid use of static global.
505  if(hlv.isLightlike(1e-12))
506  {
507  ATH_MSG_DEBUG( "Track has Lightlike Lorentz Vector!! Skipping..." );
508  return false;
509  }
510  gamma = std::log10(hlv.gamma());
511  }
512 
513  int nLLHits[4]={0,0,0,0};
514  int nHLHits[4]={0,0,0,0};
515  int nTRTHTHits = 0;
516  int nTRTHits = 0;
517  int barrel_ec(0);
518  const Trk::TrackStates* trackStates = trkP->track()->trackStateOnSurfaces();
519 
520  Trk::TrackStates::const_iterator TSOSItBegin = trackStates->begin();
521  Trk::TrackStates::const_iterator TSOSItEnd = trackStates->end();
522 
523  for(;TSOSItBegin!=TSOSItEnd; ++TSOSItBegin)
524  {
525  if((*TSOSItBegin)==nullptr) continue;
526  else if ((*TSOSItBegin)->type(Trk::TrackStateOnSurface::Measurement))
527  {
528  const InDet::TRT_DriftCircleOnTrack *trtCircle = dynamic_cast<const InDet::TRT_DriftCircleOnTrack*>((*TSOSItBegin)->measurementOnTrack());
529  const Trk::TrackParameters *aTrackParam = dynamic_cast<const Trk::TrackParameters*>((*TSOSItBegin)->trackParameters());
530  if(!trtCircle || !aTrackParam) continue;
531  else
532  {
533  Identifier DCoTId = trtCircle->identify();
534  barrel_ec = myBarrelEC(m_pTRTHelper->barrel_ec(DCoTId));
535  if(barrel_ec<0) continue;
536 
537  const InDet::TRT_DriftCircle *RawDriftCircle = dynamic_cast<const InDet::TRT_DriftCircle*>(trtCircle->prepRawData());
538  const Trk::MeasurementBase* mesb=(*TSOSItBegin)->measurementOnTrack();
539  bool isTubeHit = ( mesb->localCovariance()(Trk::locX,Trk::locX) > 1.0) ? 1 : 0;
540  float TRThitX = trtCircle->globalPosition().x();
541  float TRThitY = trtCircle->globalPosition().y();
542  float TRThitZ = std::abs(trtCircle->globalPosition().z());
543  float zr = barrel_ec<2 ? TRThitZ : sqrt(pow(TRThitX,2)+pow(TRThitY,2));
544  int phi_or_plane = barrel_ec<2 ? m_pTRTHelper->phi_module(DCoTId) :m_pTRTHelper->straw_layer(DCoTId);
545  int layer_or_wheel = m_pTRTHelper->layer_or_wheel(DCoTId);
546  bool inCorOuter = isGasInCorOuter(barrel_ec,phi_or_plane,layer_or_wheel);
547  if(RawDriftCircle && !isTubeHit)
548  {
549  bool highL = RawDriftCircle->highLevel();
550  TProfile_LW *pHTFracTrackPhi{};
551  TProfile_LW *pHTFracStrawZR{};
552  TProfile_LW *pHTFracStrawZAI{};
553  TProfile_LW *pHTFracStrawZCO{};
554  TProfile_LW *pHTFracGamma{};
555  lw_geo_hists_t * myGeoHists{};
556  if(mass==0){ switch (barrel_ec){
557  case DET_BARRELA:
558  pHTFracTrackPhi = m_tBarrelA.pHTFracTrackPhi;
559  pHTFracStrawZR = m_tBarrelA.pHTFracStrawZR;
560  pHTFracStrawZAI = m_tBarrelA.pHTFracStrawZAI;
561  pHTFracStrawZCO = m_tBarrelA.pHTFracStrawZCO;
562  break;
563  case DET_BARRELC:
564  pHTFracTrackPhi = m_tBarrelC.pHTFracTrackPhi;
565  pHTFracStrawZR = m_tBarrelC.pHTFracStrawZR;
566  pHTFracStrawZAI = m_tBarrelC.pHTFracStrawZAI;
567  pHTFracStrawZCO = m_tBarrelC.pHTFracStrawZCO;
568  break;
569  case DET_ENDCAPA:
570  pHTFracTrackPhi = m_tEndCapA.pHTFracTrackPhi;
571  pHTFracStrawZR = m_tEndCapA.pHTFracStrawZR;
572  pHTFracStrawZAI = m_tEndCapA.pHTFracStrawZAI;
573  pHTFracStrawZCO = m_tEndCapA.pHTFracStrawZCO;
574  break;
575  case DET_ENDCAPC:
576  pHTFracTrackPhi = m_tEndCapC.pHTFracTrackPhi;
577  pHTFracStrawZR = m_tEndCapC.pHTFracStrawZR;
578  pHTFracStrawZAI = m_tEndCapC.pHTFracStrawZAI;
579  pHTFracStrawZCO = m_tEndCapC.pHTFracStrawZCO;
580  break;
581  default : continue;
582  }
583  }
584  else{
585  switch (barrel_ec){
586  case DET_BARRELA:
587  myGeoHists = &m_tBarrelA;
588  break;
589  case DET_BARRELC:
590  myGeoHists = &m_tBarrelC;
591  break;
592  case DET_ENDCAPA:
593  myGeoHists = &m_tEndCapA;
594  break;
595  case DET_ENDCAPC:
596  myGeoHists = &m_tEndCapC;
597  break;
598  default : break;
599  }
600  if(!myGeoHists) continue;
601  switch (PCand){
602  case PCAND_EL:
603  pHTFracGamma = myGeoHists->pHTFracGammaEl;
604  break;
605  case PCAND_MU:
606  pHTFracGamma = myGeoHists->pHTFracGammaMu;
607  break;
608  case PCAND_PI:
609  pHTFracGamma = myGeoHists->pHTFracGammaPi;
610  break;
611  default : break;
612  }
613  }
614  if(highL)
615  {
616  //--------------------------------//
617  //This means this was a HL TRT Hit//
618  //--------------------------------//
619  if(mass==0){
620  if(pHTFracTrackPhi) pHTFracTrackPhi->Fill(phi,1);
621  if(pHTFracStrawZR) pHTFracStrawZR ->Fill(zr ,1);
622  if(pHTFracStrawZAI && !inCorOuter) pHTFracStrawZAI ->Fill(zr ,1);
623  if(pHTFracStrawZCO && inCorOuter) pHTFracStrawZCO ->Fill(zr ,1);
624  }
625  else{
626  if(pHTFracGamma) pHTFracGamma->Fill(gamma,1);
627  myGeoHists->pHTFracGammaAll->Fill(gamma,1);
628  }
629  nHLHits[barrel_ec]++;
630  nTRTHTHits++;
631 
632  }//if(RawDriftCircle->highLevel())
633  if(mass==0){
634  if(pHTFracTrackPhi) pHTFracTrackPhi->Fill(phi,0);
635  if(pHTFracStrawZR) pHTFracStrawZR ->Fill(zr ,0);
636  if(pHTFracStrawZAI && !inCorOuter) pHTFracStrawZAI ->Fill(zr ,0);
637  if(pHTFracStrawZCO && inCorOuter) pHTFracStrawZCO ->Fill(zr ,0);
638  }
639  else{
640  if(pHTFracGamma) pHTFracGamma->Fill(gamma,0);
641  myGeoHists->pHTFracGammaAll->Fill(gamma,0);
642  }
643  nLLHits[barrel_ec]++;
644  nTRTHits++;
645  }//if(RawDriftCircle && !isTubeHit)
646  }//else ---- came from if(!(trtCircle) || !(aTrackParam))
647  }//else if ((*TSOSItBegin)->type(Trk::TrackStateOnSurface::Measurement))
648  }//for(;TSOSItBegin!=TSOSItEnd; ++TSOSItBegin)
649 
650  if(mass==0) for(int i=0;i<4;i++){
651  lw_geo_hists_t * myGeoHists{};
652  switch (i){
653  case DET_BARRELA:
654  myGeoHists = &m_tBarrelA;
655  break;
656  case DET_BARRELC:
657  myGeoHists = &m_tBarrelC;
658  break;
659  case DET_ENDCAPA:
660  myGeoHists = &m_tEndCapA;
661  break;
662  case DET_ENDCAPC:
663  myGeoHists = &m_tEndCapC;
664  break;
665  }
666  if(!myGeoHists) continue;
667  if(nLLHits[i]>0){
668  myGeoHists->N++;
669  myGeoHists->hHTFracTrack->Fill(float(nHLHits[i])/float(nLLHits[i]));
670  }
671  }
672  else{
673  uint8_t dummy(255);
674  float HTProb = trkP->summaryValue(dummy,xAOD::eProbabilityHT)?dummy:-1;
675  TH1F_LW *hPIDProb{};
676  TH1F_LW *hHTFrac{};
677  TProfile_LW *pPIDProbEta{};
678  TProfile_LW *pHTFracEta{};
679  switch (PCand){
680  case PCAND_EL:
681  hPIDProb = m_tEl.hPIDProb;
682  hHTFrac = m_tEl.hHTFrac;
683  pPIDProbEta = m_tEl.pPIDProbEta;
684  pHTFracEta = m_tEl.pHTFracEta;
685  break;
686  case PCAND_MU:
687  hPIDProb = m_tMu.hPIDProb;
688  hHTFrac = m_tMu.hHTFrac;
689  pPIDProbEta = m_tMu.pPIDProbEta;
690  pHTFracEta = m_tMu.pHTFracEta;
691  break;
692  case PCAND_PI:
693  hPIDProb = m_tPi.hPIDProb;
694  hHTFrac = m_tPi.hHTFrac;
695  pPIDProbEta = m_tPi.pPIDProbEta;
696  pHTFracEta = m_tPi.pHTFracEta;
697  break;
698  default : break;
699  }
700  if(hPIDProb) hPIDProb ->Fill(HTProb);
701  if(pPIDProbEta) pPIDProbEta ->Fill(eta,HTProb);
702  if(hHTFrac && nTRTHits>0) hHTFrac ->Fill(float(nTRTHTHits)/float(nTRTHits));
703  if(pHTFracEta && nTRTHits>0) pHTFracEta ->Fill(eta,float(nTRTHTHits)/float(nTRTHits));
704  }
705  return true;
706 }//getHits
707 
708 bool
710 isGasInCorOuter(int det, int phi_plane, int module_wheel)
711 {
712  //EndCap
713  if(det>1) return (phi_plane%8)<4; //first four straw layers (planes) have gas fed from outsid
714 
715  //Barrel
716  //Modules (1-3) have values (0-2)
717  if(module_wheel==2) return phi_plane%2==0; //event stacks in module 3 get gas on the A side
718 
719  return ((phi_plane - module_wheel*2)%8)<4; //Gas side alternates every four stacks. Module 1 is shifted by 2.
720 }
721 
725 {
726  return StatusCode::SUCCESS;
727 }//procHistograms
728 
729 //
730 // Function that does the actually booking of histograms
731 //
732 //-------------------------------------------------------------------------------------//
734  const std::string& hName,
735  const std::string& hTitle,
736  int nbins,
737  double firstbin,
738  double lastbin,
739  double x_labelSize,
740  double y_labelSize,
741  const std::string& xTitle,
742  const std::string& yTitle)
743 {
744  TH1F_LW* hist = TH1F_LW::create(hName.c_str(),hTitle.c_str(),nbins,firstbin,lastbin);
745  trtRegHist(hist, mongroup, hName.c_str());
746  hist->GetXaxis()->SetLabelSize(x_labelSize);
747  hist->GetYaxis()->SetLabelSize(y_labelSize);
748  hist->GetXaxis()->SetTitle(xTitle.c_str());
749  hist->GetYaxis()->SetTitle(yTitle.c_str());
750  return hist;
751 }
752 
754  if (mongrp.regHist(hist).isFailure()){
755  ATH_MSG_WARNING( "Failed to register histogram "<< hName );
756  }
757  return;
758 }
759 
761  const std::string& hName,
762  const std::string& hTitle,
763  int nbins,
764  double firstbin,
765  double lastbin,
766  double ymin,
767  double ymax,
768  double x_labelSize,
769  double y_labelSize,
770  const std::string& xTitle,
771  const std::string& yTitle,
772  double msize,
773  int mcolor,
774  int mstyle)
775 {
776  TProfile_LW* hist = TProfile_LW::create(hName.c_str(), hTitle.c_str(), nbins, firstbin, lastbin, ymin, ymax);
777  trtRegHist(hist, mongroup, hName.c_str());
778  hist->SetMarkerSize(msize);
779  hist->SetMarkerStyle(mstyle);
780  hist->SetMarkerColor(mcolor);
781  hist->GetXaxis()->SetLabelSize(x_labelSize);
782  hist->GetYaxis()->SetLabelSize(y_labelSize);
783  hist->GetXaxis()->SetTitle(xTitle.c_str());
784  hist->GetYaxis()->SetTitle(yTitle.c_str());
785  return hist;
786 
787 }
788 
790  const std::string& hName,
791  const std::string& hTitle,
792  int xnbins,
793  double xfirstbin,
794  double xlastbin,
795  int ynbins,
796  double yfirstbin,
797  double ylastbin,
798  double x_labelSize,
799  double y_labelSize,
800  const std::string& xTitle,
801  const std::string& yTitle)
802 {
803  TH2F_LW* hist = TH2F_LW::create(hName.c_str(), hTitle.c_str(), xnbins, xfirstbin, xlastbin, ynbins, yfirstbin, ylastbin);
804  trtRegHist(hist, mongroup, hName.c_str());
805  hist->GetXaxis()->SetLabelSize(x_labelSize);
806  hist->GetYaxis()->SetLabelSize(y_labelSize);
807  hist->GetXaxis()->SetTitle(xTitle.c_str());
808  hist->GetYaxis()->SetTitle(yTitle.c_str());
809  return hist;
810 
811 }
812 
813 int
815  switch(barrel_ec){
816  case 1 : return DET_BARRELA;
817  case -1 : return DET_BARRELC;
818  case 2 : return DET_ENDCAPA;
819  case -2 : return DET_ENDCAPC;
820  default : return -1;
821  }
822  return -1;
823 }
TRT_Electron_Monitoring_Tool::muonQualityCuts
bool muonQualityCuts(const xAOD::Muon *muon)
Definition: TRT_Electron_Monitoring_Tool.cxx:443
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
lw_geo_hists_t::pHTFracStrawZAI
TProfile_LW * pHTFracStrawZAI
Definition: TRT_Electron_Monitoring_Tool.h:50
TRT_Electron_Monitoring_Tool::loopOverConversions
void loopOverConversions(std::vector< const Trk::Track * > &v_usedTrks)
Definition: TRT_Electron_Monitoring_Tool.cxx:250
LWHist
Definition: LWHist.h:26
beamspotman.r
def r
Definition: beamspotman.py:676
TRT_Electron_Monitoring_Tool::m_trkpCollection
const DataVector< xAOD::TrackParticle > * m_trkpCollection
Definition: TRT_Electron_Monitoring_Tool.h:131
python.TIDAMonTool.monGroup
def monGroup(analysis_chain)
Definition: TIDAMonTool.py:295
xAOD::muon
@ muon
Definition: TrackingPrimitives.h:195
TH1F_LW.h
DET_BARRELC
@ DET_BARRELC
Definition: TRT_Electron_Monitoring_Tool.h:36
ymin
double ymin
Definition: listroot.cxx:63
TRT_Electron_Monitoring_Tool::m_conversionContainer
const xAOD::VertexContainer * m_conversionContainer
Definition: TRT_Electron_Monitoring_Tool.h:140
TRT_Electron_Monitoring_Tool::m_doElectronMon
bool m_doElectronMon
Definition: TRT_Electron_Monitoring_Tool.h:147
TH2F_LW.h
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
InDet::TRT_DriftCircleOnTrack::prepRawData
virtual const TRT_DriftCircle * prepRawData() const override final
returns the PrepRawData - is a TRT_DriftCircle in this scope
Definition: TRT_DriftCircleOnTrack.h:202
TRT_Electron_Monitoring_Tool::electronQualityCuts
bool electronQualityCuts(const xAOD::Electron *electron)
Definition: TRT_Electron_Monitoring_Tool.cxx:430
lw_partcand_hists_t::hHTFrac
TH1F_LW * hHTFrac
Definition: TRT_Electron_Monitoring_Tool.h:76
lw_partcand_hists_t::pHTFracEta
TProfile_LW * pHTFracEta
Definition: TRT_Electron_Monitoring_Tool.h:78
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
TH1F_LW::Fill
virtual void Fill(const double &x) override
Definition: TH1F_LW.cxx:246
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:575
Trk::locX
@ locX
Definition: ParamDefs.h:43
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
ISEMTIGHT
@ ISEMTIGHT
Definition: TRT_Electron_Monitoring_Tool.h:34
TRT_DetectorManager.h
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
TRT_Electron_Monitoring_Tool::loopOverMuons
void loopOverMuons(std::vector< const Trk::Track * > &v_usedTrks)
Definition: TRT_Electron_Monitoring_Tool.cxx:330
DET_ENDCAPC
@ DET_ENDCAPC
Definition: TRT_Electron_Monitoring_Tool.h:36
TH1F_LW::create
static TH1F_LW * create(const char *name, const char *title, unsigned nbinsx, const double &xlow, const double &xup)
Definition: TH1F_LW.cxx:33
TRT_Electron_Monitoring_Tool::bookGeoHistograms
void bookGeoHistograms(lw_geo_hists_t &hists, const std::string &name)
Definition: TRT_Electron_Monitoring_Tool.cxx:155
ManagedMonitorToolBase
Provides functionality for users to implement and save histograms, ntuples, and summary data,...
Definition: ManagedMonitorToolBase.h:74
TRT_Electron_Monitoring_Tool::initialize
virtual StatusCode initialize()
Definition: TRT_Electron_Monitoring_Tool.cxx:73
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
Trk::Track::trackStateOnSurfaces
const Trk::TrackStates * trackStateOnSurfaces() const
return a pointer to a const DataVector of const TrackStateOnSurfaces.
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
plotmaker.hist
hist
Definition: plotmaker.py:148
xAOD::TrackParticle_v1::summaryValue
bool summaryValue(uint8_t &value, const SummaryType &information) const
Accessor for TrackSummary values.
Definition: TrackParticle_v1.cxx:736
beamspotnt.msize
msize
Definition: bin/beamspotnt.py:1442
conifer::pow
constexpr int pow(int x)
Definition: conifer.h:20
python.SystemOfUnits.MeV
int MeV
Definition: SystemOfUnits.py:154
TRT_Electron_Monitoring_Tool::finalize
virtual StatusCode finalize()
Definition: TRT_Electron_Monitoring_Tool.cxx:94
M_PI
#define M_PI
Definition: ActiveFraction.h:11
lw_partcand_hists_t::hPIDProb
TH1F_LW * hPIDProb
Definition: TRT_Electron_Monitoring_Tool.h:75
ParticleTest.tp
tp
Definition: ParticleTest.py:25
NGAMMABINS
#define NGAMMABINS
Definition: TRT_Electron_Monitoring_Tool.h:38
xAOD::numberOfPixelHits
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
Definition: TrackingPrimitives.h:259
TProfile_LW.h
xAOD::numberOfTRTHits
@ numberOfTRTHits
number of TRT hits [unit8_t].
Definition: TrackingPrimitives.h:275
TRT_Electron_Monitoring_Tool::m_nZRBins
int m_nZRBins
Definition: TRT_Electron_Monitoring_Tool.h:161
TRT_Electron_Monitoring_Tool::bookPCandHistograms
void bookPCandHistograms(MonGroup &monGroup, lw_partcand_hists_t &hists, const std::string &name)
Definition: TRT_Electron_Monitoring_Tool.cxx:206
TRT_Electron_Monitoring_Tool::myBarrelEC
int myBarrelEC(int m_barrel_ec)
Definition: TRT_Electron_Monitoring_Tool.cxx:814
TRT_Electron_Monitoring_Tool::m_conversionName
std::string m_conversionName
Definition: TRT_Electron_Monitoring_Tool.h:141
TRT_Electron_Monitoring_Tool::fillHistograms
virtual StatusCode fillHistograms()
An inheriting class should either override this function or fillHists().
Definition: TRT_Electron_Monitoring_Tool.cxx:221
TRT_Electron_Monitoring_Tool::m_isEMFlag
std::string m_isEMFlag
Definition: TRT_Electron_Monitoring_Tool.h:143
TRT_Electron_Monitoring_Tool::trtRegHist
void trtRegHist(LWHist *hist, MonGroup &mongrp, const char *hName)
Definition: TRT_Electron_Monitoring_Tool.cxx:753
DET_ENDCAPA
@ DET_ENDCAPA
Definition: TRT_Electron_Monitoring_Tool.h:36
InDet::TRT_DriftCircleOnTrack
Definition: TRT_DriftCircleOnTrack.h:53
TProfile_LW
Definition: TProfile_LW.h:24
lw_partcand_hists_t::pPIDProbEta
TProfile_LW * pPIDProbEta
Definition: TRT_Electron_Monitoring_Tool.h:77
TRT_Electron_Monitoring_Tool::m_electronContainer
const xAOD::ElectronContainer * m_electronContainer
Definition: TRT_Electron_Monitoring_Tool.h:134
TRT_Electron_Monitoring_Tool::TRT_Electron_Monitoring_Tool
TRT_Electron_Monitoring_Tool(const std::string &type, const std::string &name, const IInterface *parent)
Definition: TRT_Electron_Monitoring_Tool.cxx:39
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
InDet::TRT_DriftCircle
Definition: TRT_DriftCircle.h:32
dqt_zlumi_pandas.mass
mass
Definition: dqt_zlumi_pandas.py:170
TRT_Electron_Monitoring_Tool::m_tPi
lw_partcand_hists_t m_tPi
Definition: TRT_Electron_Monitoring_Tool.h:172
TRT_Electron_Monitoring_Tool::m_doShift
bool m_doShift
Definition: TRT_Electron_Monitoring_Tool.h:153
xAOD::numberOfTRTHighThresholdHits
@ numberOfTRTHighThresholdHits
number of TRT hits which pass the high threshold (only xenon counted) [unit8_t].
Definition: TrackingPrimitives.h:278
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
ISEMMEDIUM
@ ISEMMEDIUM
Definition: TRT_Electron_Monitoring_Tool.h:34
TRT_Electron_Monitoring_Tool::m_tEndCapC
lw_geo_hists_t m_tEndCapC
Definition: TRT_Electron_Monitoring_Tool.h:168
TRT_Electron_Monitoring_Tool::m_mgr
const InDetDD::TRT_DetectorManager * m_mgr
Definition: TRT_Electron_Monitoring_Tool.h:102
SCT_CalibAlgs::nbins
@ nbins
Definition: SCT_CalibNumbers.h:10
TRT_Electron_Monitoring_Tool::procHistograms
virtual StatusCode procHistograms()
An inheriting class should either override this function or finalHists().
Definition: TRT_Electron_Monitoring_Tool.cxx:724
lw_geo_hists_t::hNTracks
TH1F_LW * hNTracks
Definition: TRT_Electron_Monitoring_Tool.h:46
AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
ManagedMonitorToolBase::MonGroup
A container of information describing a monitoring object.
Definition: ManagedMonitorToolBase.h:138
xAOD::numberOfTRTHighThresholdOutliers
@ numberOfTRTHighThresholdOutliers
number of TRT high threshold outliers (only xenon counted) [unit8_t].
Definition: TrackingPrimitives.h:281
TH1F_LW
Definition: TH1F_LW.h:23
ManagedMonitorToolBase::initialize
virtual StatusCode initialize()
Definition: ManagedMonitorToolBase.cxx:669
TrigVtx::gamma
@ gamma
Definition: TrigParticleTable.h:26
TProfile_LW::create
static TProfile_LW * create(const char *name, const char *title, unsigned nbinsx, const double &xlow, const double &xup, const char *option=" ")
Definition: TProfile_LW.cxx:32
lumiFormat.i
int i
Definition: lumiFormat.py:92
TRT_Electron_Monitoring_Tool::fillAllHistograms
bool fillAllHistograms(const xAOD::TrackParticle *trk, float mass=0, int PCand=0)
Definition: TRT_Electron_Monitoring_Tool.cxx:477
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
lw_partcand_hists_t::hNCand
TH1F_LW * hNCand
Definition: TRT_Electron_Monitoring_Tool.h:74
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
lw_partcand_hists_t
Definition: TRT_Electron_Monitoring_Tool.h:71
TRT_Electron_Monitoring_Tool::m_NMinTRTHits
unsigned int m_NMinTRTHits
Definition: TRT_Electron_Monitoring_Tool.h:157
TRT_Electron_Monitoring_Tool::loopOverRecElectrons
void loopOverRecElectrons(std::vector< const Trk::Track * > &v_usedTrks)
Definition: TRT_Electron_Monitoring_Tool.cxx:301
PCAND_MU
@ PCAND_MU
Definition: TRT_Electron_Monitoring_Tool.h:35
WritePulseShapeToCool.det
det
Definition: WritePulseShapeToCool.py:204
TRT_Electron_Monitoring_Tool::m_tBarrelC
lw_geo_hists_t m_tBarrelC
Definition: TRT_Electron_Monitoring_Tool.h:166
TRT_Electron_Monitoring_Tool::m_nPhiBins
int m_nPhiBins
Definition: TRT_Electron_Monitoring_Tool.h:160
chi2
double chi2(TH1 *h0, TH1 *h1)
Definition: comparitor.cxx:522
TRT_Electron_Monitoring_Tool::m_nEtaBins
int m_nEtaBins
Definition: TRT_Electron_Monitoring_Tool.h:159
test_pyathena.parent
parent
Definition: test_pyathena.py:15
python.xAODType.dummy
dummy
Definition: xAODType.py:4
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
MakeTH3DFromTH2Ds.hists
hists
Definition: MakeTH3DFromTH2Ds.py:72
TRT_Electron_Monitoring_Tool.h
run
Definition: run.py:1
ManagedMonitorToolBase::ATTRIB_MANAGED
@ ATTRIB_MANAGED
Definition: ManagedMonitorToolBase.h:131
Trk::ParametersBase
Definition: ParametersBase.h:55
TRT_Electron_Monitoring_Tool::isGasInCorOuter
bool isGasInCorOuter(int det, int phi, int layer)
Definition: TRT_Electron_Monitoring_Tool.cxx:710
TRT_DriftCircleOnTrack.h
TRT_ID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: TRT_ID.h:866
xAOD::double
double
Definition: CompositeParticle_v1.cxx:159
TRT_ID::straw_layer
int straw_layer(const Identifier &id) const
Definition: TRT_ID.h:893
DataVector< const Trk::TrackStateOnSurface >
TRT_ID::layer_or_wheel
int layer_or_wheel(const Identifier &id) const
Definition: TRT_ID.h:884
TRT_Electron_Monitoring_Tool::pionQualityCuts
bool pionQualityCuts(const xAOD::TrackParticle *trk, std::vector< const Trk::Track * > &v_usedTrks)
Definition: TRT_Electron_Monitoring_Tool.cxx:456
lw_geo_hists_t::pHTFracStrawZCO
TProfile_LW * pHTFracStrawZCO
Definition: TRT_Electron_Monitoring_Tool.h:51
ManagedMonitorToolBase::MonGroup::regHist
StatusCode regHist(TH1 *h)
Registers a TH1 (including TH2, TH3, and TProfile) to be included in the output stream using logical ...
Definition: ManagedMonitorToolBase.cxx:195
Trk::MeasurementBase::localCovariance
const Amg::MatrixX & localCovariance() const
Interface method to get the localError.
Definition: MeasurementBase.h:138
TRT_Electron_Monitoring_Tool::conversionQualityCuts
bool conversionQualityCuts(const xAOD::TrackParticle *trkTag, const xAOD::TrackParticle *trkProbe)
Definition: TRT_Electron_Monitoring_Tool.cxx:383
TRT_Electron_Monitoring_Tool::m_PionTRTHitCut
float m_PionTRTHitCut
Definition: TRT_Electron_Monitoring_Tool.h:163
TRT_Electron_Monitoring_Tool::m_electronsName
std::string m_electronsName
Definition: TRT_Electron_Monitoring_Tool.h:135
LinkToTrackParticleBase.h
Trk::MeasurementBase
Definition: MeasurementBase.h:58
Trk::Track::perigeeParameters
const Perigee * perigeeParameters() const
return Perigee.
Definition: Tracking/TrkEvent/TrkTrack/src/Track.cxx:163
TRT_Electron_Monitoring_Tool::~TRT_Electron_Monitoring_Tool
virtual ~TRT_Electron_Monitoring_Tool()
Definition: TRT_Electron_Monitoring_Tool.cxx:68
lw_geo_hists_t
Definition: TRT_Electron_Monitoring_Tool.h:43
TRT_Electron_Monitoring_Tool::m_isEMType
myIsEMType m_isEMType
Definition: TRT_Electron_Monitoring_Tool.h:144
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
TH2F_LW::create
static TH2F_LW * create(const char *name, const char *title, unsigned nbinsx, const double &xmin, const double &xmax, unsigned nbinsy, const double &ymin, const double &ymax)
Definition: TH2F_LW.cxx:33
TRT_Electron_Monitoring_Tool::m_tracksName
std::string m_tracksName
Definition: TRT_Electron_Monitoring_Tool.h:132
TRT_Electron_Monitoring_Tool::m_ZRMax
float m_ZRMax
Definition: TRT_Electron_Monitoring_Tool.h:162
python.ElectronD3PDObject.matched
matched
Definition: ElectronD3PDObject.py:138
TRT_Electron_Monitoring_Tool::m_useTRTOnly
bool m_useTRTOnly
Definition: TRT_Electron_Monitoring_Tool.h:156
TRT_Electron_Monitoring_Tool::m_tEl
lw_partcand_hists_t m_tEl
Definition: TRT_Electron_Monitoring_Tool.h:170
TRT_ID::phi_module
int phi_module(const Identifier &id) const
Definition: TRT_ID.h:875
xAOD::Electron_v1
Definition: Electron_v1.h:34
TRT_Electron_Monitoring_Tool::m_doTracksMon
bool m_doTracksMon
Definition: TRT_Electron_Monitoring_Tool.h:146
lw_geo_hists_t::N
int N
Definition: TRT_Electron_Monitoring_Tool.h:44
lw_geo_hists_t::pHTFracTrackPhi
TProfile_LW * pHTFracTrackPhi
Definition: TRT_Electron_Monitoring_Tool.h:48
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
xAOD::numberOfTRTOutliers
@ numberOfTRTOutliers
number of TRT outliers [unit8_t].
Definition: TrackingPrimitives.h:276
lw_partcand_hists_t::N
int N
Definition: TRT_Electron_Monitoring_Tool.h:72
xAOD::pixeldEdx
@ pixeldEdx
the dE/dx estimate, calculated using the pixel clusters [?]
Definition: TrackingPrimitives.h:304
Trk::vertex
@ vertex
Definition: MeasurementType.h:21
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
TRT_Electron_Monitoring_Tool::m_pTRTHelper
const TRT_ID * m_pTRTHelper
Definition: TRT_Electron_Monitoring_Tool.h:100
InDet::TRT_DriftCircle::highLevel
bool highLevel() const
returns true if the high level threshold was passed
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TRT_Electron_Monitoring_Tool::m_doConversions
bool m_doConversions
Definition: TRT_Electron_Monitoring_Tool.h:151
TRT_Electron_Monitoring_Tool::loopOverTracks
void loopOverTracks(std::vector< const Trk::Track * > &v_usedTrks)
Definition: TRT_Electron_Monitoring_Tool.cxx:358
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DET_BARRELA
@ DET_BARRELA
Definition: TRT_Electron_Monitoring_Tool.h:36
TRT_Electron_Monitoring_Tool::m_tMu
lw_partcand_hists_t m_tMu
Definition: TRT_Electron_Monitoring_Tool.h:171
Trk::RIO_OnTrack::identify
virtual Identifier identify() const final
return the identifier -extends MeasurementBase
Definition: RIO_OnTrack.h:155
xAOD::EgammaParameters::electron
@ electron
Definition: EgammaEnums.h:18
TRT_Electron_Monitoring_Tool::bookHistograms
virtual StatusCode bookHistograms()
An inheriting class should either override this function or bookHists().
Definition: TRT_Electron_Monitoring_Tool.cxx:100
xAOD::eProbabilityHT
@ eProbabilityHT
Electron probability from High Threshold (HT) information [float].
Definition: TrackingPrimitives.h:301
PCAND_PI
@ PCAND_PI
Definition: TRT_Electron_Monitoring_Tool.h:35
TRT_Electron_Monitoring_Tool::m_isOnline
bool m_isOnline
Definition: TRT_Electron_Monitoring_Tool.h:155
ISEMLOOSE
@ ISEMLOOSE
Definition: TRT_Electron_Monitoring_Tool.h:34
xAOD::numberOfSCTHits
@ numberOfSCTHits
number of hits in SCT [unit8_t].
Definition: TrackingPrimitives.h:268
lw_geo_hists_t::pHTFracStrawZR
TProfile_LW * pHTFracStrawZR
Definition: TRT_Electron_Monitoring_Tool.h:49
TRT_Electron_Monitoring_Tool::m_doRecElectrons
bool m_doRecElectrons
Definition: TRT_Electron_Monitoring_Tool.h:150
TH2F_LW
Definition: TH2F_LW.h:23
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
xAOD::TrackParticle_v1::track
const Trk::Track * track() const
Returns a pointer (which can be NULL) to the Trk::Track which was used to make this TrackParticle.
Definition: TrackParticle_v1.cxx:805
python.CaloScaleNoiseConfig.default
default
Definition: CaloScaleNoiseConfig.py:79
InDet::TRT_DriftCircleOnTrack::globalPosition
virtual const Amg::Vector3D & globalPosition() const override final
return the global position of this RIO_OnTrack
Definition: TRT_DriftCircleOnTrack.cxx:160
TRT_Electron_Monitoring_Tool::m_doExpert
bool m_doExpert
Definition: TRT_Electron_Monitoring_Tool.h:154
checker_macros.h
Define macros for attributes used to control the static checker.
TRT_Electron_Monitoring_Tool::m_muonsName
std::string m_muonsName
Definition: TRT_Electron_Monitoring_Tool.h:138
TRT_Electron_Monitoring_Tool::m_muonContainer
const xAOD::MuonContainer * m_muonContainer
Definition: TRT_Electron_Monitoring_Tool.h:137
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
TRT_Electron_Monitoring_Tool::m_tBarrelA
lw_geo_hists_t m_tBarrelA
Definition: TRT_Electron_Monitoring_Tool.h:165
Trk::TrackStateOnSurface::Measurement
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
Definition: TrackStateOnSurface.h:101
TRT_Electron_Monitoring_Tool::trtBookHistoLW
TH1F_LW * trtBookHistoLW(MonGroup &mongroup, const std::string &hName, const std::string &hTitle, int bins, double lowbin, double highbin, double x_labelSize, double y_lableSize, const std::string &xTitle, const std::string &yTitle)
Definition: TRT_Electron_Monitoring_Tool.cxx:733
TrackStateOnSurface.h
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
PCAND_EL
@ PCAND_EL
Definition: TRT_Electron_Monitoring_Tool.h:35
xAOD::numberOfInnermostPixelLayerHits
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
Definition: TrackingPrimitives.h:237
ymax
double ymax
Definition: listroot.cxx:64
ManagedMonitorToolBase::newRunFlag
bool newRunFlag() const
Definition: ManagedMonitorToolBase.h:854
TRT_Electron_Monitoring_Tool::m_tEndCapA
lw_geo_hists_t m_tEndCapA
Definition: TRT_Electron_Monitoring_Tool.h:167
TRT_Electron_Monitoring_Tool::m_doMuonMon
bool m_doMuonMon
Definition: TRT_Electron_Monitoring_Tool.h:148