00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include <memory>
00012 #include <iostream>
00013 #include <fstream>
00014 #include <iomanip>
00015 #include <math.h>
00016
00017 #include "TCanvas.h"
00018 #include "TStyle.h"
00019 #include "TGraph.h"
00020 #include "TLine.h"
00021
00022 #include "DQMServices/Core/interface/DQMStore.h"
00023
00024 #include "OnlineDB/EcalCondDB/interface/MonTestPulseDat.h"
00025 #include "OnlineDB/EcalCondDB/interface/MonPulseShapeDat.h"
00026 #include "OnlineDB/EcalCondDB/interface/MonPNMGPADat.h"
00027 #include "OnlineDB/EcalCondDB/interface/RunCrystalErrorsDat.h"
00028 #include "OnlineDB/EcalCondDB/interface/RunTTErrorsDat.h"
00029 #include "OnlineDB/EcalCondDB/interface/RunPNErrorsDat.h"
00030
00031 #include "OnlineDB/EcalCondDB/interface/EcalCondDBInterface.h"
00032
00033 #include "CondTools/Ecal/interface/EcalErrorDictionary.h"
00034
00035 #include "DQM/EcalCommon/interface/EcalErrorMask.h"
00036 #include "DQM/EcalCommon/interface/UtilsClient.h"
00037 #include "DQM/EcalCommon/interface/LogicID.h"
00038 #include "DQM/EcalCommon/interface/Numbers.h"
00039
00040 #include <DQM/EcalEndcapMonitorClient/interface/EETestPulseClient.h>
00041
00042 using namespace cms;
00043 using namespace edm;
00044 using namespace std;
00045
00046 EETestPulseClient::EETestPulseClient(const ParameterSet& ps) {
00047
00048
00049 cloneME_ = ps.getUntrackedParameter<bool>("cloneME", true);
00050
00051
00052 verbose_ = ps.getUntrackedParameter<bool>("verbose", true);
00053
00054
00055 debug_ = ps.getUntrackedParameter<bool>("debug", false);
00056
00057
00058 prefixME_ = ps.getUntrackedParameter<string>("prefixME", "");
00059
00060
00061 enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
00062
00063
00064 superModules_.reserve(18);
00065 for ( unsigned int i = 1; i <= 18; i++ ) superModules_.push_back(i);
00066 superModules_ = ps.getUntrackedParameter<vector<int> >("superModules", superModules_);
00067
00068 for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00069
00070 int ism = superModules_[i];
00071
00072 ha01_[ism-1] = 0;
00073 ha02_[ism-1] = 0;
00074 ha03_[ism-1] = 0;
00075
00076 hs01_[ism-1] = 0;
00077 hs02_[ism-1] = 0;
00078 hs03_[ism-1] = 0;
00079
00080 i01_[ism-1] = 0;
00081 i02_[ism-1] = 0;
00082 i03_[ism-1] = 0;
00083 i04_[ism-1] = 0;
00084
00085 }
00086
00087 for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00088
00089 int ism = superModules_[i];
00090
00091 meg01_[ism-1] = 0;
00092 meg02_[ism-1] = 0;
00093 meg03_[ism-1] = 0;
00094
00095 meg04_[ism-1] = 0;
00096 meg05_[ism-1] = 0;
00097
00098 mea01_[ism-1] = 0;
00099 mea02_[ism-1] = 0;
00100 mea03_[ism-1] = 0;
00101
00102 mer04_[ism-1] = 0;
00103 mer05_[ism-1] = 0;
00104
00105 me_hs01_[ism-1] = 0;
00106 me_hs02_[ism-1] = 0;
00107 me_hs03_[ism-1] = 0;
00108
00109 }
00110
00111 percentVariation_ = 0.2;
00112 RMSThreshold_ = 300.0;
00113 amplitudeThreshold_ = 10.;
00114
00115 amplitudeThresholdPnG01_ = 200./16.;
00116 amplitudeThresholdPnG16_ = 200.;
00117
00118 pedPnExpectedMean_[0] = 750.0;
00119 pedPnExpectedMean_[1] = 750.0;
00120
00121 pedPnDiscrepancyMean_[0] = 100.0;
00122 pedPnDiscrepancyMean_[1] = 100.0;
00123
00124 pedPnRMSThreshold_[0] = 1.0;
00125 pedPnRMSThreshold_[1] = 3.0;
00126
00127 }
00128
00129 EETestPulseClient::~EETestPulseClient() {
00130
00131 }
00132
00133 void EETestPulseClient::beginJob(DQMStore* dqmStore) {
00134
00135 dqmStore_ = dqmStore;
00136
00137 if ( debug_ ) cout << "EETestPulseClient: beginJob" << endl;
00138
00139 ievt_ = 0;
00140 jevt_ = 0;
00141
00142 }
00143
00144 void EETestPulseClient::beginRun(void) {
00145
00146 if ( debug_ ) cout << "EETestPulseClient: beginRun" << endl;
00147
00148 jevt_ = 0;
00149
00150 this->setup();
00151
00152 }
00153
00154 void EETestPulseClient::endJob(void) {
00155
00156 if ( debug_ ) cout << "EETestPulseClient: endJob, ievt = " << ievt_ << endl;
00157
00158 this->cleanup();
00159
00160 }
00161
00162 void EETestPulseClient::endRun(void) {
00163
00164 if ( debug_ ) cout << "EETestPulseClient: endRun, jevt = " << jevt_ << endl;
00165
00166 this->cleanup();
00167
00168 }
00169
00170 void EETestPulseClient::setup(void) {
00171
00172 char histo[200];
00173
00174 dqmStore_->setCurrentFolder( prefixME_ + "/EETestPulseClient" );
00175
00176 for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00177
00178 int ism = superModules_[i];
00179
00180 if ( meg01_[ism-1] ) dqmStore_->removeElement( meg01_[ism-1]->getName() );
00181 sprintf(histo, "EETPT test pulse quality G01 %s", Numbers::sEE(ism).c_str());
00182 meg01_[ism-1] = dqmStore_->book2D(histo, histo, 50, Numbers::ix0EE(ism)+0., Numbers::ix0EE(ism)+50., 50, Numbers::iy0EE(ism)+0., Numbers::iy0EE(ism)+50.);
00183 meg01_[ism-1]->setAxisTitle("jx", 1);
00184 meg01_[ism-1]->setAxisTitle("jy", 2);
00185 if ( meg02_[ism-1] ) dqmStore_->removeElement( meg02_[ism-1]->getName() );
00186 sprintf(histo, "EETPT test pulse quality G06 %s", Numbers::sEE(ism).c_str());
00187 meg02_[ism-1] = dqmStore_->book2D(histo, histo, 50, Numbers::ix0EE(ism)+0., Numbers::ix0EE(ism)+50., 50, Numbers::iy0EE(ism)+0., Numbers::iy0EE(ism)+50.);
00188 meg02_[ism-1]->setAxisTitle("jx", 1);
00189 meg02_[ism-1]->setAxisTitle("jy", 2);
00190 if ( meg03_[ism-1] ) dqmStore_->removeElement( meg03_[ism-1]->getName() );
00191 sprintf(histo, "EETPT test pulse quality G12 %s", Numbers::sEE(ism).c_str());
00192 meg03_[ism-1] = dqmStore_->book2D(histo, histo, 50, Numbers::ix0EE(ism)+0., Numbers::ix0EE(ism)+50., 50, Numbers::iy0EE(ism)+0., Numbers::iy0EE(ism)+50.);
00193 meg03_[ism-1]->setAxisTitle("jx", 1);
00194 meg03_[ism-1]->setAxisTitle("jy", 2);
00195
00196 if ( meg04_[ism-1] ) dqmStore_->removeElement( meg04_[ism-1]->getName() );
00197 sprintf(histo, "EETPT test pulse quality PNs G01 %s", Numbers::sEE(ism).c_str());
00198 meg04_[ism-1] = dqmStore_->book2D(histo, histo, 10, 0., 10., 1, 0., 5.);
00199 meg04_[ism-1]->setAxisTitle("pseudo-strip", 1);
00200 meg04_[ism-1]->setAxisTitle("channel", 2);
00201 if ( meg05_[ism-1] ) dqmStore_->removeElement( meg05_[ism-1]->getName() );
00202 sprintf(histo, "EETPT test pulse quality PNs G16 %s", Numbers::sEE(ism).c_str());
00203 meg05_[ism-1] = dqmStore_->book2D(histo, histo, 10, 0., 10., 1, 0., 5.);
00204 meg05_[ism-1]->setAxisTitle("pseudo-strip", 1);
00205 meg05_[ism-1]->setAxisTitle("channel", 2);
00206
00207 if ( mea01_[ism-1] ) dqmStore_->removeElement( mea01_[ism-1]->getName() );
00208 sprintf(histo, "EETPT test pulse amplitude G01 %s", Numbers::sEE(ism).c_str());
00209 mea01_[ism-1] = dqmStore_->book1D(histo, histo, 850, 0., 850.);
00210 mea01_[ism-1]->setAxisTitle("channel", 1);
00211 mea01_[ism-1]->setAxisTitle("amplitude", 2);
00212 if ( mea02_[ism-1] ) dqmStore_->removeElement( mea02_[ism-1]->getName() );
00213 sprintf(histo, "EETPT test pulse amplitude G06 %s", Numbers::sEE(ism).c_str());
00214 mea02_[ism-1] = dqmStore_->book1D(histo, histo, 850, 0., 850.);
00215 mea02_[ism-1]->setAxisTitle("channel", 1);
00216 mea02_[ism-1]->setAxisTitle("amplitude", 2);
00217 if ( mea03_[ism-1] ) dqmStore_->removeElement( mea03_[ism-1]->getName() );
00218 sprintf(histo, "EETPT test pulse amplitude G12 %s", Numbers::sEE(ism).c_str());
00219 mea03_[ism-1] = dqmStore_->book1D(histo, histo, 850, 0., 850.);
00220 mea03_[ism-1]->setAxisTitle("channel", 1);
00221 mea03_[ism-1]->setAxisTitle("amplitude", 2);
00222
00223 if ( mer04_[ism-1] ) dqmStore_->removeElement( mer04_[ism-1]->getName() );
00224 sprintf(histo, "EEPDT PNs pedestal rms %s G01", Numbers::sEE(ism).c_str());
00225 mer04_[ism-1] = dqmStore_->book1D(histo, histo, 100, 0., 10.);
00226 mer04_[ism-1]->setAxisTitle("rms", 1);
00227 if ( mer05_[ism-1] ) dqmStore_->removeElement( mer05_[ism-1]->getName() );
00228 sprintf(histo, "EEPDT PNs pedestal rms %s G16", Numbers::sEE(ism).c_str());
00229 mer05_[ism-1] = dqmStore_->book1D(histo, histo, 100, 0., 10.);
00230 mer05_[ism-1]->setAxisTitle("rms", 1);
00231
00232 if ( me_hs01_[ism-1] ) dqmStore_->removeElement( me_hs01_[ism-1]->getName() );
00233 sprintf(histo, "EETPT test pulse shape G01 %s", Numbers::sEE(ism).c_str());
00234 me_hs01_[ism-1] = dqmStore_->book1D(histo, histo, 10, 0., 10.);
00235 me_hs01_[ism-1]->setAxisTitle("sample", 1);
00236 me_hs01_[ism-1]->setAxisTitle("amplitude", 2);
00237 if ( me_hs02_[ism-1] ) dqmStore_->removeElement( me_hs02_[ism-1]->getName() );
00238 sprintf(histo, "EETPT test pulse shape G06 %s", Numbers::sEE(ism).c_str());
00239 me_hs02_[ism-1] = dqmStore_->book1D(histo, histo, 10, 0., 10.);
00240 me_hs02_[ism-1]->setAxisTitle("sample", 1);
00241 me_hs02_[ism-1]->setAxisTitle("amplitude", 2);
00242 if ( me_hs03_[ism-1] ) dqmStore_->removeElement( me_hs03_[ism-1]->getName() );
00243 sprintf(histo, "EETPT test pulse shape G12 %s", Numbers::sEE(ism).c_str());
00244 me_hs03_[ism-1] = dqmStore_->book1D(histo, histo, 10, 0., 10.);
00245 me_hs03_[ism-1]->setAxisTitle("sample", 1);
00246 me_hs03_[ism-1]->setAxisTitle("amplitude", 2);
00247
00248 }
00249
00250 for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00251
00252 int ism = superModules_[i];
00253
00254 if ( meg01_[ism-1] ) meg01_[ism-1]->Reset();
00255 if ( meg02_[ism-1] ) meg02_[ism-1]->Reset();
00256 if ( meg03_[ism-1] ) meg03_[ism-1]->Reset();
00257
00258 if ( meg04_[ism-1] ) meg04_[ism-1]->Reset();
00259 if ( meg05_[ism-1] ) meg05_[ism-1]->Reset();
00260
00261 for ( int ix = 1; ix <= 50; ix++ ) {
00262 for ( int iy = 1; iy <= 50; iy++ ) {
00263
00264 meg01_[ism-1]->setBinContent( ix, iy, 6. );
00265 meg02_[ism-1]->setBinContent( ix, iy, 6. );
00266 meg03_[ism-1]->setBinContent( ix, iy, 6. );
00267
00268 int jx = ix + Numbers::ix0EE(ism);
00269 int jy = iy + Numbers::iy0EE(ism);
00270
00271 if ( ism >= 1 && ism <= 9 ) jx = 101 - jx;
00272
00273 if ( Numbers::validEE(ism, jx, jy) ) {
00274 meg01_[ism-1]->setBinContent( ix, iy, 2. );
00275 meg02_[ism-1]->setBinContent( ix, iy, 2. );
00276 meg03_[ism-1]->setBinContent( ix, iy, 2. );
00277 }
00278
00279 }
00280 }
00281
00282 for ( int i = 1; i <= 10; i++ ) {
00283
00284 meg04_[ism-1]->setBinContent( i, 1, 2. );
00285 meg05_[ism-1]->setBinContent( i, 1, 2. );
00286
00287 }
00288
00289 mea01_[ism-1]->Reset();
00290 mea02_[ism-1]->Reset();
00291 mea03_[ism-1]->Reset();
00292
00293 mer04_[ism-1]->Reset();
00294 mer05_[ism-1]->Reset();
00295
00296 me_hs01_[ism-1]->Reset();
00297 me_hs02_[ism-1]->Reset();
00298 me_hs03_[ism-1]->Reset();
00299
00300 }
00301
00302 }
00303
00304 void EETestPulseClient::cleanup(void) {
00305
00306 if ( ! enableCleanup_ ) return;
00307
00308 for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00309
00310 int ism = superModules_[i];
00311
00312 if ( cloneME_ ) {
00313 if ( ha01_[ism-1] ) delete ha01_[ism-1];
00314 if ( ha02_[ism-1] ) delete ha02_[ism-1];
00315 if ( ha03_[ism-1] ) delete ha03_[ism-1];
00316
00317 if ( hs01_[ism-1] ) delete hs01_[ism-1];
00318 if ( hs02_[ism-1] ) delete hs02_[ism-1];
00319 if ( hs03_[ism-1] ) delete hs03_[ism-1];
00320
00321 if ( i01_[ism-1] ) delete i01_[ism-1];
00322 if ( i02_[ism-1] ) delete i02_[ism-1];
00323 if ( i03_[ism-1] ) delete i03_[ism-1];
00324 if ( i04_[ism-1] ) delete i04_[ism-1];
00325 }
00326
00327 ha01_[ism-1] = 0;
00328 ha02_[ism-1] = 0;
00329 ha03_[ism-1] = 0;
00330
00331 hs01_[ism-1] = 0;
00332 hs02_[ism-1] = 0;
00333 hs03_[ism-1] = 0;
00334
00335 i01_[ism-1] = 0;
00336 i02_[ism-1] = 0;
00337 i03_[ism-1] = 0;
00338 i04_[ism-1] = 0;
00339
00340 }
00341
00342 for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00343
00344 int ism = superModules_[i];
00345
00346 dqmStore_->setCurrentFolder( prefixME_ + "/EETestPulseClient" );
00347
00348 if ( meg01_[ism-1] ) dqmStore_->removeElement( meg01_[ism-1]->getName() );
00349 meg01_[ism-1] = 0;
00350 if ( meg02_[ism-1] ) dqmStore_->removeElement( meg02_[ism-1]->getName() );
00351 meg02_[ism-1] = 0;
00352 if ( meg03_[ism-1] ) dqmStore_->removeElement( meg03_[ism-1]->getName() );
00353 meg03_[ism-1] = 0;
00354
00355 if ( meg04_[ism-1] ) dqmStore_->removeElement( meg04_[ism-1]->getName() );
00356 meg04_[ism-1] = 0;
00357 if ( meg05_[ism-1] ) dqmStore_->removeElement( meg05_[ism-1]->getName() );
00358 meg05_[ism-1] = 0;
00359
00360 if ( mea01_[ism-1] ) dqmStore_->removeElement( mea01_[ism-1]->getName() );
00361 mea01_[ism-1] = 0;
00362 if ( mea02_[ism-1] ) dqmStore_->removeElement( mea02_[ism-1]->getName() );
00363 mea02_[ism-1] = 0;
00364 if ( mea03_[ism-1] ) dqmStore_->removeElement( mea03_[ism-1]->getName() );
00365 mea03_[ism-1] = 0;
00366
00367 if ( mer04_[ism-1] ) dqmStore_->removeElement( mer04_[ism-1]->getName() );
00368 mer04_[ism-1] = 0;
00369 if ( mer05_[ism-1] ) dqmStore_->removeElement( mer05_[ism-1]->getName() );
00370 mer05_[ism-1] = 0;
00371
00372 if ( me_hs01_[ism-1] ) dqmStore_->removeElement( me_hs01_[ism-1]->getName() );
00373 me_hs01_[ism-1] = 0;
00374 if ( me_hs02_[ism-1] ) dqmStore_->removeElement( me_hs02_[ism-1]->getName() );
00375 me_hs02_[ism-1] = 0;
00376 if ( me_hs03_[ism-1] ) dqmStore_->removeElement( me_hs03_[ism-1]->getName() );
00377 me_hs03_[ism-1] = 0;
00378
00379 }
00380
00381 }
00382
00383 bool EETestPulseClient::writeDb(EcalCondDBInterface* econn, RunIOV* runiov, MonRunIOV* moniov, bool& status, bool flag) {
00384
00385 status = true;
00386
00387 if ( ! flag ) return false;
00388
00389 EcalLogicID ecid;
00390
00391 MonTestPulseDat adc;
00392 map<EcalLogicID, MonTestPulseDat> dataset1;
00393 MonPulseShapeDat shape;
00394 map<EcalLogicID, MonPulseShapeDat> dataset2;
00395
00396 for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00397
00398 int ism = superModules_[i];
00399
00400 if ( verbose_ ) {
00401 cout << " " << Numbers::sEE(ism) << " (ism=" << ism << ")" << endl;
00402 cout << endl;
00403 UtilsClient::printBadChannels(meg01_[ism-1], ha01_[ism-1]);
00404 UtilsClient::printBadChannels(meg02_[ism-1], ha02_[ism-1]);
00405 UtilsClient::printBadChannels(meg03_[ism-1], ha03_[ism-1]);
00406 }
00407
00408 for ( int ix = 1; ix <= 50; ix++ ) {
00409 for ( int iy = 1; iy <= 50; iy++ ) {
00410
00411 int jx = ix + Numbers::ix0EE(ism);
00412 int jy = iy + Numbers::iy0EE(ism);
00413
00414 if ( ism >= 1 && ism <= 9 ) jx = 101 - jx;
00415
00416 if ( ! Numbers::validEE(ism, jx, jy) ) continue;
00417
00418 bool update01;
00419 bool update02;
00420 bool update03;
00421
00422 float num01, num02, num03;
00423 float mean01, mean02, mean03;
00424 float rms01, rms02, rms03;
00425
00426 update01 = UtilsClient::getBinStatistics(ha01_[ism-1], ix, iy, num01, mean01, rms01);
00427 update02 = UtilsClient::getBinStatistics(ha02_[ism-1], ix, iy, num02, mean02, rms02);
00428 update03 = UtilsClient::getBinStatistics(ha03_[ism-1], ix, iy, num03, mean03, rms03);
00429
00430 if ( update01 || update02 || update03 ) {
00431
00432 if ( Numbers::icEE(ism, jx, jy) == 1 ) {
00433
00434 if ( verbose_ ) {
00435 cout << "Preparing dataset for " << Numbers::sEE(ism) << " (ism=" << ism << ")" << endl;
00436 cout << "G01 (" << Numbers::ix0EE(i+1)+ix << "," << Numbers::iy0EE(i+1)+iy << ") " << num01 << " " << mean01 << " " << rms01 << endl;
00437 cout << "G06 (" << Numbers::ix0EE(i+1)+ix << "," << Numbers::iy0EE(i+1)+iy << ") " << num02 << " " << mean02 << " " << rms02 << endl;
00438 cout << "G12 (" << Numbers::ix0EE(i+1)+ix << "," << Numbers::iy0EE(i+1)+iy << ") " << num03 << " " << mean03 << " " << rms03 << endl;
00439 cout << endl;
00440 }
00441
00442 }
00443
00444 adc.setADCMeanG1(mean01);
00445 adc.setADCRMSG1(rms01);
00446
00447 adc.setADCMeanG6(mean02);
00448 adc.setADCRMSG6(rms02);
00449
00450 adc.setADCMeanG12(mean03);
00451 adc.setADCRMSG12(rms03);
00452
00453 if ( UtilsClient::getBinStatus(meg01_[ism-1], ix, iy) &&
00454 UtilsClient::getBinStatus(meg02_[ism-1], ix, iy) &&
00455 UtilsClient::getBinStatus(meg03_[ism-1], ix, iy) ) {
00456 adc.setTaskStatus(true);
00457 } else {
00458 adc.setTaskStatus(false);
00459 }
00460
00461 status = status && UtilsClient::getBinQuality(meg01_[ism-1], ix, iy) &&
00462 UtilsClient::getBinQuality(meg02_[ism-1], ix, iy) &&
00463 UtilsClient::getBinQuality(meg03_[ism-1], ix, iy);
00464
00465 if ( Numbers::icEE(ism, jx, jy) == 1 ) {
00466
00467 vector<float> sample01, sample02, sample03;
00468
00469 sample01.clear();
00470 sample02.clear();
00471 sample03.clear();
00472
00473 if ( me_hs01_[ism-1] ) {
00474 for ( int i = 1; i <= 10; i++ ) {
00475 sample01.push_back(int(me_hs01_[ism-1]->getBinContent(i)));
00476 }
00477 } else {
00478 for ( int i = 1; i <= 10; i++ ) { sample01.push_back(-1.); }
00479 }
00480
00481 if ( me_hs02_[ism-1] ) {
00482 for ( int i = 1; i <= 10; i++ ) {
00483 sample02.push_back(int(me_hs02_[ism-1]->getBinContent(i)));
00484 }
00485 } else {
00486 for ( int i = 1; i <= 10; i++ ) { sample02.push_back(-1.); }
00487 }
00488
00489 if ( me_hs03_[ism-1] ) {
00490 for ( int i = 1; i <= 10; i++ ) {
00491 sample03.push_back(int(me_hs03_[ism-1]->getBinContent(i)));
00492 }
00493 } else {
00494 for ( int i = 1; i <= 10; i++ ) { sample03.push_back(-1.); }
00495 }
00496
00497 if ( verbose_ ) {
00498 cout << "sample01 = " << flush;
00499 for ( unsigned int i = 0; i < sample01.size(); i++ ) {
00500 cout << sample01[i] << " " << flush;
00501 }
00502 cout << endl;
00503
00504 cout << "sample02 = " << flush;
00505 for ( unsigned int i = 0; i < sample02.size(); i++ ) {
00506 cout << sample02[i] << " " << flush;
00507 }
00508 cout << endl;
00509
00510 cout << "sample03 = " << flush;
00511 for ( unsigned int i = 0; i < sample03.size(); i++ ) {
00512 cout << sample03[i] << " " << flush;
00513 }
00514 cout << endl;
00515 }
00516
00517 if ( verbose_ ) cout << endl;
00518
00519 shape.setSamples(sample01, 1);
00520 shape.setSamples(sample02, 6);
00521 shape.setSamples(sample03, 12);
00522
00523 }
00524
00525 int ic = Numbers::indexEE(ism, jx, jy);
00526
00527 if ( ic == -1 ) continue;
00528
00529 if ( econn ) {
00530 ecid = LogicID::getEcalLogicID("EE_crystal_number", Numbers::iSM(ism, EcalEndcap), ic);
00531 dataset1[ecid] = adc;
00532 if ( Numbers::icEE(ism, jx, jy) == 1 ) dataset2[ecid] = shape;
00533 }
00534
00535 }
00536
00537 }
00538 }
00539
00540 }
00541
00542 if ( econn ) {
00543 try {
00544 if ( verbose_ ) cout << "Inserting MonTestPulseDat ..." << endl;
00545 if ( dataset1.size() != 0 ) econn->insertDataArraySet(&dataset1, moniov);
00546 if ( dataset2.size() != 0 ) econn->insertDataSet(&dataset2, moniov);
00547 if ( verbose_ ) cout << "done." << endl;
00548 } catch (runtime_error &e) {
00549 cerr << e.what() << endl;
00550 }
00551 }
00552
00553 if ( verbose_ ) cout << endl;
00554
00555 MonPNMGPADat pn;
00556 map<EcalLogicID, MonPNMGPADat> dataset3;
00557
00558 for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00559
00560 int ism = superModules_[i];
00561
00562 if ( verbose_ ) {
00563 cout << " " << Numbers::sEE(ism) << " (ism=" << ism << ")" << endl;
00564 cout << endl;
00565 UtilsClient::printBadChannels(meg04_[ism-1], i01_[ism-1]);
00566 UtilsClient::printBadChannels(meg04_[ism-1], i03_[ism-1]);
00567 UtilsClient::printBadChannels(meg05_[ism-1], i02_[ism-1]);
00568 UtilsClient::printBadChannels(meg05_[ism-1], i04_[ism-1]);
00569 }
00570
00571 for ( int i = 1; i <= 10; i++ ) {
00572
00573 bool update01;
00574 bool update02;
00575 bool update03;
00576 bool update04;
00577
00578 float num01, num02, num03, num04;
00579 float mean01, mean02, mean03, mean04;
00580 float rms01, rms02, rms03, rms04;
00581
00582 update01 = UtilsClient::getBinStatistics(i01_[ism-1], i, 0, num01, mean01, rms01);
00583 update02 = UtilsClient::getBinStatistics(i02_[ism-1], i, 0, num02, mean02, rms02);
00584 update03 = UtilsClient::getBinStatistics(i03_[ism-1], i, 0, num03, mean03, rms03);
00585 update04 = UtilsClient::getBinStatistics(i04_[ism-1], i, 0, num04, mean04, rms04);
00586
00587 if ( update01 || update02 || update03 || update04 ) {
00588
00589 if ( i == 1 ) {
00590
00591 if ( verbose_ ) {
00592 cout << "Preparing dataset for " << Numbers::sEE(ism) << " (ism=" << ism << ")" << endl;
00593 cout << "PNs (" << i << ") G01 " << num01 << " " << mean01 << " " << rms01 << " " << num03 << " " << mean03 << " " << rms03 << endl;
00594 cout << "PNs (" << i << ") G16 " << num02 << " " << mean02 << " " << rms02 << " " << num04 << " " << mean04 << " " << rms04 << endl;
00595 cout << endl;
00596 }
00597
00598 }
00599
00600 pn.setADCMeanG1(mean01);
00601 pn.setADCRMSG1(rms01);
00602
00603 pn.setPedMeanG1(mean03);
00604 pn.setPedRMSG1(rms03);
00605
00606 pn.setADCMeanG16(mean02);
00607 pn.setADCRMSG16(rms02);
00608
00609 pn.setPedMeanG16(mean04);
00610 pn.setPedRMSG16(rms04);
00611
00612 if ( UtilsClient::getBinStatus(meg04_[ism-1], i, 1) &&
00613 UtilsClient::getBinStatus(meg05_[ism-1], i, 1) ) {
00614 pn.setTaskStatus(true);
00615 } else {
00616 pn.setTaskStatus(false);
00617 }
00618
00619 status = status && UtilsClient::getBinQuality(meg04_[ism-1], i, 1) &&
00620 UtilsClient::getBinQuality(meg05_[ism-1], i, 1);
00621
00622 if ( econn ) {
00623 ecid = LogicID::getEcalLogicID("EE_LM_PN", Numbers::iSM(ism, EcalEndcap), i-1);
00624 dataset3[ecid] = pn;
00625 }
00626
00627 }
00628
00629 }
00630
00631 }
00632
00633 if ( econn ) {
00634 try {
00635 if ( verbose_ ) cout << "Inserting MonPNMGPADat ..." << endl;
00636 if ( dataset3.size() != 0 ) econn->insertDataArraySet(&dataset3, moniov);
00637 if ( verbose_ ) cout << "done." << endl;
00638 } catch (runtime_error &e) {
00639 cerr << e.what() << endl;
00640 }
00641 }
00642
00643 return true;
00644
00645 }
00646
00647 void EETestPulseClient::analyze(void) {
00648
00649 ievt_++;
00650 jevt_++;
00651 if ( ievt_ % 10 == 0 ) {
00652 if ( debug_ ) cout << "EETestPulseClient: ievt/jevt = " << ievt_ << "/" << jevt_ << endl;
00653 }
00654
00655 uint64_t bits01 = 0;
00656 bits01 |= EcalErrorDictionary::getMask("TESTPULSE_LOW_GAIN_MEAN_WARNING");
00657 bits01 |= EcalErrorDictionary::getMask("TESTPULSE_LOW_GAIN_RMS_WARNING");
00658
00659 uint64_t bits02 = 0;
00660 bits02 |= EcalErrorDictionary::getMask("TESTPULSE_MIDDLE_GAIN_MEAN_WARNING");
00661 bits02 |= EcalErrorDictionary::getMask("TESTPULSE_MIDDLE_GAIN_RMS_WARNING");
00662
00663 uint64_t bits03 = 0;
00664 bits03 |= EcalErrorDictionary::getMask("TESTPULSE_HIGH_GAIN_MEAN_WARNING");
00665 bits03 |= EcalErrorDictionary::getMask("TESTPULSE_HIGH_GAIN_RMS_WARNING");
00666
00667 uint64_t bits04 = 0;
00668 bits04 |= EcalErrorDictionary::getMask("PEDESTAL_LOW_GAIN_MEAN_WARNING");
00669 bits04 |= EcalErrorDictionary::getMask("PEDESTAL_LOW_GAIN_RMS_WARNING");
00670 bits04 |= EcalErrorDictionary::getMask("PEDESTAL_LOW_GAIN_MEAN_ERROR");
00671 bits04 |= EcalErrorDictionary::getMask("PEDESTAL_LOW_GAIN_RMS_ERROR");
00672
00673 uint64_t bits05 = 0;
00674 bits05 |= EcalErrorDictionary::getMask("PEDESTAL_MIDDLE_GAIN_MEAN_WARNING");
00675 bits05 |= EcalErrorDictionary::getMask("PEDESTAL_MIDDLE_GAIN_RMS_WARNING");
00676 bits05 |= EcalErrorDictionary::getMask("PEDESTAL_MIDDLE_GAIN_MEAN_ERROR");
00677 bits05 |= EcalErrorDictionary::getMask("PEDESTAL_MIDDLE_GAIN_RMS_ERROR");
00678
00679 uint64_t bits06 = 0;
00680 bits06 |= EcalErrorDictionary::getMask("PEDESTAL_HIGH_GAIN_MEAN_WARNING");
00681 bits06 |= EcalErrorDictionary::getMask("PEDESTAL_HIGH_GAIN_RMS_WARNING");
00682 bits06 |= EcalErrorDictionary::getMask("PEDESTAL_HIGH_GAIN_MEAN_ERROR");
00683 bits06 |= EcalErrorDictionary::getMask("PEDESTAL_HIGH_GAIN_RMS_ERROR");
00684
00685 map<EcalLogicID, RunCrystalErrorsDat> mask1;
00686 map<EcalLogicID, RunPNErrorsDat> mask2;
00687 map<EcalLogicID, RunTTErrorsDat> mask3;
00688
00689 EcalErrorMask::fetchDataSet(&mask1);
00690 EcalErrorMask::fetchDataSet(&mask2);
00691 EcalErrorMask::fetchDataSet(&mask3);
00692
00693 char histo[200];
00694
00695 MonitorElement* me;
00696
00697 for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00698
00699 int ism = superModules_[i];
00700
00701 sprintf(histo, (prefixME_ + "/EETestPulseTask/Gain01/EETPT amplitude %s G01").c_str(), Numbers::sEE(ism).c_str());
00702 me = dqmStore_->get(histo);
00703 ha01_[ism-1] = UtilsClient::getHisto<TProfile2D*>( me, cloneME_, ha01_[ism-1] );
00704
00705 sprintf(histo, (prefixME_ + "/EETestPulseTask/Gain06/EETPT amplitude %s G06").c_str(), Numbers::sEE(ism).c_str());
00706 me = dqmStore_->get(histo);
00707 ha02_[ism-1] = UtilsClient::getHisto<TProfile2D*>( me, cloneME_, ha02_[ism-1] );
00708
00709 sprintf(histo, (prefixME_ + "/EETestPulseTask/Gain12/EETPT amplitude %s G12").c_str(), Numbers::sEE(ism).c_str());
00710 me = dqmStore_->get(histo);
00711 ha03_[ism-1] = UtilsClient::getHisto<TProfile2D*>( me, cloneME_, ha03_[ism-1] );
00712
00713 sprintf(histo, (prefixME_ + "/EETestPulseTask/Gain01/EETPT shape %s G01").c_str(), Numbers::sEE(ism).c_str());
00714 me = dqmStore_->get(histo);
00715 hs01_[ism-1] = UtilsClient::getHisto<TProfile2D*>( me, cloneME_, hs01_[ism-1] );
00716
00717 sprintf(histo, (prefixME_ + "/EETestPulseTask/Gain06/EETPT shape %s G06").c_str(), Numbers::sEE(ism).c_str());
00718 me = dqmStore_->get(histo);
00719 hs02_[ism-1] = UtilsClient::getHisto<TProfile2D*>( me, cloneME_, hs02_[ism-1] );
00720
00721 sprintf(histo, (prefixME_ + "/EETestPulseTask/Gain12/EETPT shape %s G12").c_str(), Numbers::sEE(ism).c_str());
00722 me = dqmStore_->get(histo);
00723 hs03_[ism-1] = UtilsClient::getHisto<TProfile2D*>( me, cloneME_, hs03_[ism-1] );
00724
00725 sprintf(histo, (prefixME_ + "/EETestPulseTask/PN/Gain01/EEPDT PNs amplitude %s G01").c_str(), Numbers::sEE(ism).c_str());
00726 me = dqmStore_->get(histo);
00727 i01_[ism-1] = UtilsClient::getHisto<TProfile*>( me, cloneME_, i01_[ism-1] );
00728
00729 sprintf(histo, (prefixME_ + "/EETestPulseTask/PN/Gain16/EEPDT PNs amplitude %s G16").c_str(), Numbers::sEE(ism).c_str());
00730 me = dqmStore_->get(histo);
00731 i02_[ism-1] = UtilsClient::getHisto<TProfile*>( me, cloneME_, i02_[ism-1] );
00732
00733 sprintf(histo, (prefixME_ + "/EETestPulseTask/PN/Gain01/EEPDT PNs pedestal %s G01").c_str(), Numbers::sEE(ism).c_str());
00734 me = dqmStore_->get(histo);
00735 i03_[ism-1] = UtilsClient::getHisto<TProfile*>( me, cloneME_, i03_[ism-1] );
00736
00737 sprintf(histo, (prefixME_ + "/EETestPulseTask/PN/Gain16/EEPDT PNs pedestal %s G16").c_str(), Numbers::sEE(ism).c_str());
00738 me = dqmStore_->get(histo);
00739 i04_[ism-1] = UtilsClient::getHisto<TProfile*>( me, cloneME_, i04_[ism-1] );
00740
00741 meg01_[ism-1]->Reset();
00742 meg02_[ism-1]->Reset();
00743 meg03_[ism-1]->Reset();
00744
00745 meg04_[ism-1]->Reset();
00746 meg05_[ism-1]->Reset();
00747
00748 mea01_[ism-1]->Reset();
00749 mea02_[ism-1]->Reset();
00750 mea03_[ism-1]->Reset();
00751
00752 mer04_[ism-1]->Reset();
00753 mer05_[ism-1]->Reset();
00754
00755 me_hs01_[ism-1]->Reset();
00756 me_hs02_[ism-1]->Reset();
00757 me_hs03_[ism-1]->Reset();
00758
00759 float meanAmpl01, meanAmpl02, meanAmpl03;
00760
00761 int nCry01, nCry02, nCry03;
00762
00763 meanAmpl01 = meanAmpl02 = meanAmpl03 = 0.;
00764
00765 nCry01 = nCry02 = nCry03 = 0;
00766
00767 for ( int ix = 1; ix <= 50; ix++ ) {
00768 for ( int iy = 1; iy <= 50; iy++ ) {
00769
00770 bool update01;
00771 bool update02;
00772 bool update03;
00773
00774 float num01, num02, num03;
00775 float mean01, mean02, mean03;
00776 float rms01, rms02, rms03;
00777
00778 update01 = UtilsClient::getBinStatistics(ha01_[ism-1], ix, iy, num01, mean01, rms01);
00779 update02 = UtilsClient::getBinStatistics(ha02_[ism-1], ix, iy, num02, mean02, rms02);
00780 update03 = UtilsClient::getBinStatistics(ha03_[ism-1], ix, iy, num03, mean03, rms03);
00781
00782 if ( update01 ) {
00783 meanAmpl01 += mean01;
00784 nCry01++;
00785 }
00786
00787 if ( update02 ) {
00788 meanAmpl02 += mean02;
00789 nCry02++;
00790 }
00791
00792 if ( update03 ) {
00793 meanAmpl03 += mean03;
00794 nCry03++;
00795 }
00796
00797 }
00798 }
00799
00800 if ( nCry01 > 0 ) meanAmpl01 /= float (nCry01);
00801 if ( nCry02 > 0 ) meanAmpl02 /= float (nCry02);
00802 if ( nCry03 > 0 ) meanAmpl03 /= float (nCry03);
00803
00804 for ( int ix = 1; ix <= 50; ix++ ) {
00805 for ( int iy = 1; iy <= 50; iy++ ) {
00806
00807 if ( meg01_[ism-1] ) meg01_[ism-1]->setBinContent( ix, iy, 6. );
00808 if ( meg02_[ism-1] ) meg02_[ism-1]->setBinContent( ix, iy, 6. );
00809 if ( meg03_[ism-1] ) meg03_[ism-1]->setBinContent( ix, iy, 6. );
00810
00811 int jx = ix + Numbers::ix0EE(ism);
00812 int jy = iy + Numbers::iy0EE(ism);
00813
00814 if ( ism >= 1 && ism <= 9 ) jx = 101 - jx;
00815
00816 if ( Numbers::validEE(ism, jx, jy) ) {
00817 if ( meg01_[ism-1] ) meg01_[ism-1]->setBinContent( ix, iy, 2. );
00818 if ( meg02_[ism-1] ) meg02_[ism-1]->setBinContent( ix, iy, 2. );
00819 if ( meg03_[ism-1] ) meg03_[ism-1]->setBinContent( ix, iy, 2. );
00820 }
00821
00822 float numEventsinCry[3] = {0., 0., 0.};
00823
00824 if ( ha01_[ism-1] ) numEventsinCry[0] = ha01_[ism-1]->GetBinEntries(ha01_[ism-1]->GetBin(ix, iy));
00825 if ( ha02_[ism-1] ) numEventsinCry[1] = ha02_[ism-1]->GetBinEntries(ha02_[ism-1]->GetBin(ix, iy));
00826 if ( ha03_[ism-1] ) numEventsinCry[2] = ha03_[ism-1]->GetBinEntries(ha03_[ism-1]->GetBin(ix, iy));
00827
00828 bool update01;
00829 bool update02;
00830 bool update03;
00831
00832 float num01, num02, num03;
00833 float mean01, mean02, mean03;
00834 float rms01, rms02, rms03;
00835
00836 update01 = UtilsClient::getBinStatistics(ha01_[ism-1], ix, iy, num01, mean01, rms01);
00837 update02 = UtilsClient::getBinStatistics(ha02_[ism-1], ix, iy, num02, mean02, rms02);
00838 update03 = UtilsClient::getBinStatistics(ha03_[ism-1], ix, iy, num03, mean03, rms03);
00839
00840 if ( update01 ) {
00841
00842 float val;
00843
00844 val = 1.;
00845 if ( fabs(mean01 - meanAmpl01) > fabs(percentVariation_ * meanAmpl01) || mean01 < amplitudeThreshold_ )
00846 val = 0.;
00847 if ( rms01 > RMSThreshold_ )
00848 val = 0.;
00849 if ( meg01_[ism-1] ) meg01_[ism-1]->setBinContent( ix, iy, val );
00850
00851 int ic = Numbers::icEE(ism, jx, jy);
00852
00853 if ( ic != -1 ) {
00854 if ( mea01_[ism-1] ) {
00855 if ( mean01 > 0. ) {
00856 mea01_[ism-1]->setBinContent( ic, mean01 );
00857 mea01_[ism-1]->setBinError( ic, rms01 );
00858 } else {
00859 mea01_[ism-1]->setEntries( 1.+mea01_[ism-1]->getEntries() );
00860 }
00861 }
00862 }
00863
00864 }
00865
00866 if ( update02 ) {
00867
00868 float val;
00869
00870 val = 1.;
00871 if ( fabs(mean02 - meanAmpl02) > fabs(percentVariation_ * meanAmpl02) || mean02 < amplitudeThreshold_ )
00872 val = 0.;
00873 if ( rms02 > RMSThreshold_ )
00874 val = 0.;
00875 if ( meg02_[ism-1] ) meg02_[ism-1]->setBinContent( ix, iy, val );
00876
00877 int ic = Numbers::icEE(ism, jx, jy);
00878
00879 if ( ic != -1 ) {
00880 if ( mea02_[ism-1] ) {
00881 if ( mean02 > 0. ) {
00882 mea02_[ism-1]->setBinContent( ic, mean02 );
00883 mea02_[ism-1]->setBinError( ic, rms02 );
00884 } else {
00885 mea02_[ism-1]->setEntries( 1.+mea02_[ism-1]->getEntries() );
00886 }
00887 }
00888 }
00889
00890 }
00891
00892 if ( update03 ) {
00893
00894 float val;
00895
00896 val = 1.;
00897 if ( fabs(mean03 - meanAmpl03) > fabs(percentVariation_ * meanAmpl03) || mean03 < amplitudeThreshold_ )
00898 val = 0.;
00899 if ( rms03 > RMSThreshold_ )
00900 val = 0.;
00901 if ( meg03_[ism-1] ) meg03_[ism-1]->setBinContent( ix, iy, val );
00902
00903 int ic = Numbers::icEE(ism, jx, jy);
00904
00905 if ( ic != -1 ) {
00906 if ( mea03_[ism-1] ) {
00907 if ( mean03 > 0. ) {
00908 mea03_[ism-1]->setBinContent( ic, mean03 );
00909 mea03_[ism-1]->setBinError( ic, rms03 );
00910 } else {
00911 mea03_[ism-1]->setEntries( 1.+mea03_[ism-1]->getEntries() );
00912 }
00913 }
00914 }
00915
00916 }
00917
00918
00919
00920 if ( mask1.size() != 0 ) {
00921 map<EcalLogicID, RunCrystalErrorsDat>::const_iterator m;
00922 for (m = mask1.begin(); m != mask1.end(); m++) {
00923
00924 int jx = ix + Numbers::ix0EE(ism);
00925 int jy = iy + Numbers::iy0EE(ism);
00926
00927 if ( ism >= 1 && ism <= 9 ) jx = 101 - jx;
00928
00929 if ( ! Numbers::validEE(ism, jx, jy) ) continue;
00930
00931 int ic = Numbers::indexEE(ism, jx, jy);
00932
00933 if ( ic == -1 ) continue;
00934
00935 EcalLogicID ecid = m->first;
00936
00937 if ( ecid.getLogicID() == LogicID::getEcalLogicID("EE_crystal_number", Numbers::iSM(ism, EcalEndcap), ic).getLogicID() ) {
00938 if ( (m->second).getErrorBits() & bits01 ) {
00939 UtilsClient::maskBinContent( meg01_[ism-1], ix, iy );
00940 }
00941 if ( (m->second).getErrorBits() & bits02 ) {
00942 UtilsClient::maskBinContent( meg02_[ism-1], ix, iy );
00943 }
00944 if ( (m->second).getErrorBits() & bits03 ) {
00945 UtilsClient::maskBinContent( meg03_[ism-1], ix, iy );
00946 }
00947 }
00948
00949 }
00950 }
00951
00952
00953
00954 if ( mask3.size() != 0 ) {
00955 map<EcalLogicID, RunTTErrorsDat>::const_iterator m;
00956 for (m = mask3.begin(); m != mask3.end(); m++) {
00957
00958 EcalLogicID ecid = m->first;
00959
00960 int itt = Numbers::iTT(ism, EcalEndcap, ix, iy);
00961
00962 if ( ecid.getLogicID() == LogicID::getEcalLogicID("EE_readout_tower", Numbers::iSM(ism, EcalEndcap), itt).getLogicID() ) {
00963 if ( (m->second).getErrorBits() & bits01 ) {
00964 UtilsClient::maskBinContent( meg01_[ism-1], ix, iy );
00965 }
00966 if ( (m->second).getErrorBits() & bits02 ) {
00967 UtilsClient::maskBinContent( meg02_[ism-1], ix, iy );
00968 }
00969 if ( (m->second).getErrorBits() & bits03 ) {
00970 UtilsClient::maskBinContent( meg03_[ism-1], ix, iy );
00971 }
00972 }
00973
00974 }
00975 }
00976
00977 }
00978 }
00979
00980 for ( int i = 1; i <= 10; i++ ) {
00981
00982 if ( meg04_[ism-1] ) meg04_[ism-1]->setBinContent( i, 1, 2. );
00983 if ( meg05_[ism-1] ) meg05_[ism-1]->setBinContent( i, 1, 2. );
00984
00985 bool update01;
00986 bool update02;
00987 bool update03;
00988 bool update04;
00989
00990 float num01, num02, num03, num04;
00991 float mean01, mean02, mean03, mean04;
00992 float rms01, rms02, rms03, rms04;
00993
00994 update01 = UtilsClient::getBinStatistics(i01_[ism-1], i, 0, num01, mean01, rms01);
00995 update02 = UtilsClient::getBinStatistics(i02_[ism-1], i, 0, num02, mean02, rms02);
00996 update03 = UtilsClient::getBinStatistics(i03_[ism-1], i, 0, num03, mean03, rms03);
00997 update04 = UtilsClient::getBinStatistics(i04_[ism-1], i, 0, num04, mean04, rms04);
00998
00999 if ( mer04_[ism-1] ) mer04_[ism-1]->Fill(rms03);
01000 if ( mer05_[ism-1] ) mer05_[ism-1]->Fill(rms04);
01001
01002 if ( update01 && update03 ) {
01003
01004 float val;
01005
01006 val = 1.;
01007 if ( mean01 < amplitudeThresholdPnG01_ )
01008 val = 0.;
01009 if ( mean03 < pedPnExpectedMean_[0] - pedPnDiscrepancyMean_[0] ||
01010 pedPnExpectedMean_[0] + pedPnDiscrepancyMean_[0] < mean03)
01011 val = 0.;
01012 if ( rms03 > pedPnRMSThreshold_[0] )
01013 val = 0.;
01014 if ( meg04_[ism-1] ) meg04_[ism-1]->setBinContent(i, 1, val);
01015
01016 }
01017
01018 if ( update02 && update04 ) {
01019
01020 float val;
01021
01022 val = 1.;
01023 if ( mean02 < amplitudeThresholdPnG16_ )
01024 val = 0.;
01025 if ( mean04 < pedPnExpectedMean_[1] - pedPnDiscrepancyMean_[1] ||
01026 pedPnExpectedMean_[1] + pedPnDiscrepancyMean_[1] < mean04)
01027 val = 0.;
01028 if ( rms04 > pedPnRMSThreshold_[1] )
01029 val = 0.;
01030 if ( meg05_[ism-1] ) meg05_[ism-1]->setBinContent(i, 1, val);
01031
01032 }
01033
01034
01035
01036 if ( mask2.size() != 0 ) {
01037 map<EcalLogicID, RunPNErrorsDat>::const_iterator m;
01038 for (m = mask2.begin(); m != mask2.end(); m++) {
01039
01040 EcalLogicID ecid = m->first;
01041
01042 if ( ecid.getLogicID() == LogicID::getEcalLogicID("EE_LM_PN", Numbers::iSM(ism, EcalEndcap), i-1).getLogicID() ) {
01043 if ( (m->second).getErrorBits() & (bits01|bits04) ) {
01044 UtilsClient::maskBinContent( meg04_[ism-1], i, 1 );
01045 }
01046 if ( (m->second).getErrorBits() & (bits03|bits06) ) {
01047 UtilsClient::maskBinContent( meg05_[ism-1], i, 1 );
01048 }
01049 }
01050
01051 }
01052 }
01053
01054 }
01055
01056 for ( int i = 1; i <= 10; i++ ) {
01057
01058 if ( hs01_[ism-1] ) {
01059 int ic = UtilsClient::getFirstNonEmptyChannel( hs01_[ism-1] );
01060 if ( me_hs01_[ism-1] ) {
01061 me_hs01_[ism-1]->setBinContent( i, hs01_[ism-1]->GetBinContent(ic, i) );
01062 me_hs01_[ism-1]->setBinError( i, hs01_[ism-1]->GetBinError(ic, i) );
01063 }
01064 }
01065
01066 if ( hs02_[ism-1] ) {
01067 int ic = UtilsClient::getFirstNonEmptyChannel( hs02_[ism-1] );
01068 if ( me_hs02_[ism-1] ) {
01069 me_hs02_[ism-1]->setBinContent( i, hs02_[ism-1]->GetBinContent(ic, i) );
01070 me_hs02_[ism-1]->setBinError( i, hs02_[ism-1]->GetBinError(ic, i) );
01071 }
01072 }
01073
01074 if ( hs03_[ism-1] ) {
01075 int ic = UtilsClient::getFirstNonEmptyChannel( hs03_[ism-1] );
01076 if ( me_hs03_[ism-1] ) {
01077 me_hs03_[ism-1]->setBinContent( i, hs03_[ism-1]->GetBinContent(ic, i) );
01078 me_hs03_[ism-1]->setBinError( i, hs03_[ism-1]->GetBinError(ic, i) );
01079 }
01080 }
01081
01082 }
01083
01084 }
01085
01086 }
01087
01088 void EETestPulseClient::softReset(bool flag) {
01089
01090 }
01091
01092 void EETestPulseClient::htmlOutput(int run, string& htmlDir, string& htmlName) {
01093
01094 if ( verbose_ ) cout << "Preparing EETestPulseClient html output ..." << endl;
01095
01096 ofstream htmlFile;
01097
01098 htmlFile.open((htmlDir + htmlName).c_str());
01099
01100
01101 htmlFile << "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"> " << endl;
01102 htmlFile << "<html> " << endl;
01103 htmlFile << "<head> " << endl;
01104 htmlFile << " <meta content=\"text/html; charset=ISO-8859-1\" " << endl;
01105 htmlFile << " https-equiv=\"content-type\"> " << endl;
01106 htmlFile << " <title>Monitor:TestPulseTask output</title> " << endl;
01107 htmlFile << "</head> " << endl;
01108 htmlFile << "<style type=\"text/css\"> td { font-weight: bold } </style>" << endl;
01109 htmlFile << "<body> " << endl;
01110
01111 htmlFile << "<a name=""top""></a>" << endl;
01112 htmlFile << "<h2>Run: " << endl;
01113 htmlFile << " <span " << endl;
01114 htmlFile << " style=\"color: rgb(0, 0, 153);\">" << run << "</span></h2>" << endl;
01115 htmlFile << "<h2>Monitoring task: <span " << endl;
01116 htmlFile << " style=\"color: rgb(0, 0, 153);\">TEST PULSE</span></h2> " << endl;
01117 htmlFile << "<hr>" << endl;
01118 htmlFile << "<table border=1><tr><td bgcolor=red>channel has problems in this task</td>" << endl;
01119 htmlFile << "<td bgcolor=lime>channel has NO problems</td>" << endl;
01120 htmlFile << "<td bgcolor=yellow>channel is missing</td></table>" << endl;
01121 htmlFile << "<br>" << endl;
01122 htmlFile << "<table border=1>" << std::endl;
01123 for ( unsigned int i=0; i<superModules_.size(); i ++ ) {
01124 htmlFile << "<td bgcolor=white><a href=""#"
01125 << Numbers::sEE(superModules_[i]) << ">"
01126 << setfill( '0' ) << setw(2) << superModules_[i] << "</a></td>";
01127 }
01128 htmlFile << std::endl << "</table>" << std::endl;
01129
01130
01131
01132 const int csize = 250;
01133
01134
01135
01136 int pCol3[7] = { 301, 302, 303, 304, 305, 306, 307 };
01137
01138 TH2S labelGrid("labelGrid","label grid", 100, -2., 98., 100, -2., 98.);
01139 for ( short j=0; j<400; j++ ) {
01140 int x = 5*(1 + j%20);
01141 int y = 5*(1 + j/20);
01142 labelGrid.SetBinContent(x, y, Numbers::inTowersEE[j]);
01143 }
01144 labelGrid.SetMarkerSize(1);
01145 labelGrid.SetMinimum(0.1);
01146
01147 TH2C dummy1( "dummy1", "dummy1 for sm mem", 10, 0, 10, 5, 0, 5 );
01148 for ( short i=0; i<2; i++ ) {
01149 int a = 2 + i*5;
01150 int b = 2;
01151 dummy1.Fill( a, b, i+1+68 );
01152 }
01153 dummy1.SetMarkerSize(2);
01154 dummy1.SetMinimum(0.1);
01155
01156 string imgNameQual[3], imgNameAmp[3], imgNameShape[3], imgNameMEPnQual[2], imgNameMEPn[2], imgNameMEPnPed[2], imgNameMEPnPedRms[2], imgName, meName;
01157
01158 TCanvas* cQual = new TCanvas("cQual", "Temp", 2*csize, 2*csize);
01159 TCanvas* cQualPN = new TCanvas("cQualPN", "Temp", 2*csize, csize);
01160 TCanvas* cAmp = new TCanvas("cAmp", "Temp", csize, csize);
01161 TCanvas* cShape = new TCanvas("cShape", "Temp", csize, csize);
01162 TCanvas* cPed = new TCanvas("cPed", "Temp", csize, csize);
01163
01164 TH2F* obj2f;
01165 TH1F* obj1f;
01166 TProfile* objp;
01167
01168
01169
01170 for ( unsigned int i=0; i<superModules_.size(); i ++ ) {
01171
01172 int ism = superModules_[i];
01173
01174
01175
01176 for ( int iCanvas = 1 ; iCanvas <= 3 ; iCanvas++ ) {
01177
01178
01179
01180 imgNameQual[iCanvas-1] = "";
01181
01182 obj2f = 0;
01183 switch ( iCanvas ) {
01184 case 1:
01185 obj2f = UtilsClient::getHisto<TH2F*>( meg01_[ism-1] );
01186 break;
01187 case 2:
01188 obj2f = UtilsClient::getHisto<TH2F*>( meg02_[ism-1] );
01189 break;
01190 case 3:
01191 obj2f = UtilsClient::getHisto<TH2F*>( meg03_[ism-1] );
01192 break;
01193 default:
01194 break;
01195 }
01196
01197 if ( obj2f ) {
01198
01199 meName = obj2f->GetName();
01200
01201 replace(meName.begin(), meName.end(), ' ', '_');
01202 imgNameQual[iCanvas-1] = meName + ".png";
01203 imgName = htmlDir + imgNameQual[iCanvas-1];
01204
01205 cQual->cd();
01206 gStyle->SetOptStat(" ");
01207 gStyle->SetPalette(7, pCol3);
01208 cQual->SetGridx();
01209 cQual->SetGridy();
01210 obj2f->GetXaxis()->SetLabelSize(0.02);
01211 obj2f->GetXaxis()->SetTitleSize(0.02);
01212 obj2f->GetYaxis()->SetLabelSize(0.02);
01213 obj2f->GetYaxis()->SetTitleSize(0.02);
01214 obj2f->SetMinimum(-0.00000001);
01215 obj2f->SetMaximum(7.0);
01216 obj2f->Draw("col");
01217 int x1 = labelGrid.GetXaxis()->FindFixBin(Numbers::ix0EE(ism)+0.);
01218 int x2 = labelGrid.GetXaxis()->FindFixBin(Numbers::ix0EE(ism)+50.);
01219 int y1 = labelGrid.GetYaxis()->FindFixBin(Numbers::iy0EE(ism)+0.);
01220 int y2 = labelGrid.GetYaxis()->FindFixBin(Numbers::iy0EE(ism)+50.);
01221 labelGrid.GetXaxis()->SetRange(x1, x2);
01222 labelGrid.GetYaxis()->SetRange(y1, y2);
01223 labelGrid.Draw("text,same");
01224 cQual->SetBit(TGraph::kClipFrame);
01225 TLine l;
01226 l.SetLineWidth(1);
01227 for ( int i=0; i<201; i=i+1) {
01228 if ( (Numbers::ixSectorsEE[i]!=0 || Numbers::iySectorsEE[i]!=0) && (Numbers::ixSectorsEE[i+1]!=0 || Numbers::iySectorsEE[i+1]!=0) ) {
01229 l.DrawLine(Numbers::ixSectorsEE[i], Numbers::iySectorsEE[i], Numbers::ixSectorsEE[i+1], Numbers::iySectorsEE[i+1]);
01230 }
01231 }
01232 cQual->Update();
01233 cQual->SaveAs(imgName.c_str());
01234
01235 }
01236
01237
01238
01239 imgNameAmp[iCanvas-1] = "";
01240
01241 obj1f = 0;
01242 switch ( iCanvas ) {
01243 case 1:
01244 obj1f = UtilsClient::getHisto<TH1F*>( mea01_[ism-1] );
01245 break;
01246 case 2:
01247 obj1f = UtilsClient::getHisto<TH1F*>( mea02_[ism-1] );
01248 break;
01249 case 3:
01250 obj1f = UtilsClient::getHisto<TH1F*>( mea03_[ism-1] );
01251 break;
01252 default:
01253 break;
01254 }
01255
01256 if ( obj1f ) {
01257
01258 meName = obj1f->GetName();
01259
01260 replace(meName.begin(), meName.end(), ' ', '_');
01261 imgNameAmp[iCanvas-1] = meName + ".png";
01262 imgName = htmlDir + imgNameAmp[iCanvas-1];
01263
01264 cAmp->cd();
01265 gStyle->SetOptStat("euo");
01266 obj1f->SetStats(kTRUE);
01267
01268
01269
01270
01271
01272 obj1f->SetMinimum(0.0);
01273 obj1f->Draw();
01274 cAmp->Update();
01275 gPad->SetLogy(kFALSE);
01276 cAmp->SaveAs(imgName.c_str());
01277 gPad->SetLogy(kFALSE);
01278
01279 }
01280
01281
01282
01283 imgNameShape[iCanvas-1] = "";
01284
01285 obj1f = 0;
01286 switch ( iCanvas ) {
01287 case 1:
01288 obj1f = UtilsClient::getHisto<TH1F*>( me_hs01_[ism-1] );
01289 break;
01290 case 2:
01291 obj1f = UtilsClient::getHisto<TH1F*>( me_hs02_[ism-1] );
01292 break;
01293 case 3:
01294 obj1f = UtilsClient::getHisto<TH1F*>( me_hs03_[ism-1] );
01295 break;
01296 default:
01297 break;
01298 }
01299
01300 if ( obj1f ) {
01301
01302 meName = obj1f->GetName();
01303
01304 replace(meName.begin(), meName.end(), ' ', '_');
01305 imgNameShape[iCanvas-1] = meName + ".png";
01306 imgName = htmlDir + imgNameShape[iCanvas-1];
01307
01308 cShape->cd();
01309 gStyle->SetOptStat("euo");
01310 obj1f->SetStats(kTRUE);
01311
01312
01313
01314
01315
01316 obj1f->Draw();
01317 cShape->Update();
01318 cShape->SaveAs(imgName.c_str());
01319 gPad->SetLogy(kFALSE);
01320
01321 }
01322
01323 }
01324
01325
01326
01327 for ( int iCanvas = 1 ; iCanvas <= 2 ; iCanvas++ ) {
01328
01329
01330
01331 imgNameMEPnQual[iCanvas-1] = "";
01332
01333 obj2f = 0;
01334 switch ( iCanvas ) {
01335 case 1:
01336 obj2f = UtilsClient::getHisto<TH2F*>( meg04_[ism-1] );
01337 break;
01338 case 2:
01339 obj2f = UtilsClient::getHisto<TH2F*>( meg05_[ism-1] );
01340 break;
01341 default:
01342 break;
01343 }
01344
01345 if ( obj2f ) {
01346
01347 meName = obj2f->GetName();
01348
01349 replace(meName.begin(), meName.end(), ' ', '_');
01350 imgNameMEPnQual[iCanvas-1] = meName + ".png";
01351 imgName = htmlDir + imgNameMEPnQual[iCanvas-1];
01352
01353 cQualPN->cd();
01354 gStyle->SetOptStat(" ");
01355 gStyle->SetPalette(7, pCol3);
01356 obj2f->GetXaxis()->SetNdivisions(10);
01357 obj2f->GetYaxis()->SetNdivisions(5);
01358 cQualPN->SetGridx();
01359 cQualPN->SetGridy(0);
01360 obj2f->SetMinimum(-0.00000001);
01361 obj2f->SetMaximum(7.0);
01362 obj2f->Draw("col");
01363 dummy1.Draw("text,same");
01364 cQualPN->Update();
01365 cQualPN->SaveAs(imgName.c_str());
01366
01367 }
01368
01369 imgNameMEPn[iCanvas-1] = "";
01370
01371 objp = 0;
01372 switch ( iCanvas ) {
01373 case 1:
01374 objp = i01_[ism-1];
01375 break;
01376 case 2:
01377 objp = i02_[ism-1];
01378 break;
01379 default:
01380 break;
01381 }
01382
01383 if ( objp ) {
01384
01385 meName = objp->GetName();
01386
01387 replace(meName.begin(), meName.end(), ' ', '_');
01388 imgNameMEPn[iCanvas-1] = meName + ".png";
01389 imgName = htmlDir + imgNameMEPn[iCanvas-1];
01390
01391 cAmp->cd();
01392 gStyle->SetOptStat("euo");
01393 objp->SetStats(kTRUE);
01394
01395
01396
01397
01398
01399 objp->SetMinimum(0.0);
01400 objp->Draw();
01401 cAmp->Update();
01402 cAmp->SaveAs(imgName.c_str());
01403 gPad->SetLogy(kFALSE);
01404
01405 }
01406
01407
01408
01409 imgNameMEPnPed[iCanvas-1] = "";
01410
01411 objp = 0;
01412 switch ( iCanvas ) {
01413 case 1:
01414 objp = i03_[ism-1];
01415 break;
01416 case 2:
01417 objp = i04_[ism-1];
01418 break;
01419 default:
01420 break;
01421 }
01422
01423 if ( objp ) {
01424
01425 meName = objp->GetName();
01426
01427 replace(meName.begin(), meName.end(), ' ', '_');
01428 imgNameMEPnPed[iCanvas-1] = meName + ".png";
01429 imgName = htmlDir + imgNameMEPnPed[iCanvas-1];
01430
01431 cPed->cd();
01432 gStyle->SetOptStat("euo");
01433 objp->SetStats(kTRUE);
01434
01435
01436
01437
01438
01439 objp->SetMinimum(0.0);
01440 objp->Draw();
01441 cPed->Update();
01442 cPed->SaveAs(imgName.c_str());
01443 gPad->SetLogy(kFALSE);
01444
01445 }
01446
01447 imgNameMEPnPedRms[iCanvas-1] = "";
01448
01449 obj1f = 0;
01450 switch ( iCanvas ) {
01451 case 1:
01452 if ( mer04_[ism-1] ) obj1f = UtilsClient::getHisto<TH1F*>(mer04_[ism-1]);
01453 break;
01454 case 2:
01455 if ( mer05_[ism-1] ) obj1f = UtilsClient::getHisto<TH1F*>(mer05_[ism-1]);
01456 break;
01457 default:
01458 break;
01459 }
01460
01461 if ( obj1f ) {
01462
01463 meName = obj1f->GetName();
01464
01465 replace(meName.begin(), meName.end(), ' ', '_');
01466 imgNameMEPnPedRms[iCanvas-1] = meName + ".png";
01467 imgName = htmlDir + imgNameMEPnPedRms[iCanvas-1];
01468
01469 cPed->cd();
01470 gStyle->SetOptStat("euo");
01471 obj1f->SetStats(kTRUE);
01472
01473
01474
01475
01476
01477 obj1f->SetMinimum(0.0);
01478 obj1f->Draw();
01479 cPed->Update();
01480 cPed->SaveAs(imgName.c_str());
01481 gPad->SetLogy(kFALSE);
01482
01483 }
01484
01485 }
01486
01487 if( i>0 ) htmlFile << "<a href=""#top"">Top</a>" << std::endl;
01488 htmlFile << "<hr>" << std::endl;
01489 htmlFile << "<h3><a name="""
01490 << Numbers::sEE(ism) << """></a><strong>"
01491 << Numbers::sEE(ism) << "</strong></h3>" << endl;
01492 htmlFile << "<table border=\"0\" cellspacing=\"0\" " << endl;
01493 htmlFile << "cellpadding=\"10\" align=\"center\"> " << endl;
01494 htmlFile << "<tr align=\"center\">" << endl;
01495
01496 for ( int iCanvas = 1 ; iCanvas <= 3 ; iCanvas++ ) {
01497
01498 if ( imgNameQual[iCanvas-1].size() != 0 )
01499 htmlFile << "<td colspan=\"2\"><img src=\"" << imgNameQual[iCanvas-1] << "\"></td>" << endl;
01500 else
01501 htmlFile << "<td colspan=\"2\"><img src=\"" << " " << "\"></td>" << endl;
01502
01503 }
01504
01505 htmlFile << "</tr>" << endl;
01506 htmlFile << "<tr>" << endl;
01507
01508 for ( int iCanvas = 1 ; iCanvas <= 3 ; iCanvas++ ) {
01509
01510 if ( imgNameAmp[iCanvas-1].size() != 0 )
01511 htmlFile << "<td><img src=\"" << imgNameAmp[iCanvas-1] << "\"></td>" << endl;
01512 else
01513 htmlFile << "<td><img src=\"" << " " << "\"></td>" << endl;
01514
01515 if ( imgNameShape[iCanvas-1].size() != 0 )
01516 htmlFile << "<td><img src=\"" << imgNameShape[iCanvas-1] << "\"></td>" << endl;
01517 else
01518 htmlFile << "<td><img src=\"" << " " << "\"></td>" << endl;
01519
01520 }
01521
01522 htmlFile << "</tr>" << endl;
01523
01524 htmlFile << "<tr align=\"center\"><td colspan=\"2\">Gain 1</td><td colspan=\"2\">Gain 6</td><td colspan=\"2\">Gain 12</td></tr>" << endl;
01525 htmlFile << "</table>" << endl;
01526 htmlFile << "<br>" << endl;
01527
01528 htmlFile << "<table border=\"0\" cellspacing=\"0\" " << endl;
01529 htmlFile << "cellpadding=\"10\" align=\"center\"> " << endl;
01530 htmlFile << "<tr align=\"center\">" << endl;
01531
01532 for ( int iCanvas = 1 ; iCanvas <= 2 ; iCanvas++ ) {
01533
01534 if ( imgNameMEPnQual[iCanvas-1].size() != 0 )
01535 htmlFile << "<td colspan=\"2\"><img src=\"" << imgNameMEPnQual[iCanvas-1] << "\"></td>" << endl;
01536 else
01537 htmlFile << "<td colspan=\"2\"><img src=\"" << " " << "\"></td>" << endl;
01538
01539 }
01540
01541 htmlFile << "</tr>" << endl;
01542 htmlFile << "</table>" << endl;
01543 htmlFile << "<br>" << endl;
01544
01545 htmlFile << "<table border=\"0\" cellspacing=\"0\" " << endl;
01546 htmlFile << "cellpadding=\"10\" align=\"center\"> " << endl;
01547 htmlFile << "<tr align=\"center\">" << endl;
01548
01549 for ( int iCanvas = 1 ; iCanvas <= 2 ; iCanvas++ ) {
01550
01551 if ( imgNameMEPnPed[iCanvas-1].size() != 0 )
01552 htmlFile << "<td colspan=\"2\"><img src=\"" << imgNameMEPnPed[iCanvas-1] << "\"></td>" << endl;
01553 else
01554 htmlFile << "<td colspan=\"2\"><img src=\"" << " " << "\"></td>" << endl;
01555
01556 if ( imgNameMEPnPedRms[iCanvas-1].size() != 0 )
01557 htmlFile << "<td colspan=\"2\"><img src=\"" << imgNameMEPnPedRms[iCanvas-1] << "\"></td>" << endl;
01558 else
01559 htmlFile << "<td colspan=\"2\"><img src=\"" << " " << "\"></td>" << endl;
01560
01561 if ( imgNameMEPn[iCanvas-1].size() != 0 )
01562 htmlFile << "<td colspan=\"2\"><img src=\"" << imgNameMEPn[iCanvas-1] << "\"></td>" << endl;
01563 else
01564 htmlFile << "<td colspan=\"2\"><img src=\"" << " " << "\"></td>" << endl;
01565
01566 }
01567
01568 htmlFile << "</tr>" << endl;
01569
01570 htmlFile << "<tr align=\"center\"> <td colspan=\"2\"> </td> <td colspan=\"2\">Gain 1</td> <td colspan=\"2\"> </td> <td colspan=\"2\"> </td> <td colspan=\"2\">Gain 16</td></tr>" << endl;
01571 htmlFile << "</table>" << endl;
01572 htmlFile << "<br>" << endl;
01573
01574 }
01575
01576 delete cQual;
01577 delete cQualPN;
01578 delete cAmp;
01579 delete cShape;
01580 delete cPed;
01581
01582
01583 htmlFile << "</body> " << endl;
01584 htmlFile << "</html> " << endl;
01585
01586 htmlFile.close();
01587
01588 }
01589