00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <iostream>
00011 #include <algorithm>
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 "Geometry/EcalMapping/interface/EcalMappingRcd.h"
00021 #include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h"
00022
00023 #include "DQMServices/Core/interface/MonitorElement.h"
00024 #include "DQMServices/Core/interface/DQMStore.h"
00025
00026 #include "DQM/EcalCommon/interface/Numbers.h"
00027 #include "DQM/EcalCommon/interface/UtilsClient.h"
00028
00029 #include "DQM/EcalEndcapMonitorTasks/interface/EEDataCertificationTask.h"
00030
00031 EEDataCertificationTask::EEDataCertificationTask(const edm::ParameterSet& ps) {
00032
00033
00034 cloneME_ = ps.getUntrackedParameter<bool>("cloneME", true);
00035
00036 dqmStore_ = edm::Service<DQMStore>().operator->();
00037
00038 prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
00039
00040 enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
00041
00042 mergeRuns_ = ps.getUntrackedParameter<bool>("mergeRuns", false);
00043
00044 meEEDataCertificationSummary_ = 0;
00045 meEEDataCertificationSummaryMap_ = 0;
00046 for (int i = 0; i < 18; i++) {
00047 meEEDataCertification_[i] = 0;
00048 }
00049
00050 hDQM_ = 0;
00051 hDAQ_ = 0;
00052 hIntegrityByLumi_ = 0;
00053 hFrontendByLumi_ = 0;
00054 hSynchronizationByLumi_ = 0;
00055
00056 }
00057
00058 EEDataCertificationTask::~EEDataCertificationTask() {
00059
00060 }
00061
00062 void EEDataCertificationTask::beginJob(void){
00063
00064 char histo[200];
00065
00066 if ( dqmStore_ ) {
00067
00068 dqmStore_->setCurrentFolder(prefixME_ + "/EventInfo");
00069
00070 sprintf(histo, "CertificationSummary");
00071 meEEDataCertificationSummary_ = dqmStore_->bookFloat(histo);
00072 meEEDataCertificationSummary_->Fill(-1.0);
00073
00074 sprintf(histo, "CertificationSummaryMap");
00075 meEEDataCertificationSummaryMap_ = dqmStore_->book2D(histo,histo, 40, 0., 200., 20, 0., 100.);
00076 meEEDataCertificationSummaryMap_->setAxisTitle("ix / ix+100", 1);
00077 meEEDataCertificationSummaryMap_->setAxisTitle("iy", 2);
00078
00079 dqmStore_->setCurrentFolder(prefixME_ + "/EventInfo/CertificationContents");
00080
00081 for (int i = 0; i < 18; i++) {
00082 sprintf(histo, "EcalEndcap_%s", Numbers::sEE(i+1).c_str());
00083 meEEDataCertification_[i] = dqmStore_->bookFloat(histo);
00084 meEEDataCertification_[i]->Fill(-1.0);
00085 }
00086
00087 }
00088
00089 }
00090
00091 void EEDataCertificationTask::endJob(void) {
00092
00093 if ( enableCleanup_ ) this->cleanup();
00094
00095 }
00096
00097 void EEDataCertificationTask::beginLuminosityBlock(const edm::LuminosityBlock& lumiBlock, const edm::EventSetup& iSetup){
00098
00099 }
00100
00101 void EEDataCertificationTask::endLuminosityBlock(const edm::LuminosityBlock& lumiBlock, const edm::EventSetup& iSetup) {
00102
00103 this->reset();
00104
00105 char histo[200];
00106
00107 MonitorElement* me;
00108
00109
00110 float DQMVal[18];
00111 for (int i = 0; i < 18; i++) {
00112 DQMVal[i] = -1.;
00113 }
00114
00115 edm::ESHandle< EcalElectronicsMapping > handle;
00116 iSetup.get< EcalMappingRcd >().get(handle);
00117 const EcalElectronicsMapping *map = handle.product();
00118 if( ! map ) edm::LogWarning("EEDaqInfoTask") << "EcalElectronicsMapping not available";
00119
00120 sprintf(histo, (prefixME_ + "/EEIntegrityTask/EEIT weighted integrity errors by lumi").c_str());
00121 me = dqmStore_->get(histo);
00122 hIntegrityByLumi_ = UtilsClient::getHisto<TH1F*>( me, cloneME_, hIntegrityByLumi_ );
00123
00124 sprintf(histo, (prefixME_ + "/EEStatusFlagsTask/FEStatus/EESFT weighted frontend errors by lumi").c_str());
00125 me = dqmStore_->get(histo);
00126 hFrontendByLumi_ = UtilsClient::getHisto<TH1F*>( me, cloneME_, hFrontendByLumi_ );
00127
00128 sprintf(histo, (prefixME_ + "/EERawDataTask/EERDT FE synchronization errors by lumi").c_str());
00129 me = dqmStore_->get(histo);
00130 hSynchronizationByLumi_ = UtilsClient::getHisto<TH1F*>( me, cloneME_, hSynchronizationByLumi_ );
00131
00132 if( hIntegrityByLumi_ && hFrontendByLumi_ && hSynchronizationByLumi_ && map) {
00133
00134 float integrityErrSum = 0.;
00135 float integrityQual = 1.0;
00136 float frontendErrSum = 0.;
00137 float frontendQual = 1.0;
00138 float synchronizationErrSum = 0.;
00139 float synchronizationQual = 1.0;
00140
00141 for ( int i=0; i<18; i++) {
00142 float ismIntegrityQual = 1.0;
00143 if( hIntegrityByLumi_->GetBinContent(0) > 0 ) {
00144 float errors = hIntegrityByLumi_->GetBinContent(i+1);
00145 ismIntegrityQual = 1.0 - errors/hIntegrityByLumi_->GetBinContent(0);
00146 integrityErrSum += errors;
00147 }
00148 float ismFrontendQual = 1.0;
00149 if( hFrontendByLumi_->GetBinContent(0) > 0 ) {
00150 float errors = hFrontendByLumi_->GetBinContent(i+1);
00151 ismFrontendQual = 1.0 - errors/hFrontendByLumi_->GetBinContent(0);
00152 frontendErrSum += errors;
00153 }
00154 float ismSynchronizationQual = 1.0;
00155 if( hSynchronizationByLumi_->GetBinContent(0) > 0 ) {
00156 float errors = hSynchronizationByLumi_->GetBinContent(i+1);
00157 ismSynchronizationQual = 1.0 - errors/hSynchronizationByLumi_->GetBinContent(0);
00158 synchronizationErrSum += errors;
00159 }
00160 float minVal= std::min(ismIntegrityQual,ismFrontendQual);
00161 DQMVal[i] = std::min(minVal,ismSynchronizationQual);
00162 }
00163
00164 if( hIntegrityByLumi_->GetBinContent(0) > 0 ) integrityQual = 1.0 - integrityErrSum/hIntegrityByLumi_->GetBinContent(0)/18.;
00165 if( hFrontendByLumi_->GetBinContent(0) > 0 ) frontendQual = 1.0 - frontendErrSum/hFrontendByLumi_->GetBinContent(0)/18.;
00166 if( hSynchronizationByLumi_->GetBinContent(0) > 0 ) synchronizationQual = 1.0 - synchronizationErrSum/hSynchronizationByLumi_->GetBinContent(0)/36.;
00167 float minVal = std::min(integrityQual,frontendQual);
00168 float totDQMVal = std::min(minVal,synchronizationQual);
00169
00170 sprintf(histo, (prefixME_ + "/EventInfo/reportSummary").c_str());
00171 me = dqmStore_->get(histo);
00172 if( me ) me->Fill(totDQMVal);
00173
00174 for ( int i=0; i<18; i++) {
00175 sprintf(histo, "EcalEndcap_%s", Numbers::sEE(i+1).c_str());
00176 me = dqmStore_->get(prefixME_ + "/EventInfo/reportSummaryContents/" + histo);
00177 if( me ) me->Fill(DQMVal[i]);
00178
00179 sprintf(histo, "reportSummaryMap");
00180 me = dqmStore_->get(prefixME_ + "/EventInfo/" + histo );
00181 if( me ) {
00182 for(int t=1 ; t<=nTowerMax_ ; t++){
00183 if(! map->dccTowerConstituents(DccId_[i], t).size() ) continue;
00184 std::vector<EcalScDetId> scs = map->getEcalScDetId(DccId_[i], t, false);
00185 for(unsigned u=0 ; u<scs.size() ; u++){
00186 int jx = scs[u].ix() + (scs[u].zside()<0 ? 0 : 20);
00187 int jy = scs[u].iy();
00188 me->setBinContent(jx,jy, DQMVal[i]);
00189 }
00190 }
00191 }
00192 }
00193
00194 }
00195
00196
00197 sprintf(histo, (prefixME_ + "/EventInfo/DAQSummaryMap").c_str());
00198 me = dqmStore_->get(histo);
00199 hDAQ_ = UtilsClient::getHisto<TH2F*>( me, cloneME_, hDAQ_ );
00200
00201 sprintf(histo, (prefixME_ + "/EventInfo/DCSSummaryMap").c_str());
00202 me = dqmStore_->get(histo);
00203 hDCS_ = UtilsClient::getHisto<TH2F*>( me, cloneME_, hDCS_ );
00204
00205 float sumCert = 0.;
00206 float sumCertEE[18];
00207 int nValidChannels = 0;
00208 int nValidChannelsEE[18];
00209
00210 if ( meEEDataCertificationSummaryMap_ ){
00211 for(int ix=1 ; ix<=meEEDataCertificationSummaryMap_->getNbinsX() ; ix++){
00212 for(int iy=1 ; iy<=meEEDataCertificationSummaryMap_->getNbinsY() ; iy++){
00213 meEEDataCertificationSummaryMap_->setBinContent( ix, iy, -1.0 );
00214 }
00215 }
00216 }
00217
00218 for (int i = 0; i < 18; i++) {
00219 sumCertEE[i] = 0;
00220 nValidChannelsEE[i] = 0;
00221
00222 for(int t=1 ; t<=nTowerMax_ ; t++){
00223
00224 std::vector<DetId> crystals = map->dccTowerConstituents(DccId_[i], t);
00225 if(!crystals.size()) continue;
00226
00227 std::vector<EcalScDetId> scs = map->getEcalScDetId(DccId_[i], t, false);
00228 for(unsigned u=0 ; u<scs.size() ; u++){
00229
00230 int jx = scs[u].ix() + (scs[u].zside()<0 ? 0 : 20);
00231 int jy = scs[u].iy();
00232
00233 float xvalDQM = DQMVal[i];
00234
00235 float xvalDAQ, xvalDCS;
00236 xvalDAQ = xvalDCS = -1.;
00237 float xcert = -1.;
00238
00239 if ( hDAQ_ ) xvalDAQ = hDAQ_->GetBinContent( jx, jy );
00240 if ( hDCS_ ) xvalDCS = hDCS_->GetBinContent( jx, jy );
00241
00242 if ( xvalDQM == -1 || ( xvalDAQ == -1 && xvalDCS == -1 ) ) {
00243
00244 xcert = 0.0;
00245 } else {
00246
00247 xcert = std::abs(xvalDQM) * std::abs(xvalDAQ) * std::abs(xvalDCS);
00248 }
00249
00250 if ( meEEDataCertificationSummaryMap_ ) meEEDataCertificationSummaryMap_->setBinContent( jx, jy, xcert );
00251
00252 int ncrystals = 0;
00253
00254 for(std::vector<DetId>::const_iterator it=crystals.begin() ; it!=crystals.end() ; ++it){
00255 EEDetId id(*it);
00256 if( id.zside() == scs[u].zside() && (id.ix()-1)/5+1 == scs[u].ix() && (id.iy()-1)/5+1 == scs[u].iy() ) ncrystals++;
00257 }
00258
00259 sumCertEE[i] += xcert * ncrystals;
00260 nValidChannelsEE[i] += ncrystals;
00261
00262 sumCert += xcert * ncrystals;
00263 nValidChannels += ncrystals;
00264
00265 }
00266 }
00267
00268 if( meEEDataCertification_[i] ) {
00269 if( nValidChannelsEE[i]>0 ) meEEDataCertification_[i]->Fill( sumCertEE[i]/nValidChannelsEE[i] );
00270 else meEEDataCertification_[i]->Fill( 0.0 );
00271 }
00272 }
00273
00274 if( meEEDataCertificationSummary_ ) {
00275 if( nValidChannels>0 ) meEEDataCertificationSummary_->Fill( sumCert/nValidChannels );
00276 else meEEDataCertificationSummary_->Fill( 0.0 );
00277 }
00278
00279 }
00280
00281 void EEDataCertificationTask::beginRun(const edm::Run& r, const edm::EventSetup& c) {
00282
00283 if ( ! mergeRuns_ ) this->reset();
00284
00285 }
00286
00287 void EEDataCertificationTask::endRun(const edm::Run& r, const edm::EventSetup& c) {
00288
00289 this->reset();
00290
00291 edm::ESHandle< EcalElectronicsMapping > handle;
00292 c.get< EcalMappingRcd >().get(handle);
00293 const EcalElectronicsMapping *map = handle.product();
00294 if( ! map ){
00295 edm::LogWarning("EEDaqInfoTask") << "EcalElectronicsMapping not available";
00296 return;
00297 }
00298
00299 char histo[200];
00300
00301 MonitorElement* me;
00302
00303 sprintf(histo, (prefixME_ + "/EventInfo/reportSummaryMap").c_str());
00304 me = dqmStore_->get(histo);
00305 hDQM_ = UtilsClient::getHisto<TH2F*>( me, cloneME_, hDQM_ );
00306
00307 sprintf(histo, (prefixME_ + "/EventInfo/DAQSummaryMap").c_str());
00308 me = dqmStore_->get(histo);
00309 hDAQ_ = UtilsClient::getHisto<TH2F*>( me, cloneME_, hDAQ_ );
00310
00311 sprintf(histo, (prefixME_ + "/EventInfo/DCSSummaryMap").c_str());
00312 me = dqmStore_->get(histo);
00313 hDCS_ = UtilsClient::getHisto<TH2F*>( me, cloneME_, hDCS_ );
00314
00315 float sumCert = 0.;
00316 float sumCertEE[18];
00317 int nValidChannels = 0;
00318 int nValidChannelsEE[18];
00319
00320 if ( meEEDataCertificationSummaryMap_ ){
00321 for(int ix=1 ; ix<=meEEDataCertificationSummaryMap_->getNbinsX() ; ix++){
00322 for(int iy=1 ; iy<=meEEDataCertificationSummaryMap_->getNbinsY() ; iy++){
00323 meEEDataCertificationSummaryMap_->setBinContent( ix, iy, -1.0 );
00324 }
00325 }
00326 }
00327
00328 for (int i = 0; i < 18; i++) {
00329 sumCertEE[i] = 0;
00330 nValidChannelsEE[i] = 0;
00331
00332 for(int t=1 ; t<=nTowerMax_ ; t++){
00333
00334 std::vector<DetId> crystals = map->dccTowerConstituents(DccId_[i], t);
00335 if(!crystals.size()) continue;
00336
00337 std::vector<EcalScDetId> scs = map->getEcalScDetId(DccId_[i], t, false);
00338 for(unsigned u=0 ; u<scs.size() ; u++){
00339
00340 int jx = scs[u].ix() + (scs[u].zside()<0 ? 0 : 20);
00341 int jy = scs[u].iy();
00342
00343 float xvalDQM, xvalDAQ, xvalDCS;
00344 xvalDQM = xvalDAQ = xvalDCS = -1.;
00345 float xcert = -1.;
00346
00347 if ( hDQM_ ) xvalDQM = hDQM_->GetBinContent( jx, jy );
00348 if ( hDAQ_ ) xvalDAQ = hDAQ_->GetBinContent( jx, jy );
00349 if ( hDCS_ ) xvalDCS = hDCS_->GetBinContent( jx, jy );
00350
00351 if ( xvalDQM == -1 || ( xvalDAQ == -1 && xvalDCS == -1 ) ) {
00352
00353 xcert = 0.0;
00354 } else {
00355
00356 xcert = std::abs(xvalDQM) * std::abs(xvalDAQ) * std::abs(xvalDCS);
00357 }
00358
00359 if ( meEEDataCertificationSummaryMap_ ) meEEDataCertificationSummaryMap_->setBinContent( jx, jy, xcert );
00360
00361 int ncrystals = 0;
00362
00363 for(std::vector<DetId>::const_iterator it=crystals.begin() ; it!=crystals.end() ; ++it){
00364 EEDetId id(*it);
00365 if( id.zside() == scs[u].zside() && (id.ix()-1)/5+1 == scs[u].ix() && (id.iy()-1)/5+1 == scs[u].iy() ) ncrystals++;
00366 }
00367
00368 sumCertEE[i] += xcert * ncrystals;
00369 nValidChannelsEE[i] += ncrystals;
00370
00371 sumCert += xcert * ncrystals;
00372 nValidChannels += ncrystals;
00373
00374 }
00375 }
00376
00377 if( meEEDataCertification_[i] ) {
00378 if( nValidChannelsEE[i]>0 ) meEEDataCertification_[i]->Fill( sumCertEE[i]/nValidChannelsEE[i] );
00379 else meEEDataCertification_[i]->Fill( 0.0 );
00380 }
00381 }
00382
00383 if( meEEDataCertificationSummary_ ) {
00384 if( nValidChannels>0 ) meEEDataCertificationSummary_->Fill( sumCert/nValidChannels );
00385 else meEEDataCertificationSummary_->Fill( 0.0 );
00386 }
00387
00388 }
00389
00390 void EEDataCertificationTask::reset(void) {
00391
00392 if ( meEEDataCertificationSummary_ ) meEEDataCertificationSummary_->Reset();
00393
00394 for (int i = 0; i < 18; i++) {
00395 if ( meEEDataCertification_[i] ) meEEDataCertification_[i]->Reset();
00396 }
00397
00398 if ( meEEDataCertificationSummaryMap_ ) meEEDataCertificationSummaryMap_->Reset();
00399
00400 if ( meEEDataCertificationSummaryMap_ ) meEEDataCertificationSummaryMap_->Reset();
00401
00402 }
00403
00404
00405 void EEDataCertificationTask::cleanup(void){
00406
00407 if ( cloneME_ ) {
00408 if( hDQM_ ) delete hDQM_;
00409 if( hDAQ_ ) delete hDAQ_;
00410 if( hDCS_ ) delete hDCS_;
00411 if( hIntegrityByLumi_ ) delete hIntegrityByLumi_;
00412 if( hFrontendByLumi_ ) delete hFrontendByLumi_;
00413 if( hSynchronizationByLumi_ ) delete hSynchronizationByLumi_;
00414 }
00415 hDQM_ = 0;
00416 hDAQ_ = 0;
00417 hDCS_ = 0;
00418 hIntegrityByLumi_ = 0;
00419 hFrontendByLumi_ = 0;
00420 hSynchronizationByLumi_ = 0;
00421
00422 if ( dqmStore_ ) {
00423 dqmStore_->setCurrentFolder(prefixME_ + "/EventInfo");
00424 if ( meEEDataCertificationSummary_ ) dqmStore_->removeElement( meEEDataCertificationSummary_->getName() );
00425 if ( meEEDataCertificationSummaryMap_ ) dqmStore_->removeElement( meEEDataCertificationSummaryMap_->getName() );
00426
00427 dqmStore_->setCurrentFolder(prefixME_ + "/EventInfo/CertificationContents");
00428 for (int i = 0; i < 18; i++) {
00429 if ( meEEDataCertification_[i] ) dqmStore_->removeElement( meEEDataCertification_[i]->getName() );
00430 }
00431 }
00432
00433 }
00434
00435 void EEDataCertificationTask::analyze(const edm::Event& e, const edm::EventSetup& c){
00436
00437 }