ATLAS Offline Software
IDPerfMonKshort.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // **********************************************************************
6 // IDPerfMonKshort.cxx
7 // AUTHORS: Jed Biesiada, Tobias Golling, Beate Heinemann
8 // **********************************************************************
9 
10 #include <cmath>
11 #include <vector>
12 #include <algorithm>
13 
14 #include "TH1.h"
15 #include "TProfile.h"
16 #include "TGraphErrors.h"
17 #include "TF1.h"
18 #include "TMath.h"
19 #include "TRandom.h"
20 
21 
22 #include "GaudiKernel/SystemOfUnits.h"
23 #include "GaudiKernel/PhysicalConstants.h"
24 
27 
28 #include "xAODTracking/Vertex.h"
30 
33 
38 #include "CLHEP/Vector/LorentzVector.h"
39 // ATLAS headers
40 #include "GaudiKernel/IInterface.h"
42 
45 
46 
47 namespace{ //utility functions
48  //fill a container with a sequence of values
49  template <typename ForwardIterator, typename T>
50  void
51  sequentialFill(ForwardIterator beg, const ForwardIterator stop, T value, const T inc){
52  while (beg!=stop){
53  *beg++ = value;
54  value +=inc;
55  };
56  return;
57  }
58 
59  //find index in sorted array where the given value lies just above the indexed value
60  template <typename Iterator, typename T, typename Compare=std::less<T>>
61  long
62  findLevel(const Iterator beg, const Iterator stop, T value, Compare op=std::less<T>()){
63  auto place = std::lower_bound(beg, stop, value, op);
64  return std::distance(beg, place );
65  }
66  //in range?
67  template <typename T>
68  bool
69  inRange(const T &v, const T &lo, const T &hi){
70  return (v >= lo) and (v<=hi);
71  }
72 
73 }
74 
75 // *********************************************************************
76 // Public Methods
77 // *********************************************************************
78 
79 
80 
81 IDPerfMonKshort::IDPerfMonKshort( const std::string & type, const std::string & name, const IInterface* parent )
83  m_triggerChainName("NoTriggerSelection")
84 
85 {
86  declareProperty("tracksName",m_tracksName);
87  declareProperty("CheckRate",m_checkrate=1000);
88  declareProperty("triggerChainName",m_triggerChainName);
89  declareProperty("VxContainerName",m_VxContainerName="V0UnconstrVertices");
90  declareProperty("VxPrimContainerName",m_VxPrimContainerName="PrimaryVertices");
91 }
92 
94 
95 
97 {
98  ATH_MSG_DEBUG( "IDPerfMonKshort initialize() started");
99  m_histosBooked = 0;
100  if (m_tracksName.empty()) ATH_MSG_ERROR( " no track collection given");
101  StatusCode sc;
103  ATH_MSG_DEBUG( "IDPerfMonKshort initialize() finished");
104  return StatusCode::SUCCESS;
105 }
106 
107 
109 {
110  if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "IDPerfMonKshort bookHistograms() started"<< endmsg;
111  MonGroup al_kshort_mon ( this, "IDPerfMon/Kshort/" + m_triggerChainName, run);
112 
113 
114  //ASK CONFIRMATION for ATTRIB_MANAGED
115  MonGroup al_kshort_mon_average(this, "IDPerfMon/Kshort/" + m_triggerChainName,run,ATTRIB_MANAGED,"","weightedAverage");
116 
117 
119  // book histograms that are only made in the online environment...
120  }
121 
123  // book histograms that are only relevant for cosmics data...
124  }
125 
126 
127 
128 
129 
130  if( newRunFlag() ) {
131 
132  //if user environment specified we don't want to book new histograms at every run boundary
133  //we instead want one histogram per job
134  if(m_histosBooked!=0 && AthenaMonManager::environment()==AthenaMonManager::user) return StatusCode::SUCCESS;
135 
136  Double_t ptBins[m_nFittedBinsPt] = {1.05,1.85,2.45,3.35,4.5};
137  Double_t radiusBins[m_nFittedBinsRadius] = {15.,35.,50.,70.,90.,120.,185.};
138  Double_t phiBins[10]{};
139  Double_t etaBins[10]{};
140  Double_t curvatureDiffBins[6]{};
141  sequentialFill(phiBins, std::end(phiBins), (-4.5*M_PI/5.), (M_PI/5.));
142  sequentialFill(etaBins, std::end(etaBins),-2.25, 0.5);
143  sequentialFill(curvatureDiffBins, std::end(curvatureDiffBins), -0.001,0.0004);
144  m_mass = new TH1F("ks_mass", "Invariant mass of K^{0}_{S} candidate", 60, 0.45, 0.55);
145  m_mass->SetYTitle("K^{0}_{S} Candidates");
146  m_mass->SetXTitle("Mass (Gev / c^{2})");
147  m_mass->SetMarkerStyle(20);
148  m_mass->SetMinimum(0.);
149  RegisterHisto(al_kshort_mon,m_mass) ;
150  m_mass_scaled = new TH1F("ks_mass_scaled", "Invariant mass of K^{0}_{S} candidate scaled to per event", 60, 0.45, 0.55);
151  m_mass_scaled->SetYTitle("K^{0}_{S} Candidates");
152  m_mass_scaled->SetXTitle("Mass (Gev / c^{2})");
153  m_mass_scaled->SetMarkerStyle(20);
154  m_mass_scaled->SetMinimum(0.);
155  RegisterHisto(al_kshort_mon,m_mass_scaled) ;
156 
157  m_massVsPhi = new TH2F("ks_massVsPhi", "Invariant mass - world average of K^{0}_{S} candidate", 10, (-1.0* M_PI), M_PI, 50, -.5, .5);
158  m_massVsPhi->SetXTitle("#phi");
159  m_massVsPhi->SetYTitle("Mass (Gev / c^{2}) - World Average [MeV]");
160  RegisterHisto(al_kshort_mon,m_massVsPhi) ;
161 
162  m_pt = new TH1F("ks_pt", "p_{T} of K^{0}_{S} candidate", 100, 0., 10.);
163  m_pt->SetYTitle("K^{0}_{S} Candidates");
164  m_pt->SetXTitle("p_{T} (Gev / c)");
165  m_pt->SetMarkerStyle(20);
166  RegisterHisto(al_kshort_mon,m_pt) ;
167 
168  m_radiusVsZ_secVertex = new TH2F("secVertex_radiusVsZ", "all sec.vertices (reco);z [mm];Decay radius [mm]",180, -600., 600.,180.,0.,180.);
169  RegisterHisto(al_kshort_mon,m_radiusVsZ_secVertex) ;
170 
171  m_YVsX_secVertex = new TH2F("secVertex_YVsX", "all sec. vertices (reco);x [mm];y [mm]",200, -150.,150., 200, -150., 150.);
172  RegisterHisto(al_kshort_mon,m_YVsX_secVertex) ;
173 
174  m_radiusVsZ_secVertex_sel = new TH2F("secVertex_radiusVsZ_sel", "all sec.vertices (reco);z [mm];Decay radius [mm]",180, -600., 600.,180.,0.,180.);
176 
177  m_YVsX_secVertex_sel = new TH2F("secVertex_YVsX_sel", "all sec. vertices (reco);x [mm];y [mm]",200, -150.,150., 200, -150., 150.);
178  RegisterHisto(al_kshort_mon,m_YVsX_secVertex_sel) ;
179 
180  m_radiusVsZ_secVertex_Ks = new TH2F("secVertex_radiusVsZ_Ks", "sec.vertices (reco) of K^{0}_{S} candidates;z [mm];Decay radius [mm]",180, -600., 600.,180.,0.,180.);
181  RegisterHisto(al_kshort_mon,m_radiusVsZ_secVertex_Ks) ;
182 
183  m_YVsX_secVertex_Ks = new TH2F("secVertex_YVsX_Ks", "sec. vertices (reco) of K^{0}_{S} candidates;x [mm];y [mm]",200, -150.,150., 200, -150., 150.);
184  RegisterHisto(al_kshort_mon,m_YVsX_secVertex_Ks) ;
185 
186  m_radius_secVertices = new TH1F("radius_secVertices", "Decay radius of secondary vertices", 600, 0., 300.);
187  RegisterHisto(al_kshort_mon,m_radius_secVertices) ;
188 
189  m_radius_secVertices_sel = new TH1F("radius_secVertices_sel", "Decay radius of secondary vertices", 600, 0., 300.);
190  RegisterHisto(al_kshort_mon,m_radius_secVertices_sel) ;
191 
192  m_YVsX_primVertex = new TH2F("primVertex_YVsX", "all primary vertices (reco);PV x [mm];PV y [mm]",300, -1.5,1.5, 300, -1.5, 1.5);
193  RegisterHisto(al_kshort_mon,m_YVsX_primVertex) ;
194 
195  m_XVsZ_primVertex = new TH2F("primVertex_XVsZ", "all primary vertices (reco);PV z [mm];PV x [mm]",200, -350.,350, 300, -1.5, 1.5);
196  RegisterHisto(al_kshort_mon,m_XVsZ_primVertex) ;
197 
198  m_YVsZ_primVertex = new TH2F("primVertex_YVsZ", "all primary vertices (reco);PV z [mm];PV y [mm]",200, -350.,350., 100, -1.5, 1.5);
199  RegisterHisto(al_kshort_mon,m_YVsZ_primVertex) ;
200 
201  m_YVsX_primVertex_Ks = new TH2F("primVertex_YVsX_Ks", "all primary vertices (reco);PV x [mm];PV y [mm]",300, -1.5,1.5, 300, -1.5, 1.5);
202  RegisterHisto(al_kshort_mon,m_YVsX_primVertex_Ks) ;
203 
204  m_XVsZ_primVertex_Ks = new TH2F("primVertex_XVsZ_Ks", "all primary vertices (reco);PV z [mm];PV x [mm]",200, -350.,350, 300, -1.5, 1.5);
205  RegisterHisto(al_kshort_mon,m_XVsZ_primVertex_Ks) ;
206 
207  m_YVsZ_primVertex_Ks = new TH2F("primVertex_YVsZ_Ks", "all primary vertices (reco);PV z [mm];PV y [mm]",200, -350.,350., 100, -1.5, 1.5);
208  RegisterHisto(al_kshort_mon,m_YVsZ_primVertex_Ks) ;
209 
210  m_radius = new TH1F("ks_radius", "Decay radius of K^{0}_{S} candidate", 100, 0., 300.);
211  m_radius->SetYTitle("K^{0}_{S} Candidates");
212  m_radius->SetXTitle("Decay Radius (mm)");
213  m_radius->SetMarkerStyle(20);
214  RegisterHisto(al_kshort_mon,m_radius) ;
215 
216 
217  m_eta = new TH1F("ks_eta", "#eta of K^{0}_{S} candidate", 10, -2.5, 2.5);
218  m_eta->SetYTitle("K^{0}_{S} Candidates");
219  m_eta->SetXTitle("#eta");
220  m_eta->SetMarkerStyle(20);
221  RegisterHisto(al_kshort_mon,m_eta) ;
222  m_phi = new TH1F("ks_phi", "#phi of K^{0}_{S} candidate", 10, (-1.0* M_PI), M_PI);
223  m_phi->SetYTitle("K^{0}_{S} Candidates");
224  m_phi->SetXTitle("#phi");
225  m_phi->SetMarkerStyle(20);
226  RegisterHisto(al_kshort_mon,m_phi) ;
227  //
228  //lamda for use below
229  auto quickSet=[](TH1F * h){
230  h->SetXTitle("Mass (Gev / c^{2})");
231  h->SetYTitle("K^{0}_{S} Candidates");
232  h->SetMarkerStyle(20);
233  h->SetMinimum(0.);
234  };
235  //
236  for(int quickInit=0;quickInit<m_nBinsPt;quickInit++) {
237  TString tempName = "MassVptBin";
238  TString tempTitle = "Mass, p_{T} = ";
239  tempName += quickInit;
240  tempTitle += ((Double_t)((quickInit*100)+500))/1000;
241  tempTitle += " GeV";
242  m_massVPtBinHistos[quickInit] = new TH1F(tempName.Data(),tempTitle.Data(),50,0.445,0.555);
243  quickSet(m_massVPtBinHistos[quickInit]);
244 
245  RegisterHisto(al_kshort_mon,m_massVPtBinHistos[quickInit]) ;
246  }
247  for(int quickInit=0;quickInit<m_nFittedBinsPt;quickInit++) {
248  TString tempName = "MassVptBinFitted";
249  TString tempTitle = "Fitted Mass, p_{T} = ";
250  tempName += quickInit;
251  tempTitle += ptBins[quickInit];
252  tempTitle += " GeV";
253  m_massVPtBinFittedHistos[quickInit] = new TH1F(tempName.Data(),tempTitle.Data(),50,0.445,0.555);
254  quickSet(m_massVPtBinFittedHistos[quickInit]);
255  RegisterHisto(al_kshort_mon,m_massVPtBinFittedHistos[quickInit]) ;
256  }
257  for(int quickInit=0;quickInit<m_nBinsRadius;quickInit++) {
258  TString tempName = "MassVradiusBin";
259  TString tempTitle = "Mass, Decay Radius = ";
260  tempName += quickInit;
261  tempTitle += quickInit*10;
262  tempTitle += " mm";
263  m_massVRadiusBinHistos[quickInit] = new TH1F(tempName.Data(),tempTitle.Data(),50,0.445,0.555);
264  quickSet(m_massVRadiusBinHistos[quickInit]);
265  RegisterHisto(al_kshort_mon,m_massVRadiusBinHistos[quickInit]) ;
266  }
267  for(int quickInit=0;quickInit<m_nFittedBinsRadius;quickInit++) {
268  TString tempName = "MassVradiusBinFitted";
269  TString tempTitle = "Fitted Mass, Decay Radius = ";
270  tempName += quickInit;
271  tempTitle += radiusBins[quickInit];
272  tempTitle += " mm";
273  m_massVRadiusBinFittedHistos[quickInit] = new TH1F(tempName.Data(),tempTitle.Data(),50,0.445,0.555);
274  quickSet(m_massVRadiusBinFittedHistos[quickInit]);
275  RegisterHisto(al_kshort_mon,m_massVRadiusBinFittedHistos[quickInit]) ;
276  }
277  for(int quickInit=0;quickInit<10;quickInit++) {
278  TString tempName = "MassVEtaBin";
279  TString tempTitle = "Mass, #eta = ";
280  tempName += quickInit;
281  tempTitle += etaBins[quickInit];
282  m_massVEtaBinHistos[quickInit] = new TH1F(tempName.Data(),tempTitle.Data(),50,0.445,0.555);
283  quickSet(m_massVEtaBinHistos[quickInit]) ;
284  RegisterHisto(al_kshort_mon,m_massVEtaBinHistos[quickInit]) ;
285 
286  tempName = "MassVPhiBin";
287  tempTitle = "Mass, #phi = ";
288  tempName += quickInit;
289  tempTitle += ((Double_t)((Int_t)(phiBins[quickInit]*100)))/100;
290  m_massVPhiBinHistos[quickInit] = new TH1F(tempName.Data(),tempTitle.Data(),50,0.445,0.555);
291  quickSet(m_massVPhiBinHistos[quickInit]);
292  RegisterHisto(al_kshort_mon,m_massVPhiBinHistos[quickInit]) ;
293  }
294 
295  for(int quickInit=0;quickInit<6;quickInit++) {
296  TString tempName = "MassVCurvatureDiffBin";
297  TString tempTitle = "Mass, CurvatureDiff = ";
298  tempName += quickInit;
299  tempTitle += curvatureDiffBins[quickInit];
300  m_massVCurvatureDiffBinHistos[quickInit] = new TH1F(tempName.Data(),tempTitle.Data(),50,0.445,0.555);
301  quickSet(m_massVCurvatureDiffBinHistos[quickInit]);
302  RegisterHisto(al_kshort_mon,m_massVCurvatureDiffBinHistos[quickInit]) ;
303  }
304 
305  m_massVersusPt_merged = new TH1F("KsMassVersusPt_Merged","Dummy TH1F Before Merging",10,-1,1);
306  m_widthVersusPt_merged = new TH1F("KsWidthVersusPt_Merged","Dummy TH1F Before Merging",10,-1,1);
307  m_massVersusRadius_merged = new TH1F("KsMassVersusRadius_Merged","Dummy TH1F Before Merging",10,-1,1);
308  m_widthVersusRadius_merged = new TH1F("KsWidthVersusRadius_Merged","Dummy TH1F Before Merging",10,-1,1);
309  m_massVersusEta_merged = new TH1F("KsMassVersusEta_Merged","Dummy TH1F Before Merging",10,-1,1);
310  m_widthVersusEta_merged = new TH1F("KsWidthVersusEta_Merged","Dummy TH1F Before Merging",10,-1,1);
311  m_massVersusPhi_merged = new TH1F("KsMassVersusPhi_Merged","Dummy TH1F Before Merging",10,-1,1);
312  m_widthVersusPhi_merged = new TH1F("KsWidthVersusPhi_Merged","Dummy TH1F Before Merging",10,-1,1);
313  m_massVersusCurvatureDiff_merged = new TH1F("KsMassVersusCurvatureDiff_Merged","Dummy TH1F Before Merging",10,-1,1);
314  m_widthVersusCurvatureDiff_merged = new TH1F("KsWidthVersusCurvatureDiff_Merged","Dummy TH1F Before Merging",10,-1,1);
315 
316  RegisterHisto(al_kshort_mon_average,m_massVersusPt_merged) ;
317  RegisterHisto(al_kshort_mon_average,m_widthVersusPt_merged) ;
318  RegisterHisto(al_kshort_mon_average,m_massVersusRadius_merged) ;
319  RegisterHisto(al_kshort_mon_average,m_widthVersusRadius_merged) ;
320  RegisterHisto(al_kshort_mon_average,m_massVersusEta_merged) ;
321  RegisterHisto(al_kshort_mon_average,m_widthVersusEta_merged) ;
322  RegisterHisto(al_kshort_mon_average,m_massVersusPhi_merged) ;
323  RegisterHisto(al_kshort_mon_average,m_widthVersusPhi_merged) ;
324  RegisterHisto(al_kshort_mon_average,m_massVersusCurvatureDiff_merged) ;
325  RegisterHisto(al_kshort_mon_average,m_widthVersusCurvatureDiff_merged) ;
326 
327  m_Nevents = new TH1F("Nevents","Number of events processed",1,-.5,.5);
328  RegisterHisto(al_kshort_mon,m_Nevents);
329 
330  ATH_MSG_DEBUG( "IDPerfMonKshort bookHistograms done");
331 
332  m_histosBooked++;
333 
334  }
335 
336 
337 
338  return StatusCode::SUCCESS;
339 }
340 
342  ATH_MSG_VERBOSE( "IDPerfMonKshort RegisterHisto() started");
343  histo->Sumw2();
344  StatusCode sc = mon.regHist(histo);
345  if (sc.isFailure() ) {
346  ATH_MSG_ERROR( "Cannot book TH1 Histogram:" );
347  }
348 }
349 
351  ATH_MSG_VERBOSE( "IDPerfMonKshort RegisterHisto() started");
352  StatusCode sc = mon.regHist(histo);
353  if (sc.isFailure() ) {
354  ATH_MSG_ERROR( "Cannot book TProfile Histogram:" );
355  }
356 }
357 
359  ATH_MSG_VERBOSE( "IDPerfMonKshort RegisterHisto() started");
360  StatusCode sc = mon.regGraph(graph);
361  if (sc.isFailure() ) {
362  ATH_MSG_ERROR( "Cannot book TGraph:" );
363  }
364 }
365 
366 
368 {
369  ATH_MSG_VERBOSE( "IDPerfMonKshort fillHistogram() started");
370  const xAOD::TrackParticleContainer* tracks(nullptr);
371  StatusCode sc = evtStore()->retrieve(tracks,m_tracksName);
372  if (sc.isFailure()) {
373  ATH_MSG_DEBUG( "No Collection with name "<<m_tracksName<<" found in StoreGate" );
374  return StatusCode::SUCCESS;
375  } else {
376  ATH_MSG_DEBUG( "Collection with name "<<m_tracksName<<" found in StoreGate" );
377  }
378 
379  const xAOD::VertexContainer* PrimVxContainer(nullptr);
380  if(evtStore()->contains<xAOD::VertexContainer>(m_VxPrimContainerName)){
381  if ( evtStore()->retrieve(PrimVxContainer,m_VxPrimContainerName).isFailure()) {
382  ATH_MSG_DEBUG("Could not retrieve collection with name "<<m_VxPrimContainerName<<" found in StoreGate");
383  return StatusCode::FAILURE;
384  }
385  else
386  ATH_MSG_DEBUG("Successfully retrieved collection with name "<<m_VxPrimContainerName);
387  }
388  else {
389  ATH_MSG_DEBUG("No collection with name "<<m_VxPrimContainerName<<" found in StoreGate");
390  return StatusCode::SUCCESS;
391  }
392  const xAOD::Vertex *primaryVertex= std::begin(*PrimVxContainer)[0];
393 
394  const xAOD::VertexContainer* SecVxContainer(nullptr);
395  if(evtStore()->contains<xAOD::VertexContainer>(m_VxContainerName)){
396  if (evtStore()->retrieve(SecVxContainer,m_VxContainerName).isFailure()) {
397  ATH_MSG_DEBUG("Could not retrieve collection with name "<<m_VxContainerName<<" found in StoreGate");
398  return StatusCode::FAILURE;
399  }
400  else
401  ATH_MSG_DEBUG("Successfully retrieved collection with name "<<m_VxContainerName);
402  }
403  else {
404  ATH_MSG_DEBUG("No collection with name "<<m_VxContainerName<<" found in StoreGate");
405  return StatusCode::SUCCESS;
406  }
407 
408  m_Nevents->Fill(0.);
409  double ksMassPDG = ParticleConstants::KZeroMassInMeV;
410  ATH_MSG_DEBUG("@todo : masspdf" <<ksMassPDG );
411  ATH_MSG_DEBUG("@todo Looping over SecVxContainer name : "<< m_VxContainerName);
412  ATH_MSG_DEBUG("@todo >> V0UnconstrVerices container size >> " << SecVxContainer->size());
413  //bin curvature from -0.0008 to 0.0008 in bins of 0.0004
414  std::array<float, 5> curvatureBinning{};
415  sequentialFill(curvatureBinning.begin(), curvatureBinning.end(),-0.0008, 0.0004);
416  //bin phi from -pi to pi in bins of pi/5
417  std::array<double,10> ksPhiBinning{};
418  sequentialFill(ksPhiBinning.begin(), ksPhiBinning.end(), -M_PI, M_PI * 0.2);
419  //bin ksEta from -2.5 to 2.5 in bins of 0.5
420  std::array<double,10> ksEtaBinning{};
421  sequentialFill(ksEtaBinning.begin(), ksEtaBinning.end(),-2.5, 0.5);
422  //bin ksPt, variable bins
423  std::array<double,4> ksPtBinning{1600,2100, 2800,3900};
424  //bin radius, variable binning
425  std::array<double,6> radiusBinning{30,40, 60,80,100,140};
426  //
427  for (const auto* secVx_elem : *SecVxContainer) {
428  ATH_MSG_DEBUG("Looping over SecVxContainer name : "<< m_VxContainerName);
429  static const SG::ConstAccessor< float > Kshort_massAcc("Kshort_mass");
430  static const SG::ConstAccessor< float > pTAcc("pT");
431  static const SG::ConstAccessor< float > pxAcc("px");
432  static const SG::ConstAccessor< float > pyAcc("py");
433  static const SG::ConstAccessor< float > pzAcc("pz");
434  double ksMass = Kshort_massAcc(*secVx_elem);
435  double ksPt = pTAcc(*secVx_elem);
436  double ksPx = pxAcc(*secVx_elem);
437  double ksPy = pyAcc(*secVx_elem);
438  double ksPz = pzAcc(*secVx_elem);
439  ATH_MSG_DEBUG( " mass : "<<ksMass << " pt : "<< ksPt << " px : "<< ksPx << " py : "<< ksPy << " pz : "<< ksPz);
440  CLHEP::Hep3Vector ksMomentumVector = CLHEP::Hep3Vector(ksPx,ksPy,ksPz);
441  double ksMomentum = ksMomentumVector.mag();
442  double transverseFlightDistance, totalFlightDistance;
443  Amg::Vector3D flightVector;
444  const auto & secVxPosition(secVx_elem->position());
445  if(primaryVertex) {
446  if(primaryVertex->nTrackParticles() > 3){
447  ATH_MSG_DEBUG("NTrk of primary vertices : "<< primaryVertex->nTrackParticles());
448  const auto & position (primaryVertex->position());
449  m_YVsX_primVertex->Fill(position.x(),position.y());
450  m_XVsZ_primVertex->Fill(position.z(),position.x());
451  m_YVsZ_primVertex->Fill(position.z(),position.y());
452  }
453  auto vert = secVx_elem->position()-primaryVertex->position();
454  double dx = vert.x();
455  double dy = vert.y();
456  Amg::Vector3D mom(ksPx,ksPy,ksPz);
457  double dxy = (mom.x()*dx + mom.y()*dy)/mom.perp();
458  transverseFlightDistance =dxy;
459  Amg::Vector3D vertex(secVxPosition.x(),secVxPosition.y(),secVxPosition.z());
460  totalFlightDistance = (vertex-primaryVertex->position()).mag();
461  flightVector = vertex-primaryVertex->position();
462  ATH_MSG_DEBUG("dx : "<<dx<<" dy: "<<dy<<" dxy: "<<dxy<< "flight distance (total): "<<totalFlightDistance);
463  }
464  else {
465  transverseFlightDistance = secVxPosition.perp();
466  Amg::Vector3D vertex(secVxPosition.x(),secVxPosition.y(),secVxPosition.z());
467  totalFlightDistance = vertex.mag();
468  flightVector = vertex;
469  }
470  double properDecayTime = 1./Gaudi::Units::c_light*ksMassPDG/ksMomentum*totalFlightDistance;
471 
472 
473  double flightX = flightVector.x();
474  double flightY = flightVector.y();
475  double cosThetaPointing = (ksPx*flightX+ksPy*flightY)/std::sqrt(ksPx*ksPx+ksPy*ksPy)/std::sqrt(flightX*flightX+flightY*flightY);
476  int trackPos_nSVTHits = 0;
477  int trackNeg_nSVTHits = 0;
478  double trackPos_d0 = 0;
479  double trackPos_d0_wrtPV = 0;
480  double trackNeg_d0 = 0;
481  double trackNeg_d0_wrtPV = 0;
482  const xAOD::TrackParticle* trackPos(nullptr);
483  const xAOD::TrackParticle* trackNeg(nullptr);
484 
485  int ntrk(-1);
486  ntrk = secVx_elem->nTrackParticles();
487  ATH_MSG_DEBUG("track particles associated to vertex : "<<ntrk );
488  if(ntrk>0){
489  auto tpLinks = secVx_elem->trackParticleLinks();
490  for (const auto& link: tpLinks){
491  Info("execute()", "V0: TP link = %d %s ", link.isValid(), link.dataID().c_str() );
492  if(ntrk == 2){
493  ATH_MSG_DEBUG("Exactly two track particles!");
494  if( (*link)->charge() > 0. ) {
495  trackPos = *link;
496  ATH_MSG_DEBUG("Track with positive charge!");
497  }
498  else if( (*link)->charge() < 0. ){
499  trackNeg = *link;
500  ATH_MSG_DEBUG("Track with negative charge!"); }
501  }
502  }//trackparticles
503  }//ntrk
504  if(trackPos!=nullptr) {
505  uint8_t dummy(-1);
506  trackPos_nSVTHits = trackPos->summaryValue( dummy , xAOD::numberOfSCTHits )? dummy :-1;
507  trackPos_d0 = trackPos->d0();
508  trackPos_d0_wrtPV = trackPos->d0() - (primaryVertex->position().y()*std::cos(trackPos->phi0()) - primaryVertex->position().x()*std::sin(trackPos->phi0()));
509 
510  }
511  //std::cout <<"@todo : check (2) " << std::endl;
512 
513  if(trackNeg!=nullptr) {
514  uint8_t dummy(-1);
515  trackNeg_nSVTHits = trackNeg->summaryValue( dummy , xAOD::numberOfSCTHits )? dummy :-1;
516  trackNeg_d0 = trackNeg->d0();
517  trackNeg_d0_wrtPV = trackNeg->d0() - (primaryVertex->position().y()*cos(trackNeg->phi0()) - primaryVertex->position().x()*sin(trackNeg->phi0()));
518  }
519  int selectorValue = 0;
520  ATH_MSG_DEBUG( "ksTau = " << properDecayTime << " Lxy = " <<transverseFlightDistance<< " cosTheta = " << cosThetaPointing );
521  ATH_MSG_DEBUG( "trackPos nSVThits = " << trackPos_nSVTHits << " trackNeg nSVThits = " << trackNeg_nSVTHits );
522  ATH_MSG_DEBUG( "ksPt = " << ksPt );
523  static const SG::ConstAccessor< float > RxyAcc("Rxy");
524  double secVertex_radius = RxyAcc(*secVx_elem);
525  ATH_MSG_DEBUG("secondary vertex radius : " << secVertex_radius);
526  m_radius_secVertices->Fill(secVertex_radius);
527  m_radiusVsZ_secVertex->Fill(secVxPosition.z(),secVertex_radius);
528  m_YVsX_secVertex->Fill(secVxPosition.x(),secVxPosition.y());
529  // }
530  ATH_MSG_DEBUG("trackneg d0 : " << trackNeg_d0 << " trackpos d0 : "<< trackPos_d0);
531  ATH_MSG_DEBUG("trackneg d0 (PV): " << trackNeg_d0_wrtPV << " trackpos d0 (PV) : "<< trackPos_d0_wrtPV);
532  if(secVx_elem->chiSquared()/secVx_elem->numberDoF() < 4.5
533  && ksPt > 300.
534  && abs(trackNeg_d0_wrtPV) > 5.
535  && abs(trackPos_d0_wrtPV) > 5.
536  && trackPos_nSVTHits > 2
537  && trackNeg_nSVTHits > 2
538  && secVertex_radius > 20.
539  ){
540  m_radius_secVertices_sel->Fill(secVertex_radius);
541  m_radiusVsZ_secVertex_sel->Fill(secVxPosition.z(),secVertex_radius);
542  m_YVsX_secVertex_sel->Fill(secVxPosition.x(),secVxPosition.y());
543  }
544 
545 
546 
547  if( 1
548  && properDecayTime > 0.004
549  && transverseFlightDistance > 12.
550  && cosThetaPointing > 0.998
551  && ksMass>400.&&ksMass<600.
552  && trackPos_nSVTHits > 2 && trackNeg_nSVTHits > 2
553  ) selectorValue = 1;
554  if(selectorValue != 1) continue;
555  m_radiusVsZ_secVertex_Ks->Fill(secVxPosition.z(),secVertex_radius);
556  m_YVsX_secVertex_Ks->Fill(secVxPosition.x(),secVxPosition.y());
557  m_YVsX_primVertex_Ks->Fill(primaryVertex->position().x(),primaryVertex->position().y());
558  m_XVsZ_primVertex_Ks->Fill(primaryVertex->position().z(),primaryVertex->position().x());
559  m_YVsZ_primVertex_Ks->Fill(primaryVertex->position().z(),primaryVertex->position().y());
560  m_mass->Fill(ksMass*0.001);
561  double ksEta = ksMomentumVector.pseudoRapidity();
562  double ksPhi = ksMomentumVector.phi();
563  double piPlusPt = trackPos->p4().Perp();
564  double piMinusPt = trackNeg->p4().Perp();
565  m_massVsPhi->Fill(ksPhi,ksMass-ksMassPDG);
566  m_pt->Fill(ksPt*0.001);
567  m_eta->Fill(ksEta);
568  m_phi->Fill(ksPhi);
569  Float_t curvatureDiff = (1./(piPlusPt)) - (1./(piMinusPt));
570  const auto fillValue(ksMass*0.001);
571  auto curvatureIdx = findLevel(curvatureBinning.begin(), curvatureBinning.end(),curvatureDiff);
572  m_massVCurvatureDiffBinHistos[curvatureIdx]->Fill(fillValue);
573  if (ksPhi>=-M_PI and ksPhi<M_PI){
574  auto ksPhiIdx = findLevel(ksPhiBinning.begin(), ksPhiBinning.end(), ksPhi, std::less_equal<double>());
575  m_massVPhiBinHistos[ksPhiIdx]->Fill(fillValue);
576  }
577  if (ksEta>=-2.5 and ksEta<2.5){
578  auto ksEtaIdx = findLevel(ksEtaBinning.begin(), ksEtaBinning.end(), ksEta, std::less_equal<double>());
579  m_massVEtaBinHistos[ksEtaIdx]->Fill(fillValue);
580  }
581  if (ksPt>=0.){
582  auto ksPtIdx = findLevel(ksPtBinning.begin(), ksPtBinning.end(), ksPt, std::less_equal<double>());
583  m_massVPtBinFittedHistos[ksPtIdx]->Fill(fillValue);
584  }
585 
586  if (ksPt<500) ksPt = 500;
587  if (ksPt>5000) ksPt=5000;
588  Int_t quickBin = (Int_t)ksPt;
589  quickBin -= quickBin%100;
590  quickBin -= 500;
591  quickBin /= 100;
592  m_massVPtBinHistos[quickBin]->Fill(fillValue);
593  double radius = RxyAcc(*secVx_elem);
594  m_radius->Fill(radius);
595  if (radius>=0.){
596  auto radiusIdx = findLevel(radiusBinning.begin(), radiusBinning.end(), radius, std::less_equal<double>());
597  m_massVRadiusBinFittedHistos[radiusIdx]->Fill(fillValue);
598  }
599  if(radius>700) radius = 700;
600  Int_t radiusTemp = (Int_t)radius;
601  radiusTemp -= radiusTemp%10;
602  m_massVRadiusBinHistos[(Int_t)radiusTemp/10]->Fill(ksMass/1000.);
603  }
604  return StatusCode::SUCCESS;
605 }
606 
607 
609 {
610  ATH_MSG_VERBOSE( "IDPerfMonKshort procHistograms() started");
611  if( endOfRunFlag() ) {
612  MonGroup al_kshort_mon ( this, "IDPerfMon/Kshort/" + m_triggerChainName, run);
613  //CHECK ATTRIB MANAGED
614  MonGroup al_kshort_mon_average ( this, "IDPerfMon/Kshort/" + m_triggerChainName, run, ATTRIB_MANAGED, "", "weightedAverage" );
615  TF1 *func = new TF1("func","gaus(0)+expo(3)",0.450,0.550);
616  func->SetLineColor(4);
617  func->SetParameters(10.,0.500,0.010,2.,-.001);
618  func->SetParLimits(0,0.,10000.);
619  func->SetParLimits(1,0.450,0.550);
620  func->SetParLimits(2,0.,0.100);
621  func->SetParLimits(3,0.,10000.);
622  func->SetParLimits(4,-1000.,0.);
623  func->SetParNames("Constant","Mean","Width","Constant","Slope");
624  Double_t massBins[m_nFittedBinsPt], massErrorBins[m_nFittedBinsPt], widthBins[m_nFittedBinsPt], widthErrorBins[m_nFittedBinsPt];
625  const Int_t nPtBinsHisto = m_nFittedBinsPt+1;
626  Double_t ptBins[nPtBinsHisto] = {0.5,1.6,2.1,2.8,3.9,5.1};
627  for(int binFill=0;binFill<m_nFittedBinsPt;binFill++) {
628  massBins[binFill] = func->GetParameter(1);
629  massErrorBins[binFill] = func->GetParError(1);
630  widthBins[binFill] = func->GetParameter(2);
631  widthErrorBins[binFill] = func->GetParError(2);
632  }
633  const Double_t* ptBinsFinal = ptBins;
634  const Double_t* massBinsFinal = massBins;
635  const Double_t* massErrorBinsFinal = massErrorBins;
636  const Double_t* widthBinsFinal = widthBins;
637  const Double_t* widthErrorBinsFinal = widthErrorBins;
638  //lamda utilities for repetitive code
639  auto setYTitleAndMarker =[](TH1F * theHist,const bool mass){
640  if (mass){
641  theHist->SetYTitle("Mass (Gev / c^{2})");
642  }else {
643  theHist->SetYTitle("Width (Gev / c^{2})");
644  };
645  theHist->SetMarkerStyle(20);
646  };
647  //
648  auto fillFromSource = [](const double * source, const double * uncertainty, TH1F * target, unsigned int nbins){
649  for(unsigned int bin=0;bin<nbins;bin++) {
650  double binContent = source[bin];
651  double binError = uncertainty[bin];
652  target->SetBinContent(bin+1, binContent);
653  target->SetBinError(bin+1,binError);
654  }
655  };
656  constexpr bool massTitle{true};
657  constexpr bool widthTitle{false};
658  if(m_nFittedBinsPt) {
659  m_massVersusPt = new TH1F("KsMassVersusPt","",m_nFittedBinsPt,ptBinsFinal);
660  RegisterHisto(al_kshort_mon_average,m_massVersusPt);
661  m_massVersusPt->SetXTitle("p_{T} (Gev / c)");
662  setYTitleAndMarker(m_massVersusPt, massTitle);
663  fillFromSource(massBinsFinal, massErrorBinsFinal, m_massVersusPt, m_nFittedBinsPt);
664  m_widthVersusPt = new TH1F("KsWidthVersusPt","",m_nFittedBinsPt,ptBinsFinal);
665  RegisterHisto(al_kshort_mon_average,m_widthVersusPt);
666  m_widthVersusPt->SetXTitle("p_{T} (Gev / c)");
667  setYTitleAndMarker(m_widthVersusPt, widthTitle);
668  fillFromSource(widthBinsFinal, widthErrorBinsFinal, m_widthVersusPt, m_nFittedBinsPt);
669  }
670 
671  Double_t massVradiusBins[m_nFittedBinsRadius], massVradiusErrorBins[m_nFittedBinsRadius], widthVradiusBins[m_nFittedBinsRadius], widthVradiusErrorBins[m_nFittedBinsRadius];
672  const Int_t nRadiusBinsHisto = m_nFittedBinsRadius+1;
673  Double_t radiusBins[nRadiusBinsHisto] = {0.,30.,40.,60.,80.,100.,140.,230};
674  for(int binFill=0;binFill<m_nFittedBinsRadius;binFill++) {
675  massVradiusBins[binFill] = func->GetParameter(1);
676  massVradiusErrorBins[binFill] = func->GetParError(1);
677  widthVradiusBins[binFill] = func->GetParameter(2);
678  widthVradiusErrorBins[binFill] = func->GetParError(2);
679  }
680 
681  const Double_t* radiusBinsFinal = radiusBins;
682  const Double_t* massVradiusBinsFinal = massVradiusBins;
683  const Double_t* massVradiusErrorBinsFinal = massVradiusErrorBins;
684  const Double_t* widthVradiusBinsFinal = widthVradiusBins;
685  const Double_t* widthVradiusErrorBinsFinal = widthVradiusErrorBins;
686 
687  if(m_nFittedBinsRadius) {
688  m_massVersusRadius = new TH1F("KsMassVersusRadius","",m_nFittedBinsRadius,radiusBinsFinal);
689  RegisterHisto(al_kshort_mon_average,m_massVersusRadius);
690  m_massVersusRadius->SetXTitle("Decay Radius (mm)");
691  setYTitleAndMarker(m_massVersusRadius, massTitle);
692  fillFromSource(massVradiusBinsFinal, massVradiusErrorBinsFinal, m_massVersusRadius, m_nFittedBinsRadius);
693  m_widthVersusRadius = new TH1F("KsWidthVersusRadius","",m_nFittedBinsRadius,radiusBinsFinal);
694  RegisterHisto(al_kshort_mon_average,m_widthVersusRadius);
695  m_widthVersusRadius->SetXTitle("Decay Radius (mm)");
696  setYTitleAndMarker(m_widthVersusRadius, widthTitle);
697  fillFromSource(widthVradiusBinsFinal, widthVradiusErrorBinsFinal, m_widthVersusRadius, m_nFittedBinsRadius);
698  }
699 
700  Double_t etaBins[11] = {-2.5,-2.0,-1.5,-1.0,-0.5,0.0,0.5,1.0,1.5,2.0,2.5};
701  Double_t massVetaBins[10], massVetaErrorBins[10], widthVetaBins[10], widthVetaErrorBins[10];
702  for(int binFill=0;binFill<10;binFill++) {
703  massVetaBins[binFill] = func->GetParameter(1);
704  massVetaErrorBins[binFill] = func->GetParError(1);
705  widthVetaBins[binFill] = func->GetParameter(2);
706  widthVetaErrorBins[binFill] = func->GetParError(2);
707  }
708  m_massVersusEta = new TH1F("KsMassVersusEta","",10,etaBins);
709  RegisterHisto(al_kshort_mon_average,m_massVersusEta);
710  m_massVersusEta->SetXTitle("#eta");
711  setYTitleAndMarker(m_massVersusEta, massTitle);
712  fillFromSource(massVetaBins, massVetaErrorBins, m_massVersusEta, 10);
713  m_widthVersusEta = new TH1F("KsWidthVersusEta","",10,etaBins);
714  RegisterHisto(al_kshort_mon_average,m_widthVersusEta);
715  m_widthVersusEta->SetXTitle("#eta");
716  setYTitleAndMarker(m_massVersusEta, widthTitle);
717  fillFromSource(widthVetaBins, widthVetaErrorBins, m_widthVersusEta, 10);
718  Double_t phiBins[11]{};
719  sequentialFill(phiBins, phiBins+11, -M_PI, M_PI/5.);
720  Double_t massVphiBins[10], massVphiErrorBins[10], widthVphiBins[10], widthVphiErrorBins[10];
721  for(int binFill=0;binFill<10;binFill++) {
722  massVphiBins[binFill] = func->GetParameter(1);
723  massVphiErrorBins[binFill] = func->GetParError(1);
724  widthVphiBins[binFill] = func->GetParameter(2);
725  widthVphiErrorBins[binFill] = func->GetParError(2);
726  }
727  m_massVersusPhi = new TH1F("KsMassVersusPhi","",10,phiBins);
728  RegisterHisto(al_kshort_mon_average,m_massVersusPhi);
729  m_massVersusPhi->SetXTitle("#phi");
730  setYTitleAndMarker(m_massVersusPhi, massTitle);
731  fillFromSource(massVphiBins, massVphiErrorBins, m_massVersusPhi, 10);
732  m_widthVersusPhi = new TH1F("KsWidthVersusPhi","",10,phiBins);
733  RegisterHisto(al_kshort_mon_average,m_widthVersusPhi);
734  m_widthVersusPhi->SetXTitle("#phi");
735  setYTitleAndMarker(m_widthVersusPhi, widthTitle);
736  fillFromSource(widthVphiBins, widthVphiErrorBins, m_widthVersusPhi, 10);
737  Double_t curvatureDiffBins[7] = {-0.0012,-0.0008,-0.0004,0.0000,0.0004,0.0008,0.0012};
738  Double_t massVcurvatureDiffBins[6], massVcurvatureDiffErrorBins[6], widthVcurvatureDiffBins[6], widthVcurvatureDiffErrorBins[6];
739  for(int binFill=0;binFill<6;binFill++) {
740  massVcurvatureDiffBins[binFill] = func->GetParameter(1);
741  massVcurvatureDiffErrorBins[binFill] = func->GetParError(1);
742  widthVcurvatureDiffBins[binFill] = func->GetParameter(2);
743  widthVcurvatureDiffErrorBins[binFill] = func->GetParError(2);
744  }
745  m_massVersusCurvatureDiff = new TH1F("KsMassVersusCurvatureDiff","",6,curvatureDiffBins);
746  RegisterHisto(al_kshort_mon_average,m_massVersusCurvatureDiff);
747  m_massVersusCurvatureDiff->SetXTitle("1/p_{T}(#pi^{+}) - 1/p_{T}(#pi^{-}) [GeV^{-1}]");
748  setYTitleAndMarker(m_massVersusCurvatureDiff, massTitle);
749  fillFromSource(massVcurvatureDiffBins, massVcurvatureDiffErrorBins, m_massVersusCurvatureDiff, 6);
750  m_widthVersusCurvatureDiff = new TH1F("KsWidthVersusCurvatureDiff","",6,curvatureDiffBins);
751  RegisterHisto(al_kshort_mon_average,m_widthVersusCurvatureDiff);
752  m_widthVersusCurvatureDiff->SetXTitle("1/p_{T}(#pi^{+}) - 1/p_{T}(#pi^{-}) [GeV^{-1}]");
753  setYTitleAndMarker(m_widthVersusCurvatureDiff, widthTitle);
754  fillFromSource(widthVcurvatureDiffBins, widthVcurvatureDiffErrorBins, m_widthVersusCurvatureDiff, 6);
755  }
756 
757  return StatusCode::SUCCESS;
758 
759 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
IDPerfMonKshort::m_YVsX_secVertex
TH2F * m_YVsX_secVertex
Definition: IDPerfMonKshort.h:49
V0Tools.h
IDPerfMonKshort::m_widthVersusEta
TH1F * m_widthVersusEta
Definition: IDPerfMonKshort.h:68
IDPerfMonKshort.h
IDPerfMonKshort::m_checkrate
int m_checkrate
Definition: IDPerfMonKshort.h:104
xAOD::Vertex_v1::nTrackParticles
size_t nTrackParticles() const
Get the number of tracks associated with this vertex.
Definition: Vertex_v1.cxx:270
IDPerfMonKshort::m_radius_secVertices_sel
TH1F * m_radius_secVertices_sel
Definition: IDPerfMonKshort.h:46
V0Container.h
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:558
IDPerfMonKshort::m_massVEtaBinHistos
TH1F * m_massVEtaBinHistos[10]
Definition: IDPerfMonKshort.h:90
IDPerfMonKshort::m_nFittedBinsRadius
static const Int_t m_nFittedBinsRadius
Definition: IDPerfMonKshort.h:87
Base_Fragment.mass
mass
Definition: Sherpa_i/share/common/Base_Fragment.py:59
IDPerfMonKshort::m_widthVersusPhi
TH1F * m_widthVersusPhi
Definition: IDPerfMonKshort.h:70
ManagedMonitorToolBase
Provides functionality for users to implement and save histograms, ntuples, and summary data,...
Definition: ManagedMonitorToolBase.h:73
IDPerfMonKshort::m_massVersusPt
TH1F * m_massVersusPt
Definition: IDPerfMonKshort.h:63
V0Candidate.h
IDPerfMonKshort::m_widthVersusPhi_merged
TH1F * m_widthVersusPhi_merged
Definition: IDPerfMonKshort.h:81
xAOD::TrackParticle_v1::summaryValue
bool summaryValue(uint8_t &value, const SummaryType &information) const
Accessor for TrackSummary values.
Definition: TrackParticle_v1.cxx:737
AthenaMonManager::cosmics
@ cosmics
Definition: AthenaMonManager.h:58
ConvertOldUJHistosToNewHistos.etaBins
list etaBins
Definition: ConvertOldUJHistosToNewHistos.py:145
IDPerfMonKshort::m_YVsZ_primVertex_Ks
TH2F * m_YVsZ_primVertex_Ks
Definition: IDPerfMonKshort.h:59
IDPerfMonKshort::m_XVsZ_primVertex
TH2F * m_XVsZ_primVertex
Definition: IDPerfMonKshort.h:55
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
M_PI
#define M_PI
Definition: ActiveFraction.h:11
bin
Definition: BinsDiffFromStripMedian.h:43
IDPerfMonKshort::m_widthVersusPt_merged
TH1F * m_widthVersusPt_merged
Definition: IDPerfMonKshort.h:75
IDPerfMonKshort::m_VxContainerName
std::string m_VxContainerName
Definition: IDPerfMonKshort.h:105
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
athena.value
value
Definition: athena.py:124
xAOD::Vertex_v1::position
const Amg::Vector3D & position() const
Returns the 3-pos.
PixelModuleFeMask_create_db.stop
int stop
Definition: PixelModuleFeMask_create_db.py:76
SG::ConstAccessor< float >
IDPerfMonKshort::m_massVersusRadius_merged
TH1F * m_massVersusRadius_merged
Definition: IDPerfMonKshort.h:76
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
python.TrigEgammaMonitorHelper.TH2F
def TH2F(name, title, nxbins, bins_par2, bins_par3, bins_par4, bins_par5=None, bins_par6=None, path='', **kwargs)
Definition: TrigEgammaMonitorHelper.py:45
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
xAOD::TrackParticle_v1::d0
float d0() const
Returns the parameter.
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:92
IDPerfMonKshort::m_radiusVsZ_secVertex_Ks
TH2F * m_radiusVsZ_secVertex_Ks
Definition: IDPerfMonKshort.h:51
AthenaMonManager::environment
static Environment_t environment()
Returns the running environment of the monitoring application to help ManagedMonitorToolBase objects ...
Definition: AthenaMonManager.cxx:297
IDPerfMonKshort::fillHistograms
virtual StatusCode fillHistograms()
An inheriting class should either override this function or fillHists().
Definition: IDPerfMonKshort.cxx:367
IDPerfMonKshort::m_widthVersusPt
TH1F * m_widthVersusPt
Definition: IDPerfMonKshort.h:64
IDPerfMonKshort::m_massVRadiusBinHistos
TH1F * m_massVRadiusBinHistos[m_nBinsRadius]
Definition: IDPerfMonKshort.h:93
V0Hypothesis.h
IDPerfMonKshort::m_massVersusCurvatureDiff
TH1F * m_massVersusCurvatureDiff
Definition: IDPerfMonKshort.h:71
xAOD::TrackParticle_v1::p4
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
Definition: TrackParticle_v1.cxx:130
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:137
IDPerfMonKshort::m_massVPhiBinHistos
TH1F * m_massVPhiBinHistos[10]
Definition: IDPerfMonKshort.h:91
IDPerfMonKshort::m_massVersusEta_merged
TH1F * m_massVersusEta_merged
Definition: IDPerfMonKshort.h:78
IDPerfMonKshort::~IDPerfMonKshort
virtual ~IDPerfMonKshort()
Definition: IDPerfMonKshort.cxx:93
ParticleGun_EoverP_Config.mom
mom
Definition: ParticleGun_EoverP_Config.py:63
IDPerfMonKshort::RegisterHisto
void RegisterHisto(MonGroup &mon, TH1 *histo)
Definition: IDPerfMonKshort.cxx:341
AthenaMonManager::dataType
static DataType_t dataType()
Returns the data type that the monitoring application is running over to help ManagedMonitorToolBase ...
Definition: AthenaMonManager.cxx:314
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
IDPerfMonKshort::m_YVsZ_primVertex
TH2F * m_YVsZ_primVertex
Definition: IDPerfMonKshort.h:56
ManagedMonitorToolBase::initialize
virtual StatusCode initialize()
Definition: ManagedMonitorToolBase.cxx:616
IDPerfMonKshort::m_nBinsRadius
static const Int_t m_nBinsRadius
Definition: IDPerfMonKshort.h:88
IDPerfMonKshort::m_VxPrimContainerName
std::string m_VxPrimContainerName
Definition: IDPerfMonKshort.h:106
ParticleConstants.h
python.TrigEgammaMonitorHelper.TProfile
def TProfile(*args, **kwargs)
Definition: TrigEgammaMonitorHelper.py:81
IDPerfMonKshort::m_YVsX_primVertex_Ks
TH2F * m_YVsX_primVertex_Ks
Definition: IDPerfMonKshort.h:57
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
extractSporadic.h
list h
Definition: extractSporadic.py:96
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AthenaMonManager::online
@ online
Definition: AthenaMonManager.h:49
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition: AthCommonDataStore.h:145
IDPerfMonKshort::m_nBinsPt
static const Int_t m_nBinsPt
Definition: IDPerfMonKshort.h:86
ParticleConstants::PDG2011::KZeroMassInMeV
constexpr double KZeroMassInMeV
the mass of the neutral kaon (K0) (in MeV)
Definition: ParticleConstants.h:47
IDPerfMonKshort::m_pt
TH1F * m_pt
Definition: IDPerfMonKshort.h:60
CalibDbCompareRT.dummy
dummy
Definition: CalibDbCompareRT.py:59
IDPerfMonKshort::m_massVersusCurvatureDiff_merged
TH1F * m_massVersusCurvatureDiff_merged
Definition: IDPerfMonKshort.h:82
test_pyathena.parent
parent
Definition: test_pyathena.py:15
IDPerfMonKshort::m_nFittedBinsPt
static const Int_t m_nFittedBinsPt
Definition: IDPerfMonKshort.h:85
IDPerfMonKshort::m_radiusVsZ_secVertex
TH2F * m_radiusVsZ_secVertex
Definition: IDPerfMonKshort.h:47
IDPerfMonKshort::m_massVCurvatureDiffBinHistos
TH1F * m_massVCurvatureDiffBinHistos[6]
Definition: IDPerfMonKshort.h:92
IDPerfMonKshort::m_YVsX_secVertex_Ks
TH2F * m_YVsX_secVertex_Ks
Definition: IDPerfMonKshort.h:52
AthenaMonManager::user
@ user
Definition: AthenaMonManager.h:49
IDPerfMonKshort::m_radius_secVertices
TH1F * m_radius_secVertices
Definition: IDPerfMonKshort.h:45
IDPerfMonKshort::m_massVersusRadius
TH1F * m_massVersusRadius
Definition: IDPerfMonKshort.h:65
run
Definition: run.py:1
ManagedMonitorToolBase::ATTRIB_MANAGED
@ ATTRIB_MANAGED
Definition: ManagedMonitorToolBase.h:130
IDPerfMonKshort::IDPerfMonKshort
IDPerfMonKshort(const std::string &type, const std::string &name, const IInterface *parent)
Definition: IDPerfMonKshort.cxx:81
IDPerfMonKshort::m_triggerChainName
std::string m_triggerChainName
Definition: IDPerfMonKshort.h:103
IDPerfMonKshort::m_radius
TH1F * m_radius
Definition: IDPerfMonKshort.h:44
IDPerfMonKshort::m_histosBooked
int m_histosBooked
Definition: IDPerfMonKshort.h:39
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
Vertex.h
IDPerfMonKshort::m_widthVersusEta_merged
TH1F * m_widthVersusEta_merged
Definition: IDPerfMonKshort.h:79
IDPerfMonKshort::m_widthVersusRadius_merged
TH1F * m_widthVersusRadius_merged
Definition: IDPerfMonKshort.h:77
inRange
bool inRange(const double *boundaries, const double value, const double tolerance=0.02)
Definition: LArSCIdVsIdTest.cxx:5
xAOD::TrackParticle_v1::phi0
float phi0() const
Returns the parameter, which has range to .
Definition: TrackParticle_v1.cxx:159
WriteBchToCool.beg
beg
Definition: WriteBchToCool.py:69
IDPerfMonKshort::m_massVRadiusBinFittedHistos
TH1F * m_massVRadiusBinFittedHistos[m_nFittedBinsRadius]
Definition: IDPerfMonKshort.h:95
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
plotBeamSpotVxVal.bin
int bin
Definition: plotBeamSpotVxVal.py:82
IDPerfMonKshort::initialize
virtual StatusCode initialize()
Definition: IDPerfMonKshort.cxx:96
python.PhysicalConstants.c_light
float c_light
Definition: PhysicalConstants.py:73
IDPerfMonKshort::bookHistograms
virtual StatusCode bookHistograms()
An inheriting class should either override this function or bookHists().
Definition: IDPerfMonKshort.cxx:108
IDPerfMonKshort::m_tracksName
std::string m_tracksName
Definition: IDPerfMonKshort.h:102
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
IDPerfMonKshort::m_eta
TH1F * m_eta
Definition: IDPerfMonKshort.h:61
LocalParameters.h
SCT_CalibAlgs::nbins
@ nbins
Definition: SCT_CalibNumbers.h:10
ParticleGun_SamplingFraction.radius
radius
Definition: ParticleGun_SamplingFraction.py:96
IDPerfMonKshort::m_massVersusEta
TH1F * m_massVersusEta
Definition: IDPerfMonKshort.h:67
IDPerfMonKshort::m_widthVersusCurvatureDiff
TH1F * m_widthVersusCurvatureDiff
Definition: IDPerfMonKshort.h:72
IDPerfMonKshort::m_massVPtBinFittedHistos
TH1F * m_massVPtBinFittedHistos[m_nFittedBinsPt]
Definition: IDPerfMonKshort.h:94
TrackParticle.h
python.PyAthena.v
v
Definition: PyAthena.py:154
makeTRTBarrelCans.dy
tuple dy
Definition: makeTRTBarrelCans.py:21
IDPerfMonKshort::m_XVsZ_primVertex_Ks
TH2F * m_XVsZ_primVertex_Ks
Definition: IDPerfMonKshort.h:58
IDPerfMonKshort::m_massVersusPhi
TH1F * m_massVersusPhi
Definition: IDPerfMonKshort.h:69
Trk::vertex
@ vertex
Definition: MeasurementType.h:21
VertexContainer.h
IDPerfMonKshort::m_mass_scaled
TH1F * m_mass_scaled
Definition: IDPerfMonKshort.h:42
h
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
IDPerfMonKshort::m_widthVersusRadius
TH1F * m_widthVersusRadius
Definition: IDPerfMonKshort.h:66
ManagedMonitorToolBase::endOfRunFlag
bool endOfRunFlag() const
Definition: ManagedMonitorToolBase.h:797
copySelective.target
string target
Definition: copySelective.py:36
IDPerfMonKshort::m_mass
TH1F * m_mass
Definition: IDPerfMonKshort.h:41
IDPerfMonKshort::m_widthVersusCurvatureDiff_merged
TH1F * m_widthVersusCurvatureDiff_merged
Definition: IDPerfMonKshort.h:83
DEBUG
#define DEBUG
Definition: page_access.h:11
plotBeamSpotMon.mon
mon
Definition: plotBeamSpotMon.py:66
makeTRTBarrelCans.dx
tuple dx
Definition: makeTRTBarrelCans.py:20
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
IDPerfMonKshort::m_radiusVsZ_secVertex_sel
TH2F * m_radiusVsZ_secVertex_sel
Definition: IDPerfMonKshort.h:48
IDPerfMonKshort::m_phi
TH1F * m_phi
Definition: IDPerfMonKshort.h:62
IDPerfMonKshort::m_massVPtBinHistos
TH1F * m_massVPtBinHistos[m_nBinsPt]
Definition: IDPerfMonKshort.h:89
xAOD::numberOfSCTHits
@ numberOfSCTHits
number of hits in SCT [unit8_t].
Definition: TrackingPrimitives.h:269
copySelective.source
string source
Definition: copySelective.py:31
IDPerfMonKshort::m_massVsPhi
TH2F * m_massVsPhi
Definition: IDPerfMonKshort.h:43
IDPerfMonKshort::m_massVersusPhi_merged
TH1F * m_massVersusPhi_merged
Definition: IDPerfMonKshort.h:80
python.TrigEgammaMonitorHelper.TH1F
def TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)
Definition: TrigEgammaMonitorHelper.py:24
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
IDPerfMonKshort::procHistograms
virtual StatusCode procHistograms()
An inheriting class should either override this function or finalHists().
Definition: IDPerfMonKshort.cxx:608
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
IDPerfMonKshort::m_YVsX_primVertex
TH2F * m_YVsX_primVertex
Definition: IDPerfMonKshort.h:54
FitQuality.h
plotBeamSpotCompare.histo
histo
Definition: plotBeamSpotCompare.py:414
IDPerfMonKshort::m_massVersusPt_merged
TH1F * m_massVersusPt_merged
Definition: IDPerfMonKshort.h:74
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
IDPerfMonKshort::m_Nevents
TH1F * m_Nevents
Definition: IDPerfMonKshort.h:97
mag
Scalar mag() const
mag method
Definition: AmgMatrixBasePlugin.h:26
TrackParticleContainer.h
TSU::T
unsigned long long T
Definition: L1TopoDataTypes.h:35
IDPerfMonKshort::m_YVsX_secVertex_sel
TH2F * m_YVsX_secVertex_sel
Definition: IDPerfMonKshort.h:50
ManagedMonitorToolBase::newRunFlag
bool newRunFlag() const
Definition: ManagedMonitorToolBase.h:792