CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiPixelClusterModule.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: SiPixelMonitorCluster
4 // Class: SiPixelClusterSource
5 //
13 //
14 // Original Author: Vincenzo Chiochia & Andrew York
15 // Created:
16 //
17 //
18 // Updated by: Lukas Wehrli
19 // for pixel offline DQM
25 // STL
26 #include <vector>
27 #include <memory>
28 #include <string>
29 #include <iostream>
30 #include <stdlib.h>
31 
32 // Data Formats
39 //
40 // Constructors
41 //
43  ncols_(416),
44  nrows_(160) { }
47  id_(id),
48  ncols_(416),
49  nrows_(160)
50 {
51 }
53 SiPixelClusterModule::SiPixelClusterModule(const uint32_t& id, const int& ncols, const int& nrows) :
54  id_(id),
55  ncols_(ncols),
56  nrows_(nrows)
57 {
58 }
59 //
60 // Destructor
61 //
63 //
64 // Book histograms
65 //
66 void SiPixelClusterModule::book(const edm::ParameterSet& iConfig, int type, bool twoD, bool reducedSet, bool isUpgrade) {
67 
68  bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
69  bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
70  bool isHalfModule = false;
71  if(barrel){
72  if (!isUpgrade) {
73  isHalfModule = PixelBarrelName(DetId(id_)).isHalfModule();
74  } else if (isUpgrade) {
75  isHalfModule = PixelBarrelNameUpgrade(DetId(id_)).isHalfModule();
76  }
77  }
78  int nbinx = ncols_/2;
79  int nbiny = nrows_/2;
80 
81  std::string hid;
82  // Get collection name and instantiate Histo Id builder
83  edm::InputTag src = iConfig.getParameter<edm::InputTag>( "src" );
84  // Get DQM interface
85  DQMStore* theDMBE = edm::Service<DQMStore>().operator->();
86  if(type==0){
87  SiPixelHistogramId* theHistogramId = new SiPixelHistogramId( src.label() );
88  // Number of clusters
89  //hid = theHistogramId->setHistoId("nclusters",id_);
90  //meNClusters_ = theDMBE->book1D(hid,"Number of Clusters",8,0.,8.);
91  //meNClusters_->setAxisTitle("Number of Clusters",1);
92  // Total cluster charge in MeV
93  //hid = theHistogramId->setHistoId("charge",id_);
94  //meCharge_ = theDMBE->book1D(hid,"Cluster charge",100,0.,200.);
95  //meCharge_->setAxisTitle("Charge [kilo electrons]",1);
96  // Total cluster size (in pixels)
97  //hid = theHistogramId->setHistoId("size",id_);
98  //meSize_ = theDMBE->book1D(hid,"Total cluster size",30,0.,30.);
99  //meSize_->setAxisTitle("Cluster size [number of pixels]",1);
100  if(!reducedSet){
101  // Lowest cluster row
102  hid = theHistogramId->setHistoId("minrow",id_);
103  meMinRow_ = theDMBE->book1D(hid,"Lowest cluster row",200,0.,200.);
104  meMinRow_->setAxisTitle("Lowest cluster row",1);
105  // Highest cluster row
106  hid = theHistogramId->setHistoId("maxrow",id_);
107  meMaxRow_ = theDMBE->book1D(hid,"Highest cluster row",200,0.,200.);
108  meMaxRow_->setAxisTitle("Highest cluster row",1);
109  // Lowest cluster column
110  hid = theHistogramId->setHistoId("mincol",id_);
111  meMinCol_ = theDMBE->book1D(hid,"Lowest cluster column",500,0.,500.);
112  meMinCol_->setAxisTitle("Lowest cluster column",1);
113  // Highest cluster column
114  hid = theHistogramId->setHistoId("maxcol",id_);
115  meMaxCol_ = theDMBE->book1D(hid,"Highest cluster column",500,0.,500.);
116  meMaxCol_->setAxisTitle("Highest cluster column",1);
117  // Cluster barycenter X position
118  hid = theHistogramId->setHistoId("x",id_);
119  meX_ = theDMBE->book1D(hid,"Cluster barycenter X (row #)",200,0.,200.);
120  meX_->setAxisTitle("Barycenter x-position [row #]",1);
121  // Cluster barycenter Y position
122  hid = theHistogramId->setHistoId("y",id_);
123  meY_ = theDMBE->book1D(hid,"Cluster barycenter Y (column #)",500,0.,500.);
124  meY_->setAxisTitle("Barycenter y-position [column #]",1);
125  // Cluster width on the x-axis
126  hid = theHistogramId->setHistoId("sizeX",id_);
127  meSizeX_ = theDMBE->book1D(hid,"Cluster x-width (rows)",10,0.,10.);
128  meSizeX_->setAxisTitle("Cluster x-size [rows]",1);
129  // Cluster width on the y-axis
130  hid = theHistogramId->setHistoId("sizeY",id_);
131  meSizeY_ = theDMBE->book1D(hid,"Cluster y-width (columns)",15,0.,15.);
132  meSizeY_->setAxisTitle("Cluster y-size [columns]",1);
133  int nbinx = ncols_/2;
134  int nbiny = nrows_/2;
135  hid = theHistogramId->setHistoId("hitmap",id_);
136  if(twoD){
137  // 2D hit map
138  mePixClusters_ = theDMBE->book2D(hid,"Number of Clusters (1bin=four pixels)",nbinx,0.,float(ncols_),nbiny,0.,float(nrows_));
139  mePixClusters_->setAxisTitle("Columns",1);
140  mePixClusters_->setAxisTitle("Rows",2);
141  }else{
142  // projections of hitmap
143  mePixClusters_px_ = theDMBE->book1D(hid+"_px","Number of Clusters (1bin=two columns)",nbinx,0.,float(ncols_));
144  mePixClusters_py_ = theDMBE->book1D(hid+"_py","Number of Clusters (1bin=two rows)",nbiny,0.,float(nrows_));
145  mePixClusters_px_->setAxisTitle("Columns",1);
146  mePixClusters_py_->setAxisTitle("Rows",1);
147  }
148  }
149  delete theHistogramId;
150  }
151 
152  //**
153  if(barrel && type==7){
154  hid = src.label() + "_Barrel";
155  meSizeYvsEtaBarrel_= theDMBE->book2D("sizeYvsEta_" + hid,"Cluster size along beamline vs. Cluster position #eta",60,-3.,3.,40,0.,40.);
156  meSizeYvsEtaBarrel_->setAxisTitle("Cluster #eta",1);
157  meSizeYvsEtaBarrel_->setAxisTitle("Cluster size along beamline [number of pixels]",2);
158  }
159  if(type==1 && barrel){
160  uint32_t DBladder;
161  if (!isUpgrade) { DBladder = PixelBarrelName(DetId(id_)).ladderName(); }
162  else { DBladder = PixelBarrelNameUpgrade(DetId(id_)).ladderName(); }
163  char sladder[80]; sprintf(sladder,"Ladder_%02i",DBladder);
164  hid = src.label() + "_" + sladder;
165  if(isHalfModule) hid += "H";
166  else hid += "F";
167  // Number of clusters
168  meNClustersLad_ = theDMBE->book1D("nclusters_" + hid,"Number of Clusters",8,0.,8.);
169  meNClustersLad_->setAxisTitle("Number of Clusters",1);
170  // Total cluster charge in MeV
171  meChargeLad_ = theDMBE->book1D("charge_" + hid,"Cluster charge",100,0.,200.);
172  meChargeLad_->setAxisTitle("Charge [kilo electrons]",1);
173  // Total cluster size (in pixels)
174  meSizeLad_ = theDMBE->book1D("size_" + hid,"Total cluster size",30,0.,30.);
175  meSizeLad_->setAxisTitle("Cluster size [number of pixels]",1);
176  if(!reducedSet){
177  // Lowest cluster row
178  meMinRowLad_ = theDMBE->book1D("minrow_" + hid,"Lowest cluster row",200,0.,200.);
179  meMinRowLad_->setAxisTitle("Lowest cluster row",1);
180  // Highest cluster row
181  meMaxRowLad_ = theDMBE->book1D("maxrow_" + hid,"Highest cluster row",200,0.,200.);
182  meMaxRowLad_->setAxisTitle("Highest cluster row",1);
183  // Lowest cluster column
184  meMinColLad_ = theDMBE->book1D("mincol_" + hid,"Lowest cluster column",500,0.,500.);
185  meMinColLad_->setAxisTitle("Lowest cluster column",1);
186  // Highest cluster column
187  meMaxColLad_ = theDMBE->book1D("maxcol_" + hid,"Highest cluster column",500,0.,500.);
188  meMaxColLad_->setAxisTitle("Highest cluster column",1);
189  // Cluster barycenter X position
190  meXLad_ = theDMBE->book1D("x_" + hid,"Cluster barycenter X (row #)",200,0.,200.);
191  meXLad_->setAxisTitle("Barycenter x-position [row #]",1);
192  // Cluster barycenter Y position
193  meYLad_ = theDMBE->book1D("y_" + hid,"Cluster barycenter Y (column #)",500,0.,500.);
194  meYLad_->setAxisTitle("Barycenter y-position [column #]",1);
195  // Cluster width on the x-axis
196  meSizeXLad_ = theDMBE->book1D("sizeX_" + hid,"Cluster x-width (rows)",10,0.,10.);
197  meSizeXLad_->setAxisTitle("Cluster x-size [rows]",1);
198  // Cluster width on the y-axis
199  meSizeYLad_ = theDMBE->book1D("sizeY_" + hid,"Cluster y-width (columns)",15,0.,15.);
200  meSizeYLad_->setAxisTitle("Cluster y-size [columns]",1);
201  if(twoD){
202  // 2D hit map
203  mePixClustersLad_ = theDMBE->book2D("hitmap_" + hid,"Number of Clusters (1bin=four pixels)",nbinx,0.,float(ncols_),nbiny,0.,float(nrows_));
204  mePixClustersLad_->setAxisTitle("Columns",1);
205  mePixClustersLad_->setAxisTitle("Rows",2);
206  }else{
207  // projections of hitmap
208  mePixClustersLad_px_ = theDMBE->book1D("hitmap_" + hid+"_px","Number of Clusters (1bin=two columns)",nbinx,0.,float(ncols_));
209  mePixClustersLad_py_ = theDMBE->book1D("hitmap_" + hid+"_py","Number of Clusters (1bin=two rows)",nbiny,0.,float(nrows_));
210  mePixClustersLad_px_->setAxisTitle("Columns",1);
212  }
213  }
214  }
215 
216  if(type==2 && barrel){
217 
218  uint32_t DBlayer;
219  if (!isUpgrade) { DBlayer = PixelBarrelName(DetId(id_)).layerName(); }
220  else { DBlayer = PixelBarrelNameUpgrade(DetId(id_)).layerName(); }
221  char slayer[80]; sprintf(slayer,"Layer_%i",DBlayer);
222  hid = src.label() + "_" + slayer;
223  // Number of clusters
224  meNClustersLay_ = theDMBE->book1D("nclusters_" + hid,"Number of Clusters",8,0.,8.);
225  meNClustersLay_->setAxisTitle("Number of Clusters",1);
226  // Total cluster charge in MeV
227  meChargeLay_ = theDMBE->book1D("charge_" + hid,"Cluster charge",100,0.,200.);
228  meChargeLay_->setAxisTitle("Charge [kilo electrons]",1);
229  // Total cluster size (in pixels)
230  meSizeLay_ = theDMBE->book1D("size_" + hid,"Total cluster size",30,0.,30.);
231  meSizeLay_->setAxisTitle("Cluster size [in pixels]",1);
232  if(!reducedSet){
233  // Lowest cluster row
234  meMinRowLay_ = theDMBE->book1D("minrow_" + hid,"Lowest cluster row",200,0.,200.);
235  meMinRowLay_->setAxisTitle("Lowest cluster row",1);
236  // Highest cluster row
237  meMaxRowLay_ = theDMBE->book1D("maxrow_" + hid,"Highest cluster row",200,0.,200.);
238  meMaxRowLay_->setAxisTitle("Highest cluster row",1);
239  // Lowest cluster column
240  meMinColLay_ = theDMBE->book1D("mincol_" + hid,"Lowest cluster column",500,0.,500.);
241  meMinColLay_->setAxisTitle("Lowest cluster column",1);
242  // Highest cluster column
243  meMaxColLay_ = theDMBE->book1D("maxcol_" + hid,"Highest cluster column",500,0.,500.);
244  meMaxColLay_->setAxisTitle("Highest cluster column",1);
245  // Cluster barycenter X position
246  meXLay_ = theDMBE->book1D("x_" + hid,"Cluster barycenter X (row #)",200,0.,200.);
247  meXLay_->setAxisTitle("Barycenter x-position [row #]",1);
248  // Cluster barycenter Y position
249  meYLay_ = theDMBE->book1D("y_" + hid,"Cluster barycenter Y (column #)",500,0.,500.);
250  meYLay_->setAxisTitle("Barycenter y-position [column #]",1);
251  // Cluster width on the x-axis
252  meSizeXLay_ = theDMBE->book1D("sizeX_" + hid,"Cluster x-width (rows)",10,0.,10.);
253  meSizeXLay_->setAxisTitle("Cluster x-size [rows]",1);
254  // Cluster width on the y-axis
255  meSizeYLay_ = theDMBE->book1D("sizeY_" + hid,"Cluster y-width (columns)",15,0.,15.);
256  meSizeYLay_->setAxisTitle("Cluster y-size [columns]",1);
257  if(twoD){
258  // 2D hit map
259  if(isHalfModule){
260  mePixClustersLay_ = theDMBE->book2D("hitmap_" + hid,"Number of Clusters (1bin=four pixels)",nbinx,0.,float(ncols_),2*nbiny,0.,float(2*nrows_));
261  }else{
262  mePixClustersLay_ = theDMBE->book2D("hitmap_" + hid,"Number of Clusters (1bin=four pixels)",nbinx,0.,float(ncols_),nbiny,0.,float(nrows_));
263  }
264  mePixClustersLay_->setAxisTitle("Columns",1);
265  mePixClustersLay_->setAxisTitle("Rows",2);
266  }else{
267  // projections of hitmap
268  mePixClustersLay_px_ = theDMBE->book1D("hitmap_" + hid+"_px","Number of Clusters (1bin=two columns)",nbinx,0.,float(ncols_));
269  if(isHalfModule){
270  mePixClustersLay_py_ = theDMBE->book1D("hitmap_" + hid+"_py","Number of Clusters (1bin=two rows)",2*nbiny,0.,float(2*nrows_));
271  }else{
272  mePixClustersLay_py_ = theDMBE->book1D("hitmap_" + hid+"_py","Number of Clusters (1bin=two rows)",nbiny,0.,float(nrows_));
273  }
274  mePixClustersLay_px_->setAxisTitle("Columns",1);
276  }
277  }
278  }
279  if(type==3 && barrel){
280  uint32_t DBmodule;
281  if (!isUpgrade) { DBmodule = PixelBarrelName(DetId(id_)).moduleName(); }
282  else { DBmodule = PixelBarrelNameUpgrade(DetId(id_)).moduleName(); }
283  char smodule[80]; sprintf(smodule,"Ring_%i",DBmodule);
284  hid = src.label() + "_" + smodule;
285  // Number of clusters
286  meNClustersPhi_ = theDMBE->book1D("nclusters_" + hid,"Number of Clusters",8,0.,8.);
287  meNClustersPhi_->setAxisTitle("Number of Clusters",1);
288  // Total cluster charge in MeV
289  meChargePhi_ = theDMBE->book1D("charge_" + hid,"Cluster charge",100,0.,200.);
290  meChargePhi_->setAxisTitle("Charge [kilo electrons]",1);
291  // Total cluster size (in pixels)
292  meSizePhi_ = theDMBE->book1D("size_" + hid,"Total cluster size",30,0.,30.);
293  meSizePhi_->setAxisTitle("Cluster size [number of pixels]",1);
294  if(!reducedSet){
295  // Lowest cluster row
296  meMinRowPhi_ = theDMBE->book1D("minrow_" + hid,"Lowest cluster row",200,0.,200.);
297  meMinRowPhi_->setAxisTitle("Lowest cluster row",1);
298  // Highest cluster row
299  meMaxRowPhi_ = theDMBE->book1D("maxrow_" + hid,"Highest cluster row",200,0.,200.);
300  meMaxRowPhi_->setAxisTitle("Highest cluster row",1);
301  // Lowest cluster column
302  meMinColPhi_ = theDMBE->book1D("mincol_" + hid,"Lowest cluster column",500,0.,500.);
303  meMinColPhi_->setAxisTitle("Lowest cluster column",1);
304  // Highest cluster column
305  meMaxColPhi_ = theDMBE->book1D("maxcol_" + hid,"Highest cluster column",500,0.,500.);
306  meMaxColPhi_->setAxisTitle("Highest cluster column",1);
307  // Cluster barycenter X position
308  meXPhi_ = theDMBE->book1D("x_" + hid,"Cluster barycenter X (row #)",200,0.,200.);
309  meXPhi_->setAxisTitle("Barycenter x-position [row #]",1);
310  // Cluster barycenter Y position
311  meYPhi_ = theDMBE->book1D("y_" + hid,"Cluster barycenter Y (column #)",500,0.,500.);
312  meYPhi_->setAxisTitle("Barycenter y-position [column #]",1);
313  // Cluster width on the x-axis
314  meSizeXPhi_ = theDMBE->book1D("sizeX_" + hid,"Cluster x-width (rows)",10,0.,10.);
315  meSizeXPhi_->setAxisTitle("Cluster x-size [rows]",1);
316  // Cluster width on the y-axis
317  meSizeYPhi_ = theDMBE->book1D("sizeY_" + hid,"Cluster y-width (columns)",15,0.,15.);
318  meSizeYPhi_->setAxisTitle("Cluster y-size [columns]",1);
319  if(twoD){
320  // 2D hit map
321  if(isHalfModule){
322  mePixClustersPhi_ = theDMBE->book2D("hitmap_" + hid,"Number of Clusters (1bin=four pixels)",nbinx,0.,float(ncols_),2*nbiny,0.,float(2*nrows_));
323  }else{
324  mePixClustersPhi_ = theDMBE->book2D("hitmap_" + hid,"Number of Clusters (1bin=four pixels)",nbinx,0.,float(ncols_),nbiny,0.,float(nrows_));
325  }
326  mePixClustersPhi_->setAxisTitle("Columns",1);
327  mePixClustersPhi_->setAxisTitle("Rows",2);
328  }else{
329  // projections of hitmap
330  mePixClustersPhi_px_ = theDMBE->book1D("hitmap_" + hid+"_px","Number of Clusters (1bin=two columns)",nbinx,0.,float(ncols_));
331  if(isHalfModule){
332  mePixClustersPhi_py_ = theDMBE->book1D("hitmap_" + hid+"_py","Number of Clusters (1bin=two rows)",2*nbiny,0.,float(2*nrows_));
333  }else{
334  mePixClustersPhi_py_ = theDMBE->book1D("hitmap_" + hid+"_py","Number of Clusters (1bin=two rows)",nbiny,0.,float(nrows_));
335  }
336  mePixClustersPhi_px_->setAxisTitle("Columns",1);
338  }
339  }
340  }
341 
342  if(type==4 && endcap){
343  uint32_t blade;
344  if (!isUpgrade) { blade = PixelEndcapName(DetId(id_)).bladeName(); }
345  else { blade = PixelEndcapNameUpgrade(DetId(id_)).bladeName(); }
346 
347  char sblade[80]; sprintf(sblade, "Blade_%02i",blade);
348  hid = src.label() + "_" + sblade;
349  // Number of clusters
350  meNClustersBlade_ = theDMBE->book1D("nclusters_" + hid,"Number of Clusters",8,0.,8.);
351  meNClustersBlade_->setAxisTitle("Number of Clusters",1);
352  // Total cluster charge in MeV
353  meChargeBlade_ = theDMBE->book1D("charge_" + hid,"Cluster charge",100,0.,200.);
354  meChargeBlade_->setAxisTitle("Charge [kilo electrons]",1);
355  // Total cluster size (in pixels)
356  meSizeBlade_ = theDMBE->book1D("size_" + hid,"Total cluster size",30,0.,30.);
357  meSizeBlade_->setAxisTitle("Cluster size [number of pixels]",1);
358  if(!reducedSet){
359  // Lowest cluster row
360  meMinRowBlade_ = theDMBE->book1D("minrow_" + hid,"Lowest cluster row",200,0.,200.);
361  meMinRowBlade_->setAxisTitle("Lowest cluster row",1);
362  // Highest cluster row
363  meMaxRowBlade_ = theDMBE->book1D("maxrow_" + hid,"Highest cluster row",200,0.,200.);
364  meMaxRowBlade_->setAxisTitle("Highest cluster row",1);
365  // Lowest cluster column
366  meMinColBlade_ = theDMBE->book1D("mincol_" + hid,"Lowest cluster column",500,0.,500.);
367  meMinColBlade_->setAxisTitle("Lowest cluster column",1);
368  // Highest cluster column
369  meMaxColBlade_ = theDMBE->book1D("maxcol_" + hid,"Highest cluster column",500,0.,500.);
370  meMaxColBlade_->setAxisTitle("Highest cluster column",1);
371  // Cluster barycenter X position
372  meXBlade_ = theDMBE->book1D("x_" + hid,"Cluster barycenter X (row #)",200,0.,200.);
373  meXBlade_->setAxisTitle("Barycenter x-position [row #]",1);
374  // Cluster barycenter Y position
375  meYBlade_ = theDMBE->book1D("y_" + hid,"Cluster barycenter Y (column #)",500,0.,500.);
376  meYBlade_->setAxisTitle("Barycenter y-position [column #]",1);
377  // Cluster width on the x-axis
378  meSizeXBlade_ = theDMBE->book1D("sizeX_" + hid,"Cluster x-width (rows)",10,0.,10.);
379  meSizeXBlade_->setAxisTitle("Cluster x-size [rows]",1);
380  // Cluster width on the y-axis
381  meSizeYBlade_ = theDMBE->book1D("sizeY_" + hid,"Cluster y-width (columns)",15,0.,15.);
382  meSizeYBlade_->setAxisTitle("Cluster y-size [columns]",1);
383  }
384  }
385  if(type==5 && endcap){
386  uint32_t disk;
387  if (!isUpgrade) { disk = PixelEndcapName(DetId(id_)).diskName(); }
388  else { disk = PixelEndcapNameUpgrade(DetId(id_)).diskName(); }
389 
390  char sdisk[80]; sprintf(sdisk, "Disk_%i",disk);
391  hid = src.label() + "_" + sdisk;
392  // Number of clusters
393  meNClustersDisk_ = theDMBE->book1D("nclusters_" + hid,"Number of Clusters",8,0.,8.);
394  meNClustersDisk_->setAxisTitle("Number of Clusters",1);
395  // Total cluster charge in MeV
396  meChargeDisk_ = theDMBE->book1D("charge_" + hid,"Cluster charge",100,0.,200.);
397  meChargeDisk_->setAxisTitle("Charge [kilo electrons]",1);
398  // Total cluster size (in pixels)
399  meSizeDisk_ = theDMBE->book1D("size_" + hid,"Total cluster size",30,0.,30.);
400  meSizeDisk_->setAxisTitle("Cluster size [number of pixels]",1);
401  if(!reducedSet){
402  // Lowest cluster row
403  meMinRowDisk_ = theDMBE->book1D("minrow_" + hid,"Lowest cluster row",200,0.,200.);
404  meMinRowDisk_->setAxisTitle("Lowest cluster row",1);
405  // Highest cluster row
406  meMaxRowDisk_ = theDMBE->book1D("maxrow_" + hid,"Highest cluster row",200,0.,200.);
407  meMaxRowDisk_->setAxisTitle("Highest cluster row",1);
408  // Lowest cluster column
409  meMinColDisk_ = theDMBE->book1D("mincol_" + hid,"Lowest cluster column",500,0.,500.);
410  meMinColDisk_->setAxisTitle("Lowest cluster column",1);
411  // Highest cluster column
412  meMaxColDisk_ = theDMBE->book1D("maxcol_" + hid,"Highest cluster column",500,0.,500.);
413  meMaxColDisk_->setAxisTitle("Highest cluster column",1);
414  // Cluster barycenter X position
415  meXDisk_ = theDMBE->book1D("x_" + hid,"Cluster barycenter X (row #)",200,0.,200.);
416  meXDisk_->setAxisTitle("Barycenter x-position [row #]",1);
417  // Cluster barycenter Y position
418  meYDisk_ = theDMBE->book1D("y_" + hid,"Cluster barycenter Y (column #)",500,0.,500.);
419  meYDisk_->setAxisTitle("Barycenter y-position [column #]",1);
420  // Cluster width on the x-axis
421  meSizeXDisk_ = theDMBE->book1D("sizeX_" + hid,"Cluster x-width (rows)",10,0.,10.);
422  meSizeXDisk_->setAxisTitle("Cluster x-size [rows]",1);
423  // Cluster width on the y-axis
424  meSizeYDisk_ = theDMBE->book1D("sizeY_" + hid,"Cluster y-width (columns)",15,0.,15.);
425  meSizeYDisk_->setAxisTitle("Cluster y-size [columns]",1);
426  }
427  }
428 
429  if(type==6 && endcap){
430  uint32_t panel;
431  uint32_t module;
432  if (!isUpgrade) {
433  panel= PixelEndcapName(DetId(id_)).pannelName();
435  } else {
438  }
439 
440  char slab[80]; sprintf(slab, "Panel_%i_Ring_%i",panel, module);
441  hid = src.label() + "_" + slab;
442  // Number of clusters
443  meNClustersRing_ = theDMBE->book1D("nclusters_" + hid,"Number of Clusters",8,0.,8.);
444  meNClustersRing_->setAxisTitle("Number of Clusters",1);
445  // Total cluster charge in MeV
446  meChargeRing_ = theDMBE->book1D("charge_" + hid,"Cluster charge",100,0.,200.);
447  meChargeRing_->setAxisTitle("Charge [kilo electrons]",1);
448  // Total cluster size (in pixels)
449  meSizeRing_ = theDMBE->book1D("size_" + hid,"Total cluster size",30,0.,30.);
450  meSizeRing_->setAxisTitle("Cluster size [number of pixels]",1);
451  if(!reducedSet){
452  // Lowest cluster row
453  meMinRowRing_ = theDMBE->book1D("minrow_" + hid,"Lowest cluster row",200,0.,200.);
454  meMinRowRing_->setAxisTitle("Lowest cluster row",1);
455  // Highest cluster row
456  meMaxRowRing_ = theDMBE->book1D("maxrow_" + hid,"Highest cluster row",200,0.,200.);
457  meMaxRowRing_->setAxisTitle("Highest cluster row",1);
458  // Lowest cluster column
459  meMinColRing_ = theDMBE->book1D("mincol_" + hid,"Lowest cluster column",500,0.,500.);
460  meMinColRing_->setAxisTitle("Lowest cluster column",1);
461  // Highest cluster column
462  meMaxColRing_ = theDMBE->book1D("maxcol_" + hid,"Highest cluster column",500,0.,500.);
463  meMaxColRing_->setAxisTitle("Highest cluster column",1);
464  // Cluster barycenter X position
465  meXRing_ = theDMBE->book1D("x_" + hid,"Cluster barycenter X (row #)",200,0.,200.);
466  meXRing_->setAxisTitle("Barycenter x-position [row #]",1);
467  // Cluster barycenter Y position
468  meYRing_ = theDMBE->book1D("y_" + hid,"Cluster barycenter Y (column #)",500,0.,500.);
469  meYRing_->setAxisTitle("Barycenter y-position [column #]",1);
470  // Cluster width on the x-axis
471  meSizeXRing_ = theDMBE->book1D("sizeX_" + hid,"Cluster x-width (rows)",10,0.,10.);
472  meSizeXRing_->setAxisTitle("Cluster x-size [rows]",1);
473  // Cluster width on the y-axis
474  meSizeYRing_ = theDMBE->book1D("sizeY_" + hid,"Cluster y-width (columns)",15,0.,15.);
475  meSizeYRing_->setAxisTitle("Cluster y-size [columns]",1);
476  if(twoD){
477  // 2D hit map
478  mePixClustersRing_ = theDMBE->book2D("hitmap_" + hid,"Number of Clusters (1bin=four pixels)",nbinx,0.,float(ncols_),nbiny,0.,float(nrows_));
479  mePixClustersRing_->setAxisTitle("Columns",1);
480  mePixClustersRing_->setAxisTitle("Rows",2);
481  }else{
482  // projections of hitmap
483  mePixClustersRing_px_ = theDMBE->book1D("hitmap_" + hid+"_px","Number of Clusters (1bin=two columns)",nbinx,0.,float(ncols_));
484  mePixClustersRing_py_ = theDMBE->book1D("hitmap_" + hid+"_py","Number of Clusters (1bin=two rows)",nbiny,0.,float(nrows_));
485  mePixClustersRing_px_->setAxisTitle("Columns",1);
487  }
488  }
489  }
490 
491 }
492 //
493 // Fill histograms
494 //
495 int SiPixelClusterModule::fill(const edmNew::DetSetVector<SiPixelCluster>& input, const TrackerGeometry* tracker,bool modon, bool ladon, bool layon, bool phion, bool bladeon, bool diskon, bool ringon, bool twoD, bool reducedSet, bool smileyon, bool isUpgrade) {
496 
497  bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
498  bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
499 
500  edmNew::DetSetVector<SiPixelCluster>::const_iterator isearch = input.find(id_); // search clusters of detid
501  unsigned int numberOfClusters = 0;
502  unsigned int numberOfFpixClusters = 0;
503 
504  if( isearch != input.end() ) { // Not an empty iterator
505 
506 
507  // Look at clusters now
509  //for(di = isearch->data.begin(); di != isearch->data.end(); di++) {
510  for(di = isearch->begin(); di != isearch->end(); di++) {
511  numberOfClusters++;
512  if(endcap) numberOfFpixClusters++;
513  float charge = 0.001*(di->charge()); // total charge of cluster
514  float x = di->x(); // barycenter x position
515  float y = di->y(); // barycenter y position
516  int size = di->size(); // total size of cluster (in pixels)
517  int sizeX = di->sizeX(); // size of cluster in x-direction
518  int sizeY = di->sizeY(); // size of cluster in y-direction
519  int minPixelRow = di->minPixelRow(); // min x index
520  int maxPixelRow = di->maxPixelRow(); // max x index
521  int minPixelCol = di->minPixelCol(); // min y index
522  int maxPixelCol = di->maxPixelCol(); // max y index
523  // bool edgeHitX = di->edgeHitX(); // records if a cluster is at the x-edge of the detector
524  // bool edgeHitY = di->edgeHitY(); // records if a cluster is at the y-edge of the detector
525 
526 
527  //**
528  // edm::ESHandle<TrackerGeometry> pDD;
529  // es.get<TrackerDigiGeometryRecord> ().get (pDD);
530  // const TrackerGeometry* tracker = &(* pDD);
531  const PixelGeomDetUnit* theGeomDet = dynamic_cast<const PixelGeomDetUnit*> ( tracker->idToDet(DetId(id_)) );
532  //**
533  const PixelTopology * topol = &(theGeomDet->specificTopology());
534  LocalPoint clustlp = topol->localPosition( MeasurementPoint(x, y) );
535  GlobalPoint clustgp = theGeomDet->surface().toGlobal( clustlp );
536  //**end
537  //if(modon){
538  //if(modon) (meCharge_)->Fill((float)charge);
539  //if(modon) (meSize_)->Fill((int)size);
540  DQMStore* theDMBE = edm::Service<DQMStore>().operator->();
541  std::string currDir = theDMBE->pwd();
542  theDMBE->cd("Pixel/Clusters/OffTrack/");
543  MonitorElement * me;
544  if(barrel){
545  uint32_t DBlayer;
546  if (!isUpgrade) { DBlayer = PixelBarrelName(DetId(id_)).layerName(); }
547  else { DBlayer = PixelBarrelNameUpgrade(DetId(id_)).layerName(); }
548  switch(DBlayer){
549  case 1: {
550  me = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_Layer_1");
551  if(me) me->Fill(clustgp.z(),clustgp.phi());
552  break;
553  } case 2: {
554  me = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_Layer_2");
555  if(me) me->Fill(clustgp.z(),clustgp.phi());
556  break;
557  } case 3: {
558  me = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_Layer_3");
559  if(me) me->Fill(clustgp.z(),clustgp.phi());
560  break;
561  } case 4: {
562  if (isUpgrade) {
563  me = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_Layer_4");
564  if(me) me->Fill(clustgp.z(),clustgp.phi());
565  break;
566  }
567  }}
568  }else if(endcap){
569  uint32_t DBdisk;
570  if (!isUpgrade) { DBdisk = PixelEndcapName(DetId(id_)).diskName(); }
571  else if (isUpgrade) { DBdisk = PixelEndcapNameUpgrade(DetId(id_)).diskName(); }
572  if(clustgp.z()>0){
573  switch(DBdisk){
574  case 1: {
575  me = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_pz_Disk_1");
576  if(me) me->Fill(clustgp.x(),clustgp.y());
577  break;
578  } case 2: {
579  me = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_pz_Disk_2");
580  if(me) me->Fill(clustgp.x(),clustgp.y());
581  break;
582  } case 3: {
583  if (isUpgrade) {
584  me = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_pz_Disk_3");
585  if(me) me->Fill(clustgp.x(),clustgp.y());
586  break;
587  }
588  }}
589  }else{
590  switch(DBdisk){
591  case 1: {
592  me = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_mz_Disk_1");
593  if(me) me->Fill(clustgp.x(),clustgp.y());
594  break;
595  } case 2: {
596  me = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_mz_Disk_2");
597  if(me) me->Fill(clustgp.x(),clustgp.y());
598  break;
599  } case 3: {
600  if (isUpgrade) {
601  me = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_mz_Disk_3");
602  if(me) me->Fill(clustgp.x(),clustgp.y());
603  break;
604  }
605  }}
606  }
607  }
608  theDMBE->cd(currDir);
609  if(!reducedSet)
610  {
611  (meMinRow_)->Fill((int)minPixelRow);
612  (meMaxRow_)->Fill((int)maxPixelRow);
613  (meMinCol_)->Fill((int)minPixelCol);
614  (meMaxCol_)->Fill((int)maxPixelCol);
615  (meSizeX_)->Fill((int)sizeX);
616  (meSizeY_)->Fill((int)sizeY);
617  (meX_)->Fill((float)x);
618  (meY_)->Fill((float)y);
619  if(twoD)(mePixClusters_)->Fill((float)y,(float)x);
620  else{
621  (mePixClusters_px_)->Fill((float)y);
622  (mePixClusters_py_)->Fill((float)x);
623  }
624  }
625  // (meEdgeHitX_)->Fill((int)edgeHitX);
626  // (meEdgeHitY_)->Fill((int)edgeHitY);
627  //}//endifmodOn
628  //**
629  if(barrel && smileyon){
630  (meSizeYvsEtaBarrel_)->Fill(clustgp.eta(),sizeY);
631  //std::cout << "Cluster Global x y z theta eta " << clustgp.x() << " " << clustgp.y() << " " << clustgp.z() << " " << clustgp.theta() << " " << clustgp.eta() << std::endl;
632  }
633  if(ladon && barrel){
634  (meChargeLad_)->Fill((float)charge);
635  (meSizeLad_)->Fill((int)size);
636  if(!reducedSet)
637  {
638  (meMinRowLad_)->Fill((int)minPixelRow);
639  (meMaxRowLad_)->Fill((int)maxPixelRow);
640  (meMinColLad_)->Fill((int)minPixelCol);
641  (meMaxColLad_)->Fill((int)maxPixelCol);
642  (meXLad_)->Fill((float)x);
643  (meYLad_)->Fill((float)y);
644  (meSizeXLad_)->Fill((int)sizeX);
645  (meSizeYLad_)->Fill((int)sizeY);
646  if(twoD) (mePixClustersLad_)->Fill((float)y,(float)x);
647  else{
648  (mePixClustersLad_px_)->Fill((float)y);
649  (mePixClustersLad_py_)->Fill((float)x);
650  }
651  }
652  }
653  if(layon && barrel){
654  (meChargeLay_)->Fill((float)charge);
655  (meSizeLay_)->Fill((int)size);
656  if(!reducedSet)
657  {
658  (meMinRowLay_)->Fill((int)minPixelRow);
659  (meMaxRowLay_)->Fill((int)maxPixelRow);
660  (meMinColLay_)->Fill((int)minPixelCol);
661  (meMaxColLay_)->Fill((int)maxPixelCol);
662  (meXLay_)->Fill((float)x);
663  (meYLay_)->Fill((float)y);
664  (meSizeXLay_)->Fill((int)sizeX);
665  (meSizeYLay_)->Fill((int)sizeY);
666  if(twoD) (mePixClustersLay_)->Fill((float)y,(float)x);
667  else{
668  (mePixClustersLay_px_)->Fill((float)y);
669  (mePixClustersLay_py_)->Fill((float)x);
670  }
671  }
672  }
673  if(phion && barrel){
674  (meChargePhi_)->Fill((float)charge);
675  (meSizePhi_)->Fill((int)size);
676  if(!reducedSet)
677  {
678  (meMinRowPhi_)->Fill((int)minPixelRow);
679  (meMaxRowPhi_)->Fill((int)maxPixelRow);
680  (meMinColPhi_)->Fill((int)minPixelCol);
681  (meMaxColPhi_)->Fill((int)maxPixelCol);
682  (meXPhi_)->Fill((float)x);
683  (meYPhi_)->Fill((float)y);
684  (meSizeXPhi_)->Fill((int)sizeX);
685  (meSizeYPhi_)->Fill((int)sizeY);
686  if(twoD) (mePixClustersPhi_)->Fill((float)y,(float)x);
687  else{
688  (mePixClustersPhi_px_)->Fill((float)y);
689  (mePixClustersPhi_py_)->Fill((float)x);
690  }
691  }
692  }
693  if(bladeon && endcap){
694  (meChargeBlade_)->Fill((float)charge);
695  (meSizeBlade_)->Fill((int)size);
696  if(!reducedSet)
697  {
698  (meMinRowBlade_)->Fill((int)minPixelRow);
699  (meMaxRowBlade_)->Fill((int)maxPixelRow);
700  (meMinColBlade_)->Fill((int)minPixelCol);
701  (meMaxColBlade_)->Fill((int)maxPixelCol);
702  (meXBlade_)->Fill((float)x);
703  (meYBlade_)->Fill((float)y);
704  (meSizeXBlade_)->Fill((int)sizeX);
705  (meSizeYBlade_)->Fill((int)sizeY);
706  }
707  }
708  if(diskon && endcap){
709  (meChargeDisk_)->Fill((float)charge);
710  (meSizeDisk_)->Fill((int)size);
711  if(!reducedSet)
712  {
713  (meMinRowDisk_)->Fill((int)minPixelRow);
714  (meMaxRowDisk_)->Fill((int)maxPixelRow);
715  (meMinColDisk_)->Fill((int)minPixelCol);
716  (meMaxColDisk_)->Fill((int)maxPixelCol);
717  (meXDisk_)->Fill((float)x);
718  (meYDisk_)->Fill((float)y);
719  (meSizeXDisk_)->Fill((int)sizeX);
720  (meSizeYDisk_)->Fill((int)sizeY);
721  }
722  }
723 
724  if(ringon && endcap){
725  (meChargeRing_)->Fill((float)charge);
726  (meSizeRing_)->Fill((int)size);
727  if(!reducedSet)
728  {
729  (meMinRowRing_)->Fill((int)minPixelRow);
730  (meMaxRowRing_)->Fill((int)maxPixelRow);
731  (meMinColRing_)->Fill((int)minPixelCol);
732  (meMaxColRing_)->Fill((int)maxPixelCol);
733  (meXRing_)->Fill((float)x);
734  (meYRing_)->Fill((float)y);
735  (meSizeXRing_)->Fill((int)sizeX);
736  (meSizeYRing_)->Fill((int)sizeY);
737  if(twoD) (mePixClustersRing_)->Fill((float)y,(float)x);
738  else{
739  (mePixClustersRing_px_)->Fill((float)y);
740  (mePixClustersRing_py_)->Fill((float)x);
741  }
742  }
743  }
744  }
745  //if(modon) (meNClusters_)->Fill((float)numberOfClusters);
746  if(ladon && barrel) (meNClustersLad_)->Fill((float)numberOfClusters);
747  if(layon && barrel) (meNClustersLay_)->Fill((float)numberOfClusters);
748  if(phion && barrel) (meNClustersPhi_)->Fill((float)numberOfClusters);
749  if(bladeon && endcap) (meNClustersBlade_)->Fill((float)numberOfClusters);
750  if(diskon && endcap) (meNClustersDisk_)->Fill((float)numberOfClusters);
751  if(ringon && endcap) (meNClustersRing_)->Fill((float)numberOfClusters);
752 
753  //std::cout<<"number of clusters="<<numberOfClusters<<std::endl;
754 
755 
756  }
757 
758 
759  //std::cout<<"number of detector units="<<numberOfDetUnits<<std::endl;
760  return numberOfFpixClusters;
761 
762 }
int plaquetteName() const
plaquetteId (in pannel)
MonitorElement * meMinColLay_
type
Definition: HCALResponse.h:21
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:114
T getParameter(std::string const &) const
MonitorElement * meMinRowRing_
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
const_iterator end(bool update=false) const
MonitorElement * meMaxColLad_
MonitorElement * meSizePhi_
MonitorElement * mePixClustersLad_px_
MonitorElement * meMaxCol_
virtual LocalPoint localPosition(const MeasurementPoint &) const =0
MonitorElement * meMaxColPhi_
MonitorElement * meNClustersLad_
MonitorElement * meYBlade_
int moduleName() const
module id (index in z)
MonitorElement * meMinRowLad_
void cd(void)
go to top directory (ie. root)
Definition: DQMStore.cc:616
MonitorElement * meSizeYLay_
MonitorElement * meSizeYLad_
MonitorElement * meSizeXLad_
MonitorElement * meSizeXLay_
MonitorElement * meMinRow_
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
MonitorElement * meMaxRowRing_
MonitorElement * mePixClustersLay_
T y() const
Definition: PV3DBase.h:63
MonitorElement * meSizeYBlade_
bool isHalfModule() const
full or half module
SiPixelClusterModule()
Default constructor.
data_type const * const_iterator
Definition: DetSetNew.h:30
MonitorElement * meMinRowBlade_
MonitorElement * meNClustersPhi_
MonitorElement * meChargePhi_
MonitorElement * meMinColPhi_
MonitorElement * meNClustersBlade_
MonitorElement * mePixClustersPhi_py_
MonitorElement * meMinRowDisk_
int plaquetteName() const
plaquetteId (in pannel)
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:35
double charge(const std::vector< uint8_t > &Ampls)
MonitorElement * mePixClustersRing_px_
MonitorElement * meMaxRowLad_
static std::string const input
Definition: EdmProvDump.cc:44
MonitorElement * meMinRowLay_
void Fill(long long x)
MonitorElement * meMinColBlade_
MonitorElement * meSizeYDisk_
MonitorElement * meSizeDisk_
MonitorElement * meMaxColRing_
MonitorElement * meMinColLad_
int bladeName() const
blade id
MonitorElement * meMaxRowBlade_
MonitorElement * meChargeRing_
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
MonitorElement * mePixClustersLad_
bool isHalfModule() const
full or half module
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
~SiPixelClusterModule()
Destructor.
MonitorElement * meMaxRowPhi_
MonitorElement * meMinRowPhi_
MonitorElement * meMinColDisk_
MonitorElement * meMinCol_
MonitorElement * mePixClusters_py_
T z() const
Definition: PV3DBase.h:64
MonitorElement * mePixClustersLay_px_
MonitorElement * meNClustersDisk_
MonitorElement * meSizeYRing_
MonitorElement * mePixClustersRing_
MonitorElement * meSizeX_
MonitorElement * meSizeY_
MonitorElement * meMaxRowLay_
int bladeName() const
blade id
MonitorElement * meChargeDisk_
int fill(const edmNew::DetSetVector< SiPixelCluster > &input, const TrackerGeometry *tracker, bool modon=true, bool ladon=false, bool layon=false, bool phion=false, bool bladeon=false, bool diskon=false, bool ringon=false, bool twoD=true, bool reducedSet=false, bool smileyon=false, bool isUpgrade=false)
Fill histograms.
MonitorElement * meMaxColBlade_
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. &quot;my/long/dir/my_histo&quot;)
Definition: DQMStore.cc:1679
MonitorElement * mePixClustersPhi_
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
void book(const edm::ParameterSet &iConfig, int type=0, bool twoD=true, bool reducedSet=false, bool isUpgrade=false)
Book histograms.
virtual const GeomDet * idToDet(DetId) const
MonitorElement * meChargeBlade_
MonitorElement * mePixClustersLay_py_
MonitorElement * meMinColRing_
int diskName() const
disk id
MonitorElement * meNClustersLay_
MonitorElement * meMaxColLay_
std::string setHistoId(std::string variable, uint32_t &rawId)
Set Histogram Id.
MonitorElement * meMaxRowDisk_
Definition: DetId.h:18
int ladderName() const
ladder id (index in phi)
int ladderName() const
ladder id (index in phi)
MonitorElement * meNClustersRing_
MonitorElement * meSizeYvsEtaBarrel_
int moduleName() const
module id (index in z)
MonitorElement * mePixClustersLad_py_
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
int layerName() const
layer id
MonitorElement * meSizeRing_
MonitorElement * mePixClusters_px_
std::string const & label() const
Definition: InputTag.h:42
const_iterator find(id_type i, bool update=false) const
T eta() const
Definition: PV3DBase.h:76
MonitorElement * meSizeXPhi_
MonitorElement * meSizeXRing_
MonitorElement * mePixClusters_
MonitorElement * meSizeXBlade_
int pannelName() const
pannel id
MonitorElement * meMaxRow_
MonitorElement * meChargeLad_
MonitorElement * meSizeLad_
MonitorElement * meSizeBlade_
MonitorElement * mePixClustersRing_py_
int diskName() const
disk id
MonitorElement * meSizeXDisk_
Definition: DDAxes.h:10
size_type size() const
Definition: DetSetNew.h:86
MonitorElement * meSizeYPhi_
int pannelName() const
pannel id
T x() const
Definition: PV3DBase.h:62
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
MonitorElement * mePixClustersPhi_px_
MonitorElement * meXBlade_
MonitorElement * meChargeLay_
int layerName() const
layer id
tuple size
Write out results.
const_iterator begin(bool update=false) const
MonitorElement * meSizeLay_
const std::string & pwd(void) const
Definition: DQMStore.cc:611
MonitorElement * meMaxColDisk_