ATLAS Offline Software
Loading...
Searching...
No Matches
RecoPhysPlots.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include <utility>
6
8
9
10RecoPhysPlots::RecoPhysPlots(PlotBase *pParent, const std::string& sDir, std::string recObj):PlotBase(pParent, sDir),
11 m_Mass(nullptr),
12 m_occupancy(nullptr),
13 m_2occupancy(nullptr),
14 m_M_Mean(nullptr),
15 m_M_Sigma(nullptr),
16 m_M_EA_EA(nullptr),
17 m_M_EA_BA(nullptr),
18 m_M_EA_BC(nullptr),
19 m_M_EA_EC(nullptr),
20 m_M_BA_EA(nullptr),
21 m_M_BA_BA(nullptr),
22 m_M_BA_BC(nullptr),
23 m_M_BA_EC(nullptr),
24 m_M_BC_EA(nullptr),
25 m_M_BC_BA(nullptr),
26 m_M_BC_BC(nullptr),
27 m_M_BC_EC(nullptr),
28 m_M_EC_EA(nullptr),
29 m_M_EC_BA(nullptr),
30 m_M_EC_BC(nullptr),
31 m_M_EC_EC(nullptr),
32 type(std::move(recObj))
33{}
34
36
37 std::string Zsig("Z");
38 std::string Jsig("Jpsi");
39 std::string name;
40 bool doZ = false; bool doJ = false;
41
42 if (!type.compare(Zsig)) { name="Z"; doZ = true; }
43 else if (!type.compare(Jsig)) { name="J/#psi"; doJ = true; }
44 else { name="other"; }
45
46 int nBins = 100;
47 double minBin = 0.0;
48 double maxBin = 1000.0;
49
51
52 if (doZ) {
53 nBins = 100;
54 minBin = 60.0;
55 maxBin = 120.0;
56 }
57 else if (doJ) {
58 nBins = 30;
59 minBin = 2.5;
60 maxBin = 3.5;
61 }
62 //resonance mass distributuioin
63 m_Mass = Book1D("m_"+type+"_Mass", "m_Mass: M_{"+name+"} Mass;Mass [GeV];", nBins, minBin, maxBin);
64 //resonance two muon distribution
65 m_occupancy = Book1D("m_"+type+"_occupancy", "m_occupancy: M_{"+name+"} Track Occupancy;;N_{#mu}", 8, 0.0, 8.0);
66 m_2occupancy = Book1D("m_"+type+"_2occupancy", "m_2occupancy: M_{"+name+"} Two Track Occupancy;;N_{#mu}", 16, 0.5, 16.5);
67
68 //resonance mass distribution in each mass range
69 m_M_EA_EA = Book1D("m_"+type+"_M_EA_EA", "m_M_EA_EAM_{"+name+"} EA_{+} - EA_{-}; M_{"+name+"}[GeV];", nBins, minBin, maxBin);
70 m_M_EA_BA = Book1D("m_"+type+"_M_EA_BA", "m_M_EA_BAM_{"+name+"} EA_{+} - BA_{-}; M_{"+name+"}[GeV];", nBins, minBin, maxBin);
71 m_M_EA_BC = Book1D("m_"+type+"_M_EA_BC", "m_M_EA_BCM_{"+name+"} EA_{+} - BC_{-}; M_{"+name+"}[GeV];", nBins, minBin, maxBin);
72 m_M_EA_EC = Book1D("m_"+type+"_M_EA_EC", "m_M_EA_ECM_{"+name+"} EA_{+} - EC_{-}; M_{"+name+"}[GeV];", nBins, minBin, maxBin);
73 m_M_BA_EA = Book1D("m_"+type+"_M_BA_EA", "m_M_BA_EAM_{"+name+"} BA_{+} - EA_{-}; M_{"+name+"}[GeV];", nBins, minBin, maxBin);
74 m_M_BA_BA = Book1D("m_"+type+"_M_BA_BA", "m_M_BA_BAM_{"+name+"} BA_{+} - BA_{-}; M_{"+name+"}[GeV];", nBins, minBin, maxBin);
75 m_M_BA_BC = Book1D("m_"+type+"_M_BA_BC", "m_M_BA_BCM_{"+name+"} BA_{+} - BC_{-}; M_{"+name+"}[GeV];", nBins, minBin, maxBin);
76 m_M_BA_EC = Book1D("m_"+type+"_M_BA_EC", "m_M_BA_ECM_{"+name+"} BA_{+} - EC_{-}; M_{"+name+"}[GeV];", nBins, minBin, maxBin);
77 m_M_BC_EA = Book1D("m_"+type+"_M_BC_EA", "m_M_BC_EAM_{"+name+"} BC_{+} - EA_{-}; M_{"+name+"}[GeV];", nBins, minBin, maxBin);
78 m_M_BC_BA = Book1D("m_"+type+"_M_BC_BA", "m_M_BC_BAM_{"+name+"} BC_{+} - BA_{-}; M_{"+name+"}[GeV];", nBins, minBin, maxBin);
79 m_M_BC_BC = Book1D("m_"+type+"_M_BC_BC", "m_M_BC_BCM_{"+name+"} BC_{+} - BC_{-}; M_{"+name+"}[GeV];", nBins, minBin, maxBin);
80 m_M_BC_EC = Book1D("m_"+type+"_M_BC_EC", "m_M_BC_ECM_{"+name+"} BC_{+} - EC_{-}; M_{"+name+"}[GeV];", nBins, minBin, maxBin);
81 m_M_EC_EA = Book1D("m_"+type+"_M_EC_EA", "m_M_EC_EAM_{"+name+"} EC_{+} - EA_{-}; M_{"+name+"}[GeV];", nBins, minBin, maxBin);
82 m_M_EC_BA = Book1D("m_"+type+"_M_EC_BA", "m_M_EC_BAM_{"+name+"} EC_{+} - BA_{-}; M_{"+name+"}[GeV];", nBins, minBin, maxBin);
83 m_M_EC_BC = Book1D("m_"+type+"_M_EC_BC", "m_M_EC_BCM_{"+name+"} EC_{+} - BC_{-}; M_{"+name+"}[GeV];", nBins, minBin, maxBin);
84 m_M_EC_EC = Book1D("m_"+type+"_M_EC_EC", "m_M_EC_ECM_{"+name+"} EC_{+} - EC_{-}; M_{"+name+"}[GeV];", nBins, minBin, maxBin);
85 //for compare mass mean and sigma, done in post processing
86 m_M_Mean = Book1D("m_"+type+"_M_Mean", "m_M_Mean: M_{"+name+"} Mean;;M_{"+name+"}[GeV]", 16, 1.0, 17.0);
87 m_M_Sigma = Book1D("m_"+type+"_M_Sigma", "m_M_Sigma: #sigma(M_{"+name+"});;#sigma(M_{"+name+"})[GeV]", 16, 1.0, 17.0);
88
89 //label the plots
94}
95
96void RecoPhysPlots::fill(const std::vector<std::pair<const xAOD::Muon*, const xAOD::Muon*> >& mumucandidates){
97 for (auto mumu: mumucandidates){
98 const float invariant_mass = (mumu.first->p4() + mumu.second->p4()).M();
99 fill(mumu.first->eta(), mumu.second->eta(), invariant_mass);
100 }
101}
102
103void RecoPhysPlots::fill(const float eta_mu_plus, const float eta_mu_minus, const float invariant_mass){
104
105 float etaRegionCoarsePlus = EtaRegionCoarse(eta_mu_plus);
106 float etaRegionCoarseMinus = EtaRegionCoarse(eta_mu_minus);
107 float etaRegionFinePlus = EtaRegionFine(eta_mu_plus);
108 float etaRegionFineMinus = EtaRegionFine(eta_mu_minus);
109
110 if((etaRegionCoarsePlus == 3.5 && etaRegionCoarseMinus == 3.5)) {m_M_EA_EA->Fill(invariant_mass/1000.0); m_2occupancy->Fill(16);}
111 if((etaRegionCoarsePlus == 3.5 && etaRegionCoarseMinus == 2.5)) {m_M_EA_BA->Fill(invariant_mass/1000.0); m_2occupancy->Fill(15);}
112 if((etaRegionCoarsePlus == 3.5 && etaRegionCoarseMinus == 1.5)) {m_M_EA_BC->Fill(invariant_mass/1000.0); m_2occupancy->Fill(14);}
113 if((etaRegionCoarsePlus == 3.5 && etaRegionCoarseMinus == 0.5)) {m_M_EA_EC->Fill(invariant_mass/1000.0); m_2occupancy->Fill(13);}
114
115 if((etaRegionCoarsePlus == 2.5 && etaRegionCoarseMinus == 3.5)) {m_M_BA_EA->Fill(invariant_mass/1000.0); m_2occupancy->Fill(12);}
116 if((etaRegionCoarsePlus == 2.5 && etaRegionCoarseMinus == 2.5)) {m_M_BA_BA->Fill(invariant_mass/1000.0); m_2occupancy->Fill(11);}
117 if((etaRegionCoarsePlus == 2.5 && etaRegionCoarseMinus == 1.5)) {m_M_BA_BC->Fill(invariant_mass/1000.0); m_2occupancy->Fill(10);}
118 if((etaRegionCoarsePlus == 2.5 && etaRegionCoarseMinus == 0.5)) {m_M_BA_EC->Fill(invariant_mass/1000.0); m_2occupancy->Fill(9);}
119
120 if((etaRegionCoarsePlus == 1.5 && etaRegionCoarseMinus == 3.5)) {m_M_BC_EA->Fill(invariant_mass/1000.0); m_2occupancy->Fill(8);}
121 if((etaRegionCoarsePlus == 1.5 && etaRegionCoarseMinus == 2.5)) {m_M_BC_BA->Fill(invariant_mass/1000.0); m_2occupancy->Fill(7);}
122 if((etaRegionCoarsePlus == 1.5 && etaRegionCoarseMinus == 1.5)) {m_M_BC_BC->Fill(invariant_mass/1000.0); m_2occupancy->Fill(6);}
123 if((etaRegionCoarsePlus == 1.5 && etaRegionCoarseMinus == 0.5)) {m_M_BC_EC->Fill(invariant_mass/1000.0); m_2occupancy->Fill(5);}
124
125 if((etaRegionCoarsePlus == 0.5 && etaRegionCoarseMinus == 3.5)) {m_M_EC_EA->Fill(invariant_mass/1000.0); m_2occupancy->Fill(4);}
126 if((etaRegionCoarsePlus == 0.5 && etaRegionCoarseMinus == 2.5)) {m_M_EC_BA->Fill(invariant_mass/1000.0); m_2occupancy->Fill(3);}
127 if((etaRegionCoarsePlus == 0.5 && etaRegionCoarseMinus == 1.5)) {m_M_EC_BC->Fill(invariant_mass/1000.0); m_2occupancy->Fill(2);}
128 if((etaRegionCoarsePlus == 0.5 && etaRegionCoarseMinus == 0.5)) {m_M_EC_EC->Fill(invariant_mass/1000.0); m_2occupancy->Fill(1);}
129
130 m_Mass->Fill(invariant_mass/1000.0);
131 m_occupancy->Fill(etaRegionFinePlus);
132 m_occupancy->Fill(etaRegionFineMinus);
133
134}
135
154
156{
157 if (eta < -2.50) {return -1.;} // underflow
158 if (eta < -2.00) {return 0.5;} // CSC C
159 if (eta < -1.70) {return 1.5;} // ENDCAP C
160 if (eta < -1.05) {return 2.5;} // Trans C
161 if (eta < 0.00) {return 3.5;} // Barrel C
162 if (eta > 2.50) {return 8.5;} // OverFlow
163 if (eta > 2.00) {return 7.5;} // CSC A
164 if (eta > 1.70) {return 6.5;} // ENDCAP A
165 if (eta > 1.05) {return 5.5;} // Trans A
166 if (eta > 0.00) {return 4.5;} // Barrel A
167 return -1.;
168}
169
171{
172
173 if(eta < -2.50) {return -1.;} // underflow
174 if(eta < -1.05) {return 0.5;} // EC
175 if(eta < 0.00) {return 1.5;} // BC
176 if(eta < 1.05) {return 2.5;} // BA
177 if(eta < 2.50) {return 3.5;} // BC
178 return 4.5; // Overflow
179
180}
182{
183 axis->SetBinLabel(1, "CSC C");
184 axis->SetBinLabel(2, "EC C");
185 axis->SetBinLabel(3, "TRANS C");
186 axis->SetBinLabel(4, "BARR C");
187 axis->SetBinLabel(5, "BARR A");
188 axis->SetBinLabel(6, "TRANS A");
189 axis->SetBinLabel(7, "EC A");
190 axis->SetBinLabel(8," CSC A");
191 axis->SetTitle("Detector #eta Regions");
192
193 return true;
194}
195
197{
198 axis->SetBinLabel( 1, "EC-EC");
199 axis->SetBinLabel( 2, "EC-BC");
200 axis->SetBinLabel( 3, "EC-BA");
201 axis->SetBinLabel( 4, "EC-EA");
202 axis->SetBinLabel( 5, "BC-EC");
203 axis->SetBinLabel( 6, "BC-BC");
204 axis->SetBinLabel( 7, "BC-BA");
205 axis->SetBinLabel( 8, "BC-EA");
206 axis->SetBinLabel( 9, "BA-EC");
207 axis->SetBinLabel(10, "BA-BC");
208 axis->SetBinLabel(11, "BA-BA");
209 axis->SetBinLabel(12, "BA-EA");
210 axis->SetBinLabel(13, "EA-EC");
211 axis->SetBinLabel(14, "EA-BC");
212 axis->SetBinLabel(15, "EA-BA");
213 axis->SetBinLabel(16, "EA-EA");
214
215 axis->SetTitle("#eta Region Permutations [+#mu, -#mu]");
216
217 return true;
218}
219
221
222 axis->SetTitle("#phi Sectors 1-16");
223 if(axis->GetNbins() == 16) axis->CenterLabels(kTRUE);
224
225 // Sector Axis Label Error, not a multiple of 16 bins
226 if(axis->GetNbins()%16){
227 return false;
228 }
229
230 int nSectorDevisions = axis->GetNbins()/16;
231 int skip_counter = 1;
232
233 axis->SetNdivisions(16,nSectorDevisions,0,kFALSE);
234
235
236 for (int i = 1; i <= axis->GetNbins(); i++) {
237
238 if (skip_counter == nSectorDevisions) {
239 axis->SetBinLabel(i,Form("%d",i/nSectorDevisions));
240 skip_counter = 1;
241 }else {
242 axis->SetBinLabel(i," ");
243 skip_counter++;
244 }
245
246 }
247
248 return true;
249}
250
251void RecoPhysPlots::SetResultsBin(int iBin, TH1* pInputHist){
252
253 m_M_Mean-> SetBinContent(iBin, pInputHist->GetMean(1));
254 m_M_Mean-> SetBinError( iBin, pInputHist->GetMeanError(1));
255 m_M_Sigma->SetBinContent(iBin, pInputHist->GetRMS(1));
256
257}
258
259
Scalar eta() const
pseudorapidity method
TH1D * 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:94
PlotBase(PlotBase *parent, const std::string &sDir)
Definition PlotBase.cxx:29
RecoPhysPlots(PlotBase *pParent, const std::string &sDir, std::string recObj)
bool LabelCombinedEtaRegions(TAxis *axis)
bool LabelSectorAxis(TAxis *axis)
void SetResultsBin(int iBin, TH1 *pInputHist)
void fill(const std::vector< std::pair< const xAOD::Muon *, const xAOD::Muon * > > &mumucandidates)
bool LabelLargeEtaRegions(TAxis *axis)
float EtaRegionFine(double eta)
float EtaRegionCoarse(double eta)
std::string type
STL namespace.