Go to the documentation of this file.00001 #include "DQMOffline/CalibTracker/plugins/SiStripPedestalsDQMService.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 SiStripPedestalsDQMService::SiStripPedestalsDQMService(const edm::ParameterSet& iConfig,const edm::ActivityRegistry& aReg):
00014
00015 SiStripBaseServiceFromDQM<SiStripPedestals>::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("SiStripPedestalsDQMService") << "[SiStripPedestalsDQMService::SiStripPedestalsDQMService]";
00021 }
00022
00023 SiStripPedestalsDQMService::~SiStripPedestalsDQMService()
00024 {
00025 edm::LogInfo("SiStripPedestalsDQMService") << "[SiStripPedestalsDQMService::~SiStripPedestalsDQMService]";
00026 }
00027
00028 void SiStripPedestalsDQMService::readPedestals()
00029 {
00030 std::cout << "SiStripPedestalsDQMService::readPedestals" << std::endl;
00031
00032 openRequestedFile();
00033
00034 std::cout << "[readBadComponents]: opened requested file" << std::endl;
00035
00036 obj_= new SiStripPedestals;
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("PedsPerStrip__det__"));
00052 MEs.erase(newEnd, MEs.end());
00053
00054
00055
00056 const std::map<uint32_t, SiStripDetInfoFileReader::DetInfo> DetInfos = reader.getAllData();
00057 for(std::map<uint32_t, SiStripDetInfoFileReader::DetInfo>::const_iterator it = DetInfos.begin(); it != DetInfos.end(); ++it) {
00058
00059
00060 SiStripPedestals::InputVector theSiStripVector;
00061
00062
00063
00064
00065
00066
00067
00068 MonitorElement * mE = 0;
00069 std::string MEname("PedsPerStrip__det__"+boost::lexical_cast<string>(it->first));
00070 for( std::vector<MonitorElement*>::const_iterator MEit = MEs.begin();
00071 MEit != MEs.end(); ++MEit ) {
00072 if( (*MEit)->getName() == MEname ) {
00073 mE = *MEit;
00074 break;
00075 }
00076 }
00077
00078
00079
00080
00081 if( mE != 0 ) {
00082 TH1F* histo = mE->getTH1F();
00083
00084 if( histo != 0 ) {
00085
00086
00087 uint32_t nBinsX = histo->GetXaxis()->GetNbins();
00088
00089 if( nBinsX != stripsPerApv*(it->second.nApvs) ) {
00090 std::cout << "ERROR: number of bin = " << nBinsX << " != number of strips = " << stripsPerApv*(it->second.nApvs) << std::endl;
00091 }
00092
00093
00094
00095
00096 for( uint32_t iBin = 1; iBin <= nBinsX; ++iBin ) {
00097
00098 obj_->setData( histo->GetBinContent(iBin), theSiStripVector );
00099 }
00100 }
00101 else {
00102 std::cout << "ERROR: histo = " << histo << std::endl;
00103 }
00104 }
00105 else {
00106 std::cout << "ERROR: ME = " << mE << std::endl;
00107 }
00108
00109 if( theSiStripVector.empty() ) {
00110 for(unsigned short j=0; j<128*it->second.nApvs; ++j){
00111 obj_->setData(0, theSiStripVector);
00112 }
00113 }
00114
00115 if ( ! obj_->put(it->first, theSiStripVector) )
00116 edm::LogError("SiStripPedestalsFakeESSource::produce ")<<" detid already exists"<<std::endl;
00117 }
00118 dqmStore_->cd();
00119 }