File indexing completed on 2024-04-06 12:07:22
0001 #include "DQM/EcalPreshowerMonitorClient/interface/ESPedestalClient.h"
0002
0003 #include "FWCore/ParameterSet/interface/FileInPath.h"
0004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0005
0006 #include <fstream>
0007 #include <iostream>
0008 #include <memory>
0009 #include <string>
0010
0011 using namespace std;
0012
0013 ESPedestalClient::ESPedestalClient(const edm::ParameterSet &ps)
0014 : ESClient(ps),
0015 fitPedestal_(ps.getUntrackedParameter<bool>("fitPedestal")),
0016 fg_(new TF1("fg", "gaus")),
0017 senZ_(),
0018 senP_(),
0019 senX_(),
0020 senY_() {
0021 for (int i = 0; i < 2; i++)
0022 for (int j = 0; j < 2; j++)
0023 for (int k = 0; k < 40; k++)
0024 for (int m = 0; m < 40; m++) {
0025 hPed_[i][j][k][m] = nullptr;
0026 hTotN_[i][j][k][m] = nullptr;
0027 }
0028
0029 std::string lutPath(ps.getUntrackedParameter<edm::FileInPath>("LookupTable").fullPath());
0030
0031
0032 int nLines, iz, ip, ix, iy, fed, kchip, pace, bundle, fiber, optorx;
0033 ifstream file(lutPath);
0034
0035 if (file.is_open()) {
0036 file >> nLines;
0037
0038 for (int i = 0; i < nLines; ++i) {
0039 file >> iz >> ip >> ix >> iy >> fed >> kchip >> pace >> bundle >> fiber >> optorx;
0040
0041 senZ_.push_back(iz);
0042 senP_.push_back(ip);
0043 senX_.push_back(ix);
0044 senY_.push_back(iy);
0045 }
0046
0047 file.close();
0048 } else {
0049 cout << "ESPedestalClient : Look up table file can not be found in " << lutPath << endl;
0050 }
0051 }
0052
0053 ESPedestalClient::~ESPedestalClient() { delete fg_; }
0054
0055 void ESPedestalClient::endJobAnalyze(DQMStore::IGetter &_igetter) {
0056 if (debug_)
0057 cout << "ESPedestalClient: endJob" << endl;
0058
0059
0060 char hname[300];
0061 int iz = 0;
0062 if (fitPedestal_) {
0063 if (verbose_)
0064 cout << "ESPedestalClient: Fit Pedestal" << endl;
0065
0066 for (unsigned i = 0; i < senZ_.size(); ++i) {
0067 iz = (senZ_[i] == 1) ? 0 : 1;
0068
0069 for (int is = 0; is < 32; ++is) {
0070 string dirname = prefixME_ + "/ESPedestalTask/";
0071 sprintf(hname, "ADC Z %d P %d X %d Y %d Str %d", senZ_[i], senP_[i], senX_[i], senY_[i], is + 1);
0072 MonitorElement *meFit = _igetter.get(dirname + hname);
0073
0074 if (meFit == nullptr)
0075 continue;
0076 TH1F *rootHisto = meFit->getTH1F();
0077
0078 rootHisto->Fit(fg_, "Q", "", 500, 1800);
0079 rootHisto->Fit(fg_,
0080 "RQ",
0081 "",
0082 fg_->GetParameter(1) - 2. * fg_->GetParameter(2),
0083 fg_->GetParameter(1) + 2. * fg_->GetParameter(2));
0084 hPed_[iz][senP_[i] - 1][senX_[i] - 1][senY_[i] - 1]->setBinContent(is + 1, (int)(fg_->GetParameter(1) + 0.5));
0085 hTotN_[iz][senP_[i] - 1][senX_[i] - 1][senY_[i] - 1]->setBinContent(is + 1, fg_->GetParameter(2));
0086 }
0087 }
0088
0089 } else {
0090 if (verbose_)
0091 cout << "ESPedestalClient: Use Histogram Mean" << endl;
0092
0093 for (unsigned i = 0; i < senZ_.size(); ++i) {
0094 iz = (senZ_[i] == 1) ? 0 : 1;
0095
0096 for (int is = 0; is < 32; ++is) {
0097 string dirname = prefixME_ + "/ESPedestalTask/";
0098 sprintf(hname, "ADC Z %d P %d X %d Y %d Str %d", senZ_[i], senP_[i], senX_[i], senY_[i], is + 1);
0099 MonitorElement *meMean = _igetter.get(dirname + hname);
0100
0101 if (meMean == nullptr)
0102 continue;
0103 TH1F *rootHisto = meMean->getTH1F();
0104
0105 hPed_[iz][senP_[i] - 1][senX_[i] - 1][senY_[i] - 1]->setBinContent(is + 1, (int)(rootHisto->GetMean() + 0.5));
0106 hTotN_[iz][senP_[i] - 1][senX_[i] - 1][senY_[i] - 1]->setBinContent(is + 1, rootHisto->GetRMS());
0107 }
0108 }
0109 }
0110 }
0111
0112 void ESPedestalClient::book(DQMStore::IBooker &_ibooker) {
0113
0114 _ibooker.setCurrentFolder(prefixME_ + "/ESPedestalClient");
0115
0116 char hname[300];
0117 for (unsigned i = 0; i < senZ_.size(); ++i) {
0118 int iz = (senZ_[i] == 1) ? 0 : 1;
0119
0120 sprintf(hname, "Ped Z %d P %d X %d Y %d", senZ_[i], senP_[i], senX_[i], senY_[i]);
0121 hPed_[iz][senP_[i] - 1][senX_[i] - 1][senY_[i] - 1] = _ibooker.book1D(hname, hname, 32, 0, 32);
0122
0123 sprintf(hname, "Total Noise Z %d P %d X %d Y %d", senZ_[i], senP_[i], senX_[i], senY_[i]);
0124 hTotN_[iz][senP_[i] - 1][senX_[i] - 1][senY_[i] - 1] = _ibooker.book1D(hname, hname, 32, 0, 32);
0125 }
0126 }