CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
JetTagPlotter.cc
Go to the documentation of this file.
5 
6 #include <iostream>
7 
8 using namespace std;
9 using namespace RecoBTag;
10 
11 
12 JetTagPlotter::JetTagPlotter (const std::string & tagName, const EtaPtBin & etaPtBin,
13  const edm::ParameterSet& pSet, const unsigned int& mc,
14  const bool& wf, DQMStore::IBooker & ibook) :
15  BaseBTagPlotter(tagName, etaPtBin), discrBins(400),
16  discrStart_(pSet.getParameter<double>("discriminatorStart")),
17  discrEnd_(pSet.getParameter<double>("discriminatorEnd")),
18  nBinEffPur_(pSet.getParameter<int>("nBinEffPur")),
19  startEffPur_(pSet.getParameter<double>("startEffPur")),
20  endEffPur_(pSet.getParameter<double>("endEffPur")),
21  mcPlots_(mc), willFinalize_(wf) {
22 
23  // to have a shorter name .....
24  const std::string & es = theExtensionString;
25  const std::string jetTagDir(es.substr(1));
26 
27  if (willFinalize_) return;
28 
29  //added to count the number of jets by event : 0=DATA or NI, 1to5=quarks u,d,s,c,b , 6=gluon
30  int nFl = 1;
31  if(mcPlots_) nFl = 8;
32  nJets = new int [nFl];
33  for(int i = 0; i < nFl; i++){
34  nJets[i]=0;
35  }
36 
37  if (mcPlots_){
38  // jet flavour
40  ("jetFlavour" + es, "Jet Flavour", 22, -0.5, 21.5,
41  false, false, false, "b", jetTagDir, mcPlots_, ibook);
42  }else {
43  dJetFlav=0;
44  }
45 
46  // jet multiplicity
48  ("jetMultiplicity" + es, "Jet Multiplicity", 11, -0.5, 10.5,
49  false, true, true, "b", jetTagDir, mcPlots_, ibook);
50 
51  // Discriminator: again with reasonable binning
53  ("discr" + es, "Discriminator", 102, discrStart_, discrEnd_,
54  false, true, true, "b", jetTagDir, mcPlots_, ibook);
55  dDiscriminator->settitle("Discriminant");
56  // reconstructed jet momentum
58  ("jetMomentum" + es, "jet momentum", 350, 0.0, 350.0,
59  false, false, true, "b", jetTagDir, mcPlots_, ibook);
60 
61  // reconstructed jet transverse momentum
63  ("jetPt" + es, "jet pt", 350, 0.0, 350.0,
64  false, false, true, "b", jetTagDir, mcPlots_, ibook);
65 
66  // reconstructed jet eta
68  ("jetEta" + es, "jet eta", 100, -3.0, 3.0,
69  false, false, true, "b", jetTagDir, mcPlots_, ibook);
70 
71  // reconstructed jet phi
73  ("jetPhi" + es, "jet phi", 100, -3.15, 3.15,
74  false, false, true, "b", jetTagDir, mcPlots_, ibook);
75 }
76 
77 
79  if (!willFinalize_) {
80  delete dJetFlav;
81  delete JetMultiplicity;
82  delete dDiscriminator;
83  delete dJetRecMomentum;
84  delete dJetRecPt;
85  delete dJetRecPseudoRapidity;
86  delete dJetRecPhi;
87  }
88  else {
89  delete dDiscriminator;
90  delete effPurFromHistos;
91  }
92 }
93 
95 {
96  if (!willFinalize_) {
97  dJetFlav->epsPlot(name);
98  JetMultiplicity->epsPlot(name);
99  dDiscriminator->epsPlot(name);
100  dJetRecMomentum->epsPlot(name);
101  dJetRecPt->epsPlot(name);
103  dJetRecPhi->epsPlot(name);
104  }
105  else {
106  effPurFromHistos->epsPlot(name);
107  }
108 }
109 
111 {
112  std::string cName = "JetTagPlots"+ theExtensionString;
113  setTDRStyle()->cd();
114  TCanvas canvas(cName.c_str(), cName.c_str(), 600, 900);
115  canvas.UseCurrentStyle();
116 
117  canvas.Divide(2,3);
118  canvas.Print((name + cName + ".ps[").c_str());
119  if (!willFinalize_) {
120  canvas.cd(1);
121  dJetFlav->plot();
122  canvas.cd(2);
123  canvas.cd(3);
124  dDiscriminator->plot();
125  canvas.cd(4);
127  canvas.cd(5);
128  dJetRecPt->plot();
129  canvas.cd(6);
131  canvas.Print((name + cName + ".ps").c_str());
132  canvas.Clear();
133  canvas.Divide(2,3);
134 
136  canvas.Print((name + cName + ".ps").c_str());
137  canvas.Clear();
138 
139  canvas.cd(1);
140  dJetRecPhi->plot();
141  canvas.cd(2);
142  canvas.cd(3);
143  canvas.cd(4);
144  }
145  else {
146  canvas.cd(5);
148  canvas.cd(6);
150  canvas.Print((name + cName + ".ps").c_str());
151  canvas.Clear();
152  canvas.Divide(2,3);
153  canvas.cd(1);
155  }
156  canvas.Print((name + cName + ".ps").c_str());
157  canvas.Print((name + cName + ".ps]").c_str());
158 }
159 
160 void JetTagPlotter::analyzeTag() //here jetFlavour not needed
161 {
162  //to use on data
163  JetMultiplicity->fill(-1, nJets[0]);
164  nJets[0] = 0; //reset to 0 before the next event
165 }
166 
167 void JetTagPlotter::analyzeTag(const float& w)
168 {
169  if (mcPlots_) {
170  //to use with MC
171  int totNJets = 0;
172  int udsNJets = 0;
173  int udsgNJets = 0;
174  for(int i = 0; i < 8; i++){
175  totNJets += nJets[i];
176  if(i > 0 && i < 4) udsNJets += nJets[i];
177  if((i > 0 && i < 4) || i == 6) udsgNJets += nJets[i];
178  if(i <= 5 && i >= 1) JetMultiplicity->fill(i, nJets[i], w);
179  else if (i==6) JetMultiplicity->fill(21, nJets[i], w);
180  else if (i==7) JetMultiplicity->fill(20, nJets[i], w);
181  else JetMultiplicity->fill(0, nJets[i], w);
182  nJets[i] = 0; //reset to 0 before the next event
183  }
184  JetMultiplicity->fill(-1, totNJets, w); //total number of jets in the event
185  JetMultiplicity->fill(123, udsNJets, w);
186  JetMultiplicity->fill(12321, udsgNJets, w);
187  }
188  else
189  {
190  int totNJets = 0;
191  for(int i = 0; i < 8; i++){
192  totNJets += nJets[i];
193  nJets[i] = 0;
194  }
195  JetMultiplicity->fill(-1, totNJets, w);
196  }
197 }
198 
200  const double & jec,
201  const float& discriminator,
202  const int& jetFlavour)
203 {
204  if (mcPlots_) {
205  dJetFlav->fill(jetFlavour, jetFlavour);
206  if(abs(jetFlavour)>0 && abs(jetFlavour)<6) nJets[abs(jetFlavour)]+=1; //quarks 1 to 5
207  else if(abs(jetFlavour)==21) nJets[6]+=1; //gluons
208  else if(jetFlavour==20) nJets[7]+=1; //PU
209  else nJets[0]+=1; //NI
210  }
211  else{
212  nJets[0]+=1;
213  }
214  if (edm::isNotFinite(discriminator) ) dDiscriminator->fill(jetFlavour, -999.0 );
215  else dDiscriminator->fill(jetFlavour, discriminator );
216  dJetRecMomentum->fill(jetFlavour, jet.p()*jec );
217  dJetRecPt->fill(jetFlavour, jet.pt()*jec );
218  dJetRecPseudoRapidity->fill(jetFlavour, jet.eta() );
219  dJetRecPhi->fill(jetFlavour, jet.phi());
220 }
221 
223  const double & jec,
224  const float& discriminator,
225  const int& jetFlavour,
226  const float& w)
227 {
228  if (mcPlots_) {
229  dJetFlav->fill(jetFlavour, jetFlavour , w );
230  if(abs(jetFlavour)>0 && abs(jetFlavour)<6) nJets[abs(jetFlavour)]+=1; //quarks 1 to 5
231  else if(abs(jetFlavour)==21) nJets[6]+=1; //gluons
232  else if(jetFlavour==20) nJets[7]+=1; //PU
233  else nJets[0]+=1; //NI
234  }
235  else{
236  nJets[0]+=1;
237  }
238  if (edm::isNotFinite(discriminator) ) dDiscriminator->fill(jetFlavour, -999.0 , w );
239  else dDiscriminator->fill(jetFlavour, discriminator , w );
240  dJetRecMomentum->fill(jetFlavour, jet.p()*jec , w);
241  dJetRecPt->fill(jetFlavour, jet.pt()*jec , w);
242  dJetRecPseudoRapidity->fill(jetFlavour, jet.eta() , w );
243  dJetRecPhi->fill(jetFlavour, jet.phi() , w );
244 }
245 
246 
248  const double & jec,
249  const int & jetFlavour)
250 {
251  if (mcPlots_) {
252  dJetFlav->fill(jetFlavour, jetFlavour);
253  if(abs(jetFlavour)>0 && abs(jetFlavour)<6) nJets[abs(jetFlavour)]+=1; //quarks 1 to 5
254  else if(abs(jetFlavour)==21) nJets[6]+=1; //gluons
255  else if(jetFlavour==20) nJets[7]+=1; //PU
256  else nJets[0]+=1; //NI
257  }
258  else{
259  nJets[0]+=1;
260  }
261  if (edm::isNotFinite(jetTag.second) ) dDiscriminator->fill(jetFlavour, -999.0 );
262  else dDiscriminator->fill(jetFlavour, jetTag.second);
263  dJetRecMomentum->fill(jetFlavour, jetTag.first->p()*jec );
264  dJetRecPt->fill(jetFlavour, jetTag.first->pt()*jec );
265  dJetRecPseudoRapidity->fill(jetFlavour, jetTag.first->eta() );
266  dJetRecPhi->fill(jetFlavour, jetTag.first->phi());
267 }
268 
270  const double & jec,
271  const int & jetFlavour,
272  const float& w)
273 {
274  if (mcPlots_) {
275  dJetFlav->fill(jetFlavour, jetFlavour, w );
276  if(abs(jetFlavour)>0 && abs(jetFlavour)<6) nJets[abs(jetFlavour)]+=1; //quarks 1 to 5
277  else if(abs(jetFlavour)==21) nJets[6]+=1; //gluons
278  else if(jetFlavour==20) nJets[7]+=1; //PU
279  else nJets[0]+=1; //NI
280  }
281  else{
282  nJets[0]+=1;
283  }
284  if (edm::isNotFinite(jetTag.second) ) dDiscriminator->fill(jetFlavour, -999.0 , w );
285  else dDiscriminator->fill(jetFlavour, jetTag.second , w );
286  dJetRecMomentum->fill(jetFlavour, jetTag.first->p()*jec , w );
287  dJetRecPt->fill(jetFlavour, jetTag.first->pt()*jec , w );
288  dJetRecPseudoRapidity->fill(jetFlavour, jetTag.first->eta() , w );
289  dJetRecPhi->fill(jetFlavour, jetTag.first->phi() , w );
290 }
291 
293 {
294  //
295  // final processing:
296  // produce the misid. vs. eff histograms
297  //
298  const std::string & es = theExtensionString;
299  const std::string jetTagDir(es.substr(1));
301  ("discr" + es, "Discriminator", 102, discrStart_, discrEnd_, "b", jetTagDir, mcPlots_, igetter_);
302 
303  effPurFromHistos = new EffPurFromHistos ( dDiscriminator,theExtensionString.substr(1), mcPlots_, ibook_,
305  effPurFromHistos->compute(ibook_);
306 }
307 
308 
int i
Definition: DBlmapReader.cc:9
virtual double p() const
magnitude of momentum vector
void epsPlot(const std::string &name)
void plot(TPad *theCanvas=0)
const double w
Definition: UKUtility.cc:23
const std::string theExtensionString
Base class for all types of Jets.
Definition: Jet.h:20
double endEffPur_
Definition: JetTagPlotter.h:55
JetFloatAssociation::value_type JetTag
Definition: JetTag.h:17
void fill(const int &flavour, const T &variable) const
tuple discriminator
double discrStart_
Definition: JetTagPlotter.h:51
FlavourHistograms< double > * dJetRecPt
Definition: JetTagPlotter.h:76
unsigned int mcPlots_
Definition: JetTagPlotter.h:57
void finalize(DQMStore::IBooker &ibook_, DQMStore::IGetter &igetter_)
FlavourHistograms< double > * dDiscriminator
Definition: JetTagPlotter.h:70
virtual double eta() const
momentum pseudorapidity
virtual double pt() const
transverse momentum
virtual ~JetTagPlotter()
def canvas
Definition: svgfig.py:481
FlavourHistograms< int > * JetMultiplicity
Definition: JetTagPlotter.h:62
void epsPlot(const std::string &name)
bool isNotFinite(T x)
Definition: isFinite.h:10
FlavourHistograms< double > * discriminatorCutEfficScan() const
FlavourHistograms< double > * dJetRecMomentum
Definition: JetTagPlotter.h:73
void plot(TPad *theCanvas=0)
FlavourHistograms< double > * discriminatorNoCutEffic() const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
void settitle(const char *title)
double startEffPur_
Definition: JetTagPlotter.h:54
JetTagPlotter(const std::string &tagName, const EtaPtBin &etaPtBin, const edm::ParameterSet &pSet, const unsigned int &mc, const bool &willFinalize, DQMStore::IBooker &ibook)
void psPlot(const std::string &name)
void epsPlot(const std::string &name)
void setTDRStyle()
Definition: plotscripts.py:87
FlavourHistograms< double > * dJetRecPhi
Definition: JetTagPlotter.h:82
double discrEnd_
Definition: JetTagPlotter.h:52
EffPurFromHistos * effPurFromHistos
Definition: JetTagPlotter.h:65
FlavourHistograms< int > * dJetFlav
Definition: JetTagPlotter.h:67
virtual double phi() const
momentum azimuthal angle
FlavourHistograms< double > * dJetRecPseudoRapidity
Definition: JetTagPlotter.h:79