Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <iostream>
00011
00012 #include "FWCore/ServiceRegistry/interface/Service.h"
00013 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00014 #include "FWCore/Framework/interface/ESHandle.h"
00015 #include "FWCore/Framework/interface/EventSetup.h"
00016
00017 #include "DataFormats/EcalDetId/interface/EEDetId.h"
00018
00019 #include "CondFormats/EcalObjects/interface/EcalDCSTowerStatus.h"
00020 #include "CondFormats/DataRecord/interface/EcalDCSTowerStatusRcd.h"
00021
00022 #include "DQMServices/Core/interface/MonitorElement.h"
00023 #include "DQMServices/Core/interface/DQMStore.h"
00024
00025 #include "DQM/EcalCommon/interface/Numbers.h"
00026
00027 #include "DQM/EcalEndcapMonitorTasks/interface/EEDcsInfoTask.h"
00028
00029 EEDcsInfoTask::EEDcsInfoTask(const edm::ParameterSet& ps) {
00030
00031 dqmStore_ = edm::Service<DQMStore>().operator->();
00032
00033 prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
00034
00035 enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
00036
00037 mergeRuns_ = ps.getUntrackedParameter<bool>("mergeRuns", false);
00038
00039 meEEDcsFraction_ = 0;
00040 meEEDcsActiveMap_ = 0;
00041 for (int i = 0; i < 18; i++) {
00042 meEEDcsActive_[i] = 0;
00043 }
00044
00045 }
00046
00047 EEDcsInfoTask::~EEDcsInfoTask() {
00048
00049 }
00050
00051 void EEDcsInfoTask::beginJob(void){
00052
00053 char histo[200];
00054
00055 if ( dqmStore_ ) {
00056
00057 dqmStore_->setCurrentFolder(prefixME_ + "/EventInfo");
00058
00059 sprintf(histo, "DCSSummary");
00060 meEEDcsFraction_ = dqmStore_->bookFloat(histo);
00061 meEEDcsFraction_->Fill(0.0);
00062
00063 sprintf(histo, "DCSSummaryMap");
00064 meEEDcsActiveMap_ = dqmStore_->book2D(histo,histo, 200, 0., 200., 100, 0., 100.);
00065 meEEDcsActiveMap_->setAxisTitle("jx", 1);
00066 meEEDcsActiveMap_->setAxisTitle("jy", 2);
00067
00068 dqmStore_->setCurrentFolder(prefixME_ + "/EventInfo/DCSContents");
00069
00070 for (int i = 0; i < 18; i++) {
00071 sprintf(histo, "EcalEndcap_%s", Numbers::sEE(i+1).c_str());
00072 meEEDcsActive_[i] = dqmStore_->bookFloat(histo);
00073 meEEDcsActive_[i]->Fill(-1.0);
00074 }
00075
00076 }
00077
00078 }
00079
00080 void EEDcsInfoTask::endJob(void) {
00081
00082 if ( enableCleanup_ ) this->cleanup();
00083
00084 }
00085
00086 void EEDcsInfoTask::beginLuminosityBlock(const edm::LuminosityBlock& lumiBlock, const edm::EventSetup& iSetup){
00087
00088
00089 for ( int itx = 0; itx < 40; itx++ ) {
00090 for ( int ity = 0; ity < 20; ity++ ) {
00091 readyLumi[itx][ity] = 1;
00092 }
00093 }
00094
00095 if ( !iSetup.find( edm::eventsetup::EventSetupRecordKey::makeKey<EcalDCSTowerStatusRcd>() ) ) {
00096 edm::LogWarning("EEDcsInfoTask") << "EcalDCSTowerStatus record not found";
00097 return;
00098 }
00099
00100 edm::ESHandle<EcalDCSTowerStatus> pDCSStatus;
00101 iSetup.get<EcalDCSTowerStatusRcd>().get(pDCSStatus);
00102 if ( !pDCSStatus.isValid() ) {
00103 edm::LogWarning("EEDcsInfoTask") << "EcalDCSTowerStatus record not valid";
00104 return;
00105 }
00106 const EcalDCSTowerStatus* dcsStatus = pDCSStatus.product();
00107
00108 for(int iz=-1; iz<=1; iz+=2) {
00109 for(int itx=0 ; itx<20; itx++) {
00110 for(int ity=0 ; ity<20; ity++) {
00111 if (EcalScDetId::validDetId(itx+1,ity+1,iz )){
00112
00113 EcalScDetId eeid(itx+1,ity+1,iz);
00114
00115 uint16_t dbStatus = 0;
00116 EcalDCSTowerStatus::const_iterator dcsStatusIt = dcsStatus->find( eeid.rawId() );
00117 if ( dcsStatusIt != dcsStatus->end() ) dbStatus = dcsStatusIt->getStatusCode();
00118
00119 if ( dbStatus > 0 ) {
00120 int offsetSC = (iz > 0) ? 0 : 20;
00121 readyRun[offsetSC+itx][ity] = 0;
00122 readyLumi[offsetSC+itx][ity] = 0;
00123 }
00124
00125 }
00126 }
00127 }
00128 }
00129
00130 }
00131
00132 void EEDcsInfoTask::endLuminosityBlock(const edm::LuminosityBlock& lumiBlock, const edm::EventSetup& iSetup) {
00133
00134 this->fillMonitorElements(readyLumi);
00135
00136 }
00137
00138 void EEDcsInfoTask::beginRun(const edm::Run& r, const edm::EventSetup& c) {
00139
00140 if ( ! mergeRuns_ ) this->reset();
00141
00142 for ( int itx = 0; itx < 40; itx++ ) {
00143 for ( int ity = 0; ity < 20; ity++ ) {
00144 readyRun[itx][ity] = 1;
00145 }
00146 }
00147
00148 }
00149
00150 void EEDcsInfoTask::endRun(const edm::Run& r, const edm::EventSetup& c) {
00151
00152 this->fillMonitorElements(readyRun);
00153
00154 }
00155
00156 void EEDcsInfoTask::reset(void) {
00157
00158 if ( meEEDcsFraction_ ) meEEDcsFraction_->Reset();
00159
00160 for (int i = 0; i < 18; i++) {
00161 if ( meEEDcsActive_[i] ) meEEDcsActive_[i]->Reset();
00162 }
00163
00164 if ( meEEDcsActiveMap_ ) meEEDcsActiveMap_->Reset();
00165
00166 }
00167
00168
00169 void EEDcsInfoTask::cleanup(void){
00170
00171 if ( dqmStore_ ) {
00172
00173 dqmStore_->setCurrentFolder(prefixME_ + "/EventInfo");
00174
00175 if ( meEEDcsFraction_ ) dqmStore_->removeElement( meEEDcsFraction_->getName() );
00176
00177 if ( meEEDcsActiveMap_ ) dqmStore_->removeElement( meEEDcsActiveMap_->getName() );
00178
00179 dqmStore_->setCurrentFolder(prefixME_ + "/EventInfo/DCSContents");
00180
00181 for (int i = 0; i < 18; i++) {
00182 if ( meEEDcsActive_[i] ) dqmStore_->removeElement( meEEDcsActive_[i]->getName() );
00183 }
00184
00185 }
00186
00187 }
00188
00189 void EEDcsInfoTask::fillMonitorElements(int ready[40][20]) {
00190
00191 float readySum[18];
00192 int nValidChannels[18];
00193 for ( int ism = 0; ism < 18; ism++ ) {
00194 readySum[ism] = 0;
00195 nValidChannels[ism] = 0;
00196 }
00197 float readySumTot = 0.;
00198 int nValidChannelsTot = 0;
00199
00200 for ( int iz = -1; iz < 2; iz+=2 ) {
00201 for ( int itx = 0; itx < 20; itx++ ) {
00202 for ( int ity = 0; ity < 20; ity++ ) {
00203 for ( int h = 0; h < 5; h++ ) {
00204 for ( int k = 0; k < 5; k++ ) {
00205
00206 int ix = 5*itx + h;
00207 int iy = 5*ity + k;
00208
00209 int offsetSC = (iz > 0) ? 0 : 20;
00210 int offset = (iz > 0) ? 0 : 100;
00211
00212 if( EEDetId::validDetId(ix+1, iy+1, iz) ) {
00213
00214 if(meEEDcsActiveMap_) meEEDcsActiveMap_->setBinContent( offset+ix+1, iy+1, ready[offsetSC+itx][ity] );
00215
00216 EEDetId id = EEDetId(ix+1, iy+1, iz, EEDetId::XYMODE);
00217
00218 int ism = Numbers::iSM(id);
00219 if(ready[offsetSC+itx][ity]) {
00220 readySum[ism-1]++;
00221 readySumTot++;
00222 }
00223
00224 nValidChannels[ism-1]++;
00225 nValidChannelsTot++;
00226
00227 } else {
00228 if(meEEDcsActiveMap_) meEEDcsActiveMap_->setBinContent( offset+ix+1, iy+1, -1.0 );
00229 }
00230
00231 }
00232 }
00233 }
00234 }
00235 }
00236
00237 for ( int ism = 0; ism < 18; ism++ ) {
00238 if( meEEDcsActive_[ism] ) meEEDcsActive_[ism]->Fill( readySum[ism]/float(nValidChannels[ism]) );
00239 }
00240
00241 if( meEEDcsFraction_ ) meEEDcsFraction_->Fill( readySumTot/float(nValidChannelsTot) );
00242
00243 }
00244
00245 void EEDcsInfoTask::analyze(const edm::Event& e, const edm::EventSetup& c){
00246
00247 }