CMS 3D CMS Logo

List of all members | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes
CentralitypADQM Class Reference

#include <CentralitypADQM.h>

Inheritance diagram for CentralitypADQM:
DQMEDAnalyzer edm::stream::EDProducer< edm::GlobalCache< DQMEDAnalyzerGlobalCache >, edm::EndRunProducer, edm::EndLuminosityBlockProducer, edm::Accumulator >

Public Member Functions

 CentralitypADQM (const edm::ParameterSet &ps)
 
 ~CentralitypADQM () override
 
- Public Member Functions inherited from DQMEDAnalyzer
void accumulate (edm::Event const &event, edm::EventSetup const &setup) final
 
void beginLuminosityBlock (edm::LuminosityBlock const &lumi, edm::EventSetup const &setup) final
 
void beginRun (edm::Run const &run, edm::EventSetup const &setup) final
 
void beginStream (edm::StreamID id) final
 
virtual void dqmBeginRun (edm::Run const &, edm::EventSetup const &)
 
 DQMEDAnalyzer ()
 
void endLuminosityBlock (edm::LuminosityBlock const &lumi, edm::EventSetup const &setup) final
 
void endRun (edm::Run const &run, edm::EventSetup const &setup) final
 
virtual bool getCanSaveByLumi ()
 
- Public Member Functions inherited from edm::stream::EDProducer< edm::GlobalCache< DQMEDAnalyzerGlobalCache >, edm::EndRunProducer, edm::EndLuminosityBlockProducer, edm::Accumulator >
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Protected Member Functions

void analyze (edm::Event const &e, edm::EventSetup const &eSetup) override
 
- Protected Member Functions inherited from DQMEDAnalyzer
uint64_t meId () const
 

Private Member Functions

void bookHistograms (DQMStore::IBooker &bei, edm::Run const &, edm::EventSetup const &) override
 

Private Attributes

edm::Handle< reco::Centralitycentrality_
 
edm::Handle< int > centralityBin_
 
edm::InputTag centralityBinTag_
 
edm::EDGetTokenT< int > centralityBinToken
 
edm::InputTag centralityTag_
 
edm::EDGetTokenT< reco::CentralitycentralityToken
 
edm::InputTag eventplaneTag_
 
edm::EDGetTokenT< reco::EvtPlaneCollectioneventplaneToken
 
MonitorElementh_cent_bin
 
MonitorElementh_hiEB
 
MonitorElementh_hiEE
 
MonitorElementh_hiEEminus
 
MonitorElementh_hiEEplus
 
MonitorElementh_hiET
 
MonitorElementh_hiHF
 
MonitorElementh_hiHFhit
 
MonitorElementh_hiHFhitMinus
 
MonitorElementh_hiHFhitPlus
 
MonitorElementh_hiHFminus
 
MonitorElementh_hiHFminusEta4
 
MonitorElementh_hiHFplus
 
MonitorElementh_hiHFplusEta4
 
MonitorElementh_hiNpix
 
MonitorElementh_hiNpixelTracks
 
MonitorElementh_hiNtracks
 
MonitorElementh_hiNtracksEtaCut
 
MonitorElementh_hiNtracksEtaPtCut
 
MonitorElementh_hiNtracksPtCut
 
MonitorElementh_hiPF
 
MonitorElementh_hiPFminus
 
MonitorElementh_hiPFplus
 
MonitorElementh_hiZDC
 
MonitorElementh_hiZDCminus
 
MonitorElementh_hiZDCplus
 
MonitorElementh_vertex_x
 
MonitorElementh_vertex_y
 
MonitorElementh_vertex_z
 
edm::Handle< std::vector< reco::Vertex > > vertex_
 
edm::InputTag vertexTag_
 
edm::EDGetTokenT< std::vector< reco::Vertex > > vertexToken
 

Additional Inherited Members

- Public Types inherited from DQMEDAnalyzer
typedef dqm::reco::DQMStore DQMStore
 
typedef dqm::reco::MonitorElement MonitorElement
 
- Public Types inherited from edm::stream::EDProducer< edm::GlobalCache< DQMEDAnalyzerGlobalCache >, edm::EndRunProducer, edm::EndLuminosityBlockProducer, edm::Accumulator >
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 
- Static Public Member Functions inherited from DQMEDAnalyzer
static void globalEndJob (DQMEDAnalyzerGlobalCache const *)
 
static void globalEndLuminosityBlockProduce (edm::LuminosityBlock &lumi, edm::EventSetup const &setup, LuminosityBlockContext const *context)
 
static void globalEndRunProduce (edm::Run &run, edm::EventSetup const &setup, RunContext const *context)
 
static std::unique_ptr< DQMEDAnalyzerGlobalCacheinitializeGlobalCache (edm::ParameterSet const &)
 
- Protected Attributes inherited from DQMEDAnalyzer
edm::EDPutTokenT< DQMTokenlumiToken_
 
edm::EDPutTokenT< DQMTokenrunToken_
 
unsigned int streamId_
 

Detailed Description

Definition at line 20 of file CentralitypADQM.h.

Constructor & Destructor Documentation

◆ CentralitypADQM()

CentralitypADQM::CentralitypADQM ( const edm::ParameterSet ps)
explicit

Definition at line 27 of file CentralitypADQM.cc.

References edm::ParameterSet::getParameter().

27  {
28  edm::LogInfo("CentralitypADQM") << " Starting CentralitypADQM "
29  << "\n";
30 
31  centralityTag_ = ps.getParameter<InputTag>("centralitycollection");
32  centralityToken = consumes<reco::Centrality>(centralityTag_);
33 
34  vertexTag_ = ps.getParameter<InputTag>("vertexcollection");
35  vertexToken = consumes<std::vector<reco::Vertex> >(vertexTag_);
36  // just to initialize
37 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
edm::InputTag centralityTag_
edm::InputTag vertexTag_
edm::EDGetTokenT< reco::Centrality > centralityToken
Log< level::Info, false > LogInfo
edm::EDGetTokenT< std::vector< reco::Vertex > > vertexToken

◆ ~CentralitypADQM()

CentralitypADQM::~CentralitypADQM ( )
override

Definition at line 42 of file CentralitypADQM.cc.

42  {
43  edm::LogInfo("CentralitypADQM") << " Deleting CentralitypADQM "
44  << "\n";
45 }
Log< level::Info, false > LogInfo

Member Function Documentation

◆ analyze()

void CentralitypADQM::analyze ( edm::Event const &  e,
edm::EventSetup const &  eSetup 
)
overrideprotectedvirtual

Reimplemented from DQMEDAnalyzer.

Definition at line 91 of file CentralitypADQM.cc.

References reco::Centrality::EtEBSum(), reco::Centrality::EtEESum(), reco::Centrality::EtEESumMinus(), reco::Centrality::EtEESumPlus(), reco::Centrality::EtHFhitSum(), reco::Centrality::EtHFhitSumMinus(), reco::Centrality::EtHFhitSumPlus(), reco::Centrality::EtHFtowerSum(), reco::Centrality::EtHFtowerSumMinus(), reco::Centrality::EtHFtowerSumPlus(), reco::Centrality::EtHFtruncatedMinus(), reco::Centrality::EtHFtruncatedPlus(), reco::Centrality::EtMidRapiditySum(), reco::Centrality::EtPFhfSum(), reco::Centrality::EtPFhfSumMinus(), reco::Centrality::EtPFhfSumPlus(), iEvent, edm::HandleBase::isValid(), reco::Centrality::multiplicityPixel(), reco::Centrality::Ntracks(), reco::Centrality::NtracksEtaCut(), reco::Centrality::NtracksEtaPtCut(), reco::Centrality::NtracksPtCut(), bphysicsOniaDQM_cfi::vertex, reco::Centrality::zdcSum(), reco::Centrality::zdcSumMinus(), and reco::Centrality::zdcSumPlus().

91  {
92  using namespace edm;
94  iEvent.getByToken(centralityToken, cent); //_centralitytag comes from the cfg
95 
96  if (cent.isValid()) {
98  h_hiNtracks->Fill(cent->Ntracks());
99 
103 
104  h_hiHF->Fill(cent->EtHFtowerSum());
105  h_hiHFplus->Fill(cent->EtHFtowerSumPlus());
109 
110  h_hiHFhit->Fill(cent->EtHFhitSum());
113 
114  h_hiZDC->Fill(cent->zdcSum());
115  h_hiZDCplus->Fill(cent->zdcSumPlus());
116  h_hiZDCminus->Fill(cent->zdcSumMinus());
117 
118  h_hiEEplus->Fill(cent->EtEESumPlus());
119  h_hiEEminus->Fill(cent->EtEESumMinus());
120  h_hiEE->Fill(cent->EtEESum());
121  h_hiEB->Fill(cent->EtEBSum());
122  h_hiET->Fill(cent->EtMidRapiditySum());
123 
124  h_hiPF->Fill(cent->EtPFhfSum());
125  h_hiPFplus->Fill(cent->EtPFhfSumPlus());
126  h_hiPFminus->Fill(cent->EtPFhfSumMinus());
127 
129  iEvent.getByToken(vertexToken, vertex);
130  h_vertex_x->Fill(vertex->begin()->x());
131  h_vertex_y->Fill(vertex->begin()->y());
132  h_vertex_z->Fill(vertex->begin()->z());
133  }
134 }
MonitorElement * h_hiNtracksEtaCut
MonitorElement * h_hiHF
double zdcSum() const
Definition: Centrality.h:54
MonitorElement * h_hiNtracks
double EtHFtruncatedPlus() const
Definition: Centrality.h:31
double NtracksEtaPtCut() const
Definition: Centrality.h:49
double NtracksEtaCut() const
Definition: Centrality.h:48
double EtHFtowerSum() const
Definition: Centrality.h:24
MonitorElement * h_hiEB
MonitorElement * h_hiPF
MonitorElement * h_hiZDC
MonitorElement * h_hiHFhitMinus
MonitorElement * h_hiHFplusEta4
MonitorElement * h_vertex_y
MonitorElement * h_hiHFhit
double zdcSumMinus() const
Definition: Centrality.h:56
MonitorElement * h_hiEE
MonitorElement * h_hiEEminus
MonitorElement * h_hiNpix
double EtPFhfSumMinus() const
Definition: Centrality.h:60
MonitorElement * h_hiHFminusEta4
double EtHFhitSumMinus() const
Definition: Centrality.h:23
MonitorElement * h_hiEEplus
double multiplicityPixel() const
Definition: Centrality.h:43
double EtPFhfSum() const
Definition: Centrality.h:58
void Fill(long long x)
MonitorElement * h_hiPFminus
int iEvent
Definition: GenABIO.cc:224
double Ntracks() const
Definition: Centrality.h:46
MonitorElement * h_hiNtracksPtCut
MonitorElement * h_hiHFhitPlus
double EtPFhfSumPlus() const
Definition: Centrality.h:59
double EtEESumMinus() const
Definition: Centrality.h:35
double EtHFhitSumPlus() const
Definition: Centrality.h:22
double NtracksPtCut() const
Definition: Centrality.h:47
edm::EDGetTokenT< reco::Centrality > centralityToken
double EtHFtowerSumMinus() const
Definition: Centrality.h:26
double EtEESum() const
Definition: Centrality.h:33
double EtEBSum() const
Definition: Centrality.h:39
double EtHFhitSum() const
Definition: Centrality.h:21
MonitorElement * h_hiZDCminus
MonitorElement * h_hiET
MonitorElement * h_hiHFminus
double EtMidRapiditySum() const
Definition: Centrality.h:57
bool isValid() const
Definition: HandleBase.h:70
double EtEESumPlus() const
Definition: Centrality.h:34
MonitorElement * h_hiPFplus
HLT enums.
MonitorElement * h_hiNtracksEtaPtCut
MonitorElement * h_hiHFplus
MonitorElement * h_vertex_x
double EtHFtowerSumPlus() const
Definition: Centrality.h:25
MonitorElement * h_vertex_z
MonitorElement * h_hiZDCplus
edm::EDGetTokenT< std::vector< reco::Vertex > > vertexToken
double zdcSumPlus() const
Definition: Centrality.h:55
double EtHFtruncatedMinus() const
Definition: Centrality.h:32

◆ bookHistograms()

void CentralitypADQM::bookHistograms ( DQMStore::IBooker bei,
edm::Run const &  ,
edm::EventSetup const &   
)
overrideprivatevirtual

Implements DQMEDAnalyzer.

Definition at line 50 of file CentralitypADQM.cc.

References dqm::implementation::IBooker::book1D(), and dqm::implementation::NavigatorBase::setCurrentFolder().

50  {
51  // void CentralitypADQM::bookHistograms(DQMStore* bei){
52 
53  bei.setCurrentFolder("Physics/CentralitypA/");
54 
55  h_hiNpix = bei.book1D("h_hiNpix", "h_hiNpix", 750, 0, 75000);
56  // h_hiNpixelTracks = bei.book1D("h_hiNpixelTracks", "hiNpixelTracks", 500, 0, 5000);
57  h_hiNtracks = bei.book1D("h_hiNtracks", "h_hiNtracks", 500, 0, 5000);
58  h_hiNtracksPtCut = bei.book1D("h_hiNtracksPtCut", "h_hiNtracksPtCut", 500, 0, 5000);
59  h_hiNtracksEtaCut = bei.book1D("h_hiNtracksEtaCut", "h_hiNtracksEtaCut", 500, 0, 5000);
60  h_hiNtracksEtaPtCut = bei.book1D("h_hiNtracksEtaPtCut", "h_hiNtracksEtaPtCut", 500, 0, 5000);
61 
62  h_hiHF = bei.book1D("h_hiHF", "h_hiHF", 900, 0, 9000);
63  h_hiHFplus = bei.book1D("h_hiHFplus", "h_hiHFplus", 900, 0, 9000);
64  h_hiHFminus = bei.book1D("h_hiHFminus", "h_hiHFminus", 900, 0, 9000);
65  h_hiHFplusEta4 = bei.book1D("h_hiHFplusEta4", "h_hiHFplusEta4", 900, 0, 9000);
66  h_hiHFminusEta4 = bei.book1D("h_hiHFminusEta4", "h_hiHFminusEta4", 900, 0, 9000);
67 
68  h_hiHFhit = bei.book1D("h_hiHFhit", "h_hiHFhit", 3000, 0, 300000);
69  h_hiHFhitPlus = bei.book1D("h_hiHFhitPlus", "h_hiHFhitPlus", 2000, 0, 200000);
70  h_hiHFhitMinus = bei.book1D("h_hiHFhitMinus", "h_hiHFhitMinus", 2000, 0, 200000);
71 
72  h_hiEB = bei.book1D("h_hiEB", "h_hiEB", 600, 0, 6000);
73  h_hiET = bei.book1D("h_hiET", "h_hiET", 600, 0, 6000);
74  h_hiEE = bei.book1D("h_hiEE", "h_hiEE", 600, 0, 6000);
75  h_hiEEplus = bei.book1D("h_hiEEplus", "h_hiEEplus", 600, 0, 6000);
76  h_hiEEminus = bei.book1D("h_hiEEminus", "h_hiEEminus", 600, 0, 6000);
77  h_hiZDC = bei.book1D("h_hiZDC", "h_hiZDC", 600, 0, 6000);
78  h_hiZDCplus = bei.book1D("h_hiZDCplus", "h_hiZDCplus", 600, 0, 6000);
79  h_hiZDCminus = bei.book1D("h_hiZDCminus", "h_hiZDCminus", 600, 0, 6000);
80  h_hiPF = bei.book1D("h_hiPF", "h_hiPF", 900, 0, 9000);
81  h_hiPFplus = bei.book1D("h_hiPFplus", "h_hiPFplus", 900, 0, 9000);
82  h_hiPFminus = bei.book1D("h_hiPFminus", "h_hiPFminus", 900, 0, 9000);
83 
84  h_vertex_x = bei.book1D("h_vertex_x", "h_vertex_x", 400, -4, 4);
85  h_vertex_y = bei.book1D("h_vertex_y", "h_vertex_y", 400, -4, 4);
86  h_vertex_z = bei.book1D("h_vertex_z", "h_vertex_z", 400, -40, 40);
87 }
MonitorElement * h_hiNtracksEtaCut
MonitorElement * h_hiHF
MonitorElement * h_hiNtracks
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
MonitorElement * h_hiEB
MonitorElement * h_hiPF
MonitorElement * h_hiZDC
MonitorElement * h_hiHFhitMinus
MonitorElement * h_hiHFplusEta4
MonitorElement * h_vertex_y
MonitorElement * h_hiHFhit
MonitorElement * h_hiEE
MonitorElement * h_hiEEminus
MonitorElement * h_hiNpix
MonitorElement * h_hiHFminusEta4
MonitorElement * h_hiEEplus
MonitorElement * h_hiPFminus
MonitorElement * h_hiNtracksPtCut
MonitorElement * h_hiHFhitPlus
MonitorElement * h_hiZDCminus
MonitorElement * h_hiET
MonitorElement * h_hiHFminus
MonitorElement * h_hiPFplus
MonitorElement * h_hiNtracksEtaPtCut
MonitorElement * h_hiHFplus
MonitorElement * h_vertex_x
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
MonitorElement * h_vertex_z
MonitorElement * h_hiZDCplus

Member Data Documentation

◆ centrality_

edm::Handle<reco::Centrality> CentralitypADQM::centrality_
private

Definition at line 36 of file CentralitypADQM.h.

◆ centralityBin_

edm::Handle<int> CentralitypADQM::centralityBin_
private

Definition at line 47 of file CentralitypADQM.h.

◆ centralityBinTag_

edm::InputTag CentralitypADQM::centralityBinTag_
private

Definition at line 45 of file CentralitypADQM.h.

◆ centralityBinToken

edm::EDGetTokenT<int> CentralitypADQM::centralityBinToken
private

Definition at line 46 of file CentralitypADQM.h.

◆ centralityTag_

edm::InputTag CentralitypADQM::centralityTag_
private

Definition at line 34 of file CentralitypADQM.h.

◆ centralityToken

edm::EDGetTokenT<reco::Centrality> CentralitypADQM::centralityToken
private

Definition at line 35 of file CentralitypADQM.h.

◆ eventplaneTag_

edm::InputTag CentralitypADQM::eventplaneTag_
private

Definition at line 42 of file CentralitypADQM.h.

◆ eventplaneToken

edm::EDGetTokenT<reco::EvtPlaneCollection> CentralitypADQM::eventplaneToken
private

Definition at line 43 of file CentralitypADQM.h.

◆ h_cent_bin

MonitorElement* CentralitypADQM::h_cent_bin
private

Definition at line 84 of file CentralitypADQM.h.

◆ h_hiEB

MonitorElement* CentralitypADQM::h_hiEB
private

Definition at line 68 of file CentralitypADQM.h.

◆ h_hiEE

MonitorElement* CentralitypADQM::h_hiEE
private

Definition at line 70 of file CentralitypADQM.h.

◆ h_hiEEminus

MonitorElement* CentralitypADQM::h_hiEEminus
private

Definition at line 72 of file CentralitypADQM.h.

◆ h_hiEEplus

MonitorElement* CentralitypADQM::h_hiEEplus
private

Definition at line 71 of file CentralitypADQM.h.

◆ h_hiET

MonitorElement* CentralitypADQM::h_hiET
private

Definition at line 69 of file CentralitypADQM.h.

◆ h_hiHF

MonitorElement* CentralitypADQM::h_hiHF
private

Definition at line 60 of file CentralitypADQM.h.

◆ h_hiHFhit

MonitorElement* CentralitypADQM::h_hiHFhit
private

Definition at line 65 of file CentralitypADQM.h.

◆ h_hiHFhitMinus

MonitorElement* CentralitypADQM::h_hiHFhitMinus
private

Definition at line 67 of file CentralitypADQM.h.

◆ h_hiHFhitPlus

MonitorElement* CentralitypADQM::h_hiHFhitPlus
private

Definition at line 66 of file CentralitypADQM.h.

◆ h_hiHFminus

MonitorElement* CentralitypADQM::h_hiHFminus
private

Definition at line 62 of file CentralitypADQM.h.

◆ h_hiHFminusEta4

MonitorElement* CentralitypADQM::h_hiHFminusEta4
private

Definition at line 64 of file CentralitypADQM.h.

◆ h_hiHFplus

MonitorElement* CentralitypADQM::h_hiHFplus
private

Definition at line 61 of file CentralitypADQM.h.

◆ h_hiHFplusEta4

MonitorElement* CentralitypADQM::h_hiHFplusEta4
private

Definition at line 63 of file CentralitypADQM.h.

◆ h_hiNpix

MonitorElement* CentralitypADQM::h_hiNpix
private

Definition at line 54 of file CentralitypADQM.h.

◆ h_hiNpixelTracks

MonitorElement* CentralitypADQM::h_hiNpixelTracks
private

Definition at line 55 of file CentralitypADQM.h.

◆ h_hiNtracks

MonitorElement* CentralitypADQM::h_hiNtracks
private

Definition at line 56 of file CentralitypADQM.h.

◆ h_hiNtracksEtaCut

MonitorElement* CentralitypADQM::h_hiNtracksEtaCut
private

Definition at line 58 of file CentralitypADQM.h.

◆ h_hiNtracksEtaPtCut

MonitorElement* CentralitypADQM::h_hiNtracksEtaPtCut
private

Definition at line 59 of file CentralitypADQM.h.

◆ h_hiNtracksPtCut

MonitorElement* CentralitypADQM::h_hiNtracksPtCut
private

Definition at line 57 of file CentralitypADQM.h.

◆ h_hiPF

MonitorElement* CentralitypADQM::h_hiPF
private

Definition at line 76 of file CentralitypADQM.h.

◆ h_hiPFminus

MonitorElement* CentralitypADQM::h_hiPFminus
private

Definition at line 78 of file CentralitypADQM.h.

◆ h_hiPFplus

MonitorElement* CentralitypADQM::h_hiPFplus
private

Definition at line 77 of file CentralitypADQM.h.

◆ h_hiZDC

MonitorElement* CentralitypADQM::h_hiZDC
private

Definition at line 73 of file CentralitypADQM.h.

◆ h_hiZDCminus

MonitorElement* CentralitypADQM::h_hiZDCminus
private

Definition at line 75 of file CentralitypADQM.h.

◆ h_hiZDCplus

MonitorElement* CentralitypADQM::h_hiZDCplus
private

Definition at line 74 of file CentralitypADQM.h.

◆ h_vertex_x

MonitorElement* CentralitypADQM::h_vertex_x
private

Definition at line 80 of file CentralitypADQM.h.

◆ h_vertex_y

MonitorElement* CentralitypADQM::h_vertex_y
private

Definition at line 81 of file CentralitypADQM.h.

◆ h_vertex_z

MonitorElement* CentralitypADQM::h_vertex_z
private

Definition at line 82 of file CentralitypADQM.h.

◆ vertex_

edm::Handle<std::vector<reco::Vertex> > CentralitypADQM::vertex_
private

Definition at line 40 of file CentralitypADQM.h.

◆ vertexTag_

edm::InputTag CentralitypADQM::vertexTag_
private

Definition at line 38 of file CentralitypADQM.h.

◆ vertexToken

edm::EDGetTokenT<std::vector<reco::Vertex> > CentralitypADQM::vertexToken
private

Definition at line 39 of file CentralitypADQM.h.