CMS 3D CMS Logo

EETestPulseClient.cc

Go to the documentation of this file.
00001 /*
00002  * \file EETestPulseClient.cc
00003  *
00004  * $Date: 2008/10/07 18:34:23 $
00005  * $Revision: 1.95 $
00006  * \author G. Della Ricca
00007  * \author F. Cossutti
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   // cloneME switch
00049   cloneME_ = ps.getUntrackedParameter<bool>("cloneME", true);
00050 
00051   // verbose switch
00052   verbose_ = ps.getUntrackedParameter<bool>("verbose", true);
00053 
00054   // debug switch
00055   debug_ = ps.getUntrackedParameter<bool>("debug", false);
00056 
00057   // prefixME path
00058   prefixME_ = ps.getUntrackedParameter<string>("prefixME", "");
00059 
00060   // enableCleanup_ switch
00061   enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
00062 
00063   // vector of selected Super Modules (Defaults to all 18).
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         // masking
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         // TT masking
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       // masking
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   // html page header
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   //htmlFile << "<br>  " << endl;
01111   htmlFile << "<a name=""top""></a>" << endl;
01112   htmlFile << "<h2>Run:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" << endl;
01113   htmlFile << "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span " << endl;
01114   htmlFile << " style=\"color: rgb(0, 0, 153);\">" << run << "</span></h2>" << endl;
01115   htmlFile << "<h2>Monitoring task:&nbsp;&nbsp;&nbsp;&nbsp; <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   // Produce the plots to be shown as .png files from existing histograms
01131 
01132   const int csize = 250;
01133 
01134 //  const double histMax = 1.e15;
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   // Loop on endcap sectors
01169 
01170   for ( unsigned int i=0; i<superModules_.size(); i ++ ) {
01171 
01172     int ism = superModules_[i];
01173 
01174     // Loop on gains
01175 
01176     for ( int iCanvas = 1 ; iCanvas <= 3 ; iCanvas++ ) {
01177 
01178       // Quality plots
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       // Amplitude distributions
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 //        if ( obj1f->GetMaximum(histMax) > 0. ) {
01268 //          gPad->SetLogy(kTRUE);
01269 //        } else {
01270 //          gPad->SetLogy(kFALSE);
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       // Shape distributions
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 //        if ( obj1f->GetMaximum(histMax) > 0. ) {
01312 //          gPad->SetLogy(kTRUE);
01313 //        } else {
01314 //          gPad->SetLogy(kFALSE);
01315 //        }
01316         obj1f->Draw();
01317         cShape->Update();
01318         cShape->SaveAs(imgName.c_str());
01319         gPad->SetLogy(kFALSE);
01320 
01321       }
01322 
01323     }
01324 
01325     // Loop on gain
01326 
01327     for ( int iCanvas = 1 ; iCanvas <= 2 ; iCanvas++ ) {
01328 
01329       // Monitoring elements plots
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 //        if ( objp->GetMaximum(histMax) > 0. ) {
01395 //          gPad->SetLogy(kTRUE);
01396 //        } else {
01397 //          gPad->SetLogy(kFALSE);
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       // Monitoring elements plots
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 //        if ( objp->GetMaximum(histMax) > 0. ) {
01435 //          gPad->SetLogy(kTRUE);
01436 //        } else {
01437 //          gPad->SetLogy(kFALSE);
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         //        if ( obj1f->GetMaximum(histMax) > 0. ) {
01473         //          gPad->SetLogy(kTRUE);
01474         //        } else {
01475         //          gPad->SetLogy(kFALSE);
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   // html page footer
01583   htmlFile << "</body> " << endl;
01584   htmlFile << "</html> " << endl;
01585 
01586   htmlFile.close();
01587 
01588 }
01589 

Generated on Tue Jun 9 17:32:51 2009 for CMSSW by  doxygen 1.5.4