00001 #include "DQMOffline/RecoB/interface/TrackProbabilityTagPlotter.h"
00002 #include "DQMOffline/RecoB/interface/Tools.h"
00003
00004 using namespace std;
00005 using namespace RecoBTag;
00006
00007 TrackProbabilityTagPlotter::TrackProbabilityTagPlotter(const std::string & tagName,
00008 const EtaPtBin & etaPtBin, const edm::ParameterSet& pSet,
00009 const bool& update, const bool& mc, const bool& wf) :
00010 BaseTagInfoPlotter(tagName, etaPtBin),
00011 nBinEffPur_(pSet.getParameter<int>("nBinEffPur")),
00012 startEffPur_(pSet.getParameter<double>("startEffPur")),
00013 endEffPur_(pSet.getParameter<double>("endEffPur")),
00014 finalized(false), mcPlots_(mc), willFinalize_(wf)
00015 {
00016 const std::string dir(theExtensionString.substr(1));
00017
00018 tkcntHistosSig3D[4] = new FlavourHistograms<double>
00019 ("ips_3D" + theExtensionString, "3D Probability of impact parameter",
00020 50, -1.0, 1.0, false, true, true, "b", update,dir, mc) ;
00021
00022 tkcntHistosSig3D[0] = new FlavourHistograms<double>
00023 ("ips1_3D" + theExtensionString, "3D Probability of impact parameter 1st trk",
00024 50, -1.0, 1.0, false, true, true, "b", update,dir, mc) ;
00025
00026 tkcntHistosSig3D[1] = new FlavourHistograms<double>
00027 ("ips2_3D" + theExtensionString, "3D Probability of impact parameter 2nd trk",
00028 50, -1.0, 1.0, false, true, true, "b", update,dir, mc) ;
00029
00030 tkcntHistosSig3D[2] = new FlavourHistograms<double>
00031 ("ips3_3D" + theExtensionString, "3D Probability of impact parameter 3rd trk",
00032 50, -1.0, 1.0, false, true, true, "b", update,dir, mc) ;
00033
00034 tkcntHistosSig3D[3] = new FlavourHistograms<double>
00035 ("ips4_3D" + theExtensionString, "3D Probability of impact parameter 4th trk",
00036 50, -1.0, 1.0, false, true, true, "b", update,dir, mc) ;
00037
00038 tkcntHistosSig2D[4] = new FlavourHistograms<double>
00039 ("ips_2D" + theExtensionString, "2D Probability of impact parameter",
00040 50, -1.0, 1.0, false, true, true, "b", update,dir, mc) ;
00041
00042 tkcntHistosSig2D[0] = new FlavourHistograms<double>
00043 ("ips1_2D" + theExtensionString, "2D Probability of impact parameter 1st trk",
00044 50, -1.0, 1.0, false, true, true, "b", update,dir, mc) ;
00045
00046 tkcntHistosSig2D[1] = new FlavourHistograms<double>
00047 ("ips2_2D" + theExtensionString, "2D Probability of impact parameter 2nd trk",
00048 50, -1.0, 1.0, false, true, true, "b", update,dir, mc) ;
00049
00050 tkcntHistosSig2D[2] = new FlavourHistograms<double>
00051 ("ips3_2D" + theExtensionString, "2D Probability of impact parameter 3rd trk",
00052 50, -1.0, 1.0, false, true, true, "b", update,dir, mc) ;
00053
00054 tkcntHistosSig2D[3] = new FlavourHistograms<double>
00055 ("ips4" + theExtensionString, "2D Probability of impact parameter 4th trk",
00056 50, -1.0, 1.0, false, true, true, "b", update,dir, mc) ;
00057
00058 if (willFinalize_) createPlotsForFinalize();
00059
00060 }
00061
00062
00063 TrackProbabilityTagPlotter::~TrackProbabilityTagPlotter ()
00064 {
00065
00066 for(int n=0; n != 5; ++n) {
00067 delete tkcntHistosSig2D[n];
00068 delete tkcntHistosSig3D[n];
00069 }
00070 if (finalized) {
00071 for(int n=0; n != 4; ++n) delete effPurFromHistos[n];
00072 }
00073 }
00074
00075
00076 void TrackProbabilityTagPlotter::analyzeTag (const reco::BaseTagInfo * baseTagInfo,
00077 const int & jetFlavour)
00078 {
00079 const reco::TrackProbabilityTagInfo * tagInfo =
00080 dynamic_cast<const reco::TrackProbabilityTagInfo *>(baseTagInfo);
00081
00082 if (!tagInfo) {
00083 throw cms::Exception("Configuration")
00084 << "BTagPerformanceAnalyzer: Extended TagInfo not of type TrackProbabilityTagInfo. " << endl;
00085 }
00086
00087 for(int n=0; n != tagInfo->selectedTracks(1) && n != 4; ++n)
00088 tkcntHistosSig2D[n]->fill(jetFlavour, tagInfo->probability(n,1));
00089 for(int n=0; n != tagInfo->selectedTracks(0) && n != 4; ++n)
00090 tkcntHistosSig3D[n]->fill(jetFlavour, tagInfo->probability(n,0));
00091
00092 for(int n=0; n != tagInfo->selectedTracks(1); ++n)
00093 tkcntHistosSig2D[4]->fill(jetFlavour, tagInfo->probability(n,1));
00094 for(int n=0; n != tagInfo->selectedTracks(0); ++n)
00095 tkcntHistosSig3D[4]->fill(jetFlavour, tagInfo->probability(n,0));
00096 }
00097
00098
00099
00100 void TrackProbabilityTagPlotter::createPlotsForFinalize(){
00101 const std::string dir("TrackProbability"+theExtensionString);
00102
00103 effPurFromHistos[0] = new EffPurFromHistos (tkcntHistosSig3D[1],dir,mcPlots_,
00104 nBinEffPur_, startEffPur_, endEffPur_);
00105 effPurFromHistos[1] = new EffPurFromHistos (tkcntHistosSig3D[2],dir,mcPlots_,
00106 nBinEffPur_, startEffPur_, endEffPur_);
00107 effPurFromHistos[2] = new EffPurFromHistos (tkcntHistosSig2D[1],dir,mcPlots_,
00108 nBinEffPur_, startEffPur_, endEffPur_);
00109 effPurFromHistos[3] = new EffPurFromHistos (tkcntHistosSig2D[2],dir,mcPlots_,
00110 nBinEffPur_, startEffPur_, endEffPur_);
00111 }
00112
00113 void TrackProbabilityTagPlotter::finalize ()
00114 {
00115
00116
00117
00118
00119 for(int n=0; n != 4; ++n) effPurFromHistos[n]->compute();
00120 finalized = true;
00121 }
00122
00123 void TrackProbabilityTagPlotter::psPlot(const std::string & name)
00124 {
00125 const std::string cName("TrackProbabilityPlots"+ theExtensionString);
00126 setTDRStyle()->cd();
00127 TCanvas canvas(cName.c_str(), cName.c_str(), 600, 900);
00128 canvas.UseCurrentStyle();
00129 canvas.Divide(2,3);
00130 canvas.Print((name + cName + ".ps[").c_str());
00131 canvas.cd(1);
00132
00133 tkcntHistosSig3D[4]->plot();
00134 for(int n=0; n != 4; ++n) {
00135 canvas.cd(2+n);
00136 tkcntHistosSig3D[n]->plot();
00137 }
00138
00139 canvas.Print((name + cName + ".ps").c_str());
00140 canvas.Clear();
00141 canvas.Divide(2,3);
00142
00143 canvas.cd(1);
00144 tkcntHistosSig2D[4]->plot();
00145 for(int n=0; n != 4; ++n) {
00146 canvas.cd(2+n);
00147 tkcntHistosSig2D[n]->plot();
00148 }
00149
00150 if (finalized) {
00151 for(int n=0; n != 2; ++n) {
00152 canvas.Print((name + cName + ".ps").c_str());
00153 canvas.Clear();
00154 canvas.Divide(2,3);
00155 canvas.cd(1);
00156 effPurFromHistos[0+n]->discriminatorNoCutEffic()->plot();
00157 canvas.cd(2);
00158 effPurFromHistos[0+n]->discriminatorCutEfficScan()->plot();
00159 canvas.cd(3);
00160 effPurFromHistos[0+n]->plot();
00161 canvas.cd(4);
00162 effPurFromHistos[1+n]->discriminatorNoCutEffic()->plot();
00163 canvas.cd(5);
00164 effPurFromHistos[1+n]->discriminatorCutEfficScan()->plot();
00165 canvas.cd(6);
00166 effPurFromHistos[1+n]->plot();
00167 }
00168 }
00169
00170 canvas.Print((name + cName + ".ps").c_str());
00171 canvas.Print((name + cName + ".ps]").c_str());
00172 }
00173
00174
00175 void TrackProbabilityTagPlotter::epsPlot(const std::string & name)
00176 {
00177 for(int n=0; n != 5; ++n) {
00178 tkcntHistosSig2D[n]->epsPlot(name);
00179 tkcntHistosSig3D[n]->epsPlot(name);
00180 }
00181 if (finalized) {
00182 for(int n=0; n != 4; ++n) effPurFromHistos[n]->epsPlot(name);
00183 }
00184 }