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