CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiPixelDigiModule.cc
Go to the documentation of this file.
6 // STL
7 #include <vector>
8 #include <memory>
9 #include <string>
10 #include <iostream>
11 #include <stdlib.h>
12 #include <sstream>
13 #include <cstdio>
14 
15 // Data Formats
20 
21 //
22 // Constructors
23 //
25  ncols_(416),
26  nrows_(160)
27 {
28 }
31  id_(id),
32  ncols_(416),
33  nrows_(160)
34 {
35 }
37 SiPixelDigiModule::SiPixelDigiModule(const uint32_t& id, const int& ncols, const int& nrows) :
38  id_(id),
39  ncols_(ncols),
40  nrows_(nrows)
41 {
42 }
43 //
44 // Destructor
45 //
47 //
48 // Book histograms
49 //
50 void SiPixelDigiModule::book(const edm::ParameterSet& iConfig, int type, bool twoD, bool hiRes, bool reducedSet, bool additInfo) {
51  bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
52  bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
53  bool isHalfModule = false;
54  if(barrel){
55  isHalfModule = PixelBarrelName(DetId(id_)).isHalfModule();
56  }
57 
58  std::string hid;
59  // Get collection name and instantiate Histo Id builder
60  edm::InputTag src = iConfig.getParameter<edm::InputTag>( "src" );
61 
62 
63  // Get DQM interface
64  DQMStore* theDMBE = edm::Service<DQMStore>().operator->();
65 
66  int nbinx=ncols_/2, nbiny=nrows_/2;
67  std::string twodtitle = "Number of Digis (1bin=four pixels)";
68  std::string pxtitle = "Number of Digis (1bin=two columns)";
69  std::string pytitle = "Number of Digis (1bin=two rows)";
70  if(hiRes){
71  nbinx = ncols_;
72  nbiny = nrows_;
73  twodtitle = "Number of Digis (1bin=one pixel)";
74  pxtitle = "Number of Digis (1bin=one column)";
75  pytitle = "Number of Digis (1bin=one row)";
76  }
77 
78  if(type==0){
79  SiPixelHistogramId* theHistogramId = new SiPixelHistogramId( src.label() );
80  // Number of digis
81  hid = theHistogramId->setHistoId("ndigis",id_);
82  meNDigis_ = theDMBE->book1D(hid,"Number of Digis",25,0.,25.);
83  meNDigis_->setAxisTitle("Number of digis",1);
84  // Charge in ADC counts
85  hid = theHistogramId->setHistoId("adc",id_);
86  meADC_ = theDMBE->book1D(hid,"Digi charge",128,0.,256.);
87  meADC_->setAxisTitle("ADC counts",1);
88  if(!reducedSet)
89  {
90  if(twoD){
91  if(additInfo){
92  // 2D hit map
93  hid = theHistogramId->setHistoId("hitmap",id_);
94  mePixDigis_ = theDMBE->book2D(hid,twodtitle,nbinx,0.,float(ncols_),nbiny,0.,float(nrows_));
95  mePixDigis_->setAxisTitle("Columns",1);
96  mePixDigis_->setAxisTitle("Rows",2);
97  }
98  }
99  else{
100  // projections of 2D hit map
101  hid = theHistogramId->setHistoId("hitmap",id_);
102  mePixDigis_px_ = theDMBE->book1D(hid+"_px",pxtitle,nbinx,0.,float(ncols_));
103  mePixDigis_py_ = theDMBE->book1D(hid+"_py",pytitle,nbiny,0.,float(nrows_));
104  mePixDigis_px_->setAxisTitle("Columns",1);
105  mePixDigis_py_->setAxisTitle("Rows",1);
106  }
107  }
108  delete theHistogramId;
109 
110  }
111 
112  if(type==1 && barrel){
113  uint32_t DBladder = PixelBarrelName(DetId(id_)).ladderName();
114  char sladder[80]; sprintf(sladder,"Ladder_%02i",DBladder);
115  hid = src.label() + "_" + sladder;
116  if(isHalfModule) hid += "H";
117  else hid += "F";
118  // Number of digis
119  meNDigisLad_ = theDMBE->book1D("ndigis_"+hid,"Number of Digis",25,0.,25.);
120  meNDigisLad_->setAxisTitle("Number of digis",1);
121  // Charge in ADC counts
122  meADCLad_ = theDMBE->book1D("adc_" + hid,"Digi charge",128,0.,256.);
123  meADCLad_->setAxisTitle("ADC counts",1);
124  if(!reducedSet)
125  {
126  if(twoD){
127  // 2D hit map
128  mePixDigisLad_ = theDMBE->book2D("hitmap_"+hid,twodtitle,nbinx,0.,float(ncols_),nbiny,0.,float(nrows_));
129  mePixDigisLad_->setAxisTitle("Columns",1);
130  mePixDigisLad_->setAxisTitle("Rows",2);
131  }
132  else{
133  // projections of 2D hit map
134  mePixDigisLad_px_ = theDMBE->book1D("hitmap_"+hid+"_px",pxtitle,nbinx,0.,float(ncols_));
135  mePixDigisLad_py_ = theDMBE->book1D("hitmap_"+hid+"_py",pytitle,nbiny,0.,float(nrows_));
136  mePixDigisLad_px_->setAxisTitle("Columns",1);
137  mePixDigisLad_py_->setAxisTitle("Rows",1);
138  }
139  }
140  }
141  if(type==2 && barrel){
142  uint32_t DBlayer = PixelBarrelName(DetId(id_)).layerName();
143  char slayer[80]; sprintf(slayer,"Layer_%i",DBlayer);
144  hid = src.label() + "_" + slayer;
145  if(!additInfo){
146  // Number of digis
147  meNDigisLay_ = theDMBE->book1D("ndigis_"+hid,"Number of Digis",25,0.,25.);
148  meNDigisLay_->setAxisTitle("Number of digis",1);
149  // Charge in ADC counts
150  meADCLay_ = theDMBE->book1D("adc_" + hid,"Digi charge",128,0.,256.);
151  meADCLay_->setAxisTitle("ADC counts",1);
152  }
153  if(!reducedSet){
154  if(twoD || additInfo){
155  // 2D hit map
156  if(isHalfModule){
157  mePixDigisLay_ = theDMBE->book2D("hitmap_"+hid,twodtitle,nbinx,0.,float(ncols_),2*nbiny,0.,float(2*nrows_));
158  }
159  else{
160  mePixDigisLay_ = theDMBE->book2D("hitmap_"+hid,twodtitle,nbinx,0.,float(ncols_),nbiny,0.,float(nrows_));
161  }
162  mePixDigisLay_->setAxisTitle("Columns",1);
163  mePixDigisLay_->setAxisTitle("Rows",2);
164  }
165  if(!twoD && !additInfo){
166  // projections of 2D hit map
167  mePixDigisLay_px_ = theDMBE->book1D("hitmap_"+hid+"_px",pxtitle,nbinx,0.,float(ncols_));
168  if(isHalfModule){
169  mePixDigisLay_py_ = theDMBE->book1D("hitmap_"+hid+"_py",pytitle,2*nbiny,0.,float(2*nrows_));
170  }
171  else{
172  mePixDigisLay_py_ = theDMBE->book1D("hitmap_"+hid+"_py",pytitle,nbiny,0.,float(nrows_));
173  }
174  mePixDigisLay_px_->setAxisTitle("Columns",1);
175  mePixDigisLay_py_->setAxisTitle("Rows",1);
176  }
177  }
178  }
179  if(type==3 && barrel){
180  uint32_t DBmodule = PixelBarrelName(DetId(id_)).moduleName();
181  char smodule[80]; sprintf(smodule,"Ring_%i",DBmodule);
182  hid = src.label() + "_" + smodule;
183  // Number of digis
184  meNDigisPhi_ = theDMBE->book1D("ndigis_"+hid,"Number of Digis",25,0.,25.);
185  meNDigisPhi_->setAxisTitle("Number of digis",1);
186  // Charge in ADC counts
187  meADCPhi_ = theDMBE->book1D("adc_" + hid,"Digi charge",128,0.,256.);
188  meADCPhi_->setAxisTitle("ADC counts",1);
189  if(!reducedSet)
190  {
191  if(twoD){
192 
193  // 2D hit map
194  if(isHalfModule){
195  mePixDigisPhi_ = theDMBE->book2D("hitmap_"+hid,twodtitle,nbinx,0.,float(ncols_),2*nbiny,0.,float(2*nrows_));
196  }
197  else {
198  mePixDigisPhi_ = theDMBE->book2D("hitmap_"+hid,twodtitle,nbinx,0.,float(ncols_),nbiny,0.,float(nrows_));
199  }
200  mePixDigisPhi_->setAxisTitle("Columns",1);
201  mePixDigisPhi_->setAxisTitle("Rows",2);
202  }
203  else{
204  // projections of 2D hit map
205  mePixDigisPhi_px_ = theDMBE->book1D("hitmap_"+hid+"_px",pxtitle,nbinx,0.,float(ncols_));
206  if(isHalfModule){
207  mePixDigisPhi_py_ = theDMBE->book1D("hitmap_"+hid+"_py",pytitle,2*nbiny,0.,float(2*nrows_));
208  }
209  else{
210  mePixDigisPhi_py_ = theDMBE->book1D("hitmap_"+hid+"_py",pytitle,nbiny,0.,float(nrows_));
211  }
212  mePixDigisPhi_px_->setAxisTitle("Columns",1);
213  mePixDigisPhi_py_->setAxisTitle("Rows",1);
214  }
215  }
216  }
217  if(type==4 && endcap){
218  uint32_t blade= PixelEndcapName(DetId(id_)).bladeName();
219 
220  char sblade[80]; sprintf(sblade, "Blade_%02i",blade);
221  hid = src.label() + "_" + sblade;
222  // Number of digis
223  meNDigisBlade_ = theDMBE->book1D("ndigis_"+hid,"Number of Digis",25,0.,25.);
224  meNDigisBlade_->setAxisTitle("Number of digis",1);
225  // Charge in ADC counts
226  meADCBlade_ = theDMBE->book1D("adc_" + hid,"Digi charge",128,0.,256.);
227  meADCBlade_->setAxisTitle("ADC counts",1);
228  }
229  if(type==5 && endcap){
230  uint32_t disk = PixelEndcapName(DetId(id_)).diskName();
231 
232  char sdisk[80]; sprintf(sdisk, "Disk_%i",disk);
233  hid = src.label() + "_" + sdisk;
234  if(!additInfo){
235  // Number of digis
236  meNDigisDisk_ = theDMBE->book1D("ndigis_"+hid,"Number of Digis",25,0.,25.);
237  meNDigisDisk_->setAxisTitle("Number of digis",1);
238  // Charge in ADC counts
239  meADCDisk_ = theDMBE->book1D("adc_" + hid,"Digi charge",128,0.,256.);
240  meADCDisk_->setAxisTitle("ADC counts",1);
241  }
242  if(additInfo){
243  mePixDigisDisk_ = theDMBE->book2D("hitmap_"+hid,twodtitle,260,0.,260.,160,0.,160.);
244  mePixDigisDisk_->setAxisTitle("Columns",1);
245  mePixDigisDisk_->setAxisTitle("Rows",2);
246  }
247  }
248  if(type==6 && endcap){
249  uint32_t panel= PixelEndcapName(DetId(id_)).pannelName();
251  char slab[80]; sprintf(slab, "Panel_%i_Ring_%i",panel, module);
252  hid = src.label() + "_" + slab;
253  // Number of digis
254  meNDigisRing_ = theDMBE->book1D("ndigis_"+hid,"Number of Digis",25,0.,25.);
255  meNDigisRing_->setAxisTitle("Number of digis",1);
256  // Charge in ADC counts
257  meADCRing_ = theDMBE->book1D("adc_" + hid,"Digi charge",128,0.,256.);
258  meADCRing_->setAxisTitle("ADC counts",1);
259  if(!reducedSet)
260  {
261  if(twoD){
262  // 2D hit map
263  mePixDigisRing_ = theDMBE->book2D("hitmap_"+hid,twodtitle,nbinx,0.,float(ncols_),nbiny,0.,float(nrows_));
264  mePixDigisRing_->setAxisTitle("Columns",1);
265  mePixDigisRing_->setAxisTitle("Rows",2);
266  }
267  else{
268  // projections of 2D hit map
269  mePixDigisRing_px_ = theDMBE->book1D("hitmap_"+hid+"_px",pxtitle,nbinx,0.,float(ncols_));
270  mePixDigisRing_py_ = theDMBE->book1D("hitmap_"+hid+"_py",pytitle,nbiny,0.,float(nrows_));
271  mePixDigisRing_px_->setAxisTitle("Columns",1);
272  mePixDigisRing_py_->setAxisTitle("Rows",1);
273  }
274  }
275  }
276 }
277 
278 
279 //
280 // Fill histograms
281 //
283  bool ladon, bool layon, bool phion,
284  bool bladeon, bool diskon, bool ringon,
285  bool twoD, bool reducedSet, bool twoDimModOn, bool twoDimOnlyLayDisk,
286  int &nDigisA, int &nDigisB) {
287  bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
288  bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
289  bool isHalfModule = false;
290  uint32_t DBladder = 0;
291  if(barrel){
292  isHalfModule = PixelBarrelName(DetId(id_)).isHalfModule();
293  DBladder = PixelBarrelName(DetId(id_)).ladderName();
294  }
295 
296  // Get DQM interface
297  DQMStore* theDMBE = edm::Service<DQMStore>().operator->();
298  //std::cout<<"id_ = "<<id_<<" , dmbe="<<theDMBE->pwd()<<std::endl;
299  //std::cout<<"********************"<<std::endl;
300  edm::DetSetVector<PixelDigi>::const_iterator isearch = input.find(id_); // search digis of detid
301 
302  unsigned int numberOfDigisMod = 0;
303  int numberOfDigis[8]; for(int i=0; i!=8; i++) numberOfDigis[i]=0;
304  nDigisA=0; nDigisB=0;
305  if( isearch != input.end() ) { // Not an empty iterator
306 
307  // Look at digis now
309  for(di = isearch->data.begin(); di != isearch->data.end(); di++) {
310  int adc = di->adc(); // charge
311  int col = di->column(); // column
312  int row = di->row(); // row
313  numberOfDigisMod++;
314  bool isHalfModule = false;
315  uint32_t DBladder = 0;
316  if(barrel){
317  isHalfModule = PixelBarrelName(DetId(id_)).isHalfModule();
318  DBladder = PixelBarrelName(DetId(id_)).ladderName();
319  }
321  int DBlayer = PixelBarrelName(DetId(id_)).layerName();
322  if(barrel){
323  if(isHalfModule){
324  if(DBshell==PixelBarrelName::pI||DBshell==PixelBarrelName::pO){
325  numberOfDigis[0]++; nDigisA++;
326  if(DBlayer==1) numberOfDigis[2]++;
327  if(DBlayer==2) numberOfDigis[3]++;
328  if(DBlayer==3) numberOfDigis[4]++;
329  }
330  if(DBshell==PixelBarrelName::mI||DBshell==PixelBarrelName::mO){
331  numberOfDigis[1]++; nDigisB++;
332  if(DBlayer==1) numberOfDigis[5]++;
333  if(DBlayer==2) numberOfDigis[6]++;
334  if(DBlayer==3) numberOfDigis[7]++;
335  }
336  }else{
337  if(row<80){
338  numberOfDigis[0]++; nDigisA++;
339  if(DBlayer==1) numberOfDigis[2]++;
340  if(DBlayer==2) numberOfDigis[3]++;
341  if(DBlayer==3) numberOfDigis[4]++;
342  }else{
343  numberOfDigis[1]++; nDigisB++;
344  if(DBlayer==1) numberOfDigis[5]++;
345  if(DBlayer==2) numberOfDigis[6]++;
346  if(DBlayer==3) numberOfDigis[7]++;
347  }
348  }
349  }
350  if(modon){
351  if(!reducedSet){
352  if(twoD) {
353  if(twoDimModOn) (mePixDigis_)->Fill((float)col,(float)row);
354  }
355  else {
356  (mePixDigis_px_)->Fill((float)col);
357  (mePixDigis_py_)->Fill((float)row);
358  }
359  }
360  (meADC_)->Fill((float)adc);
361  }
362  if(ladon && barrel){
363  (meADCLad_)->Fill((float)adc);
364  if(!reducedSet){
365  if(twoD) (mePixDigisLad_)->Fill((float)col,(float)row);
366  else {
367  (mePixDigisLad_px_)->Fill((float)col);
368  (mePixDigisLad_py_)->Fill((float)row);
369  }
370  }
371  }
372  if((layon || twoDimOnlyLayDisk) && barrel){
373  if(!twoDimOnlyLayDisk) (meADCLay_)->Fill((float)adc);
374  if(!reducedSet){
375  if((layon && twoD) || twoDimOnlyLayDisk){
376  if(isHalfModule && DBladder==1){
377  (mePixDigisLay_)->Fill((float)col,(float)row+80);
378  }
379  else (mePixDigisLay_)->Fill((float)col,(float)row);
380  }
381  if((layon && !twoD) && !twoDimOnlyLayDisk){
382  (mePixDigisLay_px_)->Fill((float)col);
383  if(isHalfModule && DBladder==1) {
384  (mePixDigisLay_py_)->Fill((float)row+80);
385  }
386  else (mePixDigisLay_py_)->Fill((float)row);
387  }
388  }
389  }
390  if(phion && barrel){
391  (meADCPhi_)->Fill((float)adc);
392  if(!reducedSet)
393  {
394  if(twoD){
395  if(isHalfModule && DBladder==1){
396  (mePixDigisPhi_)->Fill((float)col,(float)row+80);
397  }
398  else (mePixDigisPhi_)->Fill((float)col,(float)row);
399  }
400  else {
401  (mePixDigisPhi_px_)->Fill((float)col);
402  if(isHalfModule && DBladder==1) {
403  (mePixDigisPhi_py_)->Fill((float)row+80);
404  }
405  else (mePixDigisPhi_py_)->Fill((float)row);
406  }
407  }
408  }
409  if(bladeon && endcap){
410  (meADCBlade_)->Fill((float)adc);
411  }
412  if((diskon || twoDimOnlyLayDisk) && endcap){
413  if(!twoDimOnlyLayDisk) (meADCDisk_)->Fill((float)adc);
414  if(twoDimOnlyLayDisk){
415  (mePixDigisDisk_)->Fill((float)col,(float)row);
416  }
417  }
418  if(ringon && endcap){
419  (meADCRing_)->Fill((float)adc);
420  if(!reducedSet)
421  {
422  if(twoD) (mePixDigisRing_)->Fill((float)col,(float)row);
423  else {
424  (mePixDigisRing_px_)->Fill((float)col);
425  (mePixDigisRing_py_)->Fill((float)row);
426  }
427  }
428  }
429  }
430  if(modon) (meNDigis_)->Fill((float)numberOfDigisMod);
431  if(ladon && barrel) (meNDigisLad_)->Fill((float)numberOfDigisMod);
432  if(layon && barrel && !twoDimOnlyLayDisk) (meNDigisLay_)->Fill((float)numberOfDigisMod);
433  if(phion && barrel) (meNDigisPhi_)->Fill((float)numberOfDigisMod);
434  if(bladeon && endcap) (meNDigisBlade_)->Fill((float)numberOfDigisMod);
435  if(diskon && endcap && !twoDimOnlyLayDisk) (meNDigisDisk_)->Fill((float)numberOfDigisMod);
436  if(ringon && endcap) (meNDigisRing_)->Fill((float)numberOfDigisMod);
437  if(barrel){
438  MonitorElement* me=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCOMB_Barrel");
439  if(me) me->Fill((float)numberOfDigisMod);
440  me=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_Barrel");
441  if(me){ if(numberOfDigis[0]>0) me->Fill((float)numberOfDigis[0]); if(numberOfDigis[1]>0) me->Fill((float)numberOfDigis[1]); }
442  me=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelL1");
443  if(me){ if(numberOfDigis[2]>0) me->Fill((float)numberOfDigis[2]); }
444  me=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelL2");
445  if(me){ if(numberOfDigis[3]>0) me->Fill((float)numberOfDigis[3]); }
446  me=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelL3");
447  if(me){ if(numberOfDigis[4]>0) me->Fill((float)numberOfDigis[4]); }
448  }else if(endcap){
449  MonitorElement* me=theDMBE->get("Pixel/Endcap/ALLMODS_ndigisCOMB_Endcap");
450  if(me) me->Fill((float)numberOfDigisMod);
451  }
452  }
453 
454  //std::cout<<"numberOfDigis for this module: "<<numberOfDigis<<std::endl;
455  return numberOfDigisMod;
456 }
int adc(sample_type sample)
get the ADC sample (12 bits)
int plaquetteName() const
plaquetteId (in pannel)
type
Definition: HCALResponse.h:22
T getParameter(std::string const &) const
int fill(const edm::DetSetVector< PixelDigi > &input, const bool modon, const bool ladon, const bool layon, const bool phion, const bool bladeon, const bool diskon, const bool ringon, const bool twoD, const bool reducedSet, const bool twoDimModOn, const bool twoDimOnlyLayDisk, int &nDigisA, int &nDigisB)
Fill histograms.
int i
Definition: DBlmapReader.cc:9
MonitorElement * meNDigisRing_
MonitorElement * mePixDigisLad_py_
MonitorElement * mePixDigis_
MonitorElement * mePixDigisPhi_py_
iterator find(det_id_type id)
Definition: DetSetVector.h:285
int moduleName() const
module id (index in z)
MonitorElement * meADCRing_
MonitorElement * meNDigis_
MonitorElement * mePixDigisRing_px_
MonitorElement * mePixDigis_py_
~SiPixelDigiModule()
Destructor.
MonitorElement * meADC_
MonitorElement * mePixDigisDisk_
void Fill(long long x)
MonitorElement * meNDigisBlade_
int bladeName() const
blade id
MonitorElement * meADCDisk_
MonitorElement * mePixDigisPhi_px_
bool isHalfModule() const
full or half module
MonitorElement * mePixDigisRing_py_
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
MonitorElement * mePixDigisLay_py_
MonitorElement * meADCLad_
MonitorElement * meADCBlade_
MonitorElement * meNDigisLay_
SiPixelDigiModule()
Default constructor.
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. &quot;my/long/dir/my_histo&quot;)
Definition: DQMStore.cc:1265
MonitorElement * mePixDigisLad_
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:39
iterator end()
Return the off-the-end iterator.
Definition: DetSetVector.h:356
MonitorElement * meADCLay_
tuple input
Definition: collect_tpl.py:10
std::string setHistoId(std::string variable, uint32_t &rawId)
Set Histogram Id.
Definition: DetId.h:20
int ladderName() const
ladder id (index in phi)
MonitorElement * mePixDigis_px_
int layerName() const
layer id
MonitorElement * mePixDigisLad_px_
Shell shell() const
MonitorElement * mePixDigisLay_
std::string const & label() const
Definition: InputTag.h:25
MonitorElement * meNDigisPhi_
int pannelName() const
pannel id
MonitorElement * mePixDigisRing_
MonitorElement * meADCPhi_
int diskName() const
disk id
iterator begin()
Return an iterator to the first DetSet.
Definition: DetSetVector.h:341
MonitorElement * mePixDigisPhi_
collection_type::const_iterator const_iterator
Definition: DetSet.h:32
collection_type::const_iterator const_iterator
Definition: DetSetVector.h:106
MonitorElement * meNDigisDisk_
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
Definition: vlib.h:209
MonitorElement * meNDigisLad_
MonitorElement * mePixDigisLay_px_
tuple src
Definition: align_tpl.py:87
void book(const edm::ParameterSet &iConfig, int type=0, bool twoD=true, bool hiRes=false, bool reducedSet=false, bool additInfo=false)
Book histograms.