Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:09:14

0001 #ifndef DQMOffline_Alignment_DiMuonMassBiasMonitor_H
0002 #define DQMOffline_Alignment_DiMuonMassBiasMonitor_H
0003 
0004 // -*- C++ -*-
0005 //
0006 // Package:    DiMuonMassBiasMonitor
0007 // Class:      DiMuonMassBiasMonitor
0008 //
0009 /**\class DiMuonMassBiasMonitor DiMuonMassBiasMonitor.cc
0010    DQM/TrackerMonitorTrack/src/DiMuonMassBiasMonitor.cc
0011    Monitoring DiMuon mass bias 
0012 */
0013 
0014 // system includes
0015 #include <string>
0016 
0017 // user includes
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   // kinematics
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   // position
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   // ct and pointing angle
0059   dqm::reco::MonitorElement* h_ct;
0060   dqm::reco::MonitorElement* h_pointing;
0061 
0062   // quality
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&,  // TString for the IBooker interface
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   // ----------member data ---------------------------
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_;  // Top-level folder name
0114   const std::string decayMotherName_;
0115   const double distanceScaleFactor_;
0116   edm::ParameterSet DiMuMassConfiguration_;
0117 
0118   // 2D histograms of bias vs variable
0119   DiLepPlotHelp::PlotsVsKinematics ZMassPlots = DiLepPlotHelp::PlotsVsKinematics(DiLepPlotHelp::MM);
0120   // Decay histograms
0121   DecayHists histosZmm;
0122 };
0123 #endif