CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/DQM/EcalBarrelMonitorTasks/src/EBTestPulseTask.cc

Go to the documentation of this file.
00001 /*
00002  * \file EBTestPulseTask.cc
00003  *
00004  * $Date: 2012/04/27 13:46:03 $
00005  * $Revision: 1.121 $
00006  * \author G. Della Ricca
00007  * \author G. Franzoni
00008  *
00009 */
00010 
00011 #include <iostream>
00012 #include <sstream>
00013 #include <iomanip>
00014 #include <vector>
00015 
00016 #include "FWCore/ServiceRegistry/interface/Service.h"
00017 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00018 
00019 #include "DQMServices/Core/interface/MonitorElement.h"
00020 
00021 #include "DQMServices/Core/interface/DQMStore.h"
00022 
00023 #include "DataFormats/EcalRawData/interface/EcalRawDataCollections.h"
00024 #include "DataFormats/EcalDetId/interface/EBDetId.h"
00025 #include "DataFormats/EcalDigi/interface/EBDataFrame.h"
00026 #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h"
00027 #include "DataFormats/EcalRecHit/interface/EcalUncalibratedRecHit.h"
00028 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
00029 
00030 #include "DQM/EcalCommon/interface/Numbers.h"
00031 
00032 #include "DQM/EcalBarrelMonitorTasks/interface/EBTestPulseTask.h"
00033 
00034 EBTestPulseTask::EBTestPulseTask(const edm::ParameterSet& ps){
00035 
00036   init_ = false;
00037 
00038   dqmStore_ = edm::Service<DQMStore>().operator->();
00039 
00040   prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
00041 
00042   enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
00043 
00044   mergeRuns_ = ps.getUntrackedParameter<bool>("mergeRuns", false);
00045 
00046   EcalRawDataCollection_ = ps.getParameter<edm::InputTag>("EcalRawDataCollection");
00047   EBDigiCollection_ = ps.getParameter<edm::InputTag>("EBDigiCollection");
00048   EcalPnDiodeDigiCollection_ = ps.getParameter<edm::InputTag>("EcalPnDiodeDigiCollection");
00049   EcalUncalibratedRecHitCollection_ = ps.getParameter<edm::InputTag>("EcalUncalibratedRecHitCollection");
00050 
00051   MGPAGains_.reserve(3);
00052   for ( unsigned int i = 1; i <= 3; i++ ) MGPAGains_.push_back(i);
00053   MGPAGains_ = ps.getUntrackedParameter<std::vector<int> >("MGPAGains", MGPAGains_);
00054 
00055   MGPAGainsPN_.reserve(2);
00056   for ( unsigned int i = 1; i <= 3; i++ ) MGPAGainsPN_.push_back(i);
00057   MGPAGainsPN_ = ps.getUntrackedParameter<std::vector<int> >("MGPAGainsPN", MGPAGainsPN_);
00058 
00059   for (int i = 0; i < 36; i++) {
00060     meShapeMapG01_[i] = 0;
00061     meAmplMapG01_[i] = 0;
00062     meShapeMapG06_[i] = 0;
00063     meAmplMapG06_[i] = 0;
00064     meShapeMapG12_[i] = 0;
00065     meAmplMapG12_[i] = 0;
00066     mePnAmplMapG01_[i] = 0;
00067     mePnPedMapG01_[i] = 0;
00068     mePnAmplMapG16_[i] = 0;
00069     mePnPedMapG16_[i] = 0;
00070   }
00071 
00072 
00073 }
00074 
00075 EBTestPulseTask::~EBTestPulseTask(){
00076 
00077 }
00078 
00079 void EBTestPulseTask::beginJob(void){
00080 
00081   ievt_ = 0;
00082 
00083   if ( dqmStore_ ) {
00084     dqmStore_->setCurrentFolder(prefixME_ + "/EBTestPulseTask");
00085     dqmStore_->rmdir(prefixME_ + "/EBTestPulseTask");
00086   }
00087 
00088 }
00089 
00090 void EBTestPulseTask::beginRun(const edm::Run& r, const edm::EventSetup& c) {
00091 
00092   Numbers::initGeometry(c, false);
00093 
00094   if ( ! mergeRuns_ ) this->reset();
00095 
00096 }
00097 
00098 void EBTestPulseTask::endRun(const edm::Run& r, const edm::EventSetup& c) {
00099 
00100 }
00101 
00102 void EBTestPulseTask::reset(void) {
00103 
00104   for (int i = 0; i < 36; i++) {
00105     if (find(MGPAGains_.begin(), MGPAGains_.end(), 1) != MGPAGains_.end() ) {
00106       if ( meShapeMapG01_[i] ) meShapeMapG01_[i]->Reset();
00107       if ( meAmplMapG01_[i] ) meAmplMapG01_[i]->Reset();
00108     }
00109     if (find(MGPAGains_.begin(), MGPAGains_.end(), 6) != MGPAGains_.end() ) {
00110       if ( meShapeMapG06_[i] ) meShapeMapG06_[i]->Reset();
00111       if ( meAmplMapG06_[i] ) meAmplMapG06_[i]->Reset();
00112     }
00113     if (find(MGPAGains_.begin(), MGPAGains_.end(), 12) != MGPAGains_.end() ) {
00114       if ( meShapeMapG12_[i] ) meShapeMapG12_[i]->Reset();
00115       if ( meAmplMapG12_[i] ) meAmplMapG12_[i]->Reset();
00116     }
00117     if (find(MGPAGainsPN_.begin(), MGPAGainsPN_.end(), 1) != MGPAGainsPN_.end() ) {
00118       if ( mePnAmplMapG01_[i] ) mePnAmplMapG01_[i]->Reset();
00119       if ( mePnPedMapG01_[i] ) mePnPedMapG01_[i]->Reset();
00120     }
00121     if (find(MGPAGainsPN_.begin(), MGPAGainsPN_.end(), 16) != MGPAGainsPN_.end() ) {
00122       if ( mePnAmplMapG16_[i] ) mePnAmplMapG16_[i]->Reset();
00123       if ( mePnPedMapG16_[i] ) mePnPedMapG16_[i]->Reset();
00124     }
00125   }
00126 
00127 }
00128 
00129 void EBTestPulseTask::setup(void){
00130 
00131   init_ = true;
00132 
00133   std::string name;
00134   std::stringstream GainN, GN;
00135 
00136   if ( dqmStore_ ) {
00137     dqmStore_->setCurrentFolder(prefixME_ + "/EBTestPulseTask");
00138 
00139     if (find(MGPAGains_.begin(), MGPAGains_.end(), 1) != MGPAGains_.end() ) {
00140 
00141       GainN.str("");
00142       GainN << "Gain" << std::setw(2) << std::setfill('0') << 1;
00143       GN.str("");
00144       GN << "G" << std::setw(2) << std::setfill('0') << 1;
00145 
00146       dqmStore_->setCurrentFolder(prefixME_ + "/EBTestPulseTask/" + GainN.str());
00147       for (int i = 0; i < 36; i++) {
00148         name = "EBTPT shape " + Numbers::sEB(i+1) + " " + GN.str();
00149         meShapeMapG01_[i] = dqmStore_->bookProfile2D(name, name, 1700, 0., 1700., 10, 0., 10., 4096, 0., 4096., "s");
00150         meShapeMapG01_[i]->setAxisTitle("channel", 1);
00151         meShapeMapG01_[i]->setAxisTitle("sample", 2);
00152         meShapeMapG01_[i]->setAxisTitle("amplitude", 3);
00153         dqmStore_->tag(meShapeMapG01_[i], i+1);
00154 
00155         name = "EBTPT amplitude " + Numbers::sEB(i+1) + " " + GN.str(), 
00156         meAmplMapG01_[i] = dqmStore_->bookProfile2D(name, name, 85, 0., 85., 20, 0., 20., 4096, 0., 4096.*12., "s");
00157         meAmplMapG01_[i]->setAxisTitle("ieta", 1);
00158         meAmplMapG01_[i]->setAxisTitle("iphi", 2);
00159         dqmStore_->tag(meAmplMapG01_[i], i+1);
00160       }
00161 
00162     }
00163 
00164     if (find(MGPAGains_.begin(), MGPAGains_.end(), 6) != MGPAGains_.end() ) {
00165 
00166       GainN.str("");
00167       GainN << "Gain" << std::setw(2) << std::setfill('0') << 6;
00168       GN.str("");
00169       GN << "G" << std::setw(2) << std::setfill('0') << 6;
00170 
00171       dqmStore_->setCurrentFolder(prefixME_ + "/EBTestPulseTask/" + GainN.str());
00172       for (int i = 0; i < 36; i++) {
00173         name = "EBTPT shape " + Numbers::sEB(i+1) + " " + GN.str();
00174         meShapeMapG06_[i] = dqmStore_->bookProfile2D(name, name, 1700, 0., 1700., 10, 0., 10., 4096, 0., 4096., "s");
00175         meShapeMapG06_[i]->setAxisTitle("channel", 1);
00176         meShapeMapG06_[i]->setAxisTitle("sample", 2);
00177         meShapeMapG06_[i]->setAxisTitle("amplitude", 3);
00178         dqmStore_->tag(meShapeMapG06_[i], i+1);
00179 
00180         name = "EBTPT amplitude " + Numbers::sEB(i+1) + " " + GN.str(), 
00181         meAmplMapG06_[i] = dqmStore_->bookProfile2D(name, name, 85, 0., 85., 20, 0., 20., 4096, 0., 4096.*12., "s");
00182         meAmplMapG06_[i]->setAxisTitle("ieta", 1);
00183         meAmplMapG06_[i]->setAxisTitle("iphi", 2);
00184         dqmStore_->tag(meAmplMapG06_[i], i+1);
00185       }
00186 
00187     }
00188 
00189     if (find(MGPAGains_.begin(), MGPAGains_.end(), 12) != MGPAGains_.end() ) {
00190 
00191       GainN.str("");
00192       GainN << "Gain" << std::setw(2) << std::setfill('0') << 12;
00193       GN.str("");
00194       GN << "G" << std::setw(2) << std::setfill('0') << 12;
00195 
00196       dqmStore_->setCurrentFolder(prefixME_ + "/EBTestPulseTask/" + GainN.str());
00197       for (int i = 0; i < 36; i++) {
00198         name = "EBTPT shape " + Numbers::sEB(i+1) + " " + GN.str();
00199         meShapeMapG12_[i] = dqmStore_->bookProfile2D(name, name, 1700, 0., 1700., 10, 0., 10., 4096, 0., 4096., "s");
00200         meShapeMapG12_[i]->setAxisTitle("channel", 1);
00201         meShapeMapG12_[i]->setAxisTitle("sample", 2);
00202         meShapeMapG12_[i]->setAxisTitle("amplitude", 3);
00203         dqmStore_->tag(meShapeMapG12_[i], i+1);
00204 
00205         name = "EBTPT amplitude " + Numbers::sEB(i+1) + " " + GN.str(), 
00206         meAmplMapG12_[i] = dqmStore_->bookProfile2D(name, name, 85, 0., 85., 20, 0., 20., 4096, 0., 4096.*12., "s");
00207         meAmplMapG12_[i]->setAxisTitle("ieta", 1);
00208         meAmplMapG12_[i]->setAxisTitle("iphi", 2);
00209         dqmStore_->tag(meAmplMapG12_[i], i+1);
00210       }
00211 
00212     }
00213 
00214     dqmStore_->setCurrentFolder(prefixME_ + "/EBTestPulseTask/PN");
00215 
00216     if (find(MGPAGainsPN_.begin(), MGPAGainsPN_.end(), 1) != MGPAGainsPN_.end() ) {
00217 
00218       GainN.str("");
00219       GainN << "Gain" << std::setw(2) << std::setfill('0') << 1;
00220       GN.str("");
00221       GN << "G" << std::setw(2) << std::setfill('0') << 1;
00222 
00223       dqmStore_->setCurrentFolder(prefixME_ + "/EBTestPulseTask/PN/" + GainN.str());
00224       for (int i = 0; i < 36; i++) {
00225         name = "EBTPT PNs amplitude " + Numbers::sEB(i+1) + " " + GN.str(); 
00226         mePnAmplMapG01_[i] = dqmStore_->bookProfile(name, name, 10, 0., 10., 4096, 0., 4096., "s");
00227         mePnAmplMapG01_[i]->setAxisTitle("channel", 1);
00228         mePnAmplMapG01_[i]->setAxisTitle("amplitude", 2);
00229         dqmStore_->tag(mePnAmplMapG01_[i], i+1);
00230 
00231         name = "EBTPT PNs pedestal " + Numbers::sEB(i+1) + " " + GN.str(); 
00232         mePnPedMapG01_[i] =  dqmStore_->bookProfile(name, name, 10, 0., 10., 4096, 0., 4096., "s");
00233         mePnPedMapG01_[i]->setAxisTitle("channel", 1);
00234         mePnPedMapG01_[i]->setAxisTitle("pedestal", 2);
00235         dqmStore_->tag(mePnPedMapG01_[i], i+1);
00236       }
00237 
00238     }
00239 
00240     if (find(MGPAGainsPN_.begin(), MGPAGainsPN_.end(), 16) != MGPAGainsPN_.end() ) {
00241 
00242       GainN.str("");
00243       GainN << "Gain" << std::setw(2) << std::setfill('0') << 16;
00244       GN.str("");
00245       GN << "G" << std::setw(2) << std::setfill('0') << 16;
00246 
00247       dqmStore_->setCurrentFolder(prefixME_ + "/EBTestPulseTask/PN/" + GainN.str());
00248       for (int i = 0; i < 36; i++) {
00249         name = "EBTPT PNs amplitude " + Numbers::sEB(i+1) + " " + GN.str(); 
00250         mePnAmplMapG16_[i] = dqmStore_->bookProfile(name, name, 10, 0., 10., 4096, 0., 4096., "s");
00251         mePnAmplMapG16_[i]->setAxisTitle("channel", 1);
00252         mePnAmplMapG16_[i]->setAxisTitle("amplitude", 2);
00253         dqmStore_->tag(mePnAmplMapG16_[i], i+1);
00254 
00255         name = "EBTPT PNs pedestal " + Numbers::sEB(i+1) + " " + GN.str(); 
00256         mePnPedMapG16_[i] =  dqmStore_->bookProfile(name, name, 10, 0., 10., 4096, 0., 4096., "s");
00257         mePnPedMapG16_[i]->setAxisTitle("channel", 1);
00258         mePnPedMapG16_[i]->setAxisTitle("pedestal", 2);
00259         dqmStore_->tag(mePnPedMapG16_[i], i+1);
00260       }
00261 
00262     }
00263 
00264   }
00265 
00266 }
00267 
00268 void EBTestPulseTask::cleanup(void){
00269 
00270   if ( ! init_ ) return;
00271 
00272   if ( dqmStore_ ) {
00273     dqmStore_->setCurrentFolder(prefixME_ + "/EBTestPulseTask");
00274 
00275     if (find(MGPAGains_.begin(), MGPAGains_.end(), 1) != MGPAGains_.end() ) {
00276 
00277       dqmStore_->setCurrentFolder(prefixME_ + "/EBTestPulseTask/Gain01");
00278       for (int i = 0; i < 36; i++) {
00279         if ( meShapeMapG01_[i] ) dqmStore_->removeElement( meShapeMapG01_[i]->getName() );
00280         meShapeMapG01_[i] = 0;
00281         if ( meAmplMapG01_[i] ) dqmStore_->removeElement( meAmplMapG01_[i]->getName() );
00282         meAmplMapG01_[i] = 0;
00283       }
00284 
00285     }
00286 
00287     if (find(MGPAGains_.begin(), MGPAGains_.end(), 6) != MGPAGains_.end() ) {
00288 
00289       dqmStore_->setCurrentFolder(prefixME_ + "/EBTestPulseTask/Gain06");
00290       for (int i = 0; i < 36; i++) {
00291         if ( meShapeMapG06_[i] ) dqmStore_->removeElement( meShapeMapG06_[i]->getName() );
00292         meShapeMapG06_[i] = 0;
00293         if ( meAmplMapG06_[i] ) dqmStore_->removeElement( meAmplMapG06_[i]->getName() );
00294         meAmplMapG06_[i] = 0;
00295       }
00296 
00297     }
00298 
00299     if (find(MGPAGains_.begin(), MGPAGains_.end(), 12) != MGPAGains_.end() ) {
00300 
00301       dqmStore_->setCurrentFolder(prefixME_ + "/EBTestPulseTask/Gain12");
00302       for (int i = 0; i < 36; i++) {
00303         if ( meShapeMapG12_[i] ) dqmStore_->removeElement( meShapeMapG12_[i]->getName() );
00304         meShapeMapG12_[i] = 0;
00305         if ( meAmplMapG12_[i] ) dqmStore_->removeElement( meAmplMapG12_[i]->getName() );
00306         meAmplMapG12_[i] = 0;
00307       }
00308 
00309     }
00310 
00311     dqmStore_->setCurrentFolder(prefixME_ + "/EBTestPulseTask/PN");
00312 
00313     if (find(MGPAGainsPN_.begin(), MGPAGainsPN_.end(), 1) != MGPAGainsPN_.end() ) {
00314 
00315       dqmStore_->setCurrentFolder(prefixME_ + "/EBTestPulseTask/PN/Gain01");
00316       for (int i = 0; i < 36; i++) {
00317         if ( mePnAmplMapG01_[i] ) dqmStore_->removeElement( mePnAmplMapG01_[i]->getName() );
00318         mePnAmplMapG01_[i] = 0;
00319         if ( mePnPedMapG01_[i] ) dqmStore_->removeElement( mePnPedMapG01_[i]->getName() );
00320         mePnPedMapG01_[i] = 0;
00321       }
00322 
00323     }
00324 
00325 
00326     if (find(MGPAGainsPN_.begin(), MGPAGainsPN_.end(), 16) != MGPAGainsPN_.end() ) {
00327 
00328       dqmStore_->setCurrentFolder(prefixME_ + "/EBTestPulseTask/PN/Gain16");
00329       for (int i = 0; i < 36; i++) {
00330         if ( mePnAmplMapG16_[i] ) dqmStore_->removeElement( mePnAmplMapG16_[i]->getName() );
00331         mePnAmplMapG16_[i] = 0;
00332         if ( mePnPedMapG16_[i] ) dqmStore_->removeElement( mePnPedMapG16_[i]->getName() );
00333         mePnPedMapG16_[i] = 0;
00334       }
00335 
00336     }
00337 
00338   }
00339 
00340   init_ = false;
00341 
00342 }
00343 
00344 void EBTestPulseTask::endJob(void){
00345 
00346   edm::LogInfo("EBTestPulseTask") << "analyzed " << ievt_ << " events";
00347 
00348   if ( enableCleanup_ ) this->cleanup();
00349 
00350 }
00351 
00352 void EBTestPulseTask::analyze(const edm::Event& e, const edm::EventSetup& c){
00353 
00354   bool enable = false;
00355   int runType[36];
00356   for (int i=0; i<36; i++) runType[i] = -1;
00357   int mgpaGain[36];
00358   for (int i=0; i<36; i++) mgpaGain[i] = -1;
00359 
00360   edm::Handle<EcalRawDataCollection> dcchs;
00361 
00362   if ( e.getByLabel(EcalRawDataCollection_, dcchs) ) {
00363 
00364     for ( EcalRawDataCollection::const_iterator dcchItr = dcchs->begin(); dcchItr != dcchs->end(); ++dcchItr ) {
00365 
00366       if ( Numbers::subDet( *dcchItr ) != EcalBarrel ) continue;
00367 
00368       int ism = Numbers::iSM( *dcchItr, EcalBarrel );
00369 
00370       runType[ism-1] = dcchItr->getRunType();
00371       mgpaGain[ism-1] = dcchItr->getMgpaGain();
00372 
00373       if ( dcchItr->getRunType() == EcalDCCHeaderBlock::TESTPULSE_MGPA ||
00374            dcchItr->getRunType() == EcalDCCHeaderBlock::TESTPULSE_GAP ) enable = true;
00375 
00376     }
00377 
00378   } else {
00379 
00380     edm::LogWarning("EBTestPulseTask") << EcalRawDataCollection_ << " not available";
00381 
00382   }
00383 
00384   if ( ! enable ) return;
00385 
00386   if ( ! init_ ) this->setup();
00387 
00388   ievt_++;
00389 
00390   edm::Handle<EBDigiCollection> digis;
00391 
00392   if ( e.getByLabel(EBDigiCollection_, digis) ) {
00393 
00394     int nebd = digis->size();
00395     LogDebug("EBTestPulseTask") << "event " << ievt_ << " digi collection size " << nebd;
00396 
00397     for ( EBDigiCollection::const_iterator digiItr = digis->begin(); digiItr != digis->end(); ++digiItr ) {
00398 
00399       EBDetId id = digiItr->id();
00400 
00401       int ic = id.ic();
00402 
00403       int ism = Numbers::iSM( id );
00404 
00405       if ( ! ( runType[ism-1] == EcalDCCHeaderBlock::TESTPULSE_MGPA ||
00406                runType[ism-1] == EcalDCCHeaderBlock::TESTPULSE_GAP ) ) continue;
00407 
00408       EBDataFrame dataframe = (*digiItr);
00409 
00410       for (int i = 0; i < 10; i++) {
00411 
00412         int adc = dataframe.sample(i).adc();
00413 
00414         MonitorElement* meShapeMap = 0;
00415 
00416         if ( mgpaGain[ism-1] == 3 ) meShapeMap = meShapeMapG01_[ism-1];
00417         if ( mgpaGain[ism-1] == 2 ) meShapeMap = meShapeMapG06_[ism-1];
00418         if ( mgpaGain[ism-1] == 1 ) meShapeMap = meShapeMapG12_[ism-1];
00419 
00420         float xval = float(adc);
00421 
00422         if ( meShapeMap ) meShapeMap->Fill(ic - 0.5, i + 0.5, xval);
00423 
00424       }
00425 
00426     }
00427 
00428   } else {
00429 
00430     edm::LogWarning("EBTestPulseTask") << EBDigiCollection_ << " not available";
00431 
00432   }
00433 
00434   edm::Handle<EcalUncalibratedRecHitCollection> hits;
00435 
00436   if ( e.getByLabel(EcalUncalibratedRecHitCollection_, hits) ) {
00437 
00438     int neh = hits->size();
00439     LogDebug("EBTestPulseTask") << "event " << ievt_ << " hits collection size " << neh;
00440 
00441     for ( EcalUncalibratedRecHitCollection::const_iterator hitItr = hits->begin(); hitItr != hits->end(); ++hitItr ) {
00442 
00443       EBDetId id = hitItr->id();
00444 
00445       int ic = id.ic();
00446       int ie = (ic-1)/20 + 1;
00447       int ip = (ic-1)%20 + 1;
00448 
00449       int ism = Numbers::iSM( id );
00450 
00451       float xie = ie - 0.5;
00452       float xip = ip - 0.5;
00453 
00454       if ( ! ( runType[ism-1] == EcalDCCHeaderBlock::TESTPULSE_MGPA ||
00455                runType[ism-1] == EcalDCCHeaderBlock::TESTPULSE_GAP ) ) continue;
00456 
00457       MonitorElement* meAmplMap = 0;
00458 
00459       if ( mgpaGain[ism-1] == 3 ) meAmplMap = meAmplMapG01_[ism-1];
00460       if ( mgpaGain[ism-1] == 2 ) meAmplMap = meAmplMapG06_[ism-1];
00461       if ( mgpaGain[ism-1] == 1 ) meAmplMap = meAmplMapG12_[ism-1];
00462 
00463       float xval = hitItr->amplitude();
00464       if ( xval <= 0. ) xval = 0.0;
00465 
00466 //      if ( mgpaGain[ism-1] == 3 ) xval = xval * 1./12.;
00467 //      if ( mgpaGain[ism-1] == 2 ) xval = xval * 1./ 2.;
00468 //      if ( mgpaGain[ism-1] == 1 ) xval = xval * 1./ 1.;
00469 
00470       if ( meAmplMap ) meAmplMap->Fill(xie, xip, xval);
00471 
00472     }
00473 
00474   } else {
00475 
00476     edm::LogWarning("EBTestPulseTask") << EcalUncalibratedRecHitCollection_ << " not available";
00477 
00478   }
00479 
00480   edm::Handle<EcalPnDiodeDigiCollection> pns;
00481 
00482   if ( e.getByLabel(EcalPnDiodeDigiCollection_, pns) ) {
00483 
00484     int nep = pns->size();
00485     LogDebug("EBTestPulseTask") << "event " << ievt_ << " pns collection size " << nep;
00486 
00487     for ( EcalPnDiodeDigiCollection::const_iterator pnItr = pns->begin(); pnItr != pns->end(); ++pnItr ) {
00488 
00489       if ( Numbers::subDet( pnItr->id() ) != EcalBarrel ) continue;
00490 
00491       int ism = Numbers::iSM( pnItr->id() );
00492 
00493       int num = pnItr->id().iPnId();
00494 
00495       if ( ! ( runType[ism-1] == EcalDCCHeaderBlock::TESTPULSE_MGPA ||
00496                runType[ism-1] == EcalDCCHeaderBlock::TESTPULSE_GAP ) ) continue;
00497 
00498       float xvalped = 0.;
00499 
00500       for (int i = 0; i < 4; i++) {
00501 
00502         int adc = pnItr->sample(i).adc();
00503 
00504         MonitorElement* mePNPed = 0;
00505 
00506         if ( pnItr->sample(i).gainId() == 0 ) mePNPed = mePnPedMapG01_[ism-1];
00507         if ( pnItr->sample(i).gainId() == 1 ) mePNPed = mePnPedMapG16_[ism-1];
00508 
00509         float xval = float(adc);
00510 
00511         if ( mePNPed ) mePNPed->Fill(num - 0.5, xval);
00512 
00513         xvalped = xvalped + xval;
00514 
00515       }
00516 
00517       xvalped = xvalped / 4;
00518 
00519       float xvalmax = 0.;
00520 
00521       MonitorElement* mePN = 0;
00522 
00523       for (int i = 0; i < 50; i++) {
00524 
00525         int adc = pnItr->sample(i).adc();
00526 
00527         float xval = float(adc);
00528 
00529         if ( xval >= xvalmax ) xvalmax = xval;
00530 
00531       }
00532 
00533       xvalmax = xvalmax - xvalped;
00534 
00535       if ( pnItr->sample(0).gainId() == 0 ) mePN = mePnAmplMapG01_[ism-1];
00536       if ( pnItr->sample(0).gainId() == 1 ) mePN = mePnAmplMapG16_[ism-1];
00537 
00538       if ( mePN ) mePN->Fill(num - 0.5, xvalmax);
00539 
00540     }
00541 
00542   } else {
00543 
00544     edm::LogWarning("EBTestPulseTask") << EcalPnDiodeDigiCollection_ << " not available";
00545 
00546   }
00547 
00548 }
00549