ATLAS Offline Software
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 
10 RecoPhysPlots::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
90  LabelCombinedEtaRegions(m_M_Mean->GetXaxis());
93  LabelLargeEtaRegions(m_occupancy->GetXaxis());
94 }
95 
96 void 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 
103 void 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 
153 }
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 
251 void 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 
RecoPhysPlots::initializePlots
void initializePlots()
Definition: RecoPhysPlots.cxx:35
RecoPhysPlots::m_M_BA_EA
TH1 * m_M_BA_EA
Definition: RecoPhysPlots.h:45
RecoPhysPlots::m_M_EA_EC
TH1 * m_M_EA_EC
Definition: RecoPhysPlots.h:43
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
RecoPhysPlots::SetResultsBin
void SetResultsBin(int iBin, TH1 *pInputHist)
Definition: RecoPhysPlots.cxx:251
RecoPhysPlots::m_M_EA_BC
TH1 * m_M_EA_BC
Definition: RecoPhysPlots.h:42
RecoPhysPlots::m_M_BA_EC
TH1 * m_M_BA_EC
Definition: RecoPhysPlots.h:48
RecoPhysPlots::m_M_Sigma
TH1 * m_M_Sigma
Definition: RecoPhysPlots.h:38
PlotBase
Definition: PlotBase.h:33
RecoPhysPlots::m_occupancy
TH1 * m_occupancy
Definition: RecoPhysPlots.h:26
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
RecoPhysPlots::m_M_BC_BC
TH1 * m_M_BC_BC
Definition: RecoPhysPlots.h:52
python.copyTCTOutput.sDir
sDir
Definition: copyTCTOutput.py:60
yodamerge_tmp.axis
list axis
Definition: yodamerge_tmp.py:241
RecoPhysPlots::m_M_BC_EC
TH1 * m_M_BC_EC
Definition: RecoPhysPlots.h:53
RecoPhysPlots::fill
void fill(const std::vector< std::pair< const xAOD::Muon *, const xAOD::Muon * > > &mumucandidates)
Definition: RecoPhysPlots.cxx:96
RecoPhysPlots::m_M_BA_BA
TH1 * m_M_BA_BA
Definition: RecoPhysPlots.h:46
RecoPhysPlots::LabelLargeEtaRegions
bool LabelLargeEtaRegions(TAxis *axis)
Definition: RecoPhysPlots.cxx:181
RecoPhysPlots::m_M_BC_EA
TH1 * m_M_BC_EA
Definition: RecoPhysPlots.h:50
RecoPhysPlots::m_M_EA_BA
TH1 * m_M_EA_BA
Definition: RecoPhysPlots.h:41
RecoPhysPlots::m_M_EC_BA
TH1 * m_M_EC_BA
Definition: RecoPhysPlots.h:56
TH1::SetBinContent
void SetBinContent(int, double)
Definition: rootspy.cxx:301
RecoPhysPlots::LabelSectorAxis
bool LabelSectorAxis(TAxis *axis)
Definition: RecoPhysPlots.cxx:220
lumiFormat.i
int i
Definition: lumiFormat.py:92
RecoPhysPlots::m_M_BA_BC
TH1 * m_M_BA_BC
Definition: RecoPhysPlots.h:47
RecoPhysPlots::LabelCombinedEtaRegions
bool LabelCombinedEtaRegions(TAxis *axis)
Definition: RecoPhysPlots.cxx:196
RecoPhysPlots::m_M_EC_EA
TH1 * m_M_EC_EA
Definition: RecoPhysPlots.h:55
RecoPhysPlots::m_M_EA_EA
TH1 * m_M_EA_EA
Definition: RecoPhysPlots.h:40
RecoPhysPlots::m_M_EC_EC
TH1 * m_M_EC_EC
Definition: RecoPhysPlots.h:58
TH1::Fill
int Fill(double)
Definition: rootspy.cxx:285
RecoPhysPlots::m_2occupancy
TH1 * m_2occupancy
Definition: RecoPhysPlots.h:27
dumpTgcDigiJitter.nBins
list nBins
Definition: dumpTgcDigiJitter.py:29
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
RecoPhysPlots::m_Mass
TH1 * m_Mass
Definition: RecoPhysPlots.h:25
RecoPhysPlots::RecoPhysPlots
RecoPhysPlots(PlotBase *pParent, const std::string &sDir, std::string recObj)
Definition: RecoPhysPlots.cxx:10
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
TH1
Definition: rootspy.cxx:268
RecoPhysPlots::m_M_Mean
TH1 * m_M_Mean
Definition: RecoPhysPlots.h:37
RecoPhysPlots::EtaRegionFine
float EtaRegionFine(double eta)
Definition: RecoPhysPlots.cxx:155
RecoPhysPlots::m_M_EC_BC
TH1 * m_M_EC_BC
Definition: RecoPhysPlots.h:57
RecoPhysPlots::type
std::string type
Definition: RecoPhysPlots.h:60
RecoPhysPlots::EtaRegionCoarse
float EtaRegionCoarse(double eta)
Definition: RecoPhysPlots.cxx:170
RecoPhysPlots::finalizeRecoPlots
void finalizeRecoPlots()
Definition: RecoPhysPlots.cxx:136
RecoPhysPlots.h
RecoPhysPlots::m_M_BC_BA
TH1 * m_M_BC_BA
Definition: RecoPhysPlots.h:51