CMS 3D CMS Logo

MultiplicityPlotMacros.cc
Go to the documentation of this file.
1 #include <iostream>
2 #include <algorithm>
3 #include <vector>
4 #include <string>
7 #include "TFile.h"
8 #include "TH1D.h"
9 #include "TProfile.h"
10 #include "TDirectory.h"
11 #include "TCanvas.h"
12 #include "TStyle.h"
13 #include "TLegend.h"
14 
15 void PlotPixelMultVtxPos(TFile* ff, const char* module) {
16 
17  CommonAnalyzer camult(ff,"",module);
18  // camult.setPath("VtxPosCorr");
19 
20  std::vector<std::string> labels;
21  labels.push_back("FPIX_m");
22  labels.push_back("BPIX_L1_mod_1");
23  labels.push_back("BPIX_L1_mod_2");
24  labels.push_back("BPIX_L1_mod_3");
25  labels.push_back("BPIX_L1_mod_4");
26  labels.push_back("BPIX_L1_mod_5");
27  labels.push_back("BPIX_L1_mod_6");
28  labels.push_back("BPIX_L1_mod_7");
29  labels.push_back("BPIX_L1_mod_8");
30  labels.push_back("FPIX_p");
31  labels.push_back("BPIX_L1");
32  labels.push_back("BPIX_L2");
33  labels.push_back("BPIX_L3");
34  labels.push_back("Lumi");
35 
36  std::vector<TProfile*> profs;
37 
38  for(unsigned int i=0;i<labels.size();++i) {
39 
40  std::string path = "VtxPosCorr/"+labels[i];
41  camult.setPath(path.c_str());
42 
43  std::string hname = "n"+labels[i]+"digivsvtxposprof";
44  profs.push_back((TProfile*)camult.getObject(hname.c_str()));
45 
46  }
47 
48  TCanvas* cc = new TCanvas("BPIX L1 details","BPIX L1 details",1000,1000);
49  gPad->Divide(2,2);
50 
51  for(unsigned int i = 1;i<5;++i) {
52  cc->cd(i);
53  if(profs[i] && profs[9-i]) {
54  profs[i]->Draw();
55  profs[9-i]->SetLineColor(kRed);
56  profs[9-i]->SetMarkerColor(kRed);
57  profs[9-i]->Draw("same");
58  TLegend* leg = new TLegend(0.4,0.8,0.6,0.9,"Occupancy");
59  leg->SetFillStyle(0);
60  leg->AddEntry(profs[i],labels[i].c_str(),"l");
61  leg->AddEntry(profs[9-i],labels[9-i].c_str(),"l");
62  leg->Draw();
63  }
64  }
65  new TCanvas("FPIX","FPIX");
66  if(profs[0] && profs[9]) {
67  profs[0]->Draw();
68  profs[9]->SetLineColor(kRed);
69  profs[9]->SetMarkerColor(kRed);
70  profs[9]->Draw("same");
71  TLegend* leg = new TLegend(0.4,0.8,0.6,0.9,"Occupancy");
72  leg->SetFillStyle(0);
73  leg->AddEntry(profs[0],labels[0].c_str(),"l");
74  leg->AddEntry(profs[9],labels[9].c_str(),"l");
75  leg->Draw();
76  }
77 
78  gStyle->SetOptStat(11);
79  gStyle->SetOptFit(11);
80  new TCanvas("BPIXL1","BPIX L1");
81  profs[10]->Fit("pol2");
82  new TCanvas("BPIXL2","BPIX L2");
83  profs[11]->Fit("pol2");
84  new TCanvas("BPIXL3","BPIX L3");
85  profs[12]->Fit("pol2");
86 
87  new TCanvas("LumiAdd","LumiAdd");
88  TH1D* hlumi = profs[11]->ProjectionX("lumi");
89  TH1D* hbpixl3 = profs[12]->ProjectionX("bpixl3");
90  TH1D* hfpixm = profs[0]->ProjectionX("fpixm");
91  TH1D* hfpixp = profs[9]->ProjectionX("fpixp");
92  hlumi->SetTitle("BPIX L2+L3 + FPIX multiplicity vs vtx z position");
93  hlumi->Add(hbpixl3);
94  hlumi->Add(hfpixm);
95  hlumi->Add(hfpixp);
96  hlumi->Fit("pol2");
97  new TCanvas("Lumi","Lumi");
98  profs[13]->Fit("pol2");
99 }
100 
101 TH1D* AverageRunMultiplicity(TFile& ff, const char* module, const bool excludeLastBins=false, const char* histo="nTKdigivsorbrun") {
102 
103  CommonAnalyzer camult(&ff,"",module);
104 
105  TH1D* clusmult = new TH1D("clusmult","Average Multiplicity vs run",10,0.,10.);
106  clusmult->SetCanExtend(TH1::kXaxis);
107 
108  std::vector<unsigned int> runs = camult.getRunList();
109  std::sort(runs.begin(),runs.end());
110 
111  {
112  for(unsigned int i=0;i<runs.size();++i) {
113 
114  char runlabel[100];
115  sprintf(runlabel,"%d",runs[i]);
116  char runpath[100];
117  sprintf(runpath,"run_%d",runs[i]);
118  camult.setPath(runpath);
119 
120 
121  TProfile* multvstime=nullptr;
122  if(multvstime==nullptr) multvstime = (TProfile*)camult.getObject(histo);
123  if(multvstime) {
124  // compute mean exlucing the last filled bins
125 
126  if(excludeLastBins) {
127  int lastbin= multvstime->GetNbinsX()+1;
128  int firstbin= 1;
129  for(int ibin=multvstime->GetNbinsX()+1;ibin>0;--ibin) {
130  if(multvstime->GetBinEntries(ibin)!=0) {
131  lastbin=ibin;
132  break;
133  }
134  }
135 
136  std::cout << "Restricted range: " << firstbin << " " << lastbin << std::endl;
137  multvstime->GetXaxis()->SetRangeUser(multvstime->GetBinLowEdge(firstbin),multvstime->GetBinLowEdge(lastbin-2));
138  }
139  // fill the summary
140  clusmult->Fill(runlabel,multvstime->GetMean(2));
141 
142  }
143  }
144  }
145  return clusmult;
146 }
TH1D * AverageRunMultiplicity(TFile &ff, const char *module, const bool excludeLastBins=false, const char *histo="nTKdigivsorbrun")
TObject * getObject(const char *name) const
void PlotPixelMultVtxPos(TFile *ff, const char *module)
void setPath(const char *path)
const std::vector< unsigned int > getRunList() const
Definition: vlib.h:208