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
00021 const std::string & es = theExtensionString;
00022 const std::string jetTagDir(es.substr(1));
00023
00024
00025 if (mcPlots_){
00026
00027 dJetFlav = new FlavourHistograms<int>
00028 ("jetFlavour" + es, "Jet Flavour", 22, -0.5, 21.5,
00029 false, false, false, "b", update,jetTagDir, mcPlots_);
00030
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
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
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
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
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
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
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
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
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
00175
00176
00177 }
00178
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
00196
00197
00198 }
00199
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
00222
00223
00224
00225 effPurFromHistos = new EffPurFromHistos ( dDiscriminator,theExtensionString.substr(1),mcPlots_,
00226 nBinEffPur_, startEffPur_, endEffPur_);
00227 effPurFromHistos->compute();
00228 finalized = true;
00229 }
00230
00231