CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_0/src/DQM/SiPixelMonitorDigi/src/SiPixelDigiSource.cc

Go to the documentation of this file.
00001 
00002 // -*- C++ -*-
00003 //
00004 // Package:    SiPixelMonitorDigi
00005 // Class:      SiPixelDigiSource
00006 // 
00014 //
00015 // Original Author:  Vincenzo Chiochia
00016 //         Created:  
00017 // $Id: SiPixelDigiSource.cc,v 1.52 2012/01/18 12:51:13 merkelp Exp $
00018 //
00019 //
00020 #include "DQM/SiPixelMonitorDigi/interface/SiPixelDigiSource.h"
00021 // Framework
00022 #include "FWCore/ServiceRegistry/interface/Service.h"
00023 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00024 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00025 // DQM Framework
00026 #include "DQM/SiPixelCommon/interface/SiPixelFolderOrganizer.h"
00027 #include "DQMServices/Core/interface/DQMStore.h"
00028 // Geometry
00029 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
00030 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
00031 #include "Geometry/TrackerGeometryBuilder/interface/PixelGeomDetUnit.h"
00032 #include "Geometry/CommonTopologies/interface/PixelTopology.h"
00033 // DataFormats
00034 #include "DataFormats/DetId/interface/DetId.h"
00035 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
00036 #include "DataFormats/SiPixelDetId/interface/PixelBarrelName.h"
00037 #include "DataFormats/SiPixelDetId/interface/PixelEndcapName.h"
00038 //
00039 #include <string>
00040 #include <stdlib.h>
00041 #include <iostream>
00042 #include <fstream>
00043 
00044 using namespace std;
00045 using namespace edm;
00046 
00047 SiPixelDigiSource::SiPixelDigiSource(const edm::ParameterSet& iConfig) :
00048   conf_(iConfig),
00049   src_( conf_.getParameter<edm::InputTag>( "src" ) ),
00050   saveFile( conf_.getUntrackedParameter<bool>("saveFile",false) ),
00051   isPIB( conf_.getUntrackedParameter<bool>("isPIB",false) ),
00052   slowDown( conf_.getUntrackedParameter<bool>("slowDown",false) ),
00053   modOn( conf_.getUntrackedParameter<bool>("modOn",true) ),
00054   twoDimOn( conf_.getUntrackedParameter<bool>("twoDimOn",true) ),
00055   twoDimModOn( conf_.getUntrackedParameter<bool>("twoDimModOn",true) ),
00056   twoDimOnlyLayDisk( conf_.getUntrackedParameter<bool>("twoDimOnlyLayDisk",false) ),
00057   hiRes( conf_.getUntrackedParameter<bool>("hiRes",false) ),
00058   reducedSet( conf_.getUntrackedParameter<bool>("reducedSet",false) ),
00059   ladOn( conf_.getUntrackedParameter<bool>("ladOn",false) ), 
00060   layOn( conf_.getUntrackedParameter<bool>("layOn",false) ), 
00061   phiOn( conf_.getUntrackedParameter<bool>("phiOn",false) ), 
00062   ringOn( conf_.getUntrackedParameter<bool>("ringOn",false) ), 
00063   bladeOn( conf_.getUntrackedParameter<bool>("bladeOn",false) ), 
00064   diskOn( conf_.getUntrackedParameter<bool>("diskOn",false) ),
00065   bigEventSize( conf_.getUntrackedParameter<int>("bigEventSize",1000) )
00066 {
00067    theDMBE = edm::Service<DQMStore>().operator->();
00068    LogInfo ("PixelDQM") << "SiPixelDigiSource::SiPixelDigiSource: Got DQM BackEnd interface"<<endl;
00069 }
00070 
00071 
00072 SiPixelDigiSource::~SiPixelDigiSource()
00073 {
00074    // do anything here that needs to be done at desctruction time
00075    // (e.g. close files, deallocate resources etc.)
00076   LogInfo ("PixelDQM") << "SiPixelDigiSource::~SiPixelDigiSource: Destructor"<<endl;
00077 }
00078 
00079 
00080 void SiPixelDigiSource::beginJob(){
00081   firstRun = true;  
00082   // find a FED# for the current detId:
00083   ifstream infile(edm::FileInPath("DQM/SiPixelMonitorClient/test/detId.dat").fullPath().c_str(),ios::in);
00084   int nModsInFile=0;
00085   assert(!infile.fail());
00086   while(!infile.eof()&&nModsInFile<1440) {
00087     infile >> I_name[nModsInFile] >> I_detId[nModsInFile] >> I_fedId[nModsInFile] >> I_linkId1[nModsInFile] >> I_linkId2[nModsInFile];
00088     //cout<<nModsInFile<<" , "<<I_name[nModsInFile]<<" , "<<I_detId[nModsInFile]<<" , "<<I_fedId[nModsInFile]<<" , "<<I_linkId[nModsInFile]<<endl; ;
00089     nModsInFile++;
00090   }
00091   infile.close();
00092 }
00093 
00094 void SiPixelDigiSource::beginRun(const edm::Run& r, const edm::EventSetup& iSetup){
00095   LogInfo ("PixelDQM") << " SiPixelDigiSource::beginJob - Initialisation ... " << std::endl;
00096   LogInfo ("PixelDQM") << "Mod/Lad/Lay/Phi " << modOn << "/" << ladOn << "/" 
00097                        << layOn << "/" << phiOn << std::endl;
00098   LogInfo ("PixelDQM") << "Blade/Disk/Ring" << bladeOn << "/" << diskOn << "/" 
00099                        << ringOn << std::endl;
00100   
00101   LogInfo ("PixelDQM") << "2DIM IS " << twoDimOn << " and set to high resolution? " << hiRes << "\n";
00102 
00103   if(firstRun){
00104     eventNo = 0;
00105     lumSec = 0;
00106     nLumiSecs = 0;
00107     nBigEvents = 0;
00108     nBPIXDigis = 0; 
00109     nFPIXDigis = 0;
00110     for(int i=0; i!=40; i++) nDigisPerFed[i]=0;  
00111     for(int i=0; i!=4; i++) nDigisPerDisk[i]=0;  
00112     nDP1P1M1 = 0;
00113     nDP1P1M2 = 0;
00114     nDP1P1M3 = 0;
00115     nDP1P1M4 = 0;
00116     nDP1P2M1 = 0;
00117     nDP1P2M2 = 0;
00118     nDP1P2M3 = 0;
00119     nDP2P1M1 = 0;
00120     nDP2P1M2 = 0;
00121     nDP2P1M3 = 0;
00122     nDP2P1M4 = 0;
00123     nDP2P2M1 = 0;
00124     nDP2P2M2 = 0;
00125     nDP2P2M3 = 0;
00126     nDM1P1M1 = 0;
00127     nDM1P1M2 = 0;
00128     nDM1P1M3 = 0;
00129     nDM1P1M4 = 0;
00130     nDM1P2M1 = 0;
00131     nDM1P2M2 = 0;
00132     nDM1P2M3 = 0;
00133     nDM2P1M1 = 0;
00134     nDM2P1M2 = 0;
00135     nDM2P1M3 = 0;
00136     nDM2P1M4 = 0;
00137     nDM2P2M1 = 0;
00138     nDM2P2M2 = 0;
00139     nDM2P2M3 = 0;
00140     nL1M1 = 0;
00141     nL1M2 = 0;
00142     nL1M3 = 0;
00143     nL1M4 = 0;
00144     nL2M1 = 0;
00145     nL2M2 = 0;
00146     nL2M3 = 0;
00147     nL2M4 = 0;
00148     nL3M1 = 0;
00149     nL3M2 = 0;
00150     nL3M3 = 0;
00151     nL3M4 = 0;
00152     
00153     
00154     // Build map
00155     buildStructure(iSetup);
00156     // Book Monitoring Elements
00157     bookMEs();
00158     firstRun = false;
00159   }
00160 }
00161 
00162 
00163 void SiPixelDigiSource::endJob(void){
00164 
00165   if(saveFile) {
00166     LogInfo ("PixelDQM") << " SiPixelDigiSource::endJob - Saving Root File " << std::endl;
00167     std::string outputFile = conf_.getParameter<std::string>("outputFile");
00168     theDMBE->save( outputFile.c_str() );
00169   }
00170 
00171 }
00172 
00173 //------------------------------------------------------------------
00174 // Method called for every event
00175 //------------------------------------------------------------------
00176 void SiPixelDigiSource::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
00177 {
00178   eventNo++;
00179   //cout<<"BIGFATEVENTNUMBER: "<<eventNo<<endl;
00180 
00181   // get input data
00182   edm::Handle< edm::DetSetVector<PixelDigi> >  input;
00183   iEvent.getByLabel( src_, input );
00184   if (!input.isValid()) return; 
00185   // Get DQM interface
00186   DQMStore* theDMBE = edm::Service<DQMStore>().operator->();
00187   
00188   //float iOrbitSec = iEvent.orbitNumber()/11223.;
00189   int bx = iEvent.bunchCrossing();
00190   //long long tbx = (long long)iEvent.orbitNumber() * 3564 + bx;
00191   int lumiSection = (int)iEvent.luminosityBlock();
00192   int nEventDigis = 0; int nActiveModules = 0;
00193   //int nEventBPIXDigis = 0; int nEventFPIXDigis = 0;
00194   
00195   if(modOn){
00196     MonitorElement* meReset = theDMBE->get("Pixel/averageDigiOccupancy");
00197     //if(meReset && eventNo%1000==0){
00198     if(meReset && lumiSection%8==0){
00199       meReset->Reset();
00200       nBPIXDigis = 0; 
00201       nFPIXDigis = 0;
00202       for(int i=0; i!=40; i++) nDigisPerFed[i]=0;  
00203     }
00204   }
00205   if(!modOn){
00206     MonitorElement* meReset = theDMBE->get("Pixel/averageDigiOccupancy");
00207     if(meReset && lumiSection%1==0){
00208       meReset->Reset();
00209       nBPIXDigis = 0; 
00210       nFPIXDigis = 0;
00211       for(int i=0; i!=40; i++) nDigisPerFed[i]=0;  
00212     }
00213   }
00214   
00215   std::map<uint32_t,SiPixelDigiModule*>::iterator struct_iter;
00216   for(int i=0; i!=192; i++) numberOfDigis[i]=0;
00217   for(int i=0; i!=1152; i++) nDigisPerChan[i]=0;  
00218   for(int i=0; i!=4; i++) nDigisPerDisk[i]=0;  
00219   for (struct_iter = thePixelStructure.begin() ; struct_iter != thePixelStructure.end() ; struct_iter++) {
00220     int numberOfDigisMod = (*struct_iter).second->fill(*input, modOn, 
00221                                 ladOn, layOn, phiOn, 
00222                                 bladeOn, diskOn, ringOn, 
00223                                 twoDimOn, reducedSet, twoDimModOn, twoDimOnlyLayDisk,
00224                                 nDigisA, nDigisB);
00225     if(numberOfDigisMod>0){
00226       //if((*struct_iter).first == I_detId[39]) 
00227       //std::cout << "FED " << (*struct_iter).first << " NDigis all modules..." << numberOfDigisMod << std::endl;
00228       nEventDigis = nEventDigis + numberOfDigisMod;  
00229       nActiveModules++;  
00230       bool barrel = DetId((*struct_iter).first).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
00231       bool endcap = DetId((*struct_iter).first).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
00232       //if((*struct_iter).first >= 302055684 && (*struct_iter).first <= 302197792 ){ // Barrel
00233       if(barrel){ // Barrel
00234         //cout<<"AAbpix: "<<numberOfDigisMod<<" + "<<nBPIXDigis<<" = ";
00235         nBPIXDigis = nBPIXDigis + numberOfDigisMod;
00236         //cout<<nBPIXDigis<<endl;
00237         for(int i=0; i!=768; ++i){
00238           //cout<<"\t\t\t bpix: "<<i<<" , "<<(*struct_iter).first<<" , "<<I_detId[i]<<endl;
00239           if((*struct_iter).first == I_detId[i]){
00240             //if(I_fedId[i]>=32&&I_fedId[i]<=39) std::cout<<"Attention: a BPIX module matched to an FPIX FED!"<<std::endl;
00241             nDigisPerFed[I_fedId[i]]=nDigisPerFed[I_fedId[i]]+numberOfDigisMod;
00242             //cout<<"BPIX: "<<i<<" , "<<I_fedId[i]<<" , "<<numberOfDigisMod<<" , "<<nDigisPerFed[I_fedId[i]]<<endl;
00243             int index1 = 0; int index2 = 0;
00244             if(I_linkId1[i]>0) index1 = I_fedId[i]*36+(I_linkId1[i]-1); 
00245             if(I_linkId2[i]>0) index2 = I_fedId[i]*36+(I_linkId2[i]-1);
00246             if(nDigisA>0 && I_linkId1[i]>0) nDigisPerChan[index1]=nDigisPerChan[index1]+nDigisA;
00247             if(nDigisB>0 && I_linkId2[i]>0) nDigisPerChan[index2]=nDigisPerChan[index2]+nDigisB;
00248             //if (index1==35 || index2==35) cout<<"BPIX 35: "<<I_detId[i]<<" : "<<I_fedId[i]<<"  "<<I_linkId1[i]<<" , "<<I_fedId[i]<<"  "<<I_linkId2[i]<<" , "<<nDigisA<<" , "<<nDigisB<<endl;
00249             i=767;
00250           }
00251         }
00252       //}else if((*struct_iter).first >= 343999748 && (*struct_iter).first <= 352477708 ){ // Endcap
00253       }else if(endcap){ // Endcap
00254 
00255         //cout<<"AAfpix: "<<nFPIXDigis<<" = ";
00256         nFPIXDigis = nFPIXDigis + numberOfDigisMod;
00257         //cout<<nFPIXDigis<<endl;
00258         PixelEndcapName::HalfCylinder side = PixelEndcapName(DetId((*struct_iter).first)).halfCylinder();
00259         int disk = PixelEndcapName(DetId((*struct_iter).first)).diskName();
00260         int blade = PixelEndcapName(DetId((*struct_iter).first)).bladeName();
00261         int panel = PixelEndcapName(DetId((*struct_iter).first)).pannelName();
00262         int module = PixelEndcapName(DetId((*struct_iter).first)).plaquetteName();
00263         //std::cout<<"Endcap: "<<side<<" , "<<disk<<" , "<<blade<<" , "<<panel<<" , "<<std::endl;
00264         int iter=0; int i=0;
00265         if(side==PixelEndcapName::mI){
00266           if(disk==1){
00267             i=0;
00268             if(panel==1){ if(module==1) nDM1P1M1+=numberOfDigisMod; 
00269                           else if(module==2) nDM1P1M2+=numberOfDigisMod; 
00270                           else if(module==3) nDM1P1M3+=numberOfDigisMod; 
00271                           else if(module==4) nDM1P1M4+=numberOfDigisMod;}
00272             else if(panel==2){ if(module==1) nDM1P2M1+=numberOfDigisMod; 
00273                                else if(module==2) nDM1P2M2+=numberOfDigisMod; 
00274                                else if(module==3) nDM1P2M3+=numberOfDigisMod; }
00275             if(blade==1){ if(panel==1) iter=i; else if(panel==2) iter=i+1; }
00276             if(blade==2){ if(panel==1) iter=i+2; else if(panel==2) iter=i+3; }
00277             if(blade==3){ if(panel==1) iter=i+4; else if(panel==2) iter=i+5; }
00278             if(blade==4){ if(panel==1) iter=i+6; else if(panel==2) iter=i+7; }
00279             if(blade==5){ if(panel==1) iter=i+8; else if(panel==2) iter=i+9; }
00280             if(blade==6){ if(panel==1) iter=i+10; else if(panel==2) iter=i+11; }
00281             if(blade==7){ if(panel==1) iter=i+12; else if(panel==2) iter=i+13; }
00282             if(blade==8){ if(panel==1) iter=i+14; else if(panel==2) iter=i+15; }
00283             if(blade==9){ if(panel==1) iter=i+16; else if(panel==2) iter=i+17; }
00284             if(blade==10){ if(panel==1) iter=i+18; else if(panel==2) iter=i+19; }
00285             if(blade==11){ if(panel==1) iter=i+20; else if(panel==2) iter=i+21; }
00286             if(blade==12){ if(panel==1) iter=i+22; else if(panel==2) iter=i+23; }
00287           }else if(disk==2){
00288             i=24;
00289             if(panel==1){ if(module==1) nDM2P1M1+=numberOfDigisMod; 
00290                           else if(module==2) nDM2P1M2+=numberOfDigisMod; 
00291                           else if(module==3) nDM2P1M3+=numberOfDigisMod; 
00292                           else if(module==4) nDM2P1M4+=numberOfDigisMod;}
00293             else if(panel==2){ if(module==1) nDM2P2M1+=numberOfDigisMod; 
00294                                else if(module==2) nDM2P2M2+=numberOfDigisMod; 
00295                                else if(module==3) nDM2P2M3+=numberOfDigisMod; }
00296             if(blade==1){ if(panel==1) iter=i; else if(panel==2) iter=i+1; }
00297             if(blade==2){ if(panel==1) iter=i+2; else if(panel==2) iter=i+3; }
00298             if(blade==3){ if(panel==1) iter=i+4; else if(panel==2) iter=i+5; }
00299             if(blade==4){ if(panel==1) iter=i+6; else if(panel==2) iter=i+7; }
00300             if(blade==5){ if(panel==1) iter=i+8; else if(panel==2) iter=i+9; }
00301             if(blade==6){ if(panel==1) iter=i+10; else if(panel==2) iter=i+11; }
00302             if(blade==7){ if(panel==1) iter=i+12; else if(panel==2) iter=i+13; }
00303             if(blade==8){ if(panel==1) iter=i+14; else if(panel==2) iter=i+15; }
00304             if(blade==9){ if(panel==1) iter=i+16; else if(panel==2) iter=i+17; }
00305             if(blade==10){ if(panel==1) iter=i+18; else if(panel==2) iter=i+19; }
00306             if(blade==11){ if(panel==1) iter=i+20; else if(panel==2) iter=i+21; }
00307             if(blade==12){ if(panel==1) iter=i+22; else if(panel==2) iter=i+23; }
00308           }
00309         }else if(side==PixelEndcapName::mO){
00310           if(disk==1){
00311             i=48;
00312             if(panel==1){ if(module==1) nDM1P1M1+=numberOfDigisMod; 
00313                           else if(module==2) nDM1P1M2+=numberOfDigisMod; 
00314                           else if(module==3) nDM1P1M3+=numberOfDigisMod; 
00315                           else if(module==4) nDM1P1M4+=numberOfDigisMod;}
00316             else if(panel==2){ if(module==1) nDM1P2M1+=numberOfDigisMod; 
00317                                else if(module==2) nDM1P2M2+=numberOfDigisMod; 
00318                                else if(module==3) nDM1P2M3+=numberOfDigisMod; }
00319             if(blade==1){ if(panel==1) iter=i; else if(panel==2) iter=i+1; }
00320             if(blade==2){ if(panel==1) iter=i+2; else if(panel==2) iter=i+3; }
00321             if(blade==3){ if(panel==1) iter=i+4; else if(panel==2) iter=i+5; }
00322             if(blade==4){ if(panel==1) iter=i+6; else if(panel==2) iter=i+7; }
00323             if(blade==5){ if(panel==1) iter=i+8; else if(panel==2) iter=i+9; }
00324             if(blade==6){ if(panel==1) iter=i+10; else if(panel==2) iter=i+11; }
00325             if(blade==7){ if(panel==1) iter=i+12; else if(panel==2) iter=i+13; }
00326             if(blade==8){ if(panel==1) iter=i+14; else if(panel==2) iter=i+15; }
00327             if(blade==9){ if(panel==1) iter=i+16; else if(panel==2) iter=i+17; }
00328             if(blade==10){ if(panel==1) iter=i+18; else if(panel==2) iter=i+19; }
00329             if(blade==11){ if(panel==1) iter=i+20; else if(panel==2) iter=i+21; }
00330             if(blade==12){ if(panel==1) iter=i+22; else if(panel==2) iter=i+23; }
00331           }else if(disk==2){
00332             i=72;
00333             if(panel==1){ if(module==1) nDM2P1M1+=numberOfDigisMod; 
00334                           else if(module==2) nDM2P1M2+=numberOfDigisMod; 
00335                           else if(module==3) nDM2P1M3+=numberOfDigisMod; 
00336                           else if(module==4) nDM2P1M4+=numberOfDigisMod;}
00337             else if(panel==2){ if(module==1) nDM2P2M1+=numberOfDigisMod; 
00338                                else if(module==2) nDM2P2M2+=numberOfDigisMod; 
00339                                else if(module==3) nDM2P2M3+=numberOfDigisMod; }
00340             if(blade==1){ if(panel==1) iter=i; else if(panel==2) iter=i+1; }
00341             if(blade==2){ if(panel==1) iter=i+2; else if(panel==2) iter=i+3; }
00342             if(blade==3){ if(panel==1) iter=i+4; else if(panel==2) iter=i+5; }
00343             if(blade==4){ if(panel==1) iter=i+6; else if(panel==2) iter=i+7; }
00344             if(blade==5){ if(panel==1) iter=i+8; else if(panel==2) iter=i+9; }
00345             if(blade==6){ if(panel==1) iter=i+10; else if(panel==2) iter=i+11; }
00346             if(blade==7){ if(panel==1) iter=i+12; else if(panel==2) iter=i+13; }
00347             if(blade==8){ if(panel==1) iter=i+14; else if(panel==2) iter=i+15; }
00348             if(blade==9){ if(panel==1) iter=i+16; else if(panel==2) iter=i+17; }
00349             if(blade==10){ if(panel==1) iter=i+18; else if(panel==2) iter=i+19; }
00350             if(blade==11){ if(panel==1) iter=i+20; else if(panel==2) iter=i+21; }
00351             if(blade==12){ if(panel==1) iter=i+22; else if(panel==2) iter=i+23; }
00352           }
00353         }else if(side==PixelEndcapName::pI){
00354           if(disk==1){
00355             i=96;
00356             if(panel==1){ if(module==1) nDP1P1M1+=numberOfDigisMod; 
00357                           else if(module==2) nDP1P1M2+=numberOfDigisMod; 
00358                           else if(module==3) nDP1P1M3+=numberOfDigisMod; 
00359                           else if(module==4) nDP1P1M4+=numberOfDigisMod;}
00360             else if(panel==2){ if(module==1) nDP1P2M1+=numberOfDigisMod; 
00361                                else if(module==2) nDP1P2M2+=numberOfDigisMod; 
00362                                else if(module==3) nDP1P2M3+=numberOfDigisMod; }
00363             if(blade==1){ if(panel==1) iter=i; else if(panel==2) iter=i+1; }
00364             if(blade==2){ if(panel==1) iter=i+2; else if(panel==2) iter=i+3; }
00365             if(blade==3){ if(panel==1) iter=i+4; else if(panel==2) iter=i+5; }
00366             if(blade==4){ if(panel==1) iter=i+6; else if(panel==2) iter=i+7; }
00367             if(blade==5){ if(panel==1) iter=i+8; else if(panel==2) iter=i+9; }
00368             if(blade==6){ if(panel==1) iter=i+10; else if(panel==2) iter=i+11; }
00369             if(blade==7){ if(panel==1) iter=i+12; else if(panel==2) iter=i+13; }
00370             if(blade==8){ if(panel==1) iter=i+14; else if(panel==2) iter=i+15; }
00371             if(blade==9){ if(panel==1) iter=i+16; else if(panel==2) iter=i+17; }
00372             if(blade==10){ if(panel==1) iter=i+18; else if(panel==2) iter=i+19; }
00373             if(blade==11){ if(panel==1) iter=i+20; else if(panel==2) iter=i+21; }
00374             if(blade==12){ if(panel==1) iter=i+22; else if(panel==2) iter=i+23; }
00375           }else if(disk==2){
00376             i=120;
00377             if(panel==1){ if(module==1) nDP2P1M1+=numberOfDigisMod; 
00378                           else if(module==2) nDP2P1M2+=numberOfDigisMod; 
00379                           else if(module==3) nDP2P1M3+=numberOfDigisMod; 
00380                           else if(module==4) nDP2P1M4+=numberOfDigisMod;}
00381             else if(panel==2){ if(module==1) nDP2P2M1+=numberOfDigisMod; 
00382                                else if(module==2) nDP2P2M2+=numberOfDigisMod; 
00383                                else if(module==3) nDP2P2M3+=numberOfDigisMod; }
00384             if(blade==1){ if(panel==1) iter=i; else if(panel==2) iter=i+1; }
00385             if(blade==2){ if(panel==1) iter=i+2; else if(panel==2) iter=i+3; }
00386             if(blade==3){ if(panel==1) iter=i+4; else if(panel==2) iter=i+5; }
00387             if(blade==4){ if(panel==1) iter=i+6; else if(panel==2) iter=i+7; }
00388             if(blade==5){ if(panel==1) iter=i+8; else if(panel==2) iter=i+9; }
00389             if(blade==6){ if(panel==1) iter=i+10; else if(panel==2) iter=i+11; }
00390             if(blade==7){ if(panel==1) iter=i+12; else if(panel==2) iter=i+13; }
00391             if(blade==8){ if(panel==1) iter=i+14; else if(panel==2) iter=i+15; }
00392             if(blade==9){ if(panel==1) iter=i+16; else if(panel==2) iter=i+17; }
00393             if(blade==10){ if(panel==1) iter=i+18; else if(panel==2) iter=i+19; }
00394             if(blade==11){ if(panel==1) iter=i+20; else if(panel==2) iter=i+21; }
00395             if(blade==12){ if(panel==1) iter=i+22; else if(panel==2) iter=i+23; }
00396           }
00397         }else if(side==PixelEndcapName::pO){
00398           if(disk==1){
00399             i=144;
00400             if(panel==1){ if(module==1) nDP1P1M1+=numberOfDigisMod; 
00401                           else if(module==2) nDP1P1M2+=numberOfDigisMod; 
00402                           else if(module==3) nDP1P1M3+=numberOfDigisMod; 
00403                           else if(module==4) nDP1P1M4+=numberOfDigisMod;}
00404             else if(panel==2){ if(module==1) nDP1P2M1+=numberOfDigisMod; 
00405                                else if(module==2) nDP1P2M2+=numberOfDigisMod; 
00406                                else if(module==3) nDP1P2M3+=numberOfDigisMod; }
00407             if(blade==1){ if(panel==1) iter=i; else if(panel==2) iter=i+1; }
00408             if(blade==2){ if(panel==1) iter=i+2; else if(panel==2) iter=i+3; }
00409             if(blade==3){ if(panel==1) iter=i+4; else if(panel==2) iter=i+5; }
00410             if(blade==4){ if(panel==1) iter=i+6; else if(panel==2) iter=i+7; }
00411             if(blade==5){ if(panel==1) iter=i+8; else if(panel==2) iter=i+9; }
00412             if(blade==6){ if(panel==1) iter=i+10; else if(panel==2) iter=i+11; }
00413             if(blade==7){ if(panel==1) iter=i+12; else if(panel==2) iter=i+13; }
00414             if(blade==8){ if(panel==1) iter=i+14; else if(panel==2) iter=i+15; }
00415             if(blade==9){ if(panel==1) iter=i+16; else if(panel==2) iter=i+17; }
00416             if(blade==10){ if(panel==1) iter=i+18; else if(panel==2) iter=i+19; }
00417             if(blade==11){ if(panel==1) iter=i+20; else if(panel==2) iter=i+21; }
00418             if(blade==12){ if(panel==1) iter=i+22; else if(panel==2) iter=i+23; }
00419           }else if(disk==2){
00420             i=168;
00421             if(panel==1){ if(module==1) nDP2P1M1+=numberOfDigisMod; 
00422                           else if(module==2) nDP2P1M2+=numberOfDigisMod; 
00423                           else if(module==3) nDP2P1M3+=numberOfDigisMod; 
00424                           else if(module==4) nDP2P1M4+=numberOfDigisMod;}
00425             else if(panel==2){ if(module==1) nDP2P2M1+=numberOfDigisMod; 
00426                                else if(module==2) nDP2P2M2+=numberOfDigisMod; 
00427                                else if(module==3) nDP2P2M3+=numberOfDigisMod; }
00428             if(blade==1){ if(panel==1) iter=i; else if(panel==2) iter=i+1; }
00429             if(blade==2){ if(panel==1) iter=i+2; else if(panel==2) iter=i+3; }
00430             if(blade==3){ if(panel==1) iter=i+4; else if(panel==2) iter=i+5; }
00431             if(blade==4){ if(panel==1) iter=i+6; else if(panel==2) iter=i+7; }
00432             if(blade==5){ if(panel==1) iter=i+8; else if(panel==2) iter=i+9; }
00433             if(blade==6){ if(panel==1) iter=i+10; else if(panel==2) iter=i+11; }
00434             if(blade==7){ if(panel==1) iter=i+12; else if(panel==2) iter=i+13; }
00435             if(blade==8){ if(panel==1) iter=i+14; else if(panel==2) iter=i+15; }
00436             if(blade==9){ if(panel==1) iter=i+16; else if(panel==2) iter=i+17; }
00437             if(blade==10){ if(panel==1) iter=i+18; else if(panel==2) iter=i+19; }
00438             if(blade==11){ if(panel==1) iter=i+20; else if(panel==2) iter=i+21; }
00439             if(blade==12){ if(panel==1) iter=i+22; else if(panel==2) iter=i+23; }
00440           }
00441         }
00442         numberOfDigis[iter]=numberOfDigis[iter]+numberOfDigisMod;
00443         //if(side==PixelEndcapName::pO||side==PixelEndcapName::pI){
00444         //  if(disk==2){ 
00445         //  std::cout<<"status: "<<iter<<","<<side<<","<<disk<<","<<blade<<","<<panel<<","<<numberOfDigisMod<<","<<numberOfDigis[iter]<<std::endl;       
00446         //}}
00447         for(int i=768; i!=1440; i++){
00448           //cout<<"\t\t\t fpix: "<<i<<" , "<<(*struct_iter).first<<" , "<<I_detId[i]<<endl;
00449           if((*struct_iter).first == I_detId[i]){
00450             //if(I_fedId[i]<32||I_fedId[i]>39) std::cout<<"Attention: an FPIX module matched to a BPIX FED!"<<std::endl;
00451             nDigisPerFed[I_fedId[i]]=nDigisPerFed[I_fedId[i]]+numberOfDigisMod;
00452             //cout<<"FPIX: "<<i<<" , "<<I_fedId[i]<<" , "<<nDigisPerFed[I_fedId[i]]<< ", "<<numberOfDigisMod << endl;
00453             i=1439;
00454           }
00455         }
00456         //cout<<"NDigis Endcap: "<<nDM1P1M1/2.<<" "<<nDM1P2M1/6.<<" "<<nDM1P1M2/6.<<" "<<nDM1P2M2/8.<<" "<<nDM1P1M3/8.<<" "<<nDM1P2M3/10.<<" "<<nDM1P1M4/5.<<endl;
00457       } //endif Barrel/Endcap
00458       //cout<<"numberOfDigis: "<<numberOfDigisMod<<" , nBPIXDigis: "<<nBPIXDigis<<" , nFPIXDigis: "<<nFPIXDigis<<endl;
00459       // digi occupancy per individual FED channel:
00460     } // endif any digis in this module
00461   } // endfor loop over all modules
00462   
00463 //  if(lumiSection>lumSec){ lumSec = lumiSection; nLumiSecs++; }
00464 //  if(nEventDigis>bigEventSize) nBigEvents++;
00465 //  if(nLumiSecs%5==0){
00466   
00467   MonitorElement* meE; MonitorElement* meE1; MonitorElement* meE2; MonitorElement* meE3; MonitorElement* meE4; 
00468   meE=theDMBE->get("Pixel/Endcap/ALLMODS_ndigisCHAN_Endcap");
00469   if(meE){ for(int j=0; j!=192; j++) if(numberOfDigis[j]>0) meE->Fill((float)numberOfDigis[j]);}
00470   meE1=theDMBE->get("Pixel/Endcap/ALLMODS_ndigisCHAN_EndcapDm1");
00471   if(meE1){ for(int j=0; j!=72; j++) if((j<24||j>47)&&numberOfDigis[j]>0) meE1->Fill((float)numberOfDigis[j]);}
00472   meE2=theDMBE->get("Pixel/Endcap/ALLMODS_ndigisCHAN_EndcapDm2");
00473   if(meE2){ for(int j=24; j!=96; j++) if((j<48||j>71)&&numberOfDigis[j]>0) meE2->Fill((float)numberOfDigis[j]);}
00474   meE3=theDMBE->get("Pixel/Endcap/ALLMODS_ndigisCHAN_EndcapDp1");
00475   if(meE3){ for(int j=96; j!=168; j++) if((j<120||j>143)&&numberOfDigis[j]>0) meE3->Fill((float)numberOfDigis[j]);}
00476   meE4=theDMBE->get("Pixel/Endcap/ALLMODS_ndigisCHAN_EndcapDp2");
00477   if(meE4){ for(int j=120; j!=192; j++) if((j<144||j>167)&&numberOfDigis[j]>0) meE4->Fill((float)numberOfDigis[j]);}
00478   
00479   MonitorElement* me1; MonitorElement* me2; MonitorElement* me3; MonitorElement* me4; MonitorElement* me5;
00480   MonitorElement* me6; MonitorElement* me7; MonitorElement* me8; MonitorElement* me9; MonitorElement* me10; MonitorElement* me11;
00481   MonitorElement* me12; MonitorElement* me13; MonitorElement* me14; MonitorElement* me15; MonitorElement* me16; MonitorElement* me17;
00482   MonitorElement* me18; MonitorElement* me19; MonitorElement* me20; MonitorElement* me21; MonitorElement* me22; MonitorElement* me23;
00483   MonitorElement* me24; MonitorElement* me25; MonitorElement* me26; MonitorElement* me27; MonitorElement* me28; MonitorElement* me29;
00484   MonitorElement* me30; MonitorElement* me31; MonitorElement* me32; MonitorElement* me33; MonitorElement* me34; MonitorElement* me35;
00485   MonitorElement* me36;
00486   me1=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh1");
00487   if(me1){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+0]>0) me1->Fill((float)nDigisPerChan[i*36+0]);}
00488   me2=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh2");
00489   if(me2){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+1]>0) me2->Fill((float)nDigisPerChan[i*36+1]);}
00490   me3=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh3");
00491   if(me3){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+2]>0) me3->Fill((float)nDigisPerChan[i*36+2]);}
00492   me4=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh4");
00493   if(me4){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+3]>0) me4->Fill((float)nDigisPerChan[i*36+3]);}
00494   me5=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh5");
00495   if(me5){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+4]>0) me5->Fill((float)nDigisPerChan[i*36+4]);}
00496   me6=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh6");
00497   if(me6){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+5]>0) me6->Fill((float)nDigisPerChan[i*36+5]);}
00498   me7=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh7");
00499   if(me7){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+6]>0) me7->Fill((float)nDigisPerChan[i*36+6]);}
00500   me8=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh8");
00501   if(me8){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+7]>0) me8->Fill((float)nDigisPerChan[i*36+7]);}
00502   me9=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh9");
00503   if(me9){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+8]>0) me9->Fill((float)nDigisPerChan[i*36+8]);}
00504   me10=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh10");
00505   if(me10){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+9]>0) me10->Fill((float)nDigisPerChan[i*36+9]);}
00506   me11=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh11");
00507   if(me11){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+10]>0) me11->Fill((float)nDigisPerChan[i*36+10]);}
00508   me12=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh12");
00509   if(me12){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+11]>0) me12->Fill((float)nDigisPerChan[i*36+11]);}
00510   me13=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh13");
00511   if(me13){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+12]>0) me13->Fill((float)nDigisPerChan[i*36+12]);}
00512   me14=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh14");
00513   if(me14){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+13]>0) me14->Fill((float)nDigisPerChan[i*36+13]);}
00514   me15=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh15");
00515   if(me15){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+14]>0) me15->Fill((float)nDigisPerChan[i*36+14]);}
00516   me16=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh16");
00517   if(me16){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+15]>0) me16->Fill((float)nDigisPerChan[i*36+15]);}
00518   me17=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh17");
00519   if(me17){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+16]>0) me17->Fill((float)nDigisPerChan[i*36+16]);}
00520   me18=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh18");
00521   if(me18){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+17]>0) me18->Fill((float)nDigisPerChan[i*36+17]);}
00522   me19=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh19");
00523   if(me19){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+18]>0) me19->Fill((float)nDigisPerChan[i*36+18]);}
00524   me20=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh20");
00525   if(me20){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+19]>0) me20->Fill((float)nDigisPerChan[i*36+19]);}
00526   me21=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh21");
00527   if(me21){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+20]>0) me21->Fill((float)nDigisPerChan[i*36+20]);}
00528   me22=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh22");
00529   if(me22){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+21]>0) me22->Fill((float)nDigisPerChan[i*36+21]);}
00530   me23=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh23");
00531   if(me23){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+22]>0) me23->Fill((float)nDigisPerChan[i*36+22]);}
00532   me24=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh24");
00533   if(me24){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+23]>0) me24->Fill((float)nDigisPerChan[i*36+23]);}
00534   me25=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh25");
00535   if(me25){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+24]>0) me25->Fill((float)nDigisPerChan[i*36+24]);}
00536   me26=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh26");
00537   if(me26){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+25]>0) me26->Fill((float)nDigisPerChan[i*36+25]);}
00538   me27=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh27");
00539   if(me27){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+26]>0) me27->Fill((float)nDigisPerChan[i*36+26]);}
00540   me28=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh28");
00541   if(me28){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+27]>0) me28->Fill((float)nDigisPerChan[i*36+27]);}
00542   me29=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh29");
00543   if(me29){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+28]>0) me29->Fill((float)nDigisPerChan[i*36+28]);}
00544   me30=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh30");
00545   if(me30){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+29]>0) me30->Fill((float)nDigisPerChan[i*36+29]);}
00546   me31=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh31");
00547   if(me31){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+30]>0) me31->Fill((float)nDigisPerChan[i*36+30]);}
00548   me32=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh32");
00549   if(me32){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+31]>0) me32->Fill((float)nDigisPerChan[i*36+31]);}
00550   me33=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh33");
00551   if(me33){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+32]>0) me33->Fill((float)nDigisPerChan[i*36+32]);}
00552   me34=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh34");
00553   if(me34){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+33]>0) me34->Fill((float)nDigisPerChan[i*36+33]);}
00554   me35=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh35");
00555   if(me35){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+34]>0) me35->Fill((float)nDigisPerChan[i*36+34]);}
00556   me36=theDMBE->get("Pixel/Barrel/ALLMODS_ndigisCHAN_BarrelCh36");
00557   if(me36){ for(int i=0; i!=32; i++) if(nDigisPerChan[i*36+35]>0) me36->Fill((float)nDigisPerChan[i*36+35]);}
00558   
00559   // Rate of events with >N digis:
00560   MonitorElement* meX1;
00561   if(nEventDigis>bigEventSize){
00562     meX1 = theDMBE->get("Pixel/bigEventRate");
00563     if(meX1) meX1->Fill(lumiSection,1./23.);    
00564   }
00565   //std::cout<<"nEventDigis: "<<nEventDigis<<" , nLumiSecs: "<<nLumiSecs<<" , nBigEvents: "<<nBigEvents<<std::endl;
00566   
00567   // Rate of pixel events and total number of pixel events per BX:
00568   MonitorElement* meX2; MonitorElement* meX3;
00569   if(nActiveModules>=4){
00570     meX2 = theDMBE->get("Pixel/pixEvtsPerBX");
00571     if(meX2) meX2->Fill(float(bx));
00572     meX3 = theDMBE->get("Pixel/pixEventRate");
00573     if(meX3) meX3->Fill(lumiSection, 1./23.);
00574   }
00575   
00576   // Actual digi occupancy in a FED compared to average digi occupancy per FED
00577   MonitorElement* meX4; MonitorElement* meX5;
00578   meX4 = theDMBE->get("Pixel/averageDigiOccupancy");
00579   meX5 = theDMBE->get("Pixel/avgfedDigiOccvsLumi");
00580   if(meX4){
00581     int maxfed=0;
00582     for(int i=0; i!=32; i++){
00583       if(nDigisPerFed[i]>maxfed) maxfed=nDigisPerFed[i];
00584     }
00585     for(int i=0; i!=40; i++){
00586       float averageOcc = 0.;
00587       if(i<32){
00588         float averageBPIXFed = float(nBPIXDigis-maxfed)/31.;
00589         if(averageBPIXFed>0.) averageOcc = nDigisPerFed[i]/averageBPIXFed;
00590         //cout<<"\t BPIX i: "<<i<<" , "<<nBPIXDigis<<" , "<<averageBPIXFed<<" , "<<nDigisPerFed[i]<<" , "<<averageOcc<<endl;
00591       }else{
00592         float averageFPIXFed = float(nFPIXDigis)/8.;
00593         if(averageFPIXFed>0.) averageOcc = nDigisPerFed[i]/averageFPIXFed;
00594         //cout<<"\t FPIX i: "<<i<<" , "<<nFPIXDigis<<" , "<<averageFPIXFed<<" , "<<nDigisPerFed[i]<<" , "<<averageOcc<<endl;
00595       }
00596       meX4->setBinContent(i+1,averageOcc);
00597       int lumiSections8 = int(lumiSection/8);
00598       if (modOn){
00599         if (meX5){
00600           meX5->setBinContent(1+lumiSections8, i+1, averageOcc);
00601         }//endif meX5
00602       }//endif modOn
00603     }
00604   }
00605   
00606   // slow down...
00607   if(slowDown) usleep(10000);
00608   
00609 }
00610 
00611 //------------------------------------------------------------------
00612 // Build data structure
00613 //------------------------------------------------------------------
00614 void SiPixelDigiSource::buildStructure(const edm::EventSetup& iSetup){
00615 
00616   LogInfo ("PixelDQM") <<" SiPixelDigiSource::buildStructure" ;
00617   edm::ESHandle<TrackerGeometry> pDD;
00618   iSetup.get<TrackerDigiGeometryRecord>().get( pDD );
00619 
00620   LogVerbatim ("PixelDQM") << " *** Geometry node for TrackerGeom is  "<<&(*pDD)<<std::endl;
00621   LogVerbatim ("PixelDQM") << " *** I have " << pDD->dets().size() <<" detectors"<<std::endl;
00622   LogVerbatim ("PixelDQM") << " *** I have " << pDD->detTypes().size() <<" types"<<std::endl;
00623   
00624   for(TrackerGeometry::DetContainer::const_iterator it = pDD->dets().begin(); it != pDD->dets().end(); it++){
00625     
00626     if(dynamic_cast<PixelGeomDetUnit*>((*it))!=0){
00627 
00628       DetId detId = (*it)->geographicalId();
00629       const GeomDetUnit      * geoUnit = pDD->idToDetUnit( detId );
00630       const PixelGeomDetUnit * pixDet  = dynamic_cast<const PixelGeomDetUnit*>(geoUnit);
00631       int nrows = (pixDet->specificTopology()).nrows();
00632       int ncols = (pixDet->specificTopology()).ncolumns();
00633 
00634       if(detId.subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel)) {
00635         if(isPIB) continue;
00636         LogDebug ("PixelDQM") << " ---> Adding Barrel Module " <<  detId.rawId() << endl;
00637         uint32_t id = detId();
00638         SiPixelDigiModule* theModule = new SiPixelDigiModule(id, ncols, nrows);
00639         thePixelStructure.insert(pair<uint32_t,SiPixelDigiModule*> (id,theModule));
00640 
00641       } else if(detId.subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap)) {
00642         LogDebug ("PixelDQM") << " ---> Adding Endcap Module " <<  detId.rawId() << endl;
00643         uint32_t id = detId();
00644         SiPixelDigiModule* theModule = new SiPixelDigiModule(id, ncols, nrows);
00645        
00646         PixelEndcapName::HalfCylinder side = PixelEndcapName(DetId(id)).halfCylinder();
00647         int disk   = PixelEndcapName(DetId(id)).diskName();
00648         int blade  = PixelEndcapName(DetId(id)).bladeName();
00649         int panel  = PixelEndcapName(DetId(id)).pannelName();
00650         int module = PixelEndcapName(DetId(id)).plaquetteName();
00651 
00652         char sside[80];  sprintf(sside,  "HalfCylinder_%i",side);
00653         char sdisk[80];  sprintf(sdisk,  "Disk_%i",disk);
00654         char sblade[80]; sprintf(sblade, "Blade_%02i",blade);
00655         char spanel[80]; sprintf(spanel, "Panel_%i",panel);
00656         char smodule[80];sprintf(smodule,"Module_%i",module);
00657         std::string side_str = sside;
00658         std::string disk_str = sdisk;
00659         bool mask = side_str.find("HalfCylinder_1")!=string::npos||
00660                     side_str.find("HalfCylinder_2")!=string::npos||
00661                     side_str.find("HalfCylinder_4")!=string::npos||
00662                     disk_str.find("Disk_2")!=string::npos;
00663         // clutch to take all of FPIX, but no BPIX:
00664         mask = false;
00665         if(isPIB && mask) continue;
00666         
00667         thePixelStructure.insert(pair<uint32_t,SiPixelDigiModule*> (id,theModule));
00668       }
00669 
00670     }
00671   }
00672   LogInfo ("PixelDQM") << " *** Pixel Structure Size " << thePixelStructure.size() << endl;
00673 }
00674 //------------------------------------------------------------------
00675 // Book MEs
00676 //------------------------------------------------------------------
00677 void SiPixelDigiSource::bookMEs(){
00678   
00679   // Get DQM interface
00680   DQMStore* theDMBE = edm::Service<DQMStore>().operator->();
00681   theDMBE->setCurrentFolder("Pixel");
00682   char title[80]; sprintf(title, "Rate of events with >%i digis;LumiSection;Rate [Hz]",bigEventSize);
00683   bigEventRate = theDMBE->book1D("bigEventRate",title,5000,0.,5000.);
00684   char title1[80]; sprintf(title1, "Pixel events vs. BX;BX;# events");
00685   pixEvtsPerBX = theDMBE->book1D("pixEvtsPerBX",title1,3565,0.,3565.);
00686   char title2[80]; sprintf(title2, "Rate of Pixel events;LumiSection;Rate [Hz]");
00687   pixEventRate = theDMBE->book1D("pixEventRate",title2,5000,0.,5000.);
00688   char title3[80]; sprintf(title3, "Average digi occupancy per FED;FED;NDigis/<NDigis>");
00689   averageDigiOccupancy = theDMBE->book1D("averageDigiOccupancy",title3,40,-0.5,39.5);
00690   averageDigiOccupancy->setLumiFlag();
00691   if(modOn){
00692     char title4[80]; sprintf(title4, "FED Digi Occupancy (NDigis/<NDigis>) vs LumiSections;Lumi Section;FED");
00693     avgfedDigiOccvsLumi = theDMBE->book2D ("avgfedDigiOccvsLumi", title4, 400,0., 3200., 40, -0.5, 39.5);
00694   }  
00695   std::map<uint32_t,SiPixelDigiModule*>::iterator struct_iter;
00696  
00697   SiPixelFolderOrganizer theSiPixelFolder;
00698 
00699   for(struct_iter = thePixelStructure.begin(); struct_iter != thePixelStructure.end(); struct_iter++){
00701     if(modOn){
00702       if(theSiPixelFolder.setModuleFolder((*struct_iter).first)){
00703         (*struct_iter).second->book( conf_,0,twoDimOn,hiRes, reducedSet, twoDimModOn);
00704       } else {
00705 
00706         if(!isPIB) throw cms::Exception("LogicError")
00707           << "[SiPixelDigiSource::bookMEs] Creation of DQM folder failed";
00708       }
00709     }
00710     if(ladOn){
00711       if(theSiPixelFolder.setModuleFolder((*struct_iter).first,1)){
00712         (*struct_iter).second->book( conf_,1,twoDimOn,hiRes, reducedSet);
00713         } else {
00714         LogDebug ("PixelDQM") << "PROBLEM WITH LADDER-FOLDER\n";
00715       }
00716    
00717     }
00718     if(layOn || twoDimOnlyLayDisk){
00719       if(theSiPixelFolder.setModuleFolder((*struct_iter).first,2)){
00720         (*struct_iter).second->book( conf_,2,twoDimOn,hiRes, reducedSet, twoDimOnlyLayDisk);
00721         } else {
00722         LogDebug ("PixelDQM") << "PROBLEM WITH LAYER-FOLDER\n";
00723       }
00724     }
00725 
00726     if(phiOn){
00727       if(theSiPixelFolder.setModuleFolder((*struct_iter).first,3)){
00728         (*struct_iter).second->book( conf_,3,twoDimOn,hiRes, reducedSet);
00729         } else {
00730         LogDebug ("PixelDQM") << "PROBLEM WITH PHI-FOLDER\n";
00731       }
00732     }
00733     if(bladeOn){
00734       if(theSiPixelFolder.setModuleFolder((*struct_iter).first,4)){
00735         (*struct_iter).second->book( conf_,4,twoDimOn,hiRes, reducedSet);
00736         } else {
00737         LogDebug ("PixelDQM") << "PROBLEM WITH BLADE-FOLDER\n";
00738       }
00739     }
00740     if(diskOn || twoDimOnlyLayDisk){
00741       if(theSiPixelFolder.setModuleFolder((*struct_iter).first,5)){
00742         (*struct_iter).second->book( conf_,5,twoDimOn,hiRes, reducedSet, twoDimOnlyLayDisk);
00743       } else {
00744         LogDebug ("PixelDQM") << "PROBLEM WITH DISK-FOLDER\n";
00745       }
00746     }
00747     if(ringOn){
00748       if(theSiPixelFolder.setModuleFolder((*struct_iter).first,6)){
00749         (*struct_iter).second->book( conf_,6,twoDimOn,hiRes, reducedSet);
00750       } else {
00751         LogDebug ("PixelDQM") << "PROBLEM WITH RING-FOLDER\n";
00752       }
00753     }
00754   }
00755   std::string currDir = theDMBE->pwd();
00756   theDMBE->cd("Pixel/Barrel");
00757   meNDigisCOMBBarrel_ = theDMBE->book1D("ALLMODS_ndigisCOMB_Barrel","Number of Digis",200,0.,400.);
00758   meNDigisCOMBBarrel_->setAxisTitle("Number of digis per module per event",1);
00759   meNDigisCHANBarrel_ = theDMBE->book1D("ALLMODS_ndigisCHAN_Barrel","Number of Digis",100,0.,1000.);
00760   meNDigisCHANBarrel_->setAxisTitle("Number of digis per FED channel per event",1);
00761   meNDigisCHANBarrelL1_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelL1","Number of Digis L1",100,0.,1000.);
00762   meNDigisCHANBarrelL1_->setAxisTitle("Number of digis per FED channel per event",1);
00763   meNDigisCHANBarrelL2_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelL2","Number of Digis L2",100,0.,1000.);
00764   meNDigisCHANBarrelL2_->setAxisTitle("Number of digis per FED channel per event",1);
00765   meNDigisCHANBarrelL3_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelL3","Number of Digis L3",100,0.,1000.);
00766   meNDigisCHANBarrelL3_->setAxisTitle("Number of digis per FED channel per event",1);
00767   meNDigisCHANBarrelCh1_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh1","Number of Digis Ch1",100,0.,1000.);
00768   meNDigisCHANBarrelCh1_->setAxisTitle("Number of digis per FED channel per event",1);
00769   meNDigisCHANBarrelCh2_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh2","Number of Digis Ch2",100,0.,1000.);
00770   meNDigisCHANBarrelCh2_->setAxisTitle("Number of digis per FED channel per event",1);
00771   meNDigisCHANBarrelCh3_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh3","Number of Digis Ch3",100,0.,1000.);
00772   meNDigisCHANBarrelCh3_->setAxisTitle("Number of digis per FED channel per event",1);
00773   meNDigisCHANBarrelCh4_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh4","Number of Digis Ch4",100,0.,1000.);
00774   meNDigisCHANBarrelCh4_->setAxisTitle("Number of digis per FED channel per event",1);
00775   meNDigisCHANBarrelCh5_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh5","Number of Digis Ch5",100,0.,1000.);
00776   meNDigisCHANBarrelCh5_->setAxisTitle("Number of digis per FED channel per event",1);
00777   meNDigisCHANBarrelCh6_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh6","Number of Digis Ch6",100,0.,1000.);
00778   meNDigisCHANBarrelCh6_->setAxisTitle("Number of digis per FED channel per event",1);
00779   meNDigisCHANBarrelCh7_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh7","Number of Digis Ch7",100,0.,1000.);
00780   meNDigisCHANBarrelCh7_->setAxisTitle("Number of digis per FED channel per event",1);
00781   meNDigisCHANBarrelCh8_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh8","Number of Digis Ch8",100,0.,1000.);
00782   meNDigisCHANBarrelCh8_->setAxisTitle("Number of digis per FED channel per event",1);
00783   meNDigisCHANBarrelCh9_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh9","Number of Digis Ch9",100,0.,1000.);
00784   meNDigisCHANBarrelCh9_->setAxisTitle("Number of digis per FED channel per event",1);
00785   meNDigisCHANBarrelCh10_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh10","Number of Digis Ch10",100,0.,1000.);
00786   meNDigisCHANBarrelCh10_->setAxisTitle("Number of digis per FED channel per event",1);
00787   meNDigisCHANBarrelCh11_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh11","Number of Digis Ch11",100,0.,1000.);
00788   meNDigisCHANBarrelCh11_->setAxisTitle("Number of digis per FED channel per event",1);
00789   meNDigisCHANBarrelCh12_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh12","Number of Digis Ch12",100,0.,1000.);
00790   meNDigisCHANBarrelCh12_->setAxisTitle("Number of digis per FED channel per event",1);
00791   meNDigisCHANBarrelCh13_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh13","Number of Digis Ch13",100,0.,1000.);
00792   meNDigisCHANBarrelCh13_->setAxisTitle("Number of digis per FED channel per event",1);
00793   meNDigisCHANBarrelCh14_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh14","Number of Digis Ch14",100,0.,1000.);
00794   meNDigisCHANBarrelCh14_->setAxisTitle("Number of digis per FED channel per event",1);
00795   meNDigisCHANBarrelCh15_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh15","Number of Digis Ch15",100,0.,1000.);
00796   meNDigisCHANBarrelCh15_->setAxisTitle("Number of digis per FED channel per event",1);
00797   meNDigisCHANBarrelCh16_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh16","Number of Digis Ch16",100,0.,1000.);
00798   meNDigisCHANBarrelCh16_->setAxisTitle("Number of digis per FED channel per event",1);
00799   meNDigisCHANBarrelCh17_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh17","Number of Digis Ch17",100,0.,1000.);
00800   meNDigisCHANBarrelCh17_->setAxisTitle("Number of digis per FED channel per event",1);
00801   meNDigisCHANBarrelCh18_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh18","Number of Digis Ch18",100,0.,1000.);
00802   meNDigisCHANBarrelCh18_->setAxisTitle("Number of digis per FED channel per event",1);
00803   meNDigisCHANBarrelCh19_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh19","Number of Digis Ch19",100,0.,1000.);
00804   meNDigisCHANBarrelCh19_->setAxisTitle("Number of digis per FED channel per event",1);
00805   meNDigisCHANBarrelCh20_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh20","Number of Digis Ch20",100,0.,1000.);
00806   meNDigisCHANBarrelCh20_->setAxisTitle("Number of digis per FED channel per event",1);
00807   meNDigisCHANBarrelCh21_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh21","Number of Digis Ch21",100,0.,1000.);
00808   meNDigisCHANBarrelCh21_->setAxisTitle("Number of digis per FED channel per event",1);
00809   meNDigisCHANBarrelCh22_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh22","Number of Digis Ch22",100,0.,1000.);
00810   meNDigisCHANBarrelCh22_->setAxisTitle("Number of digis per FED channel per event",1);
00811   meNDigisCHANBarrelCh23_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh23","Number of Digis Ch23",100,0.,1000.);
00812   meNDigisCHANBarrelCh23_->setAxisTitle("Number of digis per FED channel per event",1);
00813   meNDigisCHANBarrelCh24_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh24","Number of Digis Ch24",100,0.,1000.);
00814   meNDigisCHANBarrelCh24_->setAxisTitle("Number of digis per FED channel per event",1);
00815   meNDigisCHANBarrelCh25_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh25","Number of Digis Ch25",100,0.,1000.);
00816   meNDigisCHANBarrelCh25_->setAxisTitle("Number of digis per FED channel per event",1);
00817   meNDigisCHANBarrelCh26_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh26","Number of Digis Ch26",100,0.,1000.);
00818   meNDigisCHANBarrelCh26_->setAxisTitle("Number of digis per FED channel per event",1);
00819   meNDigisCHANBarrelCh27_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh27","Number of Digis Ch27",100,0.,1000.);
00820   meNDigisCHANBarrelCh27_->setAxisTitle("Number of digis per FED channel per event",1);
00821   meNDigisCHANBarrelCh28_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh28","Number of Digis Ch28",100,0.,1000.);
00822   meNDigisCHANBarrelCh28_->setAxisTitle("Number of digis per FED channel per event",1);
00823   meNDigisCHANBarrelCh29_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh29","Number of Digis Ch29",100,0.,1000.);
00824   meNDigisCHANBarrelCh29_->setAxisTitle("Number of digis per FED channel per event",1);
00825   meNDigisCHANBarrelCh30_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh30","Number of Digis Ch30",100,0.,1000.);
00826   meNDigisCHANBarrelCh30_->setAxisTitle("Number of digis per FED channel per event",1);
00827   meNDigisCHANBarrelCh31_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh31","Number of Digis Ch31",100,0.,1000.);
00828   meNDigisCHANBarrelCh31_->setAxisTitle("Number of digis per FED channel per event",1);
00829   meNDigisCHANBarrelCh32_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh32","Number of Digis Ch32",100,0.,1000.);
00830   meNDigisCHANBarrelCh32_->setAxisTitle("Number of digis per FED channel per event",1);
00831   meNDigisCHANBarrelCh33_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh33","Number of Digis Ch33",100,0.,1000.);
00832   meNDigisCHANBarrelCh33_->setAxisTitle("Number of digis per FED channel per event",1);
00833   meNDigisCHANBarrelCh34_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh34","Number of Digis Ch34",100,0.,1000.);
00834   meNDigisCHANBarrelCh34_->setAxisTitle("Number of digis per FED channel per event",1);
00835   meNDigisCHANBarrelCh35_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh35","Number of Digis Ch35",100,0.,1000.);
00836   meNDigisCHANBarrelCh35_->setAxisTitle("Number of digis per FED channel per event",1);
00837   meNDigisCHANBarrelCh36_ = theDMBE->book1D("ALLMODS_ndigisCHAN_BarrelCh36","Number of Digis Ch36",100,0.,1000.);
00838   meNDigisCHANBarrelCh36_->setAxisTitle("Number of digis per FED channel per event",1);
00839   theDMBE->cd("Pixel/Endcap");
00840   meNDigisCOMBEndcap_ = theDMBE->book1D("ALLMODS_ndigisCOMB_Endcap","Number of Digis",200,0.,400.);
00841   meNDigisCOMBEndcap_->setAxisTitle("Number of digis per module per event",1);
00842   meNDigisCHANEndcap_ = theDMBE->book1D("ALLMODS_ndigisCHAN_Endcap","Number of Digis",100,0.,1000.);
00843   meNDigisCHANEndcap_->setAxisTitle("Number of digis per FED channel per event",1);
00844   meNDigisCHANEndcapDp1_ = theDMBE->book1D("ALLMODS_ndigisCHAN_EndcapDp1","Number of Digis Disk p1",100,0.,1000.);
00845   meNDigisCHANEndcapDp1_->setAxisTitle("Number of digis per FED channel per event",1);
00846   meNDigisCHANEndcapDp2_ = theDMBE->book1D("ALLMODS_ndigisCHAN_EndcapDp2","Number of Digis Disk p2",100,0.,1000.);
00847   meNDigisCHANEndcapDp2_->setAxisTitle("Number of digis per FED channel per event",1);
00848   meNDigisCHANEndcapDm1_ = theDMBE->book1D("ALLMODS_ndigisCHAN_EndcapDm1","Number of Digis Disk m1",100,0.,1000.);
00849   meNDigisCHANEndcapDm1_->setAxisTitle("Number of digis per FED channel per event",1);
00850   meNDigisCHANEndcapDm2_ = theDMBE->book1D("ALLMODS_ndigisCHAN_EndcapDm2","Number of Digis Disk m2",100,0.,1000.);
00851   meNDigisCHANEndcapDm2_->setAxisTitle("Number of digis per FED channel per event",1);
00852   theDMBE->cd(currDir);
00853 }
00854 
00855 //define this as a plug-in
00856 DEFINE_FWK_MODULE(SiPixelDigiSource);