CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_2_SLHC4_patch1/src/DQM/SiPixelMonitorDigi/src/SiPixelDigiModule.cc

Go to the documentation of this file.
00001 #include "DQM/SiPixelMonitorDigi/interface/SiPixelDigiModule.h"
00002 #include "DQMServices/Core/interface/DQMStore.h"
00003 #include "DQM/SiPixelCommon/interface/SiPixelHistogramId.h"
00005 #include "FWCore/ServiceRegistry/interface/Service.h"
00006 // STL
00007 #include <vector>
00008 #include <memory>
00009 #include <string>
00010 #include <iostream>
00011 #include <stdlib.h>
00012 #include <sstream>
00013 #include <cstdio>
00014 
00015 // Data Formats
00016 #include "DataFormats/SiPixelDetId/interface/PixelBarrelName.h"
00017 #include "DataFormats/SiPixelDetId/interface/PixelBarrelNameUpgrade.h"
00018 #include "DataFormats/SiPixelDetId/interface/PixelEndcapName.h"
00019 #include "DataFormats/SiPixelDetId/interface/PixelEndcapNameUpgrade.h"
00020 #include "DataFormats/DetId/interface/DetId.h"
00021 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
00022 
00023 //
00024 // Constructors
00025 //
00026 SiPixelDigiModule::SiPixelDigiModule() : id_(0),
00027                                          ncols_(416),
00028                                          nrows_(160) 
00029 {
00030 }
00032 SiPixelDigiModule::SiPixelDigiModule(const uint32_t& id) : 
00033   id_(id),
00034   ncols_(416),
00035   nrows_(160)
00036 { 
00037 }
00039 SiPixelDigiModule::SiPixelDigiModule(const uint32_t& id, const int& ncols, const int& nrows) : 
00040   id_(id),
00041   ncols_(ncols),
00042   nrows_(nrows)
00043 { 
00044 }
00045 //
00046 // Destructor
00047 //
00048 SiPixelDigiModule::~SiPixelDigiModule() {}
00049 //
00050 // Book histograms
00051 //
00052 void SiPixelDigiModule::book(const edm::ParameterSet& iConfig, int type, bool twoD, bool hiRes, bool reducedSet, bool additInfo, bool isUpgrade) {
00053   bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
00054   bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
00055   bool isHalfModule = false;
00056   if(barrel){
00057     if (!isUpgrade) {
00058       isHalfModule = PixelBarrelName(DetId(id_)).isHalfModule(); 
00059     } else if (isUpgrade) {
00060       isHalfModule = PixelBarrelNameUpgrade(DetId(id_)).isHalfModule(); 
00061     }
00062   }
00063 
00064   std::string hid;
00065   // Get collection name and instantiate Histo Id builder
00066   edm::InputTag src = iConfig.getParameter<edm::InputTag>( "src" );
00067   
00068 
00069   // Get DQM interface
00070   DQMStore* theDMBE = edm::Service<DQMStore>().operator->();
00071 
00072   int nbinx=ncols_/2, nbiny=nrows_/2;
00073   std::string twodtitle           = "Number of Digis (1bin=four pixels)"; 
00074   std::string pxtitle             = "Number of Digis (1bin=two columns)";
00075   std::string pytitle             = "Number of Digis (1bin=two rows)";
00076   std::string twodroctitle        = "ROC Occupancy (1bin=one ROC)";
00077   std::string twodzeroOccroctitle = "Zero Occupancy ROC Map (1bin=one ROC) for ";
00078   if(hiRes){
00079     nbinx = ncols_;
00080     nbiny = nrows_;
00081     twodtitle    = "Number of Digis (1bin=one pixel)";
00082     pxtitle = "Number of Digis (1bin=one column)";
00083     pytitle = "Number of Digis (1bin=one row)";
00084   }
00085   if(type==0){
00086     SiPixelHistogramId* theHistogramId = new SiPixelHistogramId( src.label() );
00087     // Number of digis
00088     hid = theHistogramId->setHistoId("ndigis",id_);
00089     meNDigis_ = theDMBE->book1D(hid,"Number of Digis",25,0.,25.);
00090     meNDigis_->setAxisTitle("Number of digis",1);
00091     // Charge in ADC counts
00092     hid = theHistogramId->setHistoId("adc",id_);
00093     meADC_ = theDMBE->book1D(hid,"Digi charge",128,0.,256.);
00094     meADC_->setAxisTitle("ADC counts",1);
00095         if(!reducedSet)
00096         {
00097     if(twoD){
00098       if(additInfo){
00099         // 2D hit map
00100         hid = theHistogramId->setHistoId("hitmap",id_);
00101         mePixDigis_ = theDMBE->book2D(hid,twodtitle,nbinx,0.,float(ncols_),nbiny,0.,float(nrows_));
00102         mePixDigis_->setAxisTitle("Columns",1);
00103         mePixDigis_->setAxisTitle("Rows",2);
00104         //std::cout << "During booking: type is "<< type << ", ID is "<< id_ << ", pwd for booking is " << theDMBE->pwd() << ", Plot name: " << hid << std::endl;
00105       }
00106     }
00107     else{
00108       // projections of 2D hit map
00109       hid = theHistogramId->setHistoId("hitmap",id_);
00110       mePixDigis_px_ = theDMBE->book1D(hid+"_px",pxtitle,nbinx,0.,float(ncols_));
00111       mePixDigis_py_ = theDMBE->book1D(hid+"_py",pytitle,nbiny,0.,float(nrows_));
00112       mePixDigis_px_->setAxisTitle("Columns",1);
00113       mePixDigis_py_->setAxisTitle("Rows",1);
00114     }
00115         }
00116     delete theHistogramId;
00117 
00118   }
00119   
00120   if(type==1 && barrel){
00121     uint32_t DBladder;
00122     if (!isUpgrade) { DBladder = PixelBarrelName(DetId(id_)).ladderName();}
00123     else if (isUpgrade) { DBladder = PixelBarrelNameUpgrade(DetId(id_)).ladderName();}
00124     char sladder[80]; sprintf(sladder,"Ladder_%02i",DBladder);
00125     hid = src.label() + "_" + sladder;
00126     if(isHalfModule) hid += "H";
00127     else hid += "F";
00128     // Number of digis
00129     meNDigisLad_ = theDMBE->book1D("ndigis_"+hid,"Number of Digis",25,0.,25.);
00130     meNDigisLad_->setAxisTitle("Number of digis",1);
00131     // Charge in ADC counts
00132     meADCLad_ = theDMBE->book1D("adc_" + hid,"Digi charge",128,0.,256.);
00133     meADCLad_->setAxisTitle("ADC counts",1);
00134         if(!reducedSet)
00135         {
00136     if(twoD){
00137       // 2D hit map
00138       mePixDigisLad_ = theDMBE->book2D("hitmap_"+hid,twodtitle,nbinx,0.,float(ncols_),nbiny,0.,float(nrows_));
00139       mePixDigisLad_->setAxisTitle("Columns",1);
00140       mePixDigisLad_->setAxisTitle("Rows",2);
00141       //std::cout << "During booking: type is "<< type << ", ID is "<< id_ << ", pwd for booking is " << theDMBE->pwd() << ", Plot name: " << hid << std::endl;
00142     }
00143     else{
00144       // projections of 2D hit map
00145       mePixDigisLad_px_ = theDMBE->book1D("hitmap_"+hid+"_px",pxtitle,nbinx,0.,float(ncols_));
00146       mePixDigisLad_py_ = theDMBE->book1D("hitmap_"+hid+"_py",pytitle,nbiny,0.,float(nrows_));
00147       mePixDigisLad_px_->setAxisTitle("Columns",1);
00148       mePixDigisLad_py_->setAxisTitle("Rows",1);        
00149     }
00150         }
00151   }
00152   if(type==2 && barrel){
00153     uint32_t DBlayer;
00154     if (!isUpgrade) { DBlayer = PixelBarrelName(DetId(id_)).layerName(); }
00155     else if (isUpgrade) { DBlayer = PixelBarrelNameUpgrade(DetId(id_)).layerName(); }
00156     char slayer[80]; sprintf(slayer,"Layer_%i",DBlayer);
00157     hid = src.label() + "_" + slayer;
00158     if(!additInfo){
00159       // Number of digis
00160       meNDigisLay_ = theDMBE->book1D("ndigis_"+hid,"Number of Digis",25,0.,25.);
00161       meNDigisLay_->setAxisTitle("Number of digis",1);
00162     // Charge in ADC counts
00163       meADCLay_ = theDMBE->book1D("adc_" + hid,"Digi charge",128,0.,256.);
00164       meADCLay_->setAxisTitle("ADC counts",1);
00165     }
00166     if(!reducedSet){
00167       if(twoD || additInfo){
00168         // 2D hit map
00169         if(isHalfModule){
00170           mePixDigisLay_ = theDMBE->book2D("hitmap_"+hid,twodtitle,nbinx,0.,float(ncols_),2*nbiny,0.,float(2*nrows_));
00171         }
00172         else{
00173           mePixDigisLay_ = theDMBE->book2D("hitmap_"+hid,twodtitle,nbinx,0.,float(ncols_),nbiny,0.,float(nrows_));
00174 
00175         }
00176         mePixDigisLay_->setAxisTitle("Columns",1);
00177         mePixDigisLay_->setAxisTitle("Rows",2);
00178         
00179         //std::cout << "During booking: type is "<< type << ", ID is "<< id_ << ", pwd for booking is " << theDMBE->pwd() << ", Plot name: " << hid << std::endl;
00180         int yROCbins[3] = {18,30,42};
00181         mePixRocsLay_ = theDMBE->book2D("rocmap_"+hid,twodroctitle,32,0.,32.,yROCbins[DBlayer-1],1.5,1.5+float(yROCbins[DBlayer-1]/2));
00182         mePixRocsLay_->setAxisTitle("ROCs per Module",1);
00183         mePixRocsLay_->setAxisTitle("ROCs per 1/2 Ladder",2);
00184         meZeroOccRocsLay_ = theDMBE->book2D("zeroOccROC_map",twodzeroOccroctitle+hid,32,0.,32.,yROCbins[DBlayer-1],1.5,1.5+float(yROCbins[DBlayer-1]/2));
00185         meZeroOccRocsLay_->setAxisTitle("ROCs per Module",1);
00186         meZeroOccRocsLay_->setAxisTitle("ROCs per 1/2 Ladder",2);
00187       }
00188       if(!twoD && !additInfo){
00189         // projections of 2D hit map
00190         mePixDigisLay_px_ = theDMBE->book1D("hitmap_"+hid+"_px",pxtitle,nbinx,0.,float(ncols_));
00191         if(isHalfModule){
00192           mePixDigisLay_py_ = theDMBE->book1D("hitmap_"+hid+"_py",pytitle,2*nbiny,0.,float(2*nrows_));
00193         }
00194         else{
00195           mePixDigisLay_py_ = theDMBE->book1D("hitmap_"+hid+"_py",pytitle,nbiny,0.,float(nrows_));
00196         }
00197         mePixDigisLay_px_->setAxisTitle("Columns",1);
00198         mePixDigisLay_py_->setAxisTitle("Rows",1);
00199       }
00200     }
00201   }
00202   if(type==3 && barrel){
00203     uint32_t DBmodule;
00204     if (!isUpgrade) { DBmodule = PixelBarrelName(DetId(id_)).moduleName(); }
00205     else if (isUpgrade) { DBmodule = PixelBarrelNameUpgrade(DetId(id_)).moduleName(); }
00206     char smodule[80]; sprintf(smodule,"Ring_%i",DBmodule);
00207     hid = src.label() + "_" + smodule;
00208     // Number of digis
00209     meNDigisPhi_ = theDMBE->book1D("ndigis_"+hid,"Number of Digis",25,0.,25.);
00210     meNDigisPhi_->setAxisTitle("Number of digis",1);
00211     // Charge in ADC counts
00212     meADCPhi_ = theDMBE->book1D("adc_" + hid,"Digi charge",128,0.,256.);
00213     meADCPhi_->setAxisTitle("ADC counts",1);
00214     if(!reducedSet)
00215       {
00216         if(twoD){
00217           
00218           // 2D hit map
00219           if(isHalfModule){
00220             mePixDigisPhi_ = theDMBE->book2D("hitmap_"+hid,twodtitle,nbinx,0.,float(ncols_),2*nbiny,0.,float(2*nrows_));
00221           }
00222           else {
00223             mePixDigisPhi_ = theDMBE->book2D("hitmap_"+hid,twodtitle,nbinx,0.,float(ncols_),nbiny,0.,float(nrows_));
00224           }
00225           mePixDigisPhi_->setAxisTitle("Columns",1);
00226           mePixDigisPhi_->setAxisTitle("Rows",2);
00227           //std::cout << "During booking: type is "<< type << ", ID is "<< id_ << ", pwd for booking is " << theDMBE->pwd() << ", Plot name: " << hid << std::endl;
00228         }
00229         else{
00230           // projections of 2D hit map
00231           mePixDigisPhi_px_ = theDMBE->book1D("hitmap_"+hid+"_px",pxtitle,nbinx,0.,float(ncols_));
00232           if(isHalfModule){
00233             mePixDigisPhi_py_ = theDMBE->book1D("hitmap_"+hid+"_py",pytitle,2*nbiny,0.,float(2*nrows_));
00234           }
00235           else{
00236             mePixDigisPhi_py_ = theDMBE->book1D("hitmap_"+hid+"_py",pytitle,nbiny,0.,float(nrows_));
00237           }
00238           mePixDigisPhi_px_->setAxisTitle("Columns",1);
00239           mePixDigisPhi_py_->setAxisTitle("Rows",1);
00240         }
00241       }
00242   }
00243   if(type==4 && endcap){
00244     uint32_t blade;
00245     if (!isUpgrade) { blade= PixelEndcapName(DetId(id_)).bladeName(); }
00246     else if (isUpgrade) { blade= PixelEndcapNameUpgrade(DetId(id_)).bladeName(); }
00247     
00248     char sblade[80]; sprintf(sblade, "Blade_%02i",blade);
00249     hid = src.label() + "_" + sblade;
00250     // Number of digis
00251     meNDigisBlade_ = theDMBE->book1D("ndigis_"+hid,"Number of Digis",25,0.,25.);
00252     meNDigisBlade_->setAxisTitle("Number of digis",1);
00253     // Charge in ADC counts
00254     meADCBlade_ = theDMBE->book1D("adc_" + hid,"Digi charge",128,0.,256.);
00255     meADCBlade_->setAxisTitle("ADC counts",1);
00256   }
00257   if(type==5 && endcap){
00258     uint32_t disk;
00259     if (!isUpgrade) { disk = PixelEndcapName(DetId(id_)).diskName(); }
00260     else if (isUpgrade) { disk = PixelEndcapNameUpgrade(DetId(id_)).diskName(); }
00261     
00262     char sdisk[80]; sprintf(sdisk, "Disk_%i",disk);
00263     hid = src.label() + "_" + sdisk;
00264     if(!additInfo){
00265       // Number of digis
00266       meNDigisDisk_ = theDMBE->book1D("ndigis_"+hid,"Number of Digis",25,0.,25.);
00267       meNDigisDisk_->setAxisTitle("Number of digis",1);
00268       // Charge in ADC counts
00269       meADCDisk_ = theDMBE->book1D("adc_" + hid,"Digi charge",128,0.,256.);
00270       meADCDisk_->setAxisTitle("ADC counts",1);
00271     }
00272     if(additInfo){
00273       mePixDigisDisk_ = theDMBE->book2D("hitmap_"+hid,twodtitle,260,0.,260.,160,0.,160.);
00274       mePixDigisDisk_->setAxisTitle("Columns",1);
00275       mePixDigisDisk_->setAxisTitle("Rows",2);
00276       //ROC information in disks
00277       mePixRocsDisk_  = theDMBE->book2D("rocmap_"+hid,twodroctitle,26,0.,26.,24,1.,13.);
00278       mePixRocsDisk_ ->setAxisTitle("ROCs per Module (2 Panels)",1);
00279       mePixRocsDisk_ ->setAxisTitle("Blade Number",2);
00280       meZeroOccRocsDisk_  = theDMBE->book2D("zeroOccROC_map",twodzeroOccroctitle+hid,26,0.,26.,24,1.,13.);
00281       meZeroOccRocsDisk_ ->setAxisTitle("Zero-Occupancy ROCs per Module (2 Panels)",1);
00282       meZeroOccRocsDisk_ ->setAxisTitle("Blade Number",2);
00283     }
00284   }
00285   if(type==6 && endcap){
00286     uint32_t panel;
00287     uint32_t module;
00288     if (!isUpgrade) {
00289       panel= PixelEndcapName(DetId(id_)).pannelName();
00290       module= PixelEndcapName(DetId(id_)).plaquetteName();
00291     } else if (isUpgrade) {
00292       panel= PixelEndcapNameUpgrade(DetId(id_)).pannelName();
00293       module= PixelEndcapNameUpgrade(DetId(id_)).plaquetteName();
00294     }
00295     
00296     char slab[80]; sprintf(slab, "Panel_%i_Ring_%i",panel, module);
00297     hid = src.label() + "_" + slab;
00298     // Number of digis
00299     meNDigisRing_ = theDMBE->book1D("ndigis_"+hid,"Number of Digis",25,0.,25.);
00300     meNDigisRing_->setAxisTitle("Number of digis",1);
00301     // Charge in ADC counts
00302     meADCRing_ = theDMBE->book1D("adc_" + hid,"Digi charge",128,0.,256.);
00303     meADCRing_->setAxisTitle("ADC counts",1);
00304         if(!reducedSet)
00305         {
00306     if(twoD){
00307       // 2D hit map
00308       mePixDigisRing_ = theDMBE->book2D("hitmap_"+hid,twodtitle,nbinx,0.,float(ncols_),nbiny,0.,float(nrows_));
00309       mePixDigisRing_->setAxisTitle("Columns",1);
00310       mePixDigisRing_->setAxisTitle("Rows",2);
00311       //std::cout << "During booking: type is "<< type << ", ID is "<< id_ << ", pwd for booking is " << theDMBE->pwd() << ", Plot name: " << hid << std::endl;
00312     }
00313     else{
00314       // projections of 2D hit map
00315       mePixDigisRing_px_ = theDMBE->book1D("hitmap_"+hid+"_px",pxtitle,nbinx,0.,float(ncols_));
00316       mePixDigisRing_py_ = theDMBE->book1D("hitmap_"+hid+"_py",pytitle,nbiny,0.,float(nrows_));
00317       mePixDigisRing_px_->setAxisTitle("Columns",1);
00318       mePixDigisRing_py_->setAxisTitle("Rows",1);
00319     }
00320         }
00321   }
00322 }
00323 
00324 
00325 //
00326 // Fill histograms
00327 //
00328 int SiPixelDigiModule::fill(const edm::DetSetVector<PixelDigi>& input, bool modon, 
00329                                                                  bool ladon, bool layon, bool phion, 
00330                                                                  bool bladeon, bool diskon, bool ringon, 
00331                                                                  bool twoD, bool reducedSet, bool twoDimModOn, bool twoDimOnlyLayDisk,
00332                                                                  int &nDigisA, int &nDigisB, bool isUpgrade) {
00333   bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
00334   bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
00335   bool isHalfModule = false;
00336   uint32_t DBladder = 0;
00337   if(barrel && !isUpgrade){
00338     isHalfModule = PixelBarrelName(DetId(id_)).isHalfModule(); 
00339     DBladder = PixelBarrelName(DetId(id_)).ladderName();
00340   } else if (barrel && isUpgrade) {
00341     isHalfModule = PixelBarrelNameUpgrade(DetId(id_)).isHalfModule(); 
00342     DBladder = PixelBarrelNameUpgrade(DetId(id_)).ladderName();
00343   }
00344 
00345   // Get DQM interface
00346   DQMStore* theDMBE = edm::Service<DQMStore>().operator->();
00347   //std::cout<<"id_ = "<<id_<<" , dmbe="<<theDMBE->pwd()<<std::endl;
00348   //std::cout<<"********************"<<std::endl;
00349   edm::DetSetVector<PixelDigi>::const_iterator isearch = input.find(id_); // search  digis of detid
00350   
00351   unsigned int numberOfDigisMod = 0;
00352   int msize;
00353   if (isUpgrade) {msize=10;} else {msize=8;}
00354   int numberOfDigis[msize]; for(int i=0; i!=msize; i++) numberOfDigis[i]=0; 
00355   nDigisA=0; nDigisB=0;
00356   if( isearch != input.end() ) {  // Not an empty iterator
00357     
00358     // Look at digis now
00359     edm::DetSet<PixelDigi>::const_iterator  di;
00360     for(di = isearch->data.begin(); di != isearch->data.end(); di++) {
00361       int adc = di->adc();    // charge
00362       int col = di->column(); // column 
00363       int row = di->row();    // row
00364       numberOfDigisMod++;
00365       
00366       int DBlayer = 0;
00367       int DBmodule =0;
00368       
00369       if (!isUpgrade) {
00370         PixelBarrelName::Shell DBshell = PixelBarrelName(DetId(id_)).shell();
00371         DBlayer  = PixelBarrelName(DetId(id_)).layerName();
00372         DBmodule = PixelBarrelName(DetId(id_)).moduleName();
00373         if(barrel){
00374           if(isHalfModule){
00375             if(DBshell==PixelBarrelName::pI||DBshell==PixelBarrelName::pO){
00376               numberOfDigis[0]++; nDigisA++;
00377               if(DBlayer==1) numberOfDigis[2]++;
00378               if(DBlayer==2) numberOfDigis[3]++;
00379               if(DBlayer==3) numberOfDigis[4]++;
00380             }
00381             if(DBshell==PixelBarrelName::mI||DBshell==PixelBarrelName::mO){
00382               numberOfDigis[1]++; nDigisB++;
00383               if(DBlayer==1) numberOfDigis[5]++;
00384               if(DBlayer==2) numberOfDigis[6]++;
00385               if(DBlayer==3) numberOfDigis[7]++;
00386             }
00387           }else{
00388             if(row<80){
00389               numberOfDigis[0]++; nDigisA++;
00390               if(DBlayer==1) numberOfDigis[2]++;
00391               if(DBlayer==2) numberOfDigis[3]++;
00392               if(DBlayer==3) numberOfDigis[4]++;
00393             }else{ 
00394               numberOfDigis[1]++; nDigisB++;
00395               if(DBlayer==1) numberOfDigis[5]++;
00396               if(DBlayer==2) numberOfDigis[6]++;
00397               if(DBlayer==3) numberOfDigis[7]++;
00398             }
00399           }
00400         }
00401       } else if (isUpgrade) {
00402         //PixelBarrelNameUpgrade::Shell DBshell = PixelBarrelNameUpgrade(DetId(id_)).shell();
00403         DBlayer  = PixelBarrelNameUpgrade(DetId(id_)).layerName();
00404         DBmodule = PixelBarrelNameUpgrade(DetId(id_)).moduleName();
00405         if(barrel){
00406           if(row<80){
00407             numberOfDigis[0]++; nDigisA++;
00408             if(DBlayer==1) numberOfDigis[2]++;
00409             if(DBlayer==2) numberOfDigis[3]++;
00410             if(DBlayer==3) numberOfDigis[4]++;
00411             if(DBlayer==4) numberOfDigis[5]++;
00412           }else{ 
00413             numberOfDigis[1]++; nDigisB++;
00414             if(DBlayer==1) numberOfDigis[6]++;
00415             if(DBlayer==2) numberOfDigis[7]++;
00416             if(DBlayer==3) numberOfDigis[8]++;
00417             if(DBlayer==4) numberOfDigis[9]++;
00418           }
00419         }
00420       }
00421       
00422       if(modon){
00423         if(!reducedSet){
00424           if(twoD) {
00425             if(twoDimModOn) (mePixDigis_)->Fill((float)col,(float)row);
00426             //std::cout << "Col: " << col << ", Row: " << row << ", for DBlayer " << DBlayer << " and isladder " << DBladder << " and module " << PixelBarrelName(DetId(id_)).moduleName() << " and side is " << DBshell << std::endl;
00427             //std::cout<<"id_ = "<<id_<<" , dmbe="<<theDMBE->pwd()<<std::endl;                                                                                                                  
00428           }
00429           else {
00430             (mePixDigis_px_)->Fill((float)col);
00431             (mePixDigis_py_)->Fill((float)row);
00432           }
00433         }
00434         (meADC_)->Fill((float)adc);
00435       }
00436       if(ladon && barrel){
00437         (meADCLad_)->Fill((float)adc);
00438         if(!reducedSet){
00439           if(twoD) (mePixDigisLad_)->Fill((float)col,(float)row);
00440           else {
00441           (mePixDigisLad_px_)->Fill((float)col);
00442           (mePixDigisLad_py_)->Fill((float)row);
00443           }
00444         }
00445       }
00446       if((layon || twoDimOnlyLayDisk) && barrel){
00447         if(!twoDimOnlyLayDisk) (meADCLay_)->Fill((float)adc);
00448         if(!reducedSet){
00449           if((layon && twoD) || twoDimOnlyLayDisk){
00450             //ROC histos...
00451             float rocx = (float)col/52. + 8.0*float(DBmodule-1);
00452             float rocy = (float)row/160.+float(DBladder);
00453             //Shift 1st ladder (half modules) up by 1 bin
00454             if(DBladder==1) rocy = rocy + 0.5;
00455             mePixRocsLay_->Fill(rocx,rocy);
00456             //Copying full 1/2 module to empty 1/2 module...
00457             //if(isHalfModule) mePixRocsLay_->Fill(rocx,rocy+0.5);
00458             //end of ROC filling...
00459 
00460             if(isHalfModule && DBladder==1){
00461               (mePixDigisLay_)->Fill((float)col,(float)row+80);
00462             }
00463             else (mePixDigisLay_)->Fill((float)col,(float)row);
00464           }
00465           if((layon && !twoD) && !twoDimOnlyLayDisk){
00466             (mePixDigisLay_px_)->Fill((float)col);
00467             if(isHalfModule && DBladder==1) {
00468               (mePixDigisLay_py_)->Fill((float)row+80);
00469             }
00470             else (mePixDigisLay_py_)->Fill((float)row);
00471           }
00472         }
00473       }
00474       if(phion && barrel){
00475         (meADCPhi_)->Fill((float)adc);
00476         if(!reducedSet)
00477         {
00478         if(twoD){
00479           if(isHalfModule && DBladder==1){
00480             (mePixDigisPhi_)->Fill((float)col,(float)row+80);
00481           }
00482           else (mePixDigisPhi_)->Fill((float)col,(float)row);
00483         }
00484         else {
00485           (mePixDigisPhi_px_)->Fill((float)col);
00486           if(isHalfModule && DBladder==1) {
00487             (mePixDigisPhi_py_)->Fill((float)row+80);
00488           }
00489           else (mePixDigisPhi_py_)->Fill((float)row);
00490         }
00491         }
00492       }
00493       if(bladeon && endcap){
00494         (meADCBlade_)->Fill((float)adc);
00495       }
00496 
00497       if((diskon || twoDimOnlyLayDisk) && endcap){
00498         if(!twoDimOnlyLayDisk) (meADCDisk_)->Fill((float)adc);
00499         if(twoDimOnlyLayDisk){
00500           (mePixDigisDisk_)->Fill((float)col,(float)row);
00501           //ROC monitoring
00502           int DBpanel;
00503           int DBblade;
00504           if (!isUpgrade) {
00505             DBpanel= PixelEndcapName(DetId(id_)).pannelName();
00506             DBblade= PixelEndcapName(DetId(id_)).bladeName();
00507           } else if (isUpgrade) {
00508             DBpanel= PixelEndcapNameUpgrade(DetId(id_)).pannelName();
00509             DBblade= PixelEndcapNameUpgrade(DetId(id_)).bladeName();
00510           }
00511           float offx = 0.;
00512           //This crazy offset takes into account the roc and module fpix configuration
00513           for (int i = DBpanel; i < DBmodule; ++i) {offx = offx + float(5+DBpanel-i);}
00514           float rocx = (float)col/52. + offx + 14.0*float(DBpanel-1);
00515           float rocy = (float)row/160.+float(DBblade);
00516           mePixRocsDisk_->Fill(rocx,rocy);
00517           //Now handle the 1/2 module cases by cloning those bins and filling...
00518           //if (DBpanel==1 && (DBmodule==1||DBmodule==4)){
00519           //rocy = rocy + 0.5;
00520           //mePixRocsDisk_->Fill(rocx,rocy);}
00521           //end ROC monitoring
00522         }
00523       }
00524       if(ringon && endcap){
00525         (meADCRing_)->Fill((float)adc);
00526         if(!reducedSet)
00527         {
00528         if(twoD) (mePixDigisRing_)->Fill((float)col,(float)row);
00529         else {
00530           (mePixDigisRing_px_)->Fill((float)col);
00531           (mePixDigisRing_py_)->Fill((float)row);
00532         }
00533         }
00534       }
00535     }
00536     if(modon) (meNDigis_)->Fill((float)numberOfDigisMod);
00537     if(ladon && barrel) (meNDigisLad_)->Fill((float)numberOfDigisMod);
00538     if(layon && barrel && !twoDimOnlyLayDisk) (meNDigisLay_)->Fill((float)numberOfDigisMod);
00539     if(phion && barrel) (meNDigisPhi_)->Fill((float)numberOfDigisMod);
00540     if(bladeon && endcap) (meNDigisBlade_)->Fill((float)numberOfDigisMod);
00541     if(diskon && endcap && !twoDimOnlyLayDisk) (meNDigisDisk_)->Fill((float)numberOfDigisMod);
00542     if(ringon && endcap) (meNDigisRing_)->Fill((float)numberOfDigisMod);
00543     if(barrel){ 
00544       MonitorElement* me=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCOMB_Barrel");
00545       if(me) me->Fill((float)numberOfDigisMod);
00546       me=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_Barrel");
00547       if(me){ if(numberOfDigis[0]>0) me->Fill((float)numberOfDigis[0]); if(numberOfDigis[1]>0) me->Fill((float)numberOfDigis[1]); }
00548       me=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelL1");
00549       if(me){ if(numberOfDigis[2]>0) me->Fill((float)numberOfDigis[2]); }
00550       me=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelL2");
00551       if(me){ if(numberOfDigis[3]>0) me->Fill((float)numberOfDigis[3]); }
00552       me=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelL3");
00553       if(me){ if(numberOfDigis[4]>0) me->Fill((float)numberOfDigis[4]); }
00554       me=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelL4");
00555       if(me){ if(numberOfDigis[5]>0) me->Fill((float)numberOfDigis[5]); }
00556     }else if(endcap){
00557       MonitorElement* me=theDMBE->get("Pixel/Endcap/ALLMODS_ndigisCOMB_Endcap");
00558       if(me) me->Fill((float)numberOfDigisMod);
00559     }
00560   }
00561   
00562   //std::cout<<"numberOfDigis for this module: "<<numberOfDigis<<std::endl;
00563   return numberOfDigisMod;
00564 }