00001
00002
00003
00004
00005
00013
00014
00015
00016
00017
00018
00019
00020 #include "FWCore/ServiceRegistry/interface/Service.h"
00021 #include "DataFormats/Common/interface/Handle.h"
00022
00023 #include "DQMServices/Core/interface/DQMStore.h"
00024 #include "DQMServices/Core/interface/MonitorElement.h"
00025
00026 #include "DQM/SiStripCommon/interface/SiStripFolderOrganizer.h"
00027 #include "DQM/SiStripCommon/interface/SiStripHistoId.h"
00028
00029 #include "CalibTracker/SiStripAPVAnalysis/interface/ApvAnalysisFactory.h"
00030
00031 #include <FWCore/Framework/interface/EventSetup.h>
00032 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00033
00034 #include "DQM/SiStripMonitorPedestals/interface/SiStripMonitorPedestals.h"
00035 #include "CondFormats/DataRecord/interface/SiStripPedestalsRcd.h"
00036 #include "CondFormats/DataRecord/interface/SiStripNoisesRcd.h"
00037 #include "CalibTracker/Records/interface/SiStripQualityRcd.h"
00038 #include "CondFormats/SiStripObjects/interface/SiStripPedestals.h"
00039 #include "CondFormats/SiStripObjects/interface/SiStripNoises.h"
00040 #include "CalibFormats/SiStripObjects/interface/SiStripQuality.h"
00041
00042 #include "TProfile.h"
00043
00044 #include <cstdlib>
00045 #include <cmath>
00046 #include <numeric>
00047 #include <algorithm>
00048
00049 const std::string SiStripMonitorPedestals::RunMode1 = "ConDBPlotsOnly";
00050 const std::string SiStripMonitorPedestals::RunMode2 = "CalculatedPlotsOnly";
00051 const std::string SiStripMonitorPedestals::RunMode3 = "AllPlots";
00052
00053 SiStripMonitorPedestals::SiStripMonitorPedestals(edm::ParameterSet const& iConfig):
00054 dqmStore_(edm::Service<DQMStore>().operator->()),
00055 conf_(iConfig),
00056 pedsPSet_(iConfig.getParameter<edm::ParameterSet>("PedestalsPSet")),
00057 analyzed(false),
00058 firstEvent(true),
00059 signalCutPeds_(4),
00060 nEvTot_(0),
00061 nIteration_(0),
00062 apvFactory_(0),
00063 m_cacheID_(0)
00064 {
00065 edm::LogInfo("SiStripMonitorPedestals") <<"SiStripMonitorPedestals "
00066 << " Constructing....... ";
00067 }
00068
00069
00070
00071 SiStripMonitorPedestals::~SiStripMonitorPedestals()
00072 {
00073 edm::LogInfo("SiStripMonitorPedestals") <<"SiStripMonitorPedestals "
00074 << " Destructing...... ";
00075 if (apvFactory_) {delete apvFactory_;}
00076 }
00077
00078
00079
00080 void SiStripMonitorPedestals::beginJob() {
00081 theEventInitNumber_ = pedsPSet_.getParameter<int>("NumberOfEventsForInit");
00082 theEventIterNumber_ = pedsPSet_.getParameter<int>("NumberOfEventsForIteration");
00083 NumCMstripsInGroup_ = pedsPSet_.getParameter<int>("NumCMstripsInGroup");
00084 runTypeFlag_ = conf_.getParameter<std::string>("RunTypeFlag");
00085 }
00086
00087
00088
00089 void SiStripMonitorPedestals::beginRun(edm::Run const& run, edm::EventSetup const& eSetup) {
00090
00091 unsigned long long cacheID = eSetup.get<SiStripDetCablingRcd>().cacheIdentifier();
00092 if (m_cacheID_ != cacheID) {
00093 m_cacheID_ = cacheID;
00094 eSetup.get<SiStripDetCablingRcd>().get( detcabling );
00095 edm::LogInfo("SiStripMonitorPedestals") <<"SiStripMonitorPedestals::beginRun: "
00096 << " Creating MEs for new Cabling ";
00097 createMEs();
00098 } else {
00099 edm::LogInfo("SiStripMonitorPedestals") <<"SiStripMonitorPedestals::beginRun: "
00100 << " Resetting MEs ";
00101 for (std::map<uint32_t, ModMEs >::const_iterator idet = PedMEs.begin() ; idet!=PedMEs.end() ; idet++) {
00102 resetMEs(idet->first);
00103 }
00104 }
00105 if (runTypeFlag_ == RunMode1 || runTypeFlag_ == RunMode3 ) fillCondDBMEs(eSetup);
00106 }
00107
00108
00109
00110 void SiStripMonitorPedestals::createMEs() {
00111 std::vector<uint32_t> SelectedDetIds;
00112
00113
00114 if (apvFactory_) {delete apvFactory_;}
00115 apvFactory_ = new ApvAnalysisFactory(pedsPSet_);
00116
00117 detcabling->addActiveDetectorsRawIds(SelectedDetIds);
00118
00119
00120 SiStripHistoId hidmanager;
00121
00122 SiStripFolderOrganizer folder_organizer;
00123
00124 edm::LogInfo("SiStripMonitorPedestals") <<"SiStripMonitorPedestals::createMEs: "
00125 << "Number of Detector Present in cabling " << SelectedDetIds.size();
00126
00127 for (std::vector<uint32_t>::const_iterator idetid=SelectedDetIds.begin(), iEnd=SelectedDetIds.end();idetid!=iEnd;++idetid){
00128
00129 uint32_t detid = *idetid;
00130
00131
00132 if (detid == 0 || detid == 0xFFFFFFFF){
00133 edm::LogError("SiStripMonitorPedestals") <<"SiStripMonitorPedestals::createMEs: "
00134 << "Wrong DetId !!!!!! " << detid << " Neglecting !!!!!! ";
00135 continue;
00136 }
00137
00138 unsigned int apv_pairs = detcabling->nApvPairs(detid);
00139
00140
00141 if (apv_pairs < 1 || apv_pairs > 3) {
00142 edm::LogError("SiStripMonitorPedestals") <<"SiStripMonitorPedestals::createMEs: Wrong APV Pairs => detId "
00143 << detid << " APV pairs " << apv_pairs << " Neglecting !!!!!! ";
00144 continue;
00145 }
00146 unsigned int napvs = apv_pairs * 2;
00147 unsigned int nStrip = napvs * 128;
00148
00149 bool newDetId = apvFactory_->instantiateApvs(detid,napvs);
00150
00151 if( newDetId ) {
00152 ModMEs local_modmes;
00153 local_modmes.PedsPerStrip = 0;
00154 local_modmes.PedsDistribution = 0;
00155 local_modmes.PedsEvolution = 0;
00156 local_modmes.CMSubNoisePerStrip = 0;
00157 local_modmes.RawNoisePerStrip = 0;
00158 local_modmes.CMSubNoiseProfile = 0;
00159 local_modmes.RawNoiseProfile = 0;
00160 local_modmes.NoisyStrips = 0;
00161 local_modmes.NoisyStripDistribution = 0;
00162 local_modmes.CMDistribution = 0;
00163 local_modmes.CMSlopeDistribution = 0;
00164 local_modmes.PedsPerStripDB = 0;
00165 local_modmes.CMSubNoisePerStripDB = 0;
00166 local_modmes.BadStripsDB = 0;
00167
00168 std::string hid;
00169
00170 folder_organizer.setDetectorFolder(detid);
00171
00172
00173 resetMEs(detid);
00174
00175 if (runTypeFlag_ == RunMode1 || runTypeFlag_ == RunMode3 ) {
00176
00177 hid = hidmanager.createHistoId("PedestalFromCondDB","det", detid);
00178 local_modmes.PedsPerStripDB = dqmStore_->book1D(hid, hid, nStrip,0.5,nStrip+0.5);
00179 dqmStore_->tag(local_modmes.PedsPerStripDB, detid);
00180 (local_modmes.PedsPerStripDB)->setAxisTitle("Pedestal from CondDB(ADC) vs Strip Number",1);
00181
00182 hid = hidmanager.createHistoId("NoiseFromCondDB","det", detid);
00183 local_modmes.CMSubNoisePerStripDB = dqmStore_->book1D(hid, hid, nStrip,0.5,nStrip+0.5);
00184 dqmStore_->tag(local_modmes.CMSubNoisePerStripDB, detid);
00185 (local_modmes.CMSubNoisePerStripDB)->setAxisTitle("CMSubNoise from CondDB(ADC) vs Strip Number",1);
00186
00187 hid = hidmanager.createHistoId("BadStripFlagCondDB","det", detid);
00188 local_modmes.BadStripsDB = dqmStore_->book2D(hid, hid, nStrip,0.5,nStrip+0.5,6,-0.5,5.5);
00189 dqmStore_->tag(local_modmes.BadStripsDB, detid);
00190 (local_modmes.BadStripsDB)->setAxisTitle("Strip Flag from CondDB(ADC) vs Strip Number",1);
00191 }
00192 if (runTypeFlag_ == RunMode2 || runTypeFlag_ == RunMode3 ) {
00193
00194 hid = hidmanager.createHistoId("PedsPerStrip","det", detid);
00195 local_modmes.PedsPerStrip = dqmStore_->book1D(hid, hid, nStrip,0.5,nStrip+0.5);
00196 dqmStore_->tag(local_modmes.PedsPerStrip, detid);
00197 (local_modmes.PedsPerStrip)->setAxisTitle("Pedestal (ADC) vs Strip Number ",1);
00198
00199 hid = hidmanager.createHistoId("PedsDistribution","det", detid);
00200 local_modmes.PedsDistribution = dqmStore_->book2D(hid, hid, napvs,-0.5,napvs-0.5, 300, 200, 500);
00201 dqmStore_->tag(local_modmes.PedsDistribution, detid);
00202 (local_modmes.PedsDistribution)->setAxisTitle("Apv Number",1);
00203 (local_modmes.PedsDistribution)->setAxisTitle("Mean Pedestal Value (ADC)",2);
00204
00205 hid = hidmanager.createHistoId("PedsEvolution","det", detid);
00206 local_modmes.PedsEvolution = dqmStore_->book2D(hid, hid, napvs,-0.5,napvs-0.5, 50, 0., 50.);
00207 dqmStore_->tag(local_modmes.PedsEvolution, detid);
00208 (local_modmes.PedsEvolution)->setAxisTitle("Apv Number",1);
00209 (local_modmes.PedsEvolution)->setAxisTitle("Iteration Number",2);
00210
00211
00212 hid = hidmanager.createHistoId("CMSubNoisePerStrip","det", detid);
00213 local_modmes.CMSubNoisePerStrip = dqmStore_->book1D(hid, hid, nStrip,0.5,nStrip+0.5);
00214 dqmStore_->tag(local_modmes.CMSubNoisePerStrip, detid);
00215 (local_modmes.CMSubNoisePerStrip)->setAxisTitle("CMSubNoise (ADC) vs Strip Number",1);
00216
00217 hid = hidmanager.createHistoId("RawNoisePerStrip","det", detid);
00218 local_modmes.RawNoisePerStrip = dqmStore_->book1D(hid, hid, nStrip,0.5,nStrip+0.5);
00219 dqmStore_->tag(local_modmes.RawNoisePerStrip, detid);
00220 (local_modmes.RawNoisePerStrip)->setAxisTitle("RawNoise(ADC) vs Strip Number",1);
00221
00222 hid = hidmanager.createHistoId("CMSubNoiseProfile","det", detid);
00223 local_modmes.CMSubNoiseProfile = dqmStore_->bookProfile(hid, hid, nStrip,0.5,nStrip+0.5, 100, 0., 100.);
00224 dqmStore_->tag(local_modmes.CMSubNoiseProfile, detid);
00225 (local_modmes.CMSubNoiseProfile)->setAxisTitle("Mean of CMSubNoise (ADC) vs Strip Number",1);
00226
00227 hid = hidmanager.createHistoId("RawNoiseProfile","det", detid);
00228 local_modmes.RawNoiseProfile = dqmStore_->bookProfile(hid, hid, nStrip,0.5,nStrip+0.5, 100, 0., 100.);
00229 dqmStore_->tag(local_modmes.RawNoiseProfile, detid);
00230 (local_modmes.RawNoiseProfile)->setAxisTitle("Mean of RawNoise (ADC) vs Strip Number",1);
00231
00232 hid = hidmanager.createHistoId("NoisyStrips","det", detid);
00233 local_modmes.NoisyStrips = dqmStore_->book2D(hid, hid, nStrip,0.5,nStrip+0.5,6,-0.5,5.5);
00234 dqmStore_->tag(local_modmes.NoisyStrips, detid);
00235 (local_modmes.NoisyStrips)->setAxisTitle("Strip Number",1);
00236 (local_modmes.NoisyStrips)->setAxisTitle("Flag Value",2);
00237
00238 hid = hidmanager.createHistoId("NoisyStripDistribution","det", detid);
00239 local_modmes.NoisyStripDistribution = dqmStore_->book1D(hid, hid, 11, -0.5,10.5);
00240 dqmStore_->tag(local_modmes.NoisyStripDistribution, detid);
00241 (local_modmes.NoisyStripDistribution)->setAxisTitle("Flag Value",1);
00242
00243
00244 hid = hidmanager.createHistoId("CMDistribution","det", detid);
00245 local_modmes.CMDistribution = dqmStore_->book2D(hid, hid, napvs,-0.5,napvs-0.5, 150, -15., 15.);
00246 dqmStore_->tag(local_modmes.CMDistribution, detid);
00247 (local_modmes.CMDistribution)->setAxisTitle("Common Mode (ADC) vs APV Number",1);
00248
00249 hid = hidmanager.createHistoId("CMSlopeDistribution","det", detid);
00250 local_modmes.CMSlopeDistribution = dqmStore_->book2D(hid, hid, napvs,-0.5,napvs-0.5, 100, -0.05, 0.05);
00251 dqmStore_->tag(local_modmes.CMSlopeDistribution, detid);
00252 (local_modmes.CMSlopeDistribution)->setAxisTitle("Common Mode Slope vs APV Number",1);
00253
00254 }
00255
00256
00257 PedMEs.insert( std::make_pair(detid, local_modmes));
00258 }
00259
00260 }
00261 edm::LogInfo("SiStripMonitorPedestals") <<"SiStripMonitorPedestals::createMEs: Number of DETS used "
00262 <<PedMEs.size();
00263 }
00264
00265 void SiStripMonitorPedestals::analyze(const edm::Event& iEvent, const edm::EventSetup& eSetup)
00266 {
00267
00268 edm::LogInfo("SiStripMonitorPedestals") <<
00269 "SiStripMonitorPedestals::analyze: Run " <<
00270 iEvent.id().run() << " Event " << iEvent.id().event();
00271
00272 eSetup.get<SiStripDetCablingRcd>().get( detcabling );
00273
00274 if (runTypeFlag_ != RunMode2 && runTypeFlag_ != RunMode3 ) return;
00275
00276
00277 nEvTot_++;
00278
00279
00280 std::string digiProducer = conf_.getParameter<std::string>("DigiProducer");
00281
00282 edm::Handle< edm::DetSetVector<SiStripRawDigi> > digi_collection;
00283 std::string digiType = "VirginRaw";
00284
00285 iEvent.getByLabel(digiProducer, digiType, digi_collection);
00286
00287
00288 if((nEvTot_ - theEventInitNumber_)%theEventIterNumber_ == 1) nIteration_++;
00289
00290
00291
00292 for (std::map<uint32_t, ModMEs >::const_iterator i = PedMEs.begin() ; i!=PedMEs.end() ; i++) {
00293 uint32_t detid = i->first; ModMEs local_modmes = i->second;
00294
00295 std::vector< edm::DetSet<SiStripRawDigi> >::const_iterator digis = digi_collection->find( detid );
00296 if (digis == digi_collection->end() ||
00297 digis->data.size() == 0 ||
00298 digis->data.size() > 768) {
00299 if (digis == digi_collection->end()) {
00300 edm::LogError("SiStripMonitorPedestals") << " SiStripMonitorPedestals::analyze: Event " << nEvTot_
00301 << " DetId " << detid << " at the end of Digi Collection!!!";
00302 } else {
00303 edm::LogError("SiStripMonitorPedestals") << " [SiStripMonitorPedestals::analyze: Event " << nEvTot_
00304 << " DetId " << detid << " # of Digis " << digis->data.size() ;
00305 }
00306 std::vector<const FedChannelConnection *> fed_conns = detcabling->getConnections(detid);
00307 for (unsigned int k = 0; k < fed_conns.size() ; k++) {
00308 if (k==0) edm::LogError("SiStripMonitorPedestals") <<" SiStripMonitorPedestals::analyze: Fed Id " <<
00309 fed_conns[k]->fedId() << " Channel " << fed_conns[k]->fedCh();
00310 else edm::LogError("SiStripMonitorPedestals") <<" SiStripMonitorPedestals::analyze: Channel " <<
00311 fed_conns[k]->fedCh();
00312 }
00313 std::cout << std::endl;
00314 continue;
00315 }
00316
00317 if ( digis->data.empty() ) {
00318 edm::LogError("MonitorDigi_tmp") << "[SiStripRawDigiToRaw::createFedBuffers] Zero digis found!";
00319 }
00320 uint32_t id = detid;
00321
00322 apvFactory_->update(id, (*digis));
00323
00324 if(nEvTot_ > theEventInitNumber_) {
00325 if(local_modmes.CMDistribution != NULL){
00326 std::vector<float> tmp;
00327 tmp.clear();
00328 apvFactory_->getCommonMode(id, tmp);
00329
00330 int numberCMBlocks = int(128. / NumCMstripsInGroup_);
00331 int ibin=0;
00332 for (std::vector<float>::const_iterator iped=tmp.begin(); iped!=tmp.end();iped++) {
00333 int iapv = int (ibin/numberCMBlocks);
00334 (local_modmes.CMDistribution)->Fill(iapv,static_cast<float>(*iped));
00335 ibin++;
00336
00337 }
00338 }
00339 if(local_modmes.CMSlopeDistribution != NULL){
00340 std::vector<float> tmp;
00341 tmp.clear();
00342 int iapv = 0;
00343 apvFactory_->getCommonModeSlope(id, tmp);
00344 for (std::vector<float>::const_iterator it=tmp.begin(); it!=tmp.end();it++) {
00345 (local_modmes.CMSlopeDistribution)->Fill(iapv,static_cast<float>(*it));
00346 iapv++;
00347 }
00348 }
00349 }
00350
00351
00352 if((nEvTot_ - theEventInitNumber_ - theEventIterNumber_)%theEventIterNumber_ == 1)
00353 {
00354
00355 std::vector<float> tmp;
00356 tmp.clear();
00357 apvFactory_->getPedestal(id, tmp);
00358 if(local_modmes.PedsPerStrip != NULL){
00359 int numberOfApvs = int(tmp.size()/128.);
00360 for(int i=0; i<numberOfApvs;i++){
00361 std::vector<float> myPedPerApv;
00362 apvFactory_->getPedestal(id, i, myPedPerApv);
00363 float avarage = 0;
00364 avarage = accumulate(myPedPerApv.begin(), myPedPerApv.end(), avarage);
00365 avarage = avarage/128.;
00366 (local_modmes.PedsEvolution)->setBinContent(i+1,nIteration_,avarage);
00367
00368 }
00369 int ibin=0;
00370
00371 for (std::vector<float>::const_iterator iped=tmp.begin(); iped!=tmp.end();iped++) {
00372 int napv = int(ibin / 128.);
00373 ibin++;
00374 float last_value = (local_modmes.PedsPerStrip)->getBinContent(ibin);
00375 if(last_value != 0.){
00376 (local_modmes.PedsPerStrip)->setBinContent(ibin,(static_cast<float>(*iped) + last_value)/2.);
00377 }else{
00378 (local_modmes.PedsPerStrip)->setBinContent(ibin,static_cast<float>(*iped));
00379 }
00380 (local_modmes.PedsDistribution)->Fill(napv,static_cast<float>(*iped));
00381 }
00382 }
00383
00384 if(local_modmes.CMSubNoisePerStrip != NULL && local_modmes.CMSubNoiseProfile != NULL){
00385 tmp.clear();
00386 apvFactory_->getNoise(id, tmp);
00387 int ibin=0;
00388 for (std::vector<float>::const_iterator iped=tmp.begin(); iped!=tmp.end();iped++) {
00389 ibin++;
00390 (local_modmes.CMSubNoiseProfile)->Fill(static_cast<double>(ibin*1.),static_cast<float>(*iped));
00391
00392 float last_value = (local_modmes.CMSubNoisePerStrip)->getBinContent(ibin);
00393 if(last_value != 0.){
00394 (local_modmes.CMSubNoisePerStrip)->setBinContent(ibin,(static_cast<float>(*iped)+last_value)/2.);
00395 }else{
00396 (local_modmes.CMSubNoisePerStrip)->setBinContent(ibin,static_cast<float>(*iped));
00397 }
00398 }
00399 }
00400
00401
00402 if(local_modmes.RawNoisePerStrip != NULL && local_modmes.RawNoiseProfile != NULL){
00403 tmp.clear();
00404 apvFactory_->getRawNoise(id, tmp);
00405 int ibin=0;
00406 for (std::vector<float>::const_iterator iped=tmp.begin(); iped!=tmp.end();iped++) {
00407 ibin++;
00408 (local_modmes.RawNoiseProfile)->Fill(static_cast<double>(ibin*1.),static_cast<float>(*iped));
00409 float last_value = (local_modmes.RawNoisePerStrip)->getBinContent(ibin);
00410 if(last_value != 0.){
00411 (local_modmes.RawNoisePerStrip)->setBinContent(ibin,(static_cast<float>(*iped)+last_value)/2.);
00412 }else{
00413 (local_modmes.RawNoisePerStrip)->setBinContent(ibin,static_cast<float>(*iped));
00414 }
00415 }
00416 }
00417
00418 if(local_modmes.NoisyStrips != NULL){
00419 TkApvMask::MaskType temp;
00420 apvFactory_->getMask(id, temp);
00421 int ibin=0;
00422 for (TkApvMask::MaskType::const_iterator iped=temp.begin(); iped!=temp.end();iped++) {
00423 ibin++;
00424
00425 if(nIteration_ <2){
00426 if(*iped == 1)
00427 (local_modmes.NoisyStrips)->Fill(ibin,3.);
00428 if(*iped == 2)
00429 (local_modmes.NoisyStrips)->Fill(ibin,4.);
00430 if(*iped == 0)
00431 (local_modmes.NoisyStrips)->Fill(ibin,0.);
00432 }else{
00433 (local_modmes.NoisyStrips)->Fill(ibin,static_cast<float>(*iped));
00434 (local_modmes.NoisyStripDistribution)->Fill(static_cast<float>(*iped));
00435 }
00436 }
00437 }
00438
00439
00440 }
00441 }
00442 if (firstEvent) firstEvent=false;
00443 }
00444
00445
00446
00447 void SiStripMonitorPedestals::endRun(edm::Run const& run, edm::EventSetup const& eSetup) {
00448 bool outputMEsInRootFile = conf_.getParameter<bool>("OutputMEsInRootFile");
00449 if (outputMEsInRootFile) {
00450 std::string outPutFileName = conf_.getParameter<std::string>("OutPutFileName");
00451
00452 dqmStore_->save(outPutFileName);
00453 }
00454 }
00455
00456
00457
00458 void SiStripMonitorPedestals::endJob(void){
00459 edm::LogInfo("SiStripMonitorPedestals") <<"SiStripMonitorPedestals::EndJob: "
00460 << " Finishing!! ";
00461 }
00462
00463
00464
00465 void SiStripMonitorPedestals::resetMEs(uint32_t idet){
00466 std::map<uint32_t, ModMEs >::iterator pos = PedMEs.find(idet);
00467 if (pos != PedMEs.end()) {
00468 ModMEs mod_me = pos->second;
00469
00470 if (runTypeFlag_ == RunMode1 || runTypeFlag_ == RunMode3 ) {
00471 mod_me.PedsPerStripDB->Reset();
00472 mod_me.CMSubNoisePerStripDB->Reset();
00473 mod_me.BadStripsDB->Reset();
00474 }
00475 if (runTypeFlag_ == RunMode2 || runTypeFlag_ == RunMode3 ) {
00476 mod_me.PedsPerStrip->Reset();
00477 mod_me.PedsDistribution->Reset();
00478 mod_me.PedsEvolution->Reset();
00479 mod_me.CMSubNoisePerStrip->Reset();
00480 mod_me.RawNoisePerStrip->Reset();
00481 mod_me.CMSubNoiseProfile->Reset();
00482 mod_me.RawNoiseProfile->Reset();
00483 mod_me.NoisyStrips->Reset();
00484 mod_me.CMDistribution->Reset();
00485 mod_me.CMSlopeDistribution->Reset();
00486 }
00487 }
00488 }
00489
00490
00491
00492 void SiStripMonitorPedestals::fillCondDBMEs(edm::EventSetup const& eSetup) {
00493
00494 edm::ESHandle<SiStripPedestals> pedestalHandle;
00495 edm::ESHandle<SiStripNoises> noiseHandle;
00496 edm::ESHandle<SiStripQuality> qualityHandle;
00497
00498 eSetup.get<SiStripPedestalsRcd>().get(pedestalHandle);
00499 eSetup.get<SiStripNoisesRcd>().get(noiseHandle);
00500 std::string quality_label = conf_.getParameter<std::string>("StripQualityLabel");
00501 eSetup.get<SiStripQualityRcd>().get(quality_label, qualityHandle);
00502
00503 for (std::map<uint32_t, ModMEs >::const_iterator i = PedMEs.begin() ; i!=PedMEs.end() ; i++) {
00504 uint32_t detid = i->first;
00505 ModMEs local_modmes = i->second;
00506 edm::LogInfo("SiStripMonitorPedestals") <<" SiStripMonitorPedestals::analyze: " <<
00507 " Get Ped/Noise/Bad Strips from CondDb for DetId " << detid;
00508 int nStrip = detcabling->nApvPairs(detid) * 256;
00509
00510 SiStripNoises::Range noiseRange = noiseHandle->getRange(detid);
00511 SiStripPedestals::Range pedRange = pedestalHandle->getRange(detid);
00512 SiStripQuality::Range qualityRange = qualityHandle->getRange(detid);
00513
00514 for(int istrip=0;istrip<nStrip;++istrip){
00515 try{
00516
00517 (local_modmes.PedsPerStripDB)->Fill(istrip+1,pedestalHandle->getPed(istrip,pedRange));
00518 }
00519 catch(cms::Exception& e){
00520 edm::LogError("SiStripMonitorPedestals") << "[SiStripMonitorPedestals::analyze] cms::Exception accessing SiStripPedestalsService_.getPedestal("<<detid<<","<<istrip<<") : " << " " << e.what() ;
00521 }
00522 try{
00523
00524 (local_modmes.CMSubNoisePerStripDB)->Fill(istrip+1,noiseHandle->getNoise(istrip,noiseRange));
00525
00526 }
00527 catch(cms::Exception& e){
00528 edm::LogError("SiStripMonitorPedestals") << "[SiStripMonitorPedestals::analyze] cms::Exception accessing SiStripNoiseService_.getNoise("<<detid<<","<<istrip<<") : " << " " << e.what() ;
00529 }
00530 try{
00531
00532 (local_modmes.BadStripsDB)->Fill(istrip+1,qualityHandle->IsStripBad(qualityRange,istrip)?1.:0.);
00533
00534
00535 }
00536 catch(cms::Exception& e){
00537 edm::LogError("SiStripMonitorPedestals") << "[SiStripMonitorPedestals::analyze] cms::Exception accessing SiStripNoiseService_.getDisable("<<detid<<","<<istrip<<") : " << " " << e.what() ;
00538 }
00539 }
00540 }
00541 }
00542 DEFINE_FWK_MODULE(SiStripMonitorPedestals);