CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_2_SLHC2/src/DQM/SiPixelMonitorRawData/src/SiPixelHLTSource.cc

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // Package:    SiPixelMonitorRawData
00004 // Class:      SiPixelHLTSource
00005 // 
00017 //
00018 // Original Author:  Andrew York
00019 //
00020 // Framework
00021 #include "FWCore/ServiceRegistry/interface/Service.h"
00022 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00023 // DQM Framework
00024 #include "DQM/SiPixelMonitorRawData/interface/SiPixelHLTSource.h"
00025 #include "DQM/SiPixelCommon/interface/SiPixelFolderOrganizer.h"
00026 #include "DQM/SiPixelCommon/interface/SiPixelHistogramId.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/CommonDetUnit/interface/GeomDetEnumerators.h"
00032 #include "Geometry/TrackerGeometryBuilder/interface/PixelGeomDetUnit.h"
00033 #include "Geometry/CommonTopologies/interface/PixelTopology.h"
00034 // DataFormats
00035 #include "DataFormats/DetId/interface/DetId.h"
00036 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
00037 #include "DataFormats/FEDRawData/interface/FEDNumbering.h"
00038 #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
00039 #include "DataFormats/SiPixelDetId/interface/PixelBarrelName.h"
00040 #include "DataFormats/SiPixelDetId/interface/PixelBarrelNameUpgrade.h"
00041 #include "DataFormats/SiPixelDetId/interface/PixelEndcapName.h"
00042 #include "DataFormats/SiPixelDetId/interface/PixelEndcapNameUpgrade.h"
00043 //
00044 #include <string>
00045 #include <stdlib.h>
00046 
00047 using namespace std;
00048 using namespace edm;
00049 
00050 SiPixelHLTSource::SiPixelHLTSource(const edm::ParameterSet& iConfig) :
00051   conf_(iConfig),
00052   rawin_( conf_.getParameter<edm::InputTag>( "RawInput" ) ),
00053   errin_( conf_.getParameter<edm::InputTag>( "ErrorInput" ) ),
00054   saveFile( conf_.getUntrackedParameter<bool>("saveFile",false) ),
00055   slowDown( conf_.getUntrackedParameter<bool>("slowDown",false) ),
00056   dirName_( conf_.getUntrackedParameter<std::string>("DirName","Pixel/FEDIntegrity/") )
00057 {
00058    theDMBE = edm::Service<DQMStore>().operator->();
00059    LogInfo ("PixelDQM") << "SiPixelHLTSource::SiPixelHLTSource: Got DQM BackEnd interface"<<endl;
00060 }
00061 
00062 
00063 SiPixelHLTSource::~SiPixelHLTSource()
00064 {
00065    // do anything here that needs to be done at desctruction time
00066    // (e.g. close files, deallocate resources etc.)
00067   LogInfo ("PixelDQM") << "SiPixelHLTSource::~SiPixelHLTSource: Destructor"<<endl;
00068 }
00069 
00070 
00071 void SiPixelHLTSource::beginJob(){
00072   firstRun = true;
00073 }
00074 
00075 void SiPixelHLTSource::beginRun(const edm::Run& r, const edm::EventSetup& iSetup){
00076   LogInfo ("PixelDQM") << " SiPixelHLTSource::beginJob - Initialisation ... " << std::endl;
00077   iSetup.get<TrackerDigiGeometryRecord>().get( pDD );
00078   if(firstRun){
00079     eventNo = 0;
00080     // Build map
00081     // Book Monitoring Elements
00082     bookMEs();
00083     firstRun = false;
00084   }
00085 }
00086 
00087 
00088 void SiPixelHLTSource::endJob(void){
00089 
00090   if(saveFile) {
00091     LogInfo ("PixelDQM") << " SiPixelHLTSource::endJob - Saving Root File " << std::endl;
00092     std::string outputFile = conf_.getParameter<std::string>("outputFile");
00093     theDMBE->save( outputFile.c_str() );
00094   }
00095 
00096 }
00097 
00098 //------------------------------------------------------------------
00099 // Method called for every event
00100 //------------------------------------------------------------------
00101 void SiPixelHLTSource::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
00102 {
00103   eventNo++;
00104   // get raw input data
00105   edm::Handle< FEDRawDataCollection >  rawinput;
00106   iEvent.getByLabel( rawin_, rawinput );
00107   // get error input data
00108   edm::Handle< edm::DetSetVector<SiPixelRawDataError> >  errorinput;
00109   iEvent.getByLabel( errin_, errorinput );
00110   if (!errorinput.isValid()) return;
00111 
00112   int fedId;
00113   
00114   for(fedId = 0; fedId <= 39; fedId++) {
00115     //get event data for this fed
00116     const FEDRawData& fedRawData = rawinput->FEDData( fedId );
00117     if (fedRawData.size() != 0) (meRawWords_)->Fill(fedId);
00118   } // end for
00119 
00120   edm::DetSet<SiPixelRawDataError>::const_iterator  di;
00121 
00122   for(TrackerGeometry::DetContainer::const_iterator it = pDD->dets().begin(); it != pDD->dets().end(); it++){
00123     if( ((*it)->subDetector()==GeomDetEnumerators::PixelBarrel) || ((*it)->subDetector()==GeomDetEnumerators::PixelEndcap) ){
00124       uint32_t detId = (*it)->geographicalId();
00125       edm::DetSetVector<SiPixelRawDataError>::const_iterator isearch = errorinput->find(detId);
00126       if( isearch != errorinput->end() ) {
00127         for(di = isearch->data.begin(); di != isearch->data.end(); di++) {
00128           fedId = di->getFedId();                  // FED the error came from
00129           int errorType = di->getType();           // type of error
00130           switch(errorType) {
00131             case(35) : (meNErrors_)->Fill(fedId); break;
00132             case(36) : (meNErrors_)->Fill(fedId); break;
00133             case(37) : (meNErrors_)->Fill(fedId); break;
00134             case(38) : (meNErrors_)->Fill(fedId); break;
00135             default : break;
00136           }; // end switch
00137         } // end for(di
00138       } // end if( isearch
00139     } // end if( ((*it)->subDetector()
00140   } // for(TrackerGeometry
00141 
00142   edm::DetSetVector<SiPixelRawDataError>::const_iterator isearch = errorinput->find(0xffffffff);
00143 
00144   if( isearch != errorinput->end() ) {  // Not at empty iterator
00145     for(di = isearch->data.begin(); di != isearch->data.end(); di++) {
00146       fedId = di->getFedId();                  // FED the error came from
00147       int errorType = di->getType();           // type of error
00148       switch(errorType) {
00149         case(35) : (meNErrors_)->Fill(fedId); break;
00150         case(36) : (meNErrors_)->Fill(fedId); break;
00151         case(37) : (meNErrors_)->Fill(fedId); break;
00152         case(38) : (meNErrors_)->Fill(fedId); break;
00153         case(39) : (meNCRCs_)->Fill(fedId); break;
00154         default : break;
00155       }; // end switch
00156     } // end for(di
00157   } // end if( isearch
00158   // slow down...
00159   if(slowDown) usleep(100000);
00160 
00161 }
00162 
00163 //------------------------------------------------------------------
00164 // Book MEs
00165 //------------------------------------------------------------------
00166 void SiPixelHLTSource::bookMEs(){
00167 
00168   theDMBE->cd();
00169   theDMBE->setCurrentFolder(dirName_);
00170 
00171   std::string rawhid;
00172   std::string errhid;
00173   // Get collection name and instantiate Histo Id builder
00174   edm::InputTag rawin = conf_.getParameter<edm::InputTag>( "RawInput" );
00175   SiPixelHistogramId* RawHistogramId = new SiPixelHistogramId( rawin.label() );
00176   edm::InputTag errin = conf_.getParameter<edm::InputTag>( "ErrorInput" );
00177   SiPixelHistogramId* ErrorHistogramId = new SiPixelHistogramId( errin.label() );
00178   // Get DQM interface
00179   DQMStore* theDMBE = edm::Service<DQMStore>().operator->();
00180 
00181   // Is a FED sending raw data
00182   meRawWords_ = theDMBE->book1D("FEDEntries","Number of raw words",40,-0.5,39.5);
00183   meRawWords_->setAxisTitle("Number of raw words",1);
00184 
00185   // Number of CRC errors
00186   meNCRCs_ = theDMBE->book1D("FEDFatal","Number of fatal errors",40,-0.5,39.5);
00187   meNCRCs_->setAxisTitle("Number of fatal errors",1);
00188 
00189   // Number of translation error words
00190   meNErrors_ = theDMBE->book1D("FEDNonFatal","Number of non-fatal errors",40,-0.5,39.5);
00191   meNErrors_->setAxisTitle("Number of non-fatal errors",1);
00192 
00193   delete RawHistogramId;
00194   delete ErrorHistogramId;
00195 
00196 }
00197 
00198 //define this as a plug-in
00199 DEFINE_FWK_MODULE(SiPixelHLTSource);