00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <iostream>
00011 #include <sstream>
00012 #include <vector>
00013
00014 #include "FWCore/ServiceRegistry/interface/Service.h"
00015 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00016
00017 #include "DQMServices/Core/interface/MonitorElement.h"
00018
00019 #include "DQMServices/Core/interface/DQMStore.h"
00020
00021 #include "DataFormats/EcalRawData/interface/EcalRawDataCollections.h"
00022 #include "DataFormats/EcalDetId/interface/EEDetId.h"
00023 #include "DataFormats/EcalDigi/interface/EEDataFrame.h"
00024 #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h"
00025 #include "DataFormats/EcalRecHit/interface/EcalUncalibratedRecHit.h"
00026 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
00027
00028 #include "DQM/EcalCommon/interface/Numbers.h"
00029 #include "DQM/EcalCommon/interface/NumbersPn.h"
00030
00031 #include "DQM/EcalEndcapMonitorTasks/interface/EELedTask.h"
00032
00033 EELedTask::EELedTask(const edm::ParameterSet& ps){
00034
00035 init_ = false;
00036
00037 dqmStore_ = edm::Service<DQMStore>().operator->();
00038
00039 prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
00040
00041 enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
00042
00043 mergeRuns_ = ps.getUntrackedParameter<bool>("mergeRuns", false);
00044
00045 EcalRawDataCollection_ = ps.getParameter<edm::InputTag>("EcalRawDataCollection");
00046 EEDigiCollection_ = ps.getParameter<edm::InputTag>("EEDigiCollection");
00047 EcalPnDiodeDigiCollection_ = ps.getParameter<edm::InputTag>("EcalPnDiodeDigiCollection");
00048 EcalUncalibratedRecHitCollection_ = ps.getParameter<edm::InputTag>("EcalUncalibratedRecHitCollection");
00049
00050
00051 ledWavelengths_.reserve(2);
00052 for ( unsigned int i = 1; i <= 2; i++ ) ledWavelengths_.push_back(i);
00053 ledWavelengths_ = ps.getUntrackedParameter<std::vector<int> >("ledWavelengths", ledWavelengths_);
00054
00055 for (int i = 0; i < 18; i++) {
00056 meShapeMapL1_[i] = 0;
00057 meAmplMapL1_[i] = 0;
00058 meTimeMapL1_[i] = 0;
00059 meAmplPNMapL1_[i] = 0;
00060 mePnAmplMapG01L1_[i] = 0;
00061 mePnPedMapG01L1_[i] = 0;
00062 mePnAmplMapG16L1_[i] = 0;
00063 mePnPedMapG16L1_[i] = 0;
00064
00065 meShapeMapL2_[i] = 0;
00066 meAmplMapL2_[i] = 0;
00067 meTimeMapL2_[i] = 0;
00068 meAmplPNMapL2_[i] = 0;
00069 mePnAmplMapG01L2_[i] = 0;
00070 mePnPedMapG01L2_[i] = 0;
00071 mePnAmplMapG16L2_[i] = 0;
00072 mePnPedMapG16L2_[i] = 0;
00073 }
00074
00075 }
00076
00077 EELedTask::~EELedTask(){
00078
00079 }
00080
00081 void EELedTask::beginJob(void){
00082
00083 ievt_ = 0;
00084
00085 if ( dqmStore_ ) {
00086 dqmStore_->setCurrentFolder(prefixME_ + "/EELedTask");
00087 dqmStore_->rmdir(prefixME_ + "/EELedTask");
00088 }
00089
00090 }
00091
00092 void EELedTask::beginRun(const edm::Run& r, const edm::EventSetup& c) {
00093
00094 Numbers::initGeometry(c, false);
00095
00096 if ( ! mergeRuns_ ) this->reset();
00097
00098 }
00099
00100 void EELedTask::endRun(const edm::Run& r, const edm::EventSetup& c) {
00101
00102 for (int i = 0; i < 18; i++) {
00103 if ( find(ledWavelengths_.begin(), ledWavelengths_.end(), 1) != ledWavelengths_.end() ) {
00104 if ( meShapeMapL1_[i] ) meShapeMapL1_[i]->Reset();
00105 if ( meAmplMapL1_[i] ) meAmplMapL1_[i]->Reset();
00106 if ( meTimeMapL1_[i] ) meTimeMapL1_[i]->Reset();
00107 if ( meAmplPNMapL1_[i] ) meAmplPNMapL1_[i]->Reset();
00108 }
00109
00110 if ( find(ledWavelengths_.begin(), ledWavelengths_.end(), 2) != ledWavelengths_.end() ) {
00111 if ( meShapeMapL2_[i] ) meShapeMapL2_[i]->Reset();
00112 if ( meAmplMapL2_[i] ) meAmplMapL2_[i]->Reset();
00113 if ( meTimeMapL2_[i] ) meTimeMapL2_[i]->Reset();
00114 if ( meAmplPNMapL2_[i] ) meAmplPNMapL2_[i]->Reset();
00115 }
00116
00117 if ( find(ledWavelengths_.begin(), ledWavelengths_.end(), 1) != ledWavelengths_.end() ) {
00118 if ( mePnAmplMapG01L1_[i] ) mePnAmplMapG01L1_[i]->Reset();
00119 if ( mePnPedMapG01L1_[i] ) mePnPedMapG01L1_[i]->Reset();
00120
00121 if ( mePnAmplMapG16L1_[i] ) mePnAmplMapG16L1_[i]->Reset();
00122 if ( mePnPedMapG16L1_[i] ) mePnPedMapG16L1_[i]->Reset();
00123 }
00124
00125 if ( find(ledWavelengths_.begin(), ledWavelengths_.end(), 2) != ledWavelengths_.end() ) {
00126 if ( mePnAmplMapG01L2_[i] ) mePnAmplMapG01L2_[i]->Reset();
00127 if ( mePnPedMapG01L2_[i] ) mePnPedMapG01L2_[i]->Reset();
00128
00129 if ( mePnAmplMapG16L2_[i] ) mePnAmplMapG16L2_[i]->Reset();
00130 if ( mePnPedMapG16L2_[i] ) mePnPedMapG16L2_[i]->Reset();
00131 }
00132 }
00133
00134 }
00135
00136 void EELedTask::reset(void) {
00137
00138 }
00139
00140 void EELedTask::setup(void){
00141
00142 init_ = true;
00143
00144 std::string name;
00145 std::stringstream LedN, LN;
00146
00147 if ( dqmStore_ ) {
00148 dqmStore_->setCurrentFolder(prefixME_ + "/EELedTask");
00149
00150 if ( find(ledWavelengths_.begin(), ledWavelengths_.end(), 1) != ledWavelengths_.end() ) {
00151
00152 LedN.str("");
00153 LedN << "Led" << 1;
00154 LN.str("");
00155 LN << "L" << 1;
00156
00157 dqmStore_->setCurrentFolder(prefixME_ + "/EELedTask/" + LedN.str());
00158 for (int i = 0; i < 18; i++) {
00159 name = "EELDT shape " + Numbers::sEE(i+1) + " " + LN.str();
00160 meShapeMapL1_[i] = dqmStore_->bookProfile2D(name, name, 850, 0., 850., 10, 0., 10., 4096, 0., 4096., "s");
00161 meShapeMapL1_[i]->setAxisTitle("channel", 1);
00162 meShapeMapL1_[i]->setAxisTitle("sample", 2);
00163 meShapeMapL1_[i]->setAxisTitle("amplitude", 3);
00164 dqmStore_->tag(meShapeMapL1_[i], i+1);
00165
00166 name = "EELDT amplitude " + Numbers::sEE(i+1) + " " + LN.str();
00167 meAmplMapL1_[i] = dqmStore_->bookProfile2D(name, name, 50, Numbers::ix0EE(i+1)+0., Numbers::ix0EE(i+1)+50., 50, Numbers::iy0EE(i+1)+0., Numbers::iy0EE(i+1)+50., 4096, 0., 4096.*12., "s");
00168 meAmplMapL1_[i]->setAxisTitle("ix", 1);
00169 if ( i+1 >= 1 && i+1 <= 9 ) meAmplMapL1_[i]->setAxisTitle("101-ix", 1);
00170 meAmplMapL1_[i]->setAxisTitle("iy", 2);
00171 dqmStore_->tag(meAmplMapL1_[i], i+1);
00172
00173 name = "EELDT timing " + Numbers::sEE(i+1) + " " + LN.str();
00174 meTimeMapL1_[i] = dqmStore_->bookProfile2D(name, name, 50, Numbers::ix0EE(i+1)+0., Numbers::ix0EE(i+1)+50., 50, Numbers::iy0EE(i+1)+0., Numbers::iy0EE(i+1)+50., 250, 0., 10., "s");
00175 meTimeMapL1_[i]->setAxisTitle("ix", 1);
00176 if ( i+1 >= 1 && i+1 <= 9 ) meTimeMapL1_[i]->setAxisTitle("101-ix", 1);
00177 meTimeMapL1_[i]->setAxisTitle("iy", 2);
00178 dqmStore_->tag(meTimeMapL1_[i], i+1);
00179
00180 name = "EELDT amplitude over PN " + Numbers::sEE(i+1) + " " + LN.str();
00181 meAmplPNMapL1_[i] = dqmStore_->bookProfile2D(name, name, 50, Numbers::ix0EE(i+1)+0., Numbers::ix0EE(i+1)+50., 50, Numbers::iy0EE(i+1)+0., Numbers::iy0EE(i+1)+50., 4096, 0., 4096.*12., "s");
00182 meAmplPNMapL1_[i]->setAxisTitle("ix", 1);
00183 if ( i+1 >= 1 && i+1 <= 9 ) meAmplPNMapL1_[i]->setAxisTitle("101-ix", 1);
00184 meAmplPNMapL1_[i]->setAxisTitle("iy", 2);
00185 dqmStore_->tag(meAmplPNMapL1_[i], i+1);
00186 }
00187
00188 dqmStore_->setCurrentFolder(prefixME_ + "/EELedTask/" + LedN.str() + "/PN");
00189
00190 dqmStore_->setCurrentFolder(prefixME_ + "/EELedTask/" + LedN.str() + "/PN/Gain01");
00191 for (int i = 0; i < 18; i++) {
00192 name = "EELDT PNs amplitude " + Numbers::sEE(i+1) + " G01 " + LN.str();
00193 mePnAmplMapG01L1_[i] = dqmStore_->bookProfile(name, name, 10, 0., 10., 4096, 0., 4096., "s");
00194 mePnAmplMapG01L1_[i]->setAxisTitle("channel", 1);
00195 mePnAmplMapG01L1_[i]->setAxisTitle("amplitude", 2);
00196 dqmStore_->tag(mePnAmplMapG01L1_[i], i+1);
00197
00198 name = "EELDT PNs pedestal " + Numbers::sEE(i+1) + " G01 " + LN.str();
00199 mePnPedMapG01L1_[i] = dqmStore_->bookProfile(name, name, 10, 0., 10., 4096, 0., 4096., "s");
00200 mePnPedMapG01L1_[i]->setAxisTitle("channel", 1);
00201 mePnPedMapG01L1_[i]->setAxisTitle("pedestal", 2);
00202 dqmStore_->tag(mePnPedMapG01L1_[i], i+1);
00203 }
00204
00205 dqmStore_->setCurrentFolder(prefixME_ + "/EELedTask/" + LedN.str() + "/PN/Gain16");
00206
00207 for (int i = 0; i < 18; i++) {
00208 name = "EELDT PNs amplitude " + Numbers::sEE(i+1) + " G16 " + LN.str();
00209 mePnAmplMapG16L1_[i] = dqmStore_->bookProfile(name, name, 10, 0., 10., 4096, 0., 4096., "s");
00210 mePnAmplMapG16L1_[i]->setAxisTitle("channel", 1);
00211 mePnAmplMapG16L1_[i]->setAxisTitle("amplitude", 2);
00212 dqmStore_->tag(mePnAmplMapG16L1_[i], i+1);
00213
00214 name = "EELDT PNs pedestal " + Numbers::sEE(i+1) + " G16 " + LN.str();
00215 mePnPedMapG16L1_[i] = dqmStore_->bookProfile(name, name, 10, 0., 10., 4096, 0., 4096., "s");
00216 mePnPedMapG16L1_[i]->setAxisTitle("channel", 1);
00217 mePnPedMapG16L1_[i]->setAxisTitle("pedestal", 2);
00218 dqmStore_->tag(mePnPedMapG16L1_[i], i+1);
00219 }
00220
00221 }
00222
00223 if ( find(ledWavelengths_.begin(), ledWavelengths_.end(), 2) != ledWavelengths_.end() ) {
00224
00225 LedN.str("");
00226 LedN << "Led" << 2;
00227 LN.str("");
00228 LN << "L" << 2;
00229
00230 dqmStore_->setCurrentFolder(prefixME_ + "/EELedTask/" + LedN.str());
00231 for (int i = 0; i < 18; i++) {
00232 name = "EELDT shape " + Numbers::sEE(i+1) + " " + LN.str();
00233 meShapeMapL2_[i] = dqmStore_->bookProfile2D(name, name, 850, 0., 850., 10, 0., 10., 4096, 0., 4096., "s");
00234 meShapeMapL2_[i]->setAxisTitle("channel", 1);
00235 meShapeMapL2_[i]->setAxisTitle("sample", 2);
00236 meShapeMapL2_[i]->setAxisTitle("amplitude", 3);
00237 dqmStore_->tag(meShapeMapL2_[i], i+1);
00238
00239 name = "EELDT amplitude " + Numbers::sEE(i+1) + " " + LN.str();
00240 meAmplMapL2_[i] = dqmStore_->bookProfile2D(name, name, 50, Numbers::ix0EE(i+1)+0., Numbers::ix0EE(i+1)+50., 50, Numbers::iy0EE(i+1)+0., Numbers::iy0EE(i+1)+50., 4096, 0., 4096.*12., "s");
00241 meAmplMapL2_[i]->setAxisTitle("ix", 1);
00242 if ( i+1 >= 1 && i+1 <= 9 ) meAmplMapL2_[i]->setAxisTitle("101-ix", 1);
00243 meAmplMapL2_[i]->setAxisTitle("iy", 2);
00244 dqmStore_->tag(meAmplMapL2_[i], i+1);
00245
00246 name = "EELDT timing " + Numbers::sEE(i+1) + " " + LN.str();
00247 meTimeMapL2_[i] = dqmStore_->bookProfile2D(name, name, 50, Numbers::ix0EE(i+1)+0., Numbers::ix0EE(i+1)+50., 50, Numbers::iy0EE(i+1)+0., Numbers::iy0EE(i+1)+50., 250, 0., 10., "s");
00248 meTimeMapL2_[i]->setAxisTitle("ix", 1);
00249 if ( i+1 >= 1 && i+1 <= 9 ) meTimeMapL2_[i]->setAxisTitle("101-ix", 1);
00250 meTimeMapL2_[i]->setAxisTitle("iy", 2);
00251 dqmStore_->tag(meTimeMapL2_[i], i+1);
00252
00253 name = "EELDT amplitude over PN " + Numbers::sEE(i+1) + " " + LN.str();
00254 meAmplPNMapL2_[i] = dqmStore_->bookProfile2D(name, name, 50, Numbers::ix0EE(i+1)+0., Numbers::ix0EE(i+1)+50., 50, Numbers::iy0EE(i+1)+0., Numbers::iy0EE(i+1)+50., 4096, 0., 4096.*12., "s");
00255 meAmplPNMapL2_[i]->setAxisTitle("ix", 1);
00256 if ( i+1 >= 1 && i+1 <= 9 ) meAmplPNMapL2_[i]->setAxisTitle("101-ix", 1);
00257 meAmplPNMapL2_[i]->setAxisTitle("iy", 2);
00258 dqmStore_->tag(meAmplPNMapL2_[i], i+1);
00259 }
00260
00261 dqmStore_->setCurrentFolder(prefixME_ + "/EELedTask/" + LedN.str() + "/PN");
00262
00263 dqmStore_->setCurrentFolder(prefixME_ + "/EELedTask/" + LedN.str() + "/PN/Gain01");
00264 for (int i = 0; i < 18; i++) {
00265 name = "EELDT PNs amplitude " + Numbers::sEE(i+1) + " G01 " + LN.str();
00266 mePnAmplMapG01L2_[i] = dqmStore_->bookProfile(name, name, 10, 0., 10., 4096, 0., 4096., "s");
00267 mePnAmplMapG01L2_[i]->setAxisTitle("channel", 1);
00268 mePnAmplMapG01L2_[i]->setAxisTitle("amplitude", 2);
00269 dqmStore_->tag(mePnAmplMapG01L2_[i], i+1);
00270
00271 name = "EELDT PNs pedestal " + Numbers::sEE(i+1) + " G01 " + LN.str();
00272 mePnPedMapG01L2_[i] = dqmStore_->bookProfile(name, name, 10, 0., 10., 4096, 0., 4096., "s");
00273 mePnPedMapG01L2_[i]->setAxisTitle("channel", 1);
00274 mePnPedMapG01L2_[i]->setAxisTitle("pedestal", 2);
00275 dqmStore_->tag(mePnPedMapG01L2_[i], i+1);
00276 }
00277
00278 dqmStore_->setCurrentFolder(prefixME_ + "/EELedTask/" + LedN.str() + "/PN/Gain16");
00279
00280 for (int i = 0; i < 18; i++) {
00281 name = "EELDT PNs amplitude " + Numbers::sEE(i+1) + " G16 " + LN.str();
00282 mePnAmplMapG16L2_[i] = dqmStore_->bookProfile(name, name, 10, 0., 10., 4096, 0., 4096., "s");
00283 mePnAmplMapG16L2_[i]->setAxisTitle("channel", 1);
00284 mePnAmplMapG16L2_[i]->setAxisTitle("amplitude", 2);
00285 dqmStore_->tag(mePnAmplMapG16L2_[i], i+1);
00286
00287 name = "EELDT PNs pedestal " + Numbers::sEE(i+1) + " G16 " + LN.str();
00288 mePnPedMapG16L2_[i] = dqmStore_->bookProfile(name, name, 10, 0., 10., 4096, 0., 4096., "s");
00289 mePnPedMapG16L2_[i]->setAxisTitle("channel", 1);
00290 mePnPedMapG16L2_[i]->setAxisTitle("pedestal", 2);
00291 dqmStore_->tag(mePnPedMapG16L2_[i], i+1);
00292 }
00293
00294 }
00295
00296 }
00297
00298 }
00299
00300 void EELedTask::cleanup(void){
00301
00302 if ( ! init_ ) return;
00303
00304 if ( dqmStore_ ) {
00305 dqmStore_->setCurrentFolder(prefixME_ + "/EELedTask");
00306
00307 if ( find(ledWavelengths_.begin(), ledWavelengths_.end(), 1) != ledWavelengths_.end() ) {
00308
00309 dqmStore_->setCurrentFolder(prefixME_ + "/EELedTask/Led1");
00310 for (int i = 0; i < 18; i++) {
00311 if ( meShapeMapL1_[i] ) dqmStore_->removeElement( meShapeMapL1_[i]->getName() );
00312 meShapeMapL1_[i] = 0;
00313 if ( meAmplMapL1_[i] ) dqmStore_->removeElement( meAmplMapL1_[i]->getName() );
00314 meAmplMapL1_[i] = 0;
00315 if ( meTimeMapL1_[i] ) dqmStore_->removeElement( meTimeMapL1_[i]->getName() );
00316 meTimeMapL1_[i] = 0;
00317 if ( meAmplPNMapL1_[i] ) dqmStore_->removeElement( meAmplPNMapL1_[i]->getName() );
00318 meAmplPNMapL1_[i] = 0;
00319 }
00320
00321 }
00322
00323 if ( find(ledWavelengths_.begin(), ledWavelengths_.end(), 2) != ledWavelengths_.end() ) {
00324
00325 dqmStore_->setCurrentFolder(prefixME_ + "/EELedTask/Led2");
00326 for (int i = 0; i < 18; i++) {
00327 if ( meShapeMapL2_[i] ) dqmStore_->removeElement( meShapeMapL2_[i]->getName() );
00328 meShapeMapL2_[i] = 0;
00329 if ( meAmplMapL2_[i] ) dqmStore_->removeElement( meAmplMapL2_[i]->getName() );
00330 meAmplMapL2_[i] = 0;
00331 if ( meTimeMapL2_[i] ) dqmStore_->removeElement( meTimeMapL2_[i]->getName() );
00332 meTimeMapL2_[i] = 0;
00333 if ( meAmplPNMapL2_[i] ) dqmStore_->removeElement( meAmplPNMapL2_[i]->getName() );
00334 meAmplPNMapL2_[i] = 0;
00335 }
00336
00337 }
00338
00339 if ( find(ledWavelengths_.begin(), ledWavelengths_.end(), 1) != ledWavelengths_.end() ) {
00340
00341 dqmStore_->setCurrentFolder(prefixME_ + "/EELedTask/Led1/PN");
00342
00343 dqmStore_->setCurrentFolder(prefixME_ + "/EELedTask/Led1/PN/Gain01");
00344 for (int i = 0; i < 18; i++) {
00345 if ( mePnAmplMapG01L1_[i] ) dqmStore_->removeElement( mePnAmplMapG01L1_[i]->getName() );
00346 mePnAmplMapG01L1_[i] = 0;
00347 if ( mePnPedMapG01L1_[i] ) dqmStore_->removeElement( mePnPedMapG01L1_[i]->getName() );
00348 mePnPedMapG01L1_[i] = 0;
00349 }
00350
00351 dqmStore_->setCurrentFolder(prefixME_ + "/EELedTask/Led1/PN/Gain16");
00352 for (int i = 0; i < 18; i++) {
00353 if ( mePnAmplMapG16L1_[i] ) dqmStore_->removeElement( mePnAmplMapG16L1_[i]->getName() );
00354 mePnAmplMapG16L1_[i] = 0;
00355 if ( mePnPedMapG16L1_[i] ) dqmStore_->removeElement( mePnPedMapG16L1_[i]->getName() );
00356 mePnPedMapG16L1_[i] = 0;
00357 }
00358
00359 }
00360
00361 if ( find(ledWavelengths_.begin(), ledWavelengths_.end(), 2) != ledWavelengths_.end() ) {
00362
00363 dqmStore_->setCurrentFolder(prefixME_ + "/EELedTask/Led2/PN");
00364
00365 dqmStore_->setCurrentFolder(prefixME_ + "/EELedTask/Led2/PN/Gain01");
00366 for (int i = 0; i < 18; i++) {
00367 if ( mePnAmplMapG01L2_[i] ) dqmStore_->removeElement( mePnAmplMapG01L2_[i]->getName() );
00368 mePnAmplMapG01L2_[i] = 0;
00369 if ( mePnPedMapG01L2_[i] ) dqmStore_->removeElement( mePnPedMapG01L2_[i]->getName() );
00370 mePnPedMapG01L2_[i] = 0;
00371 }
00372
00373 dqmStore_->setCurrentFolder(prefixME_ + "/EELedTask/Led2/PN/Gain16");
00374 for (int i = 0; i < 18; i++) {
00375 if ( mePnAmplMapG16L2_[i] ) dqmStore_->removeElement( mePnAmplMapG16L2_[i]->getName() );
00376 mePnAmplMapG16L2_[i] = 0;
00377 if ( mePnPedMapG16L2_[i] ) dqmStore_->removeElement( mePnPedMapG16L2_[i]->getName() );
00378 mePnPedMapG16L2_[i] = 0;
00379 }
00380
00381 }
00382
00383 }
00384
00385 init_ = false;
00386
00387 }
00388
00389 void EELedTask::endJob(void){
00390
00391 edm::LogInfo("EELedTask") << "analyzed " << ievt_ << " events";
00392
00393 if ( enableCleanup_ ) this->cleanup();
00394
00395 }
00396
00397 void EELedTask::analyze(const edm::Event& e, const edm::EventSetup& c){
00398
00399 bool enable = false;
00400 int runType[18];
00401 for (int i=0; i<18; i++) runType[i] = -1;
00402 int rtHalf[18];
00403 for (int i=0; i<18; i++) rtHalf[i] = -1;
00404 int waveLength[18];
00405 for (int i=0; i<18; i++) waveLength[i] = -1;
00406
00407 edm::Handle<EcalRawDataCollection> dcchs;
00408
00409 if ( e.getByLabel(EcalRawDataCollection_, dcchs) ) {
00410
00411 for ( EcalRawDataCollection::const_iterator dcchItr = dcchs->begin(); dcchItr != dcchs->end(); ++dcchItr ) {
00412
00413 if ( Numbers::subDet( *dcchItr ) != EcalEndcap ) continue;
00414
00415 int ism = Numbers::iSM( *dcchItr, EcalEndcap );
00416
00417 runType[ism-1] = dcchItr->getRunType();
00418 rtHalf[ism-1] = dcchItr->getRtHalf();
00419 waveLength[ism-1] = dcchItr->getEventSettings().wavelength;
00420
00421 if ( dcchItr->getRunType() == EcalDCCHeaderBlock::LED_STD ||
00422 dcchItr->getRunType() == EcalDCCHeaderBlock::LED_GAP ) enable = true;
00423
00424 }
00425
00426 } else {
00427
00428 edm::LogWarning("EELedTask") << EcalRawDataCollection_ << " not available";
00429
00430 }
00431
00432 if ( ! enable ) return;
00433
00434 if ( ! init_ ) this->setup();
00435
00436 ievt_++;
00437
00438 bool numPN[80];
00439 float adcPN[80];
00440 for ( int i = 0; i < 80; i++ ) {
00441 numPN[i] = false;
00442 adcPN[i] = 0.;
00443 }
00444
00445 std::vector<int> PNs;
00446 PNs.reserve(12);
00447
00448 edm::Handle<EEDigiCollection> digis;
00449
00450 if ( e.getByLabel(EEDigiCollection_, digis) ) {
00451
00452 int need = digis->size();
00453 LogDebug("EELedTask") << "event " << ievt_ << " digi collection size " << need;
00454
00455 for ( EEDigiCollection::const_iterator digiItr = digis->begin(); digiItr != digis->end(); ++digiItr ) {
00456
00457 EEDetId id = digiItr->id();
00458
00459 int ix = id.ix();
00460 int iy = id.iy();
00461
00462 int ism = Numbers::iSM( id );
00463
00464 if ( ! ( runType[ism-1] == EcalDCCHeaderBlock::LED_STD ||
00465 runType[ism-1] == EcalDCCHeaderBlock::LED_GAP ) ) continue;
00466
00467 if ( runType[ism-1] == EcalDCCHeaderBlock::LED_GAP &&
00468 rtHalf[ism-1] != Numbers::RtHalf(id) ) continue;
00469
00470 int ic = Numbers::icEE(ism, ix, iy);
00471
00472 EEDataFrame dataframe = (*digiItr);
00473
00474 for (int i = 0; i < 10; i++) {
00475
00476 int adc = dataframe.sample(i).adc();
00477 float gain = 1.;
00478
00479 MonitorElement* meShapeMap = 0;
00480
00481 if ( dataframe.sample(i).gainId() == 1 ) gain = 1./12.;
00482 if ( dataframe.sample(i).gainId() == 2 ) gain = 1./ 6.;
00483 if ( dataframe.sample(i).gainId() == 3 ) gain = 1./ 1.;
00484
00485 if ( Numbers::RtHalf(id) == 0 || Numbers::RtHalf(id) == 1 ) {
00486
00487 if ( waveLength[ism-1] == 0 ) meShapeMap = meShapeMapL1_[ism-1];
00488 if ( waveLength[ism-1] == 2 ) meShapeMap = meShapeMapL2_[ism-1];
00489
00490 } else {
00491
00492 edm::LogWarning("EELedTask") << " RtHalf = " << Numbers::RtHalf(id);
00493
00494 }
00495
00496
00497 float xval = float(adc);
00498
00499 if ( meShapeMap ) meShapeMap->Fill(ic - 0.5, i + 0.5, xval);
00500
00501 }
00502
00503 NumbersPn::getPNs( ism, ix, iy, PNs );
00504
00505 for (unsigned int i=0; i<PNs.size(); i++) {
00506 int ipn = PNs[i];
00507 if ( ipn >= 0 && ipn < 80 ) numPN[ipn] = true;
00508 }
00509
00510 }
00511
00512 } else {
00513
00514 edm::LogWarning("EELedTask") << EEDigiCollection_ << " not available";
00515
00516 }
00517
00518 edm::Handle<EcalPnDiodeDigiCollection> pns;
00519
00520 if ( e.getByLabel(EcalPnDiodeDigiCollection_, pns) ) {
00521
00522 int nep = pns->size();
00523 LogDebug("EELedTask") << "event " << ievt_ << " pns collection size " << nep;
00524
00525 for ( EcalPnDiodeDigiCollection::const_iterator pnItr = pns->begin(); pnItr != pns->end(); ++pnItr ) {
00526
00527 if ( Numbers::subDet( pnItr->id() ) != EcalEndcap ) continue;
00528
00529 int ism = Numbers::iSM( pnItr->id() );
00530
00531 int num = pnItr->id().iPnId();
00532
00533 if ( ! ( runType[ism-1] == EcalDCCHeaderBlock::LED_STD ||
00534 runType[ism-1] == EcalDCCHeaderBlock::LED_GAP ) ) continue;
00535
00536 int ipn = NumbersPn::ipnEE( ism, num );
00537
00538 if ( ipn >= 0 && ipn < 80 && numPN[ipn] == false ) continue;
00539
00540 float xvalped = 0.;
00541
00542 for (int i = 0; i < 4; i++) {
00543
00544 int adc = pnItr->sample(i).adc();
00545
00546 MonitorElement* mePNPed = 0;
00547
00548 if ( pnItr->sample(i).gainId() == 0 ) {
00549 if ( waveLength[ism-1] == 0 ) mePNPed = mePnPedMapG01L1_[ism-1];
00550 if ( waveLength[ism-1] == 2 ) mePNPed = mePnPedMapG01L2_[ism-1];
00551 }
00552 if ( pnItr->sample(i).gainId() == 1 ) {
00553 if ( waveLength[ism-1] == 0 ) mePNPed = mePnPedMapG16L1_[ism-1];
00554 if ( waveLength[ism-1] == 2 ) mePNPed = mePnPedMapG16L2_[ism-1];
00555 }
00556
00557 float xval = float(adc);
00558
00559 if ( mePNPed ) mePNPed->Fill(num - 0.5, xval);
00560
00561 xvalped = xvalped + xval;
00562
00563 }
00564
00565 xvalped = xvalped / 4;
00566
00567 float xvalmax = 0.;
00568
00569 MonitorElement* mePN = 0;
00570
00571 for (int i = 0; i < 50; i++) {
00572
00573 int adc = pnItr->sample(i).adc();
00574
00575 float xval = float(adc);
00576
00577 if ( xval >= xvalmax ) xvalmax = xval;
00578
00579 }
00580
00581 xvalmax = xvalmax - xvalped;
00582
00583 if ( pnItr->sample(0).gainId() == 0 ) {
00584 if ( waveLength[ism-1] == 0 ) mePN = mePnAmplMapG01L1_[ism-1];
00585 if ( waveLength[ism-1] == 2 ) mePN = mePnAmplMapG01L2_[ism-1];
00586 }
00587 if ( pnItr->sample(0).gainId() == 1 ) {
00588 if ( waveLength[ism-1] == 0 ) mePN = mePnAmplMapG16L1_[ism-1];
00589 if ( waveLength[ism-1] == 2 ) mePN = mePnAmplMapG16L2_[ism-1];
00590 }
00591
00592 if ( mePN ) mePN->Fill(num - 0.5, xvalmax);
00593
00594 if ( ipn >= 0 && ipn < 80 ) adcPN[ipn] = xvalmax;
00595
00596 }
00597
00598 } else {
00599
00600 edm::LogWarning("EELedTask") << EcalPnDiodeDigiCollection_ << " not available";
00601
00602 }
00603
00604 edm::Handle<EcalUncalibratedRecHitCollection> hits;
00605
00606 if ( e.getByLabel(EcalUncalibratedRecHitCollection_, hits) ) {
00607
00608 int neh = hits->size();
00609 LogDebug("EELedTask") << "event " << ievt_ << " hits collection size " << neh;
00610
00611 for ( EcalUncalibratedRecHitCollection::const_iterator hitItr = hits->begin(); hitItr != hits->end(); ++hitItr ) {
00612
00613 EEDetId id = hitItr->id();
00614
00615 int ix = id.ix();
00616 int iy = id.iy();
00617
00618 int ism = Numbers::iSM( id );
00619
00620 if ( ism >= 1 && ism <= 9 ) ix = 101 - ix;
00621
00622 float xix = ix - 0.5;
00623 float xiy = iy - 0.5;
00624
00625 if ( ! ( runType[ism-1] == EcalDCCHeaderBlock::LED_STD ||
00626 runType[ism-1] == EcalDCCHeaderBlock::LED_GAP ) ) continue;
00627
00628 if ( runType[ism-1] == EcalDCCHeaderBlock::LED_GAP &&
00629 rtHalf[ism-1] != Numbers::RtHalf(id) ) continue;
00630
00631 MonitorElement* meAmplMap = 0;
00632 MonitorElement* meTimeMap = 0;
00633 MonitorElement* meAmplPNMap = 0;
00634
00635 if ( Numbers::RtHalf(id) == 0 || Numbers::RtHalf(id) == 1 ) {
00636
00637 if ( waveLength[ism-1] == 0 ) {
00638 meAmplMap = meAmplMapL1_[ism-1];
00639 meTimeMap = meTimeMapL1_[ism-1];
00640 meAmplPNMap = meAmplPNMapL1_[ism-1];
00641 }
00642 if ( waveLength[ism-1] == 2 ) {
00643 meAmplMap = meAmplMapL2_[ism-1];
00644 meTimeMap = meTimeMapL2_[ism-1];
00645 meAmplPNMap = meAmplPNMapL2_[ism-1];
00646 }
00647
00648 } else {
00649
00650 edm::LogWarning("EELedTask") << " RtHalf = " << Numbers::RtHalf(id);
00651
00652 }
00653
00654 float xval = hitItr->amplitude();
00655 if ( xval <= 0. ) xval = 0.0;
00656 float yval = hitItr->jitter() + 6.0;
00657 if ( yval <= 0. ) yval = 0.0;
00658 float zval = hitItr->pedestal();
00659 if ( zval <= 0. ) zval = 0.0;
00660
00661 if ( meAmplMap ) meAmplMap->Fill(xix, xiy, xval);
00662
00663 if ( xval > 16. ) {
00664 if ( meTimeMap ) meTimeMap->Fill(xix, xiy, yval);
00665 }
00666
00667 float wval = 0.;
00668
00669 NumbersPn::getPNs( ism, ix, iy, PNs );
00670
00671 if ( PNs.size() > 0 ) {
00672 int ipn = PNs[0];
00673 if ( ipn >= 0 && ipn < 80 ) {
00674 if ( adcPN[ipn] != 0. ) wval = xval / adcPN[ipn];
00675 }
00676 }
00677
00678 if ( meAmplPNMap ) meAmplPNMap->Fill(xix, xiy, wval);
00679
00680 }
00681
00682 } else {
00683
00684 edm::LogWarning("EELedTask") << EcalUncalibratedRecHitCollection_ << " not available";
00685
00686 }
00687
00688 }
00689