CMS 3D CMS Logo

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

Go to the documentation of this file.
00001 #include "DQMOffline/RecoB/interface/JetTagPlotter.h"
00002 #include "DQMOffline/RecoB/interface/Tools.h"
00003 
00004 #include <iostream>
00005 
00006 using namespace std;
00007 using namespace RecoBTag;
00008 
00009 
00010 JetTagPlotter::JetTagPlotter (const std::string & tagName, const EtaPtBin & etaPtBin,
00011                        const edm::ParameterSet& pSet, const bool& mc, const bool& update, const bool& wf) :
00012                        BaseBTagPlotter(tagName, etaPtBin), discrBins(400),
00013                        discrStart_(pSet.getParameter<double>("discriminatorStart")), 
00014                        discrEnd_(pSet.getParameter<double>("discriminatorEnd")),
00015                        nBinEffPur_(pSet.getParameter<int>("nBinEffPur")),
00016                        startEffPur_(pSet.getParameter<double>("startEffPur")), 
00017                        endEffPur_(pSet.getParameter<double>("endEffPur")), 
00018                        finalized(false), mcPlots_(mc), willFinalize_(wf) {
00019 
00020   // to have a shorter name .....
00021   const std::string & es = theExtensionString;
00022   const std::string jetTagDir(es.substr(1));
00023 
00024 
00025   if (mcPlots_){
00026     // jet flavour
00027     dJetFlav = new FlavourHistograms<int>
00028       ("jetFlavour" + es, "Jet Flavour", 22, -0.5, 21.5,
00029        false, false, false, "b", update,jetTagDir, mcPlots_);
00030     // associated parton momentum
00031     dJetPartonMomentum = new FlavourHistograms<double>
00032       ("associatedPartonMomentum" + es, "associated parton momentum",
00033        200, 0.0, 400.0, false, false, true, "b", update,jetTagDir, mcPlots_);
00034     
00035     // associated parton pt
00036     dJetPartonPt = new FlavourHistograms<double>
00037       ("associatedPartonPt" + es, "associated parton pt",
00038        200, 0.0, 400.0, false, false, true, "b", update,jetTagDir, mcPlots_);
00039     
00040     // associated parton eta
00041     dJetPartonPseudoRapidity = new FlavourHistograms<double>
00042       ("associatedPartonEta" + es, "associated parton eta",
00043        100, -3.5, 3.5, false, false, true, "b", update,jetTagDir, mcPlots_);
00044   }else {
00045     dJetFlav=0;
00046     dJetPartonMomentum = 0;
00047     dJetPartonPt = 0;
00048     dJetPartonPseudoRapidity = 0;
00049   }
00050   // track multiplicity in jet
00051   dJetMultiplicity = new FlavourHistograms<int>
00052         ("jetMultiplicity" + es, "Jet Multiplicity", 31, -0.5, 30.5,
00053         false, true, true, "b", update,jetTagDir, mcPlots_);
00054 
00055     // Discriminator: again with reasonable binning
00056   dDiscriminator = new FlavourHistograms<double>
00057         ("discr" + es, "Discriminator", 100, discrStart_, discrEnd_,
00058         false, true, true, "b", update,jetTagDir, mcPlots_);
00059   dDiscriminator->settitle("Discriminant");
00060     // reconstructed jet momentum
00061   dJetRecMomentum = new FlavourHistograms<double>
00062         ("jetMomentum" + es, "jet momentum", 200, 0.0, 200.0,
00063         false, false, true, "b", update,jetTagDir, mcPlots_);
00064 
00065   // reconstructed jet transverse momentum
00066   dJetRecPt = new FlavourHistograms<double>
00067         ("jetPt" + es, "jet pt", 200, 0.0, 200.0,
00068         false, false, true, "b", update,jetTagDir, mcPlots_);
00069 
00070   // reconstructed jet eta
00071   dJetRecPseudoRapidity = new FlavourHistograms<double>
00072         ("jetEta" + es, "jet eta", 100, -3.5, 3.5,
00073         false, false, true, "b", update,jetTagDir, mcPlots_);
00074 
00075   // reconstructed jet phi
00076   dJetRecPhi = new FlavourHistograms<double>
00077         ("jetPhi" + es, "jet phi", 100, -3.15, 3.15,
00078         false, false, true, "b", update,jetTagDir, mcPlots_);
00079 
00080   if (willFinalize_) createPlotsForFinalize();
00081 
00082 }  
00083   
00084   
00085 JetTagPlotter::~JetTagPlotter () {
00086   delete dJetFlav;
00087   delete dJetMultiplicity;
00088   delete dDiscriminator;
00089   delete dJetRecMomentum;
00090   delete dJetRecPt;
00091   delete dJetRecPseudoRapidity;
00092   delete dJetRecPhi;
00093   delete dJetPartonMomentum;
00094   delete dJetPartonPt;
00095   delete dJetPartonPseudoRapidity;
00096   if (finalized) {
00097     delete effPurFromHistos;
00098   }
00099 }
00100 
00101 void JetTagPlotter::epsPlot(const std::string & name)
00102 {
00103   dJetFlav->epsPlot(name);
00104   dJetMultiplicity->epsPlot(name);
00105   dDiscriminator->epsPlot(name);
00106   dJetRecMomentum->epsPlot(name);
00107   dJetRecPt->epsPlot(name);
00108   dJetRecPseudoRapidity->epsPlot(name);
00109   dJetRecPhi->epsPlot(name);
00110   dJetPartonMomentum->epsPlot(name);
00111   dJetPartonPt->epsPlot(name);
00112   dJetPartonPseudoRapidity->epsPlot(name);
00113   if (finalized) {
00114     effPurFromHistos->epsPlot(name);
00115   }
00116 }
00117 
00118 void JetTagPlotter::psPlot(const std::string & name)
00119 {
00120   std::string cName = "JetTagPlots"+ theExtensionString;
00121   setTDRStyle()->cd();
00122   TCanvas canvas(cName.c_str(), cName.c_str(), 600, 900);
00123   canvas.UseCurrentStyle();
00124 
00125   canvas.Divide(2,3);
00126   canvas.Print((name + cName + ".ps[").c_str());
00127   canvas.cd(1);
00128   dJetFlav->plot();
00129   canvas.cd(2);
00130   dJetMultiplicity->plot();
00131   canvas.cd(3);
00132   dDiscriminator->plot();
00133   canvas.cd(4);
00134   dJetRecMomentum->plot();
00135   canvas.cd(5);
00136   dJetRecPt->plot();
00137   canvas.cd(6);
00138   dJetRecPseudoRapidity->plot();
00139   canvas.Print((name + cName + ".ps").c_str());
00140   canvas.Clear();
00141   canvas.Divide(2,3);
00142 
00143   canvas.cd(1);
00144   dJetRecPhi->plot();
00145   canvas.cd(2);
00146   dJetPartonMomentum->plot();
00147   canvas.cd(3);
00148   dJetPartonPt->plot();
00149   canvas.cd(4);
00150   dJetPartonPseudoRapidity->plot();
00151   if (finalized) {
00152     canvas.cd(5);
00153     effPurFromHistos->discriminatorNoCutEffic()->plot();
00154     canvas.cd(6);
00155     effPurFromHistos->discriminatorCutEfficScan()->plot();
00156     canvas.Print((name + cName + ".ps").c_str());
00157     canvas.Clear();
00158     canvas.Divide(2,3);
00159     canvas.cd(1);
00160     effPurFromHistos->plot();
00161   }
00162   canvas.Print((name + cName + ".ps").c_str());
00163   canvas.Print((name + cName + ".ps]").c_str());
00164 }
00165 
00166 
00167 void JetTagPlotter::analyzeTag(const reco::Jet & jet,
00168                                const float& discriminator,
00169                                const int& jetFlavour)  
00170 {
00171 
00172   if (mcPlots_) {
00173   dJetFlav->fill(jetFlavour, jetFlavour);
00174 //   dJetPartonMomentum->fill(jetFlav, jetFlavour.underlyingParton4Vec().P() );
00175 //   dJetPartonPt->fill(jetFlav, jetFlavour.underlyingParton4Vec().Pt() );
00176 //   dJetPartonPseudoRapidity->fill(jetFlav, jetFlavour.underlyingParton4Vec().Eta() );
00177   }
00178   //  dJetMultiplicity->fill(jetFlavourour, jetTag.tracks().size()); //fixme
00179   if (isinf(discriminator) ) dDiscriminator->fill(jetFlavour, -999.0 );
00180   else dDiscriminator->fill(jetFlavour, discriminator );
00181   dJetRecMomentum->fill(jetFlavour, jet.p() );
00182   dJetRecPt->fill(jetFlavour, jet.pt() );
00183   dJetRecPseudoRapidity->fill(jetFlavour, jet.eta() );
00184   dJetRecPhi->fill(jetFlavour, jet.phi());
00185   
00186 }
00187 
00188 
00189 void JetTagPlotter::analyzeTag(const reco::JetTag & jetTag,
00190         const int & jetFlavour)
00191 {
00192 
00193   if (mcPlots_) {
00194   dJetFlav->fill(jetFlavour, jetFlavour);
00195 //   dJetPartonMomentum->fill(jetFlav, jetFlavour.underlyingParton4Vec().P() );
00196 //   dJetPartonPt->fill(jetFlav, jetFlavour.underlyingParton4Vec().Pt() );
00197 //   dJetPartonPseudoRapidity->fill(jetFlav, jetFlavour.underlyingParton4Vec().Eta() );
00198   }
00199   //  dJetMultiplicity->fill(jetFlavourour, jetTag.tracks().size()); //fixme
00200   if (isinf(jetTag.second) ) dDiscriminator->fill(jetFlavour, -999.0 );
00201   else dDiscriminator->fill(jetFlavour, jetTag.second);
00202   dJetRecMomentum->fill(jetFlavour, jetTag.first->p() );
00203   dJetRecPt->fill(jetFlavour, jetTag.first->pt() );
00204   dJetRecPseudoRapidity->fill(jetFlavour, jetTag.first->eta() );
00205   dJetRecPhi->fill(jetFlavour, jetTag.first->phi());
00206   
00207 }
00208 
00209 
00210 
00211 
00212 void JetTagPlotter::createPlotsForFinalize(){
00213   effPurFromHistos = new EffPurFromHistos ( dDiscriminator,theExtensionString.substr(1),mcPlots_, 
00214                                             nBinEffPur_, startEffPur_, endEffPur_);
00215 
00216 }
00217 
00218 void JetTagPlotter::finalize()
00219 {
00220   //
00221   // final processing:
00222   // produce the misid. vs. eff histograms
00223   //
00224 
00225   effPurFromHistos = new EffPurFromHistos ( dDiscriminator,theExtensionString.substr(1),mcPlots_, 
00226                                             nBinEffPur_, startEffPur_, endEffPur_);
00227   effPurFromHistos->compute();
00228   finalized = true;
00229 }
00230 
00231