CMS 3D CMS Logo

SiStripPopConPedestalsDQM.cc
Go to the documentation of this file.
3 
11 public:
14 
17  // interface methods: implemented in template
18  void dqmEndJob(DQMStore::IBooker& booker, DQMStore::IGetter& getter) override;
19  SiStripPedestals* getObj() const override;
20 
21 private:
25 };
26 
29 
33  fp_{iConfig.getUntrackedParameter<edm::FileInPath>("file",
35  MEDir_{iConfig.getUntrackedParameter<std::string>("ME_DIR", "DQMData")} {
36  edm::LogInfo("SiStripPedestalsDQMService") << "[SiStripPedestalsDQMService::SiStripPedestalsDQMService]";
37 }
38 
40  edm::LogInfo("SiStripPedestalsDQMService") << "[SiStripPedestalsDQMService::~SiStripPedestalsDQMService]";
41 }
42 
44  std::cout << "SiStripPedestalsDQMService::readPedestals" << std::endl;
45 
47 
48  const auto detInfo = SiStripDetInfoFileReader::read(fp_.fullPath());
49 
50  // getter.cd(iConfig_.getUntrackedParameter<std::string>("ME_DIR"));
51  getter.cd();
52 
53  uint32_t stripsPerApv = 128;
54 
55  // Get the full list of monitoring elements
56  // const std::vector<MonitorElement*>& MEs = getter.getAllContents(iConfig_.getUntrackedParameter<std::string>("ME_DIR","DQMData"));
57 
58  // Take a copy of the vector
59  std::vector<MonitorElement*> MEs = getter.getAllContents(MEDir_);
60  // Remove all but the MEs we are using
61  MEs.erase(std::remove_if(MEs.begin(),
62  MEs.end(),
63  [](const MonitorElement* ME) -> bool {
64  return std::string::npos == ME->getName().find("PedsPerStrip__det__");
65  }),
66  MEs.end());
67 
68  // The histograms are one per DetId, loop on all the DetIds and extract the corresponding histogram
69  for (const auto& detInfo : detInfo.getAllData()) {
70  SiStripPedestals::InputVector theSiStripVector;
71 
72  // Take the path for each DetId and build the complete path + histogram name
73 
74  // MonitorElement * mE = getModuleHistogram(detInfo.first, "PedsPerStrip");
75  const MonitorElement* mE{nullptr};
76  std::string MEname("PedsPerStrip__det__" + std::to_string(detInfo.first));
77  for (const MonitorElement* ime : MEs) {
78  if (ime->getName() == MEname) {
79  mE = ime;
80  break;
81  }
82  }
83 
84  // find( MEs.begin(), MEs.end(), "PedsPerStrip__det__"+std::to_string(detInfo.first), findMEbyName() );
85  // MonitorElement * mE = *(find( MEs.begin(), MEs.end(), findMEbyName("PedsPerStrip__det__"+std::to_string(detInfo.first)) ));
86 
87  if (mE) {
88  TH1F* histo = mE->getTH1F();
89  if (histo) {
90  // Read the pedestals from the histograms
91  uint32_t nBinsX = histo->GetXaxis()->GetNbins();
92 
93  if (nBinsX != stripsPerApv * (detInfo.second.nApvs)) {
94  std::cout << "ERROR: number of bin = " << nBinsX
95  << " != number of strips = " << stripsPerApv * (detInfo.second.nApvs) << std::endl;
96  }
97 
98  // std::cout << "Bin 0 = " << histo->GetBinContent(0) << std::endl;
99  // TH1 bins start from 1, 0 is the underflow, nBinsX+1 the overflow.
100  for (uint32_t iBin = 1; iBin <= nBinsX; ++iBin) {
101  // encode the pedestal value and put it in the vector (push_back)
102  m_obj.setData(histo->GetBinContent(iBin), theSiStripVector);
103  }
104  } else {
105  std::cout << "ERROR: histo = " << histo << std::endl;
106  }
107  } else {
108  std::cout << "ERROR: ME = " << mE << std::endl;
109  }
110  // If the ME was absent fill the vector with 0
111  if (theSiStripVector.empty()) {
112  for (unsigned short j = 0; j < 128 * detInfo.second.nApvs; ++j) {
113  m_obj.setData(0, theSiStripVector);
114  }
115  }
116 
117  if (!m_obj.put(detInfo.first, theSiStripVector))
118  edm::LogError("SiStripPedestalsFakeESSource::produce ") << " detid already exists" << std::endl;
119  }
120  getter.cd();
121 }
122 
124 
SiStripPedestals * getObj() const override
std::string fullPath() const
Definition: FileInPath.cc:161
std::string to_string(const V &value)
Definition: OMSAccess.h:77
void dqmEndJob(DQMStore::IBooker &booker, DQMStore::IGetter &getter) override
SiStripPopConPedestalsHandlerFromDQM(const edm::ParameterSet &iConfig, edm::ConsumesCollector &&)
T getUntrackedParameter(std::string const &, T const &) const
Definition: ME.h:11
std::vector< uint16_t > InputVector
virtual std::vector< dqm::harvesting::MonitorElement * > getAllContents(std::string const &path) const
Definition: DQMStore.cc:641
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
SiStripDetInfo read(std::string filePath)
Log< level::Info, false > LogInfo
bool put(const uint32_t &detID, InputVector &input)
void setData(float ped, InputVector &vped)
dqm::harvesting::MonitorElement ME
static constexpr char const *const kDefaultFile