File indexing completed on 2023-03-17 10:57:29
0001 #ifndef DQMOffline_Alignment_DiMuonMassBiasMonitor_H
0002 #define DQMOffline_Alignment_DiMuonMassBiasMonitor_H
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #include <string>
0016
0017
0018 #include "DQMOffline/Alignment/interface/DiLeptonPlotHelpers.h"
0019 #include "DQMServices/Core/interface/DQMEDAnalyzer.h"
0020 #include "DQMServices/Core/interface/DQMStore.h"
0021 #include "FWCore/Framework/interface/Event.h"
0022 #include "FWCore/Framework/interface/Frameworkfwd.h"
0023 #include "FWCore/Framework/interface/MakerMacros.h"
0024 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0025 #include "DataFormats/TrackReco/interface/Track.h"
0026 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0027 #include "DataFormats/VertexReco/interface/Vertex.h"
0028 #include "DataFormats/VertexReco/interface/VertexFwd.h"
0029 #include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h"
0030 #include "TrackingTools/Records/interface/TransientTrackRecord.h"
0031
0032 struct ComponentHists {
0033 dqm::reco::MonitorElement* h_pt;
0034 dqm::reco::MonitorElement* h_eta;
0035 dqm::reco::MonitorElement* h_phi;
0036
0037 dqm::reco::MonitorElement* h_dxy;
0038 dqm::reco::MonitorElement* h_exy;
0039 dqm::reco::MonitorElement* h_dz;
0040 dqm::reco::MonitorElement* h_ez;
0041
0042 dqm::reco::MonitorElement* h_chi2;
0043 };
0044
0045 struct DecayHists {
0046
0047 dqm::reco::MonitorElement* h_mass;
0048 dqm::reco::MonitorElement* h_pt;
0049 dqm::reco::MonitorElement* h_eta;
0050 dqm::reco::MonitorElement* h_phi;
0051
0052
0053 dqm::reco::MonitorElement* h_displ2D;
0054 dqm::reco::MonitorElement* h_displ3D;
0055 dqm::reco::MonitorElement* h_sign2D;
0056 dqm::reco::MonitorElement* h_sign3D;
0057
0058
0059 dqm::reco::MonitorElement* h_ct;
0060 dqm::reco::MonitorElement* h_pointing;
0061
0062
0063 dqm::reco::MonitorElement* h_vertNormChi2;
0064 dqm::reco::MonitorElement* h_vertProb;
0065
0066 std::vector<ComponentHists> decayComponents;
0067 };
0068
0069 class DiMuonMassBiasMonitor : public DQMEDAnalyzer {
0070 public:
0071 explicit DiMuonMassBiasMonitor(const edm::ParameterSet&);
0072 ~DiMuonMassBiasMonitor() override = default;
0073
0074 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0075
0076 void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override;
0077
0078 void bookDecayHists(DQMStore::IBooker&,
0079 DecayHists&,
0080 std::string const&,
0081 std::string const&,
0082 int,
0083 float,
0084 float,
0085 float distanceScaleFactor = 1.) const;
0086
0087 void bookDecayComponentHistograms(DQMStore::IBooker& ibook, DecayHists& histos) const;
0088
0089 void bookComponentHists(DQMStore::IBooker&,
0090 DecayHists&,
0091 TString const&,
0092 float distanceScaleFactor = 1.) const;
0093
0094 void analyze(const edm::Event&, const edm::EventSetup&) override;
0095
0096 reco::Vertex const* fillDecayHistograms(DecayHists const&,
0097 std::vector<const reco::Track*> const& tracks,
0098 const reco::VertexCollection* const& pvs,
0099 const edm::EventSetup&) const;
0100
0101 void fillComponentHistograms(ComponentHists const& histos,
0102 const reco::Track* const& component,
0103 reco::BeamSpot const* bs,
0104 reco::Vertex const* pv) const;
0105
0106 private:
0107
0108 const edm::ESGetToken<TransientTrackBuilder, TransientTrackRecord> ttbESToken_;
0109 const edm::EDGetTokenT<reco::TrackCollection> tracksToken_;
0110 const edm::EDGetTokenT<reco::VertexCollection> vertexToken_;
0111 const edm::EDGetTokenT<reco::BeamSpot> beamSpotToken_;
0112
0113 const std::string MEFolderName_;
0114 const std::string decayMotherName_;
0115 const double distanceScaleFactor_;
0116 edm::ParameterSet DiMuMassConfiguration_;
0117
0118
0119 DiLepPlotHelp::PlotsVsKinematics ZMassPlots = DiLepPlotHelp::PlotsVsKinematics(DiLepPlotHelp::MM);
0120
0121 DecayHists histosZmm;
0122 };
0123 #endif