File indexing completed on 2024-04-06 12:09:14
0001 #ifndef DQMOffline_Alignment_DiMuonMassBiasClient_h
0002 #define DQMOffline_Alignment_DiMuonMassBiasClient_h
0003
0004
0005
0006
0007
0008
0009
0010
0011 #include <string>
0012
0013
0014 #include "DQMServices/Core/interface/DQMEDHarvester.h"
0015 #include "DQMServices/Core/interface/DQMStore.h"
0016 #include "DataFormats/GeometryCommonDetAlgo/interface/Measurement1D.h"
0017 #include "FWCore/Framework/interface/ESHandle.h"
0018 #include "FWCore/Framework/interface/EventSetup.h"
0019 #include "FWCore/Framework/interface/LuminosityBlock.h"
0020 #include "FWCore/Framework/interface/MakerMacros.h"
0021 #include "FWCore/Framework/interface/Run.h"
0022 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0023
0024 namespace diMuonMassBias {
0025
0026 struct fitOutputs {
0027 public:
0028 fitOutputs(const Measurement1D& bias, const Measurement1D& width) : m_bias(bias), m_width(width) {}
0029
0030
0031 const Measurement1D getBias() { return m_bias; }
0032 const Measurement1D getWidth() { return m_width; }
0033 const bool isInvalid() {
0034 return (m_bias.value() == 0.f && m_bias.error() == 0.f && m_width.value() == 0.f && m_width.error() == 0.f);
0035 }
0036
0037 private:
0038 Measurement1D m_bias;
0039 Measurement1D m_width;
0040 };
0041
0042
0043 inline void fillArrayF(float* x, const edm::ParameterSet& cfg, const char* name) {
0044 auto v = cfg.getParameter<std::vector<double>>(name);
0045 assert(v.size() == 3);
0046 std::copy(std::begin(v), std::end(v), x);
0047 }
0048
0049 inline void fillArrayI(int* x, const edm::ParameterSet& cfg, const char* name) {
0050 auto v = cfg.getParameter<std::vector<int>>(name);
0051 assert(v.size() == 3);
0052 std::copy(std::begin(v), std::end(v), x);
0053 }
0054
0055 static constexpr int minimumHits = 10;
0056
0057 }
0058
0059 class DiMuonMassBiasClient : public DQMEDHarvester {
0060 public:
0061
0062 DiMuonMassBiasClient(const edm::ParameterSet& ps);
0063
0064
0065 ~DiMuonMassBiasClient() override;
0066
0067 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0068
0069 protected:
0070
0071 void beginJob(void) override;
0072
0073
0074 void beginRun(edm::Run const& run, edm::EventSetup const& eSetup) override;
0075
0076
0077 void dqmEndJob(DQMStore::IBooker& ibooker_, DQMStore::IGetter& igetter_) override;
0078
0079 private:
0080
0081 void bookMEs(DQMStore::IBooker& ibooker);
0082 void getMEsToHarvest(DQMStore::IGetter& igetter);
0083 diMuonMassBias::fitOutputs fitLineShape(TH1* hist, const bool& fitBackground = false) const;
0084 diMuonMassBias::fitOutputs fitBWTimesCB(TH1* hist) const;
0085 void fitAndFillProfile(std::pair<std::string, MonitorElement*> toHarvest, DQMStore::IBooker& iBooker);
0086 void fitAndFillHisto(std::pair<std::string, MonitorElement*> toHarvest, DQMStore::IBooker& iBooker);
0087
0088
0089 const std::string TopFolder_;
0090 const bool useTH1s_;
0091 const bool useBWtimesCB_;
0092 const bool fitBackground_;
0093 const bool useRooCBShape_;
0094 const bool useRooCMSShape_;
0095 const bool debugMode_;
0096
0097 float meanConfig_[3];
0098 float widthConfig_[3];
0099 float sigmaConfig_[3];
0100
0101
0102 std::vector<std::string> MEtoHarvest_;
0103
0104
0105 std::map<std::string, MonitorElement*> meanHistos_;
0106 std::map<std::string, MonitorElement*> widthHistos_;
0107
0108
0109 std::map<std::string, MonitorElement*> meanProfiles_;
0110 std::map<std::string, MonitorElement*> widthProfiles_;
0111
0112
0113 std::map<std::string, MonitorElement*> harvestTargets_;
0114 };
0115 #endif