ATLAS Offline Software
MuonParamElossPlots.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
8 
9 namespace Muon{
10 
11 MuonParamElossPlots::MuonParamElossPlots(PlotBase *pParent, const std::string& sDir):PlotBase(pParent, sDir) {}
12 
14 {
15  msInnerMatchChi2 = Book1D("msInnerMatchChi2","inner match #chi^{2};inner match #chi^{2};;Entries",100,0.,100.);
16  msOuterMatchChi2 = Book1D("msOuterMatchChi2","outer match #chi^{2};outer match #chi^{2};;Entries",100,0.,100.);
17 
18  ELoss = Book1D("ELoss","ELoss;ELoss [GeV];Entries",50,0,10);
19  ELossDiffTruth = Book1D("ELossDiffTruth","Difference ELoss to truth ELoss);#Delta(fitted - truth) [GeV];Entries",100,-10.,10.);
20  ELossDiffTruthEta0_1p35 = Book1D("ELossDiffTruthEta0_1p35","Difference ELoss to truth ELoss for 0<|#eta|<1.35;#Delta(fitted - truth) [GeV];Entries",100,-10.,10.);
21  ELossDiffTruthEta1p35_1p55 = Book1D("ELossDiffTruthEta1p35_1p55","Difference ELoss to truth ELoss for 1.35<|#eta|<1.55;#Delta(fitted - truth) [GeV];Entries",100,-10.,10.);
22  ELossDiffTruthEta1p55_end = Book1D("ELossDiffTruthEta1p55_end","Difference ELoss to truth ELoss for 1.55<|#eta|;#Delta(fitted - truth) [GeV];Entries",100,-10.,10.);
23  ELossSigma = Book1D("ELossSigma","ELossSigma;ELossSgima [GeV];Entries",50,0,5);
24 
25  paramELoss = Book1D("paramELoss","paramELoss;paramELoss [GeV];Entries",50,0,10);
26  paramELossDiff = Book1D("paramELossDiff","Difference paramELoss to fitted ELoss;#Delta(param-fitted) [GeV];Entries",100,-3.,1.);
27  paramELossDiffTruth = Book1D("paramELossDiffTruth","Difference paramELoss to truth ELoss;#Delta(param-truth) [GeV];Entries",100,-10.,10.);
28  paramELossDiffTruthEta0_1p35 = Book1D("paramELossDiffTruthEta0_1p35","Difference paramELoss to truth ELoss for 0<|#eta|<1.35;#Delta(param-truth) [GeV];Entries",100,-10.,10.);
29  paramELossDiffTruthEta1p35_1p55 = Book1D("paramELossDiffTruthEta1p35_1p55","Difference paramELoss to truth ELoss for 1.35<|#eta|<1.55;#Delta(param-truth) [GeV];Entries",100,-10.,10.);
30  paramELossDiffTruthEta1p55_end = Book1D("paramELossDiffTruthhEta1p55_end","Difference paramELoss to truth ELoss for 1.55<|#eta|;#Delta(param-truth) [GeV];Entries",100,-10.,10.);
31 
32  measELoss = Book1D("measELoss","measELoss;measELoss [GeV];Entries",50,0,10);
33  measELossDiff = Book1D("measELossDiff","Difference measELoss to fitted ELoss);#Delta(meas- fitted) [GeV];Entries",100,-3.,1.);
34  measELossDiffTruth = Book1D("measELossDiffTruth","Difference measELoss to truth ELoss);#Delta(meas- truth) [GeV];Entries",100,-10.,10.);
35  measELossDiffTruthEta0_1p35 = Book1D("measELossDiffTruthEta0_1p35","Difference measELoss to truth ELoss for 0<|#eta|<1.35;#Delta(meas- truth) [GeV];Entries",100,-10.,10.);
36  measELossDiffTruthEta1p35_1p55 = Book1D("measELossDiffTruthEta1p35_1p55","Difference measELoss to truth ELoss for 1.35<|#eta|<1.55;#Delta(meas- truth) [GeV];Entries",100,-10.,10.);
37  measELossDiffTruthEta1p55_end = Book1D("measELossDiffTruthEta1p55_end","Difference measELoss to truth ELoss for 1.55<|#eta|;#Delta(meas- truth) [GeV];Entries",100,-10.,10.);
38 
39  ELossType = Book1D("ELossType","ELossType;Type;Entries",5,-0.5,4.5);
40  ELossTypeParametrPt = Book1D("ELossTypeParametrPt","ELossType:Parametrized Pt;Pt [GeV];Entries",50,0,500);
41  ELossTypeNotIsoPt = Book1D("ELossTypeNotIsoPt","ELossType:NotIsolated Pt;Pt [GeV];Entries",50,0,500);
42  ELossTypeTailPt = Book1D("ELossTypeTailPt","ELossType:Tail Pt;Pt [GeV];Entries",50,0,500);
43  ELossTypeAllPt = Book1D("ELossTypeAllPt","All ELossTypes Pt;Pt [GeV];Entries",50,0,500);
44 }
45 
47 {
48  FillPlot(msInnerMatchChi2,mu,xAOD::Muon::msInnerMatchChi2,weight);
49  FillPlot(msOuterMatchChi2,mu,xAOD::Muon::msOuterMatchChi2, weight);
50 #ifndef XAOD_ANALYSIS
53  FillPlot(ELossSigma,mu,xAOD::Muon::EnergyLossSigma,0.001,weight);
56  FillPlotELossType(ELossTypeNotIsoPt,mu,xAOD::Muon::NotIsolated,0.001,weight);
57  FillPlotELossType(ELossTypeParametrPt,mu,xAOD::Muon::Parametrized,0.001,weight);
58  FillPlotELossType(ELossTypeTailPt,mu,xAOD::Muon::Tail,0.001,weight);
59 #endif // not XAOD_ANALYSIS
60 }
61  void MuonParamElossPlots::FillPlot(TH1* hist, const xAOD::Muon& mu,const xAOD::Muon::ParamDef paramDef,float scale, float weight) {
62  if (mu.author()==xAOD::Muon::CaloTag || mu.author()==xAOD::Muon::CaloLikelihood || mu.author()==xAOD::Muon::ExtrapolateMuonToIP) return; //protection
63  float fpar = 0;
64  static const SG::ConstAccessor<float> elossAcc ("EnergyLoss");
65  if (elossAcc.isAvailable(mu)) {
66  if (mu.parameter(fpar, paramDef))
67  hist->Fill(scale*fpar,weight); //scale to GeV, if needed
68  }
69  return;
70 }
71  void MuonParamElossPlots::FillPlot(TH1* hist, TH1* hist_DiffTruth, TH1* hist_DiffTruthEta0_1p35, TH1* hist_DiffTruthEta1p35_1p55, TH1* hist_DiffTruthEta1p55_end, const xAOD::TruthParticle& truthprt, const xAOD::Muon& mu,const xAOD::Muon::ParamDef paramDef,float scale, float weight) {
72  if (mu.author()==xAOD::Muon::CaloTag || mu.author()==xAOD::Muon::CaloLikelihood || mu.author()==xAOD::Muon::ExtrapolateMuonToIP) return; //protection
73  float fpar = 0;
74  static const SG::ConstAccessor<float> elossAcc("EnergyLoss");
75  if (elossAcc.isAvailable(mu)) {
76  if (mu.parameter(fpar, paramDef))
77  hist->Fill(scale*fpar,weight); //scale to GeV, if needed
78 
79  //get true energy loss
80  static const SG::ConstAccessor<float> pxAcc("px");
81  static const SG::ConstAccessor<float> pyAcc("py");
82  static const SG::ConstAccessor<float> pzAcc("pz");
83  static const SG::ConstAccessor<float> muonEnt_pxAcc("MuonEntryLayer_px");
84  static const SG::ConstAccessor<float> muonEnt_pyAcc("MuonEntryLayer_py");
85  static const SG::ConstAccessor<float> muonEnt_pzAcc("MuonEntryLayer_pz");
86  if (
89  !pxAcc.isAvailable(truthprt) ||
90  !pyAcc.isAvailable(truthprt) ||
91  !pzAcc.isAvailable(truthprt) ||
92  !muonEnt_pxAcc.isAvailable(truthprt) ||
93  !muonEnt_pyAcc.isAvailable(truthprt) ||
94  !muonEnt_pzAcc.isAvailable(truthprt)) return;
95 
96  //workaround for missing caloentry
97  Amg::Vector3D vecCaloEntry{pxAcc(truthprt),
98  pyAcc(truthprt),
99  pzAcc(truthprt)};
100 
101  /* Amg::Vector3D vecCaloEntry(truthprt.auxdata<float>("CaloEntryLayer_px"),
102  truthprt.auxdata<float>("CaloEntryLayer_py"),
103  truthprt.auxdata<float>("CaloEntryLayer_pz"));*/
104 
105  Amg::Vector3D vecMuonExit{muonEnt_pxAcc(truthprt),
106  muonEnt_pyAcc(truthprt),
107  muonEnt_pzAcc(truthprt)};
108  float dpTruth=vecCaloEntry.mag()-vecMuonExit.mag();
109  hist_DiffTruth->Fill(scale*(fpar-dpTruth),weight); //scale to GeV, if needed
110  //again in eta ranges
111  if (std::abs(mu.eta())<1.35) hist_DiffTruthEta0_1p35->Fill(scale*(fpar-dpTruth),weight);
112  else {
113  if (std::abs(mu.eta())<1.55) hist_DiffTruthEta1p35_1p55->Fill(scale*(fpar-dpTruth),weight);
114  else hist_DiffTruthEta1p55_end->Fill(scale*(fpar-dpTruth),weight);
115  }
116  }
117  return;
118 }
120  if (mu.author()==xAOD::Muon::CaloTag || mu.author()==xAOD::Muon::CaloLikelihood || mu.author()==xAOD::Muon::ExtrapolateMuonToIP) return; //protection
121  static const SG::ConstAccessor<float> elossAcc("EnergyLoss");
122  if (elossAcc.isAvailable(mu)) {
123  hist->Fill(mu.energyLossType(), weight);
125  float used=0;
126  float meas=-100000;
127  float param=-100000;
128  if (mu.parameter(used, xAOD::Muon::EnergyLoss) && mu.parameter(param, xAOD::Muon::ParamEnergyLoss) && mu.parameter(meas, xAOD::Muon::MeasEnergyLoss ) ){
129  //fill diff plots
130  if (mu.energyLossType()==xAOD::Muon::Parametrized){
131  paramELossDiff->Fill((param-used)*scale, weight);
132  }
133  if (mu.energyLossType()==xAOD::Muon::Tail){
134  measELossDiff->Fill((meas-used)*scale, weight);
135  }
136  }
137  }
138  return;
139 }
140  void MuonParamElossPlots::FillPlotELossType(TH1* hist, const xAOD::Muon& mu, const xAOD::Muon::EnergyLossType type, float scale, float weight) {
141  if (mu.author()==xAOD::Muon::CaloTag || mu.author()==xAOD::Muon::CaloLikelihood || mu.author()==xAOD::Muon::ExtrapolateMuonToIP) return; //protection
142  static const SG::ConstAccessor<float> elossAcc("EnergyLoss");
143  if (elossAcc.isAvailable(mu)) {
144  if (mu.energyLossType()==type) hist->Fill(mu.pt()*scale,weight); //scale to GeV, if needed
145  }
146  return;
147 }
148 }//namespace Muon
used
Muon::MuonParamElossPlots::measELossDiffTruth
TH1 * measELossDiffTruth
Definition: MuonParamElossPlots.h:38
Muon::MuonParamElossPlots::paramELossDiff
TH1 * paramELossDiff
Definition: MuonParamElossPlots.h:31
PlotBase::Book1D
TH1F * Book1D(const std::string &name, const std::string &labels, int nBins, float start, float end, bool prependDir=true)
Book a TH1D histogram.
Definition: PlotBase.cxx:88
PlotBase
Definition: PlotBase.h:33
Muon::MuonParamElossPlots::ELoss
TH1 * ELoss
Definition: MuonParamElossPlots.h:24
python.copyTCTOutput.sDir
sDir
Definition: copyTCTOutput.py:60
plotmaker.hist
hist
Definition: plotmaker.py:148
MuonParamElossPlots.h
egammaParameters::ParamDef
ParamDef
Definition: egammaParamDefs.h:99
SG::ConstAccessor< float >
Muon
This class provides conversion from CSC RDO data to CSC Digits.
Definition: TrackSystemController.h:49
yodamerge_tmp.scale
scale
Definition: yodamerge_tmp.py:138
MuonParameters::CaloTag
@ CaloTag
Definition: MuonParamDefs.h:64
Muon::MuonParamElossPlots::ELossTypeAllPt
TH1 * ELossTypeAllPt
Definition: MuonParamElossPlots.h:46
Muon::MuonParamElossPlots::ELossTypeTailPt
TH1 * ELossTypeTailPt
Definition: MuonParamElossPlots.h:45
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:200
Muon::MuonParamElossPlots::initializePlots
void initializePlots()
Definition: MuonParamElossPlots.cxx:13
Muon::MuonParamElossPlots::paramELossDiffTruthEta1p55_end
TH1 * paramELossDiffTruthEta1p55_end
Definition: MuonParamElossPlots.h:35
Muon::MuonParamElossPlots::fill
void fill(const xAOD::TruthParticle &truthMu, const xAOD::Muon &mu, float weight=1.0)
Definition: MuonParamElossPlots.cxx:46
Muon::MuonParamElossPlots::ELossTypeParametrPt
TH1 * ELossTypeParametrPt
Definition: MuonParamElossPlots.h:43
Muon::MuonParamElossPlots::measELossDiffTruthEta0_1p35
TH1 * measELossDiffTruthEta0_1p35
Definition: MuonParamElossPlots.h:39
Muon::MuonParamElossPlots::paramELoss
TH1 * paramELoss
Definition: MuonParamElossPlots.h:30
Muon::MuonParamElossPlots::FillPlotELossType
void FillPlotELossType(TH1 *hist, const xAOD::Muon &mu, float scale=1, float weight=1.0)
Definition: MuonParamElossPlots.cxx:119
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:41
Muon::MuonParamElossPlots::ELossDiffTruthEta1p35_1p55
TH1 * ELossDiffTruthEta1p35_1p55
Definition: MuonParamElossPlots.h:27
Muon::MuonParamElossPlots::ELossDiffTruth
TH1 * ELossDiffTruth
Definition: MuonParamElossPlots.h:25
Muon::MuonParamElossPlots::paramELossDiffTruth
TH1 * paramELossDiffTruth
Definition: MuonParamElossPlots.h:32
TH1::Fill
int Fill(double)
Definition: rootspy.cxx:285
Muon::MuonParamElossPlots::ELossTypeNotIsoPt
TH1 * ELossTypeNotIsoPt
Definition: MuonParamElossPlots.h:44
Muon::MuonParamElossPlots::measELossDiffTruthEta1p55_end
TH1 * measELossDiffTruthEta1p55_end
Definition: MuonParamElossPlots.h:41
Muon::MuonParamElossPlots::MuonParamElossPlots
MuonParamElossPlots(PlotBase *pParent, const std::string &sDir)
Definition: MuonParamElossPlots.cxx:11
Muon::MuonParamElossPlots::ELossType
TH1 * ELossType
Definition: MuonParamElossPlots.h:42
Muon::MuonParamElossPlots::measELossDiff
TH1 * measELossDiff
Definition: MuonParamElossPlots.h:37
MuonParameters::ExtrapolateMuonToIP
@ ExtrapolateMuonToIP
Definition: MuonParamDefs.h:68
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Muon::MuonParamElossPlots::msInnerMatchChi2
TH1 * msInnerMatchChi2
Definition: MuonParamElossPlots.h:21
Muon::MuonParamElossPlots::msOuterMatchChi2
TH1 * msOuterMatchChi2
Definition: MuonParamElossPlots.h:22
Muon::MuonParamElossPlots::paramELossDiffTruthEta0_1p35
TH1 * paramELossDiffTruthEta0_1p35
Definition: MuonParamElossPlots.h:33
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
TH1
Definition: rootspy.cxx:268
Muon::MuonParamElossPlots::paramELossDiffTruthEta1p35_1p55
TH1 * paramELossDiffTruthEta1p35_1p55
Definition: MuonParamElossPlots.h:34
Muon::MuonParamElossPlots::ELossDiffTruthEta0_1p35
TH1 * ELossDiffTruthEta0_1p35
Definition: MuonParamElossPlots.h:26
SG::ConstAccessor::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
Muon::MuonParamElossPlots::ELossSigma
TH1 * ELossSigma
Definition: MuonParamElossPlots.h:29
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
MuonParameters::CaloLikelihood
@ CaloLikelihood
Definition: MuonParamDefs.h:65
Muon::MuonParamElossPlots::measELossDiffTruthEta1p35_1p55
TH1 * measELossDiffTruthEta1p35_1p55
Definition: MuonParamElossPlots.h:40
Muon::MuonParamElossPlots::measELoss
TH1 * measELoss
Definition: MuonParamElossPlots.h:36
CaloNoise_fillDB.mu
mu
Definition: CaloNoise_fillDB.py:53
Muon::MuonParamElossPlots::ELossDiffTruthEta1p55_end
TH1 * ELossDiffTruthEta1p55_end
Definition: MuonParamElossPlots.h:28
Muon::MuonParamElossPlots::FillPlot
void FillPlot(TH1 *hist, const xAOD::Muon &mu, const xAOD::Muon::ParamDef paramDef, float scale=1, float weight=1.0)
Definition: MuonParamElossPlots.cxx:61
TrackingPrimitives.h