Go to the documentation of this file.00001 #include <iostream>
00002
00003 #include "FWCore/ServiceRegistry/interface/Service.h"
00004 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00005
00006 #include "FWCore/Framework/interface/Event.h"
00007 #include "FWCore/Framework/interface/MakerMacros.h"
00008
00009 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00010
00011 #include "DQMServices/Core/interface/MonitorElement.h"
00012 #include "DQMServices/Core/interface/DQMStore.h"
00013
00014 #include "DataFormats/Scalers/interface/DcsStatus.h"
00015
00016 #include "DQM/EcalPreshowerMonitorModule/interface/ESDcsInfoTask.h"
00017
00018 using namespace cms;
00019 using namespace edm;
00020 using namespace std;
00021
00022 ESDcsInfoTask::ESDcsInfoTask(const ParameterSet& ps) {
00023
00024 dqmStore_ = Service<DQMStore>().operator->();
00025
00026 prefixME_ = ps.getUntrackedParameter<string>("prefixME", "");
00027
00028 enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
00029
00030 mergeRuns_ = ps.getUntrackedParameter<bool>("mergeRuns", false);
00031
00032 dcsStatuslabel_ = ps.getParameter<InputTag>("DcsStatusLabel");
00033
00034 meESDcsFraction_ = 0;
00035 meESDcsActiveMap_ = 0;
00036
00037 }
00038
00039 ESDcsInfoTask::~ESDcsInfoTask() {
00040
00041 }
00042
00043 void ESDcsInfoTask::beginJob(void){
00044
00045 char histo[200];
00046
00047 if ( dqmStore_ ) {
00048
00049 dqmStore_->setCurrentFolder(prefixME_ + "/EventInfo");
00050
00051 sprintf(histo, "DCSSummary");
00052 meESDcsFraction_ = dqmStore_->bookFloat(histo);
00053 meESDcsFraction_->Fill(-1.0);
00054
00055 sprintf(histo, "DCSSummaryMap");
00056 meESDcsActiveMap_ = dqmStore_->book1D(histo,histo, 2, 0., 2.);
00057 meESDcsActiveMap_->setAxisTitle("(ES+/ES-)", 1);
00058
00059
00060 }
00061
00062 }
00063
00064 void ESDcsInfoTask::endJob(void) {
00065
00066 if ( enableCleanup_ ) this->cleanup();
00067
00068 }
00069
00070 void ESDcsInfoTask::beginLuminosityBlock(const edm::LuminosityBlock& lumiBlock, const edm::EventSetup& iSetup){
00071
00072 this->reset();
00073
00074 for( int i = 0; i < 2; i++) {
00075 meESDcsActiveMap_->setBinContent(i+1 , -1.0);
00076 }
00077
00078 }
00079
00080 void ESDcsInfoTask::endLuminosityBlock(const edm::LuminosityBlock& lumiBlock, const edm::EventSetup& iSetup) {
00081
00082 }
00083
00084 void ESDcsInfoTask::reset(void) {
00085
00086 if ( meESDcsFraction_ ) meESDcsFraction_->Reset();
00087
00088 if ( meESDcsActiveMap_ ) meESDcsActiveMap_->Reset();
00089
00090 }
00091
00092
00093 void ESDcsInfoTask::cleanup(void){
00094
00095 if ( dqmStore_ ) {
00096
00097 dqmStore_->setCurrentFolder(prefixME_ + "/EventInfo");
00098
00099 if ( meESDcsFraction_ ) dqmStore_->removeElement( meESDcsFraction_->getName() );
00100
00101 if ( meESDcsActiveMap_ ) dqmStore_->removeElement( meESDcsActiveMap_->getName() );
00102
00103 }
00104
00105 }
00106
00107 void ESDcsInfoTask::analyze(const Event& e, const EventSetup& c){
00108
00109 ievt_++;
00110
00111 float ESpDcsStatus = 0;
00112 float ESmDcsStatus = 0;
00113
00114 Handle<DcsStatusCollection> dcsStatus;
00115 e.getByLabel(dcsStatuslabel_, dcsStatus);
00116 if (dcsStatus.isValid()) {
00117 for (DcsStatusCollection::const_iterator dcsStatusItr = dcsStatus->begin(); dcsStatusItr != dcsStatus->end(); ++dcsStatusItr) {
00118 ESpDcsStatus = dcsStatusItr->ready(DcsStatus::ESp);
00119 ESmDcsStatus = dcsStatusItr->ready(DcsStatus::ESm);
00120 }
00121
00122 ESpDcsStatus = (ESpDcsStatus + float(ievt_-1)*meESDcsActiveMap_->getBinContent(1))/float(ievt_);
00123 ESmDcsStatus = (ESmDcsStatus + float(ievt_-1)*meESDcsActiveMap_->getBinContent(2))/float(ievt_);
00124 }
00125
00126 meESDcsActiveMap_->setBinContent(1, ESpDcsStatus);
00127 meESDcsActiveMap_->setBinContent(2, ESmDcsStatus);
00128
00129 meESDcsFraction_->Fill( (ESpDcsStatus + ESmDcsStatus)/2. );
00130
00131 }
00132
00133
00134 DEFINE_FWK_MODULE(ESDcsInfoTask);