CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_13_patch3/src/DQM/SiStripMonitorPedestals/src/SiStripMonitorRawData.cc

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // Package:    SiStripMonitorRawData
00004 // Class:      SiStripMonitorRawData
00005 // 
00013 //
00014 // Original Author:  Suchandra Dutta
00015 //         Created:  Fri June  1 17:00:00 CET 2007
00016 // $Id: SiStripMonitorRawData.cc,v 1.8 2011/09/19 10:56:39 demattia Exp $
00017 //
00018 //
00019 
00020 #include "FWCore/ServiceRegistry/interface/Service.h"
00021 #include "DataFormats/Common/interface/Handle.h"
00022 
00023 #include "DQMServices/Core/interface/DQMStore.h"
00024 #include "DQMServices/Core/interface/MonitorElement.h"
00025 
00026 #include "CalibTracker/Records/interface/SiStripDetCablingRcd.h"
00027 #include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h"
00028 
00029 #include "DataFormats/Common/interface/DetSetVector.h"
00030 #include "DataFormats/SiStripDigi/interface/SiStripRawDigi.h"
00031 
00032 #include <FWCore/Framework/interface/EventSetup.h>
00033 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00034 
00035 #include "DQM/SiStripMonitorPedestals/interface/SiStripMonitorRawData.h"
00036 
00037 // std
00038 #include <cstdlib>
00039 #include <cmath>
00040 #include <numeric>
00041 #include <algorithm>
00042 
00043 SiStripMonitorRawData::SiStripMonitorRawData(edm::ParameterSet const& iConfig):
00044   BadFedNumber(0),
00045   dqmStore_(edm::Service<DQMStore>().operator->()),
00046   conf_(iConfig),
00047   m_cacheID_(0)
00048 
00049 
00050 {
00051   edm::LogInfo("SiStripMonitorRawData") <<"SiStripMonitorRawData  " 
00052                                           << " Constructing....... ";     
00053 }
00054 
00055 
00056 SiStripMonitorRawData::~SiStripMonitorRawData()
00057 {
00058   edm::LogInfo("SiStripMonitorRawData") <<"SiStripMonitorRawData  " 
00059                                           << " Destructing....... ";     
00060 }
00061 //
00062 // -- Begin Job
00063 //
00064 void SiStripMonitorRawData::beginJob() {
00065 }
00066 //
00067 // -- BeginRun
00068 //
00069 void SiStripMonitorRawData::beginRun(edm::Run const& run, edm::EventSetup const& eSetup){
00070   unsigned long long cacheID = eSetup.get<SiStripDetCablingRcd>().cacheIdentifier();
00071 
00072   if (BadFedNumber) BadFedNumber->Reset();
00073   if (m_cacheID_ != cacheID) {
00074     m_cacheID_ = cacheID;       
00075     eSetup.get<SiStripDetCablingRcd>().get( detcabling );
00076     SelectedDetIds.clear();
00077     detcabling->addActiveDetectorsRawIds(SelectedDetIds);
00078     
00079     edm::LogInfo("SiStripMonitorRawData") <<"SiStripMonitorRawData::beginRun: " 
00080                                           << " Creating MEs for new Cabling ";     
00081     dqmStore_->setCurrentFolder("Track/GlobalParameter");
00082     if (!BadFedNumber) {
00083       BadFedNumber = dqmStore_->book1D("FaultyFedNumberAndChannel","Faulty Fed Id and Channel and Numbers", 60000, 0.5, 600.5);
00084       BadFedNumber->setAxisTitle("Fed Id and Channel numbers",1);
00085     }
00086   } 
00087 }
00088 
00089 
00090 // ------------ method called to produce the data  ------------
00091 void SiStripMonitorRawData::analyze(edm::Event const& iEvent, edm::EventSetup const& iSetup)
00092 {
00093 
00094    edm::LogInfo("SiStripMonitorRawData") <<"SiStripMonitorRawData::analyze: Run "<< 
00095                               iEvent.id().run()  << " Event " << iEvent.id().event();
00096 
00097   
00098   iSetup.get<SiStripDetCablingRcd>().get( detcabling );
00099 
00100   // retrieve producer name of input StripDigiCollection
00101   std::string digiProducer = conf_.getParameter<std::string>("DigiProducer");
00102   // get DigiCollection object from Event
00103   edm::Handle< edm::DetSetVector<SiStripRawDigi> > digi_collection;
00104   std::string digiType = "VirginRaw";
00105   //you have a collection as there are all the digis for the event for every detector
00106   iEvent.getByLabel(digiProducer, digiType, digi_collection);
00107 
00108   for (std::vector<uint32_t>::const_iterator idetid=SelectedDetIds.begin(), 
00109                                iEnd=SelectedDetIds.end();idetid!=iEnd;++idetid){
00110     std::vector< edm::DetSet<SiStripRawDigi> >::const_iterator digis = digi_collection->find( (*idetid) );
00111     if (digis == digi_collection->end() ||
00112         digis->data.size() == 0 || 
00113         digis->data.size() > 768 )  {
00114       std::vector<const FedChannelConnection *> fed_conns = detcabling->getConnections((*idetid));
00115       for (unsigned int  k = 0; k < fed_conns.size() ; k++) {
00116         float fed_id = fed_conns[k]->fedId() + 0.01*fed_conns[k]->fedCh();
00117         BadFedNumber->Fill(fed_id);
00118       }
00119       continue;
00120     }
00121   }
00122 }
00123 //
00124 // -- End Run
00125 //    
00126 void SiStripMonitorRawData::endRun(edm::Run const& run, edm::EventSetup const& eSetup) {
00127   bool outputMEsInRootFile = conf_.getParameter<bool>("OutputMEsInRootFile");
00128   std::string outputFileName = conf_.getParameter<std::string>("OutputFileName");
00129   if (outputMEsInRootFile) {    
00130     dqmStore_->showDirStructure();
00131     dqmStore_->save(outputFileName);
00132   }
00133 }
00134 //
00135 // -- End Job
00136 //
00137 void SiStripMonitorRawData::endJob(void){
00138   edm::LogInfo("SiStripMonitorRawData") <<"SiStripMonitorRawData::EndJob: " 
00139                                           << " Finishing!! ";        
00140 }
00141 DEFINE_FWK_MODULE(SiStripMonitorRawData);
00142