File indexing completed on 2024-04-06 12:06:50
0001
0002
0003
0004
0005
0006
0007 #include "DQM/BeamMonitor/plugins/AlcaBeamMonitorClient.h"
0008 #include <numeric>
0009 #include "FWCore/Framework/interface/ESHandle.h"
0010 #include "FWCore/Framework/interface/EventSetup.h"
0011 #include "FWCore/Framework/interface/LuminosityBlock.h"
0012 #include "FWCore/Framework/interface/MakerMacros.h"
0013 #include "FWCore/Framework/interface/Run.h"
0014 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0015 #include "FWCore/ServiceRegistry/interface/Service.h"
0016
0017
0018 using namespace std;
0019 using namespace edm;
0020
0021
0022
0023 AlcaBeamMonitorClient::AlcaBeamMonitorClient(const ParameterSet& ps)
0024 : parameters_(ps),
0025 monitorName_(parameters_.getUntrackedParameter<string>("MonitorName", "YourSubsystemName")),
0026 numberOfValuesToSave_(0) {
0027 usesResource("DQMStore");
0028 dbe_ = Service<DQMStore>().operator->();
0029
0030 if (!monitorName_.empty())
0031 monitorName_ = monitorName_ + "/";
0032
0033 varNamesV_.push_back("x");
0034 varNamesV_.push_back("y");
0035 varNamesV_.push_back("z");
0036 varNamesV_.push_back("sigmaX");
0037 varNamesV_.push_back("sigmaY");
0038 varNamesV_.push_back("sigmaZ");
0039
0040 histoByCategoryNames_.insert(pair<string, string>("lumi", "Lumibased BeamSpotFit"));
0041 histoByCategoryNames_.insert(pair<string, string>("lumi", "Lumibased PrimaryVertex"));
0042 histoByCategoryNames_.insert(pair<string, string>("lumi", "Lumibased DataBase"));
0043 histoByCategoryNames_.insert(pair<string, string>("lumi", "Lumibased Scalers"));
0044 histoByCategoryNames_.insert(pair<string, string>("lumi", "Lumibased PrimaryVertex-DataBase fit"));
0045 histoByCategoryNames_.insert(pair<string, string>("lumi", "Lumibased PrimaryVertex-Scalers fit"));
0046 histoByCategoryNames_.insert(pair<string, string>("validation", "Lumibased Scalers-DataBase fit"));
0047 histoByCategoryNames_.insert(pair<string, string>("validation", "Lumibased PrimaryVertex-DataBase"));
0048 histoByCategoryNames_.insert(pair<string, string>("validation", "Lumibased PrimaryVertex-Scalers"));
0049
0050 for (vector<string>::iterator itV = varNamesV_.begin(); itV != varNamesV_.end(); itV++) {
0051 for (multimap<string, string>::iterator itM = histoByCategoryNames_.begin(); itM != histoByCategoryNames_.end();
0052 itM++) {
0053 histosMap_[*itV][itM->first][itM->second] = nullptr;
0054 positionsMap_[*itV][itM->first][itM->second] = 3 * numberOfValuesToSave_;
0055 ++numberOfValuesToSave_;
0056 }
0057 }
0058 }
0059
0060 AlcaBeamMonitorClient::~AlcaBeamMonitorClient() {}
0061
0062
0063 void AlcaBeamMonitorClient::beginJob() {}
0064
0065
0066 void AlcaBeamMonitorClient::beginRun(const edm::Run& r, const EventSetup& context) {}
0067
0068
0069
0070
0071 void AlcaBeamMonitorClient::analyze(const Event& iEvent, const EventSetup& iSetup) {}
0072
0073
0074 void AlcaBeamMonitorClient::endLuminosityBlock(const LuminosityBlock& iLumi, const EventSetup& iSetup) {
0075 MonitorElement* tmp = nullptr;
0076 tmp = dbe_->get(monitorName_ + "Service/hHistoLumiValues");
0077 if (!tmp) {
0078 return;
0079 }
0080 valuesMap_[iLumi.id().luminosityBlock()] = vector<double>();
0081 for (int i = 0; i < 3 * numberOfValuesToSave_; i++) {
0082 valuesMap_[iLumi.id().luminosityBlock()].push_back(tmp->getTProfile()->GetBinContent(i + 1));
0083 }
0084 }
0085
0086
0087 void AlcaBeamMonitorClient::endRun(const Run& iRun, const EventSetup& context) {
0088
0089 if (valuesMap_.empty()) {
0090 LogInfo("AlcaBeamMonitorClient") << "The histogram "
0091 << monitorName_ +
0092 "Service/hHistoLumiValues which contains all the values has not "
0093 "been found in any lumi!";
0094 return;
0095 }
0096 int lastLumi = (--valuesMap_.end())->first;
0097 int firstLumi = valuesMap_.begin()->first;
0098
0099
0100 dbe_->setCurrentFolder(monitorName_ + "Validation");
0101
0102 LogInfo("AlcaBeamMonitorClient") << "End of run " << iRun.id().run() << "(" << firstLumi << "-" << lastLumi << ")";
0103
0104 string name;
0105 string title;
0106
0107 for (HistosContainer::iterator itM = histosMap_.begin(); itM != histosMap_.end(); itM++) {
0108 for (map<string, map<string, MonitorElement*> >::iterator itMM = itM->second.begin(); itMM != itM->second.end();
0109 itMM++) {
0110 if (itMM->first != "run") {
0111 for (map<string, MonitorElement*>::iterator itMMM = itMM->second.begin(); itMMM != itMM->second.end();
0112 itMMM++) {
0113 name = string("h") + itM->first + itMMM->first;
0114 title = itM->first + "_{0} " + itMMM->first;
0115 if (itMM->first == "lumi") {
0116 dbe_->setCurrentFolder(monitorName_ + "Debug");
0117 itMMM->second = dbe_->book1D(name, title, lastLumi - firstLumi + 1, firstLumi - 0.5, lastLumi + 0.5);
0118 itMMM->second->setEfficiencyFlag();
0119 } else if (itMM->first == "validation" && itMMM->first == "Lumibased Scalers-DataBase fit") {
0120 dbe_->setCurrentFolder(monitorName_ + "Validation");
0121 itMMM->second = dbe_->book1D(name, title, lastLumi - firstLumi + 1, firstLumi - 0.5, lastLumi + 0.5);
0122 itMMM->second->setEfficiencyFlag();
0123 } else if (itMM->first == "validation" && itMMM->first != "Lumibased Scalers-DataBase fit" &&
0124 (itM->first == "x" || itM->first == "y" || itM->first == "z")) {
0125 dbe_->setCurrentFolder(monitorName_ + "Validation");
0126 itMMM->second = dbe_->book1D(name, title, lastLumi - firstLumi + 1, firstLumi - 0.5, lastLumi + 0.5);
0127 itMMM->second->setEfficiencyFlag();
0128 } else if (itMM->first == "validation" &&
0129 (itM->first == "sigmaX" || itM->first == "sigmaY" || itM->first == "sigmaZ")) {
0130 dbe_->setCurrentFolder(monitorName_ + "Validation");
0131 itMMM->second = nullptr;
0132 } else {
0133 LogInfo("AlcaBeamMonitorClient") << "Unrecognized category " << itMM->first;
0134
0135 }
0136 if (itMMM->second != nullptr) {
0137 if (itMMM->first.find('-') != string::npos) {
0138 itMMM->second->setAxisTitle(string("#Delta ") + itM->first + "_{0} (cm)", 2);
0139 } else {
0140 itMMM->second->setAxisTitle(itM->first + "_{0} (cm)", 2);
0141 }
0142 itMMM->second->setAxisTitle("Lumisection", 1);
0143 }
0144 }
0145 }
0146 }
0147 }
0148
0149 unsigned int bin = 0;
0150 for (HistosContainer::iterator itH = histosMap_.begin(); itH != histosMap_.end(); itH++) {
0151 for (map<string, map<string, MonitorElement*> >::iterator itHH = itH->second.begin(); itHH != itH->second.end();
0152 itHH++) {
0153 for (map<string, MonitorElement*>::iterator itHHH = itHH->second.begin(); itHHH != itHH->second.end(); itHHH++) {
0154 for (map<LuminosityBlockNumber_t, vector<double> >::iterator itVal = valuesMap_.begin();
0155 itVal != valuesMap_.end();
0156 itVal++) {
0157 if (itHHH->second != nullptr) {
0158
0159
0160 if (itVal->second[positionsMap_[itH->first][itHH->first][itHHH->first] + 2] == 1) {
0161 bin = itHHH->second->getTH1()->FindBin(itVal->first);
0162 itHHH->second->setBinContent(bin, itVal->second[positionsMap_[itH->first][itHH->first][itHHH->first]]);
0163 itHHH->second->setBinError(bin, itVal->second[positionsMap_[itH->first][itHH->first][itHHH->first] + 1]);
0164 }
0165 }
0166 }
0167 }
0168 }
0169 }
0170
0171
0172 const double bigNumber = 1000000.;
0173 for (HistosContainer::iterator itH = histosMap_.begin(); itH != histosMap_.end(); itH++) {
0174 for (map<string, map<string, MonitorElement*> >::iterator itHH = itH->second.begin(); itHH != itH->second.end();
0175 itHH++) {
0176 double min = bigNumber;
0177 double max = -bigNumber;
0178 double minDelta = bigNumber;
0179 double maxDelta = -bigNumber;
0180
0181
0182 if (itHH->first != "run") {
0183 for (map<string, MonitorElement*>::iterator itHHH = itHH->second.begin(); itHHH != itHH->second.end();
0184 itHHH++) {
0185 if (itHHH->second != nullptr) {
0186 for (int bin = 1; bin <= itHHH->second->getTH1()->GetNbinsX(); bin++) {
0187 if (itHHH->second->getTH1()->GetBinError(bin) != 0 || itHHH->second->getTH1()->GetBinContent(bin) != 0) {
0188 if (itHHH->first == "Lumibased BeamSpotFit" || itHHH->first == "Lumibased PrimaryVertex" ||
0189 itHHH->first == "Lumibased DataBase" || itHHH->first == "Lumibased Scalers") {
0190 if (min > itHHH->second->getTH1()->GetBinContent(bin)) {
0191 min = itHHH->second->getTH1()->GetBinContent(bin);
0192 }
0193 if (max < itHHH->second->getTH1()->GetBinContent(bin)) {
0194 max = itHHH->second->getTH1()->GetBinContent(bin);
0195 }
0196 } else if (itHHH->first == "Lumibased PrimaryVertex-DataBase fit" ||
0197 itHHH->first == "Lumibased PrimaryVertex-Scalers fit" ||
0198 itHHH->first == "Lumibased Scalers-DataBase fit" ||
0199 itHHH->first == "Lumibased PrimaryVertex-DataBase" ||
0200 itHHH->first == "Lumibased PrimaryVertex-Scalers") {
0201 if (minDelta > itHHH->second->getTH1()->GetBinContent(bin)) {
0202 minDelta = itHHH->second->getTH1()->GetBinContent(bin);
0203 }
0204 if (maxDelta < itHHH->second->getTH1()->GetBinContent(bin)) {
0205 maxDelta = itHHH->second->getTH1()->GetBinContent(bin);
0206 }
0207 } else {
0208 LogInfo("AlcaBeamMonitorClient") << "The histosMap_ have a histogram named " << itHHH->first
0209 << " that I can't recognize in this loop!";
0210
0211 }
0212 }
0213 }
0214 }
0215 }
0216 for (map<string, MonitorElement*>::iterator itHHH = itHH->second.begin(); itHHH != itHH->second.end();
0217 itHHH++) {
0218 if (itHHH->second != nullptr) {
0219 if (itHHH->first == "Lumibased BeamSpotFit" || itHHH->first == "Lumibased PrimaryVertex" ||
0220 itHHH->first == "Lumibased DataBase" || itHHH->first == "Lumibased Scalers") {
0221 if ((max == -bigNumber && min == bigNumber) || max - min == 0) {
0222 itHHH->second->getTH1()->SetMinimum(itHHH->second->getTH1()->GetMinimum() - 0.01);
0223 itHHH->second->getTH1()->SetMaximum(itHHH->second->getTH1()->GetMaximum() + 0.01);
0224 } else {
0225 itHHH->second->getTH1()->SetMinimum(min - 0.1 * (max - min));
0226 itHHH->second->getTH1()->SetMaximum(max + 0.1 * (max - min));
0227 }
0228 } else if (itHHH->first == "Lumibased PrimaryVertex-DataBase fit" ||
0229 itHHH->first == "Lumibased PrimaryVertex-Scalers fit" ||
0230 itHHH->first == "Lumibased Scalers-DataBase fit" ||
0231 itHHH->first == "Lumibased PrimaryVertex-DataBase" ||
0232 itHHH->first == "Lumibased PrimaryVertex-Scalers") {
0233 if ((maxDelta == -bigNumber && minDelta == bigNumber) || maxDelta - minDelta == 0) {
0234 itHHH->second->getTH1()->SetMinimum(itHHH->second->getTH1()->GetMinimum() - 0.01);
0235 itHHH->second->getTH1()->SetMaximum(itHHH->second->getTH1()->GetMaximum() + 0.01);
0236 } else {
0237 itHHH->second->getTH1()->SetMinimum(minDelta - 2 * (maxDelta - minDelta));
0238 itHHH->second->getTH1()->SetMaximum(maxDelta + 2 * (maxDelta - minDelta));
0239 }
0240 } else {
0241 LogInfo("AlcaBeamMonitorClient") << "The histosMap_ have a histogram named " << itHHH->first
0242 << " that I can't recognize in this loop!";
0243 }
0244 }
0245 }
0246 }
0247 }
0248 }
0249
0250 }
0251
0252 DEFINE_FWK_MODULE(AlcaBeamMonitorClient);