Go to the documentation of this file.00001 #include "DQMOffline/CalibTracker/plugins/SiStripNoisesDQMService.h"
00002 #include "DQMServices/Core/interface/MonitorElement.h"
00003 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00004 #include "CalibTracker/SiStripCommon/interface/SiStripDetInfoFileReader.h"
00005 #include <string>
00006 #include <sstream>
00007 #include <cctype>
00008 #include <time.h>
00009 #include <boost/cstdint.hpp>
00010
00011 using namespace std;
00012
00013 SiStripNoisesDQMService::SiStripNoisesDQMService(const edm::ParameterSet& iConfig,const edm::ActivityRegistry& aReg):
00014
00015 SiStripBaseServiceFromDQM<SiStripNoises>::SiStripBaseServiceFromDQM(iConfig),
00016 iConfig_(iConfig),
00017 fp_(iConfig.getUntrackedParameter<edm::FileInPath>("file",edm::FileInPath("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat")))
00018 {
00019 obj_ = 0;
00020 edm::LogInfo("SiStripNoisesDQMService") << "[SiStripNoisesDQMService::SiStripNoisesDQMService]";
00021 }
00022
00023 SiStripNoisesDQMService::~SiStripNoisesDQMService()
00024 {
00025 edm::LogInfo("SiStripNoisesDQMService") << "[SiStripNoisesDQMService::~SiStripNoisesDQMService]";
00026 }
00027
00028 void SiStripNoisesDQMService::readNoises()
00029 {
00030 std::cout << "SiStripNoisesDQMService::readNoises" << std::endl;
00031
00032 openRequestedFile();
00033
00034 std::cout << "[readBadComponents]: opened requested file" << std::endl;
00035
00036 obj_= new SiStripNoises;
00037
00038 SiStripDetInfoFileReader reader(fp_.fullPath());
00039
00040
00041 dqmStore_->cd();
00042
00043 uint32_t stripsPerApv = 128;
00044
00045
00046
00047
00048
00049 std::vector<MonitorElement*> MEs = dqmStore_->getAllContents(iConfig_.getUntrackedParameter<std::string>("ME_DIR","DQMData"));
00050
00051 std::vector<MonitorElement*>::iterator newEnd = remove_if(MEs.begin(), MEs.end(), StringNotMatch("CMSubNoisePerStrip__det__"));
00052 MEs.erase(newEnd, MEs.end());
00053
00054
00055 const std::map<uint32_t, SiStripDetInfoFileReader::DetInfo> DetInfos = reader.getAllData();
00056 for(std::map<uint32_t, SiStripDetInfoFileReader::DetInfo>::const_iterator it = DetInfos.begin(); it != DetInfos.end(); ++it) {
00057
00058
00059 SiStripNoises::InputVector theSiStripVector;
00060
00061
00062
00063
00064
00065
00066
00067 MonitorElement * mE = 0;
00068 std::string MEname("CMSubNoisePerStrip__det__"+boost::lexical_cast<string>(it->first));
00069 for( std::vector<MonitorElement*>::const_iterator MEit = MEs.begin();
00070 MEit != MEs.end(); ++MEit ) {
00071 if( (*MEit)->getName() == MEname ) {
00072 mE = *MEit;
00073 break;
00074 }
00075 }
00076
00077
00078
00079
00080 if( mE != 0 ) {
00081 TH1F* histo = mE->getTH1F();
00082
00083 if( histo != 0 ) {
00084
00085
00086 uint32_t nBinsX = histo->GetXaxis()->GetNbins();
00087
00088 if( nBinsX != stripsPerApv*(it->second.nApvs) ) {
00089 std::cout << "ERROR: number of bin = " << nBinsX << " != number of strips = " << stripsPerApv*(it->second.nApvs) << std::endl;
00090 }
00091
00092
00093
00094
00095 for( uint32_t iBin = 1; iBin <= nBinsX; ++iBin ) {
00096
00097 obj_->setData( histo->GetBinContent(iBin), theSiStripVector );
00098 }
00099 }
00100 else {
00101 std::cout << "ERROR: histo = " << histo << std::endl;
00102 }
00103 }
00104 else {
00105 std::cout << "ERROR: ME = " << mE << std::endl;
00106 }
00107
00108 if( theSiStripVector.empty() ) {
00109 for(unsigned short j=0; j<128*it->second.nApvs; ++j){
00110 obj_->setData(50, theSiStripVector);
00111 }
00112 }
00113
00114 if ( ! obj_->put(it->first, theSiStripVector) )
00115 edm::LogError("SiStripNoisesFakeESSource::produce ")<<" detid already exists"<<std::endl;
00116 }
00117 dqmStore_->cd();
00118 }