CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
TrackProbabilityTagPlotter.cc
Go to the documentation of this file.
3 
4 using namespace std;
5 using namespace RecoBTag;
6 
8  const EtaPtBin & etaPtBin, const edm::ParameterSet& pSet,
9  const bool& update, const bool& mc, const bool& wf) :
10  BaseTagInfoPlotter(tagName, etaPtBin),
11  nBinEffPur_(pSet.getParameter<int>("nBinEffPur")),
12  startEffPur_(pSet.getParameter<double>("startEffPur")),
13  endEffPur_(pSet.getParameter<double>("endEffPur")),
14  finalized(false), mcPlots_(mc), willFinalize_(wf)
15 {
16  const std::string dir(theExtensionString.substr(1));
17 
19  ("ips_3D" + theExtensionString, "3D Probability of impact parameter",
20  50, -1.0, 1.0, false, true, true, "b", update,dir, mc) ;
21 
22  tkcntHistosSig3D[0] = new FlavourHistograms<double>
23  ("ips1_3D" + theExtensionString, "3D Probability of impact parameter 1st trk",
24  50, -1.0, 1.0, false, true, true, "b", update,dir, mc) ;
25 
26  tkcntHistosSig3D[1] = new FlavourHistograms<double>
27  ("ips2_3D" + theExtensionString, "3D Probability of impact parameter 2nd trk",
28  50, -1.0, 1.0, false, true, true, "b", update,dir, mc) ;
29 
30  tkcntHistosSig3D[2] = new FlavourHistograms<double>
31  ("ips3_3D" + theExtensionString, "3D Probability of impact parameter 3rd trk",
32  50, -1.0, 1.0, false, true, true, "b", update,dir, mc) ;
33 
34  tkcntHistosSig3D[3] = new FlavourHistograms<double>
35  ("ips4_3D" + theExtensionString, "3D Probability of impact parameter 4th trk",
36  50, -1.0, 1.0, false, true, true, "b", update,dir, mc) ;
37 
39  ("ips_2D" + theExtensionString, "2D Probability of impact parameter",
40  50, -1.0, 1.0, false, true, true, "b", update,dir, mc) ;
41 
42  tkcntHistosSig2D[0] = new FlavourHistograms<double>
43  ("ips1_2D" + theExtensionString, "2D Probability of impact parameter 1st trk",
44  50, -1.0, 1.0, false, true, true, "b", update,dir, mc) ;
45 
46  tkcntHistosSig2D[1] = new FlavourHistograms<double>
47  ("ips2_2D" + theExtensionString, "2D Probability of impact parameter 2nd trk",
48  50, -1.0, 1.0, false, true, true, "b", update,dir, mc) ;
49 
50  tkcntHistosSig2D[2] = new FlavourHistograms<double>
51  ("ips3_2D" + theExtensionString, "2D Probability of impact parameter 3rd trk",
52  50, -1.0, 1.0, false, true, true, "b", update,dir, mc) ;
53 
54  tkcntHistosSig2D[3] = new FlavourHistograms<double>
55  ("ips4" + theExtensionString, "2D Probability of impact parameter 4th trk",
56  50, -1.0, 1.0, false, true, true, "b", update,dir, mc) ;
57 
59 
60 }
61 
62 
64 {
65 
66  for(int n=0; n != 5; ++n) {
67  delete tkcntHistosSig2D[n];
68  delete tkcntHistosSig3D[n];
69  }
70  if (finalized) {
71  for(int n=0; n != 4; ++n) delete effPurFromHistos[n];
72  }
73 }
74 
75 
77  const int & jetFlavour)
78 {
79  const reco::TrackProbabilityTagInfo * tagInfo =
80  dynamic_cast<const reco::TrackProbabilityTagInfo *>(baseTagInfo);
81 
82  if (!tagInfo) {
83  throw cms::Exception("Configuration")
84  << "BTagPerformanceAnalyzer: Extended TagInfo not of type TrackProbabilityTagInfo. " << endl;
85  }
86 
87  for(int n=0; n != tagInfo->selectedTracks(1) && n != 4; ++n)
88  tkcntHistosSig2D[n]->fill(jetFlavour, tagInfo->probability(n,1));
89  for(int n=0; n != tagInfo->selectedTracks(0) && n != 4; ++n)
90  tkcntHistosSig3D[n]->fill(jetFlavour, tagInfo->probability(n,0));
91 
92  for(int n=0; n != tagInfo->selectedTracks(1); ++n)
93  tkcntHistosSig2D[4]->fill(jetFlavour, tagInfo->probability(n,1));
94  for(int n=0; n != tagInfo->selectedTracks(0); ++n)
95  tkcntHistosSig3D[4]->fill(jetFlavour, tagInfo->probability(n,0));
96 }
97 
98 
99 
101  const std::string dir("TrackProbability"+theExtensionString);
102 
111 }
112 
114 {
115  //
116  // final processing:
117  // produce the misid. vs. eff histograms
118  //
119  for(int n=0; n != 4; ++n) effPurFromHistos[n]->compute();
120  finalized = true;
121 }
122 
123 void TrackProbabilityTagPlotter::psPlot(const std::string & name)
124 {
125  const std::string cName("TrackProbabilityPlots"+ theExtensionString);
126  setTDRStyle()->cd();
127  TCanvas canvas(cName.c_str(), cName.c_str(), 600, 900);
128  canvas.UseCurrentStyle();
129  canvas.Divide(2,3);
130  canvas.Print((name + cName + ".ps[").c_str());
131  canvas.cd(1);
132 
133  tkcntHistosSig3D[4]->plot();
134  for(int n=0; n != 4; ++n) {
135  canvas.cd(2+n);
136  tkcntHistosSig3D[n]->plot();
137  }
138 
139  canvas.Print((name + cName + ".ps").c_str());
140  canvas.Clear();
141  canvas.Divide(2,3);
142 
143  canvas.cd(1);
144  tkcntHistosSig2D[4]->plot();
145  for(int n=0; n != 4; ++n) {
146  canvas.cd(2+n);
147  tkcntHistosSig2D[n]->plot();
148  }
149 
150  if (finalized) {
151  for(int n=0; n != 2; ++n) {
152  canvas.Print((name + cName + ".ps").c_str());
153  canvas.Clear();
154  canvas.Divide(2,3);
155  canvas.cd(1);
157  canvas.cd(2);
159  canvas.cd(3);
160  effPurFromHistos[0+n]->plot();
161  canvas.cd(4);
163  canvas.cd(5);
165  canvas.cd(6);
166  effPurFromHistos[1+n]->plot();
167  }
168  }
169 
170  canvas.Print((name + cName + ".ps").c_str());
171  canvas.Print((name + cName + ".ps]").c_str());
172 }
173 
174 
175 void TrackProbabilityTagPlotter::epsPlot(const std::string & name)
176 {
177  for(int n=0; n != 5; ++n) {
178  tkcntHistosSig2D[n]->epsPlot(name);
179  tkcntHistosSig3D[n]->epsPlot(name);
180  }
181  if (finalized) {
182  for(int n=0; n != 4; ++n) effPurFromHistos[n]->epsPlot(name);
183  }
184 }
void plot(TPad *theCanvas=0)
string fill
Definition: lumiContext.py:319
const std::string theExtensionString
virtual float probability(size_t n, int ip) const
def canvas
Definition: svgfig.py:481
void epsPlot(const std::string &name)
FlavourHistograms< double > * tkcntHistosSig3D[5]
void epsPlot(const std::string &name)
EffPurFromHistos * effPurFromHistos[4]
FlavourHistograms< double > * discriminatorCutEfficScan() const
FlavourHistograms< double > * tkcntHistosSig2D[5]
void plot(TPad *theCanvas=0)
TrackProbabilityTagPlotter(const std::string &tagName, const EtaPtBin &etaPtBin, const edm::ParameterSet &pSet, const bool &update, const bool &mc, const bool &wf)
FlavourHistograms< double > * discriminatorNoCutEffic() const
void setTDRStyle()
Definition: plotscripts.py:87
void analyzeTag(const reco::BaseTagInfo *tagInfo, const int &jetFlavour)
#define update(a, b)
dbl *** dir
Definition: mlp_gen.cc:35
void psPlot(const std::string &name)
virtual int selectedTracks(int ipType) const