00001
00002
00003
00004
00005
00006
00014
00015
00016
00017
00018
00019
00020
00021 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00022
00023
00024 #include "FWCore/Framework/interface/LuminosityBlock.h"
00025 #include "FWCore/ServiceRegistry/interface/Service.h"
00026 #include "FWCore/ParameterSet/interface/FileInPath.h"
00027 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00028
00029 #include "DataFormats/FEDRawData/interface/FEDNumbering.h"
00030
00031 #include "DQMServices/Core/interface/DQMStore.h"
00032
00033 #include "DQM/SiStripCommon/interface/SiStripFolderOrganizer.h"
00034 #include "DQM/SiStripMonitorClient/interface/SiStripActionExecutor.h"
00035
00036 #include "DQM/SiStripMonitorClient/interface/SiStripOfflineDQM.h"
00037
00038
00039 #include "CondFormats/DataRecord/interface/RunSummaryRcd.h"
00040 #include "CondFormats/RunInfo/interface/RunSummary.h"
00041 #include "CondFormats/RunInfo/interface/RunInfo.h"
00042
00043 #include <iostream>
00044 #include <iomanip>
00045 #include <stdio.h>
00046 #include <string>
00047 #include <sstream>
00048 #include <math.h>
00049
00057 SiStripOfflineDQM::SiStripOfflineDQM(edm::ParameterSet const& pSet) {
00058
00059 edm::LogInfo( "SiStripOfflineDQM") << "SiStripOfflineDQM::Deleting SiStripOfflineDQM ";
00060
00061
00062 actionExecutor_ = new SiStripActionExecutor();
00063
00064
00065 dqmStore_ = edm::Service<DQMStore>().operator->();
00066
00067 usedWithEDMtoMEConverter_= pSet.getUntrackedParameter<bool>("UsedWithEDMtoMEConverter",false);
00068 createSummary_ = pSet.getUntrackedParameter<bool>("CreateSummary",true);
00069 inputFileName_ = pSet.getUntrackedParameter<std::string>("InputFileName","");
00070 outputFileName_ = pSet.getUntrackedParameter<std::string>("OutputFileName","");
00071 globalStatusFilling_ = pSet.getUntrackedParameter<int>("GlobalStatusFilling", 1);
00072
00073 nEvents_ = 0;
00074 }
00080 SiStripOfflineDQM::~SiStripOfflineDQM() {
00081 edm::LogInfo("SiStripOfflineDQM") << "SiStripOfflineDQM::Deleting SiStripOfflineDQM ";
00082
00083 }
00091 void SiStripOfflineDQM::beginJob( const edm::EventSetup &eSetup) {
00092
00093
00094
00095 if (createSummary_) {
00096 if (!actionExecutor_->readConfiguration()) {
00097 edm::LogInfo ("SiStripOfflineDQM") <<"SiStripOfflineDQM:: Error to read configuration file!! Summary will not be produced!!!";
00098 createSummary_ = false;
00099 }
00100 }
00101 if (globalStatusFilling_) actionExecutor_->bookGlobalStatus(dqmStore_);
00102
00103 edm::LogInfo("SiStripOfflineDQM") << "SiStripOfflineDQM::beginJob done";
00104 }
00114 void SiStripOfflineDQM::beginRun(edm::Run const& run, edm::EventSetup const& eSetup) {
00115 edm::LogInfo ("SiStripOfflineDQM") <<"SiStripOfflineDQM:: Begining of Run";
00116
00117 int nFEDs = 0;
00118 edm::eventsetup::EventSetupRecordKey recordKey(edm::eventsetup::EventSetupRecordKey::TypeTag::findType("RunInfoRcd"));
00119 if( eSetup.find( recordKey ) != 0) {
00120
00121 edm::ESHandle<RunInfo> sumFED;
00122 eSetup.get<RunInfoRcd>().get(sumFED);
00123 if ( sumFED.isValid() ) {
00124
00125 const FEDNumbering numbering;
00126 const int siStripFedIdMin = numbering.getSiStripFEDIds().first;
00127 const int siStripFedIdMax = numbering.getSiStripFEDIds().second;
00128
00129
00130 std::vector<int> FedsInIds= sumFED->m_fed_in;
00131 for(unsigned int it = 0; it < FedsInIds.size(); ++it) {
00132 int fedID = FedsInIds[it];
00133
00134 if(fedID>=siStripFedIdMin && fedID<=siStripFedIdMax) ++nFEDs;
00135 }
00136 }
00137 }
00138 if (nFEDs > 0) trackerFEDsFound_ = true;
00139
00140 if (!usedWithEDMtoMEConverter_) {
00141 if (!openInputFile()) createSummary_ = false;
00142 }
00143 }
00154 void SiStripOfflineDQM::analyze(edm::Event const& e, edm::EventSetup const& eSetup){
00155 nEvents_++;
00156 }
00163 void SiStripOfflineDQM::endLuminosityBlock(edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& eSetup) {
00164
00165 edm::LogInfo( "SiStripOfflineDQM") << "SiStripOfflineDQM::endLuminosityBlock";
00166
00167 if (createSummary_) actionExecutor_->createSummaryOffline(dqmStore_);
00168
00169
00170 if (globalStatusFilling_ > 0 && trackerFEDsFound_) {
00171 if (globalStatusFilling_ == 1) actionExecutor_->fillGlobalStatusFromModule(dqmStore_);
00172 if (globalStatusFilling_ == 2) actionExecutor_->fillGlobalStatusFromLayer(dqmStore_);
00173 }
00174 }
00181 void SiStripOfflineDQM::endJob() {
00182
00183 edm::LogInfo( "SiStripOfflineDQM") << "SiStripOfflineDQM::endJob";
00184
00185 if (!usedWithEDMtoMEConverter_) {
00186 dqmStore_->cd();
00187 dqmStore_->save(outputFileName_, "","","");
00188 }
00189 }
00196 bool SiStripOfflineDQM::openInputFile() {
00197 if (inputFileName_.size() == 0) return false;
00198 edm::LogInfo("SiStripOfflineDQM") << "SiStripOfflineDQM::openInputFile: Accessing root File" << inputFileName_;
00199 dqmStore_->setVerbose(0);
00200 dqmStore_->open(inputFileName_, false);
00201 return true;
00202 }
00203
00204 #include "FWCore/Framework/interface/MakerMacros.h"
00205 DEFINE_FWK_MODULE(SiStripOfflineDQM);