CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/DQMOffline/RecoB/src/TrackProbabilityTagPlotter.cc

Go to the documentation of this file.
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   // final processing:
00117   // produce the misid. vs. eff histograms
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 }