CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes
PatZToMuMuAnalyzer Class Reference

Module to analyze the performance of muon reconstruction on the example of Z->mumu events. More...

#include "PhysicsTools/PatExamples/plugins/PatZToMuMuAnalyzer.h"

Inheritance diagram for PatZToMuMuAnalyzer:
edm::EDAnalyzer edm::EDConsumerBase

Public Types

typedef math::XYZTLorentzVector LorentzVector
 
typedef math::XYZVector Vector
 typedef's to simplify get functions More...
 
- Public Types inherited from edm::EDAnalyzer
typedef EDAnalyzer ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 

Public Member Functions

 PatZToMuMuAnalyzer (const edm::ParameterSet &cfg)
 default constructor More...
 
 ~PatZToMuMuAnalyzer () override
 default destructor More...
 
- Public Member Functions inherited from edm::EDAnalyzer
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzer ()
 
SerialTaskQueueglobalLuminosityBlocksQueue ()
 
SerialTaskQueueglobalRunsQueue ()
 
ModuleDescription const & moduleDescription () const
 
std::string workerType () const
 
 ~EDAnalyzer () override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
std::vector< ESProxyIndex > const & esGetTokenIndicesVector (edm::Transition iTrans) const
 
std::vector< ESRecordIndex >
const & 
esGetTokenRecordIndicesVector (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector
< ProductResolverIndexAndSkipBit >
const & 
itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::array< std::vector< ModuleDescription const * > *, NumBranchTypes > &modulesAll, std::vector< ModuleProcessName > &modulesInPreviousProcesses, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void selectInputProcessBlocks (ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase)
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

void analyze (const edm::Event &event, const edm::EventSetup &setup) override
 everything that needs to be done during the event loop More...
 
bool booked (const std::string histName) const
 check if histogram was booked More...
 
void fill (const std::string histName, double value) const
 fill histogram if it had been booked before More...
 
void fill (std::string hists, const reco::TrackRef &t1, const reco::TrackRef &t2) const
 fill a predefined set of histograms from inner outer or global tracks for first and second mu candidate More...
 
double mass (const math::XYZVector &t1, const math::XYZVector &t2) const
 calculate the mass of the Z boson from the tracker momenta by hand More...
 

Private Attributes

std::map< std::string, TH1D * > hists_
 management of 1d histograms More...
 
edm::EDGetTokenT< edm::View
< pat::Muon > > 
muonsToken_
 input for muons More...
 
double shift_
 

Additional Inherited Members

- Static Public Member Functions inherited from edm::EDAnalyzer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &)
 
static bool wantsGlobalLuminosityBlocks ()
 
static bool wantsGlobalRuns ()
 
static bool wantsInputProcessBlocks ()
 
static bool wantsProcessBlocks ()
 
static bool wantsStreamLuminosityBlocks ()
 
static bool wantsStreamRuns ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B = InEvent>
EDConsumerBaseAdaptor< B > consumes (edm::InputTag tag) noexcept
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<Transition Tr = Transition::Event>
constexpr auto esConsumes () noexcept
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag) noexcept
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
void resetItemsToGetFrom (BranchType iType)
 

Detailed Description

Module to analyze the performance of muon reconstruction on the example of Z->mumu events.

Module to analyze the performance of muon reconstruction on the example of Z->mumu events: transverse momentum and eta of the muon candidates and the mass of the Z boson candidate are plotted from inner, outer and global tracks. The mass is recalculated by an extra finction. The difference of the outer track and the global track are plotted for the transverse momentum, eta and phi of the two muon candi- dates, for global muons as far as available. The only input parameters are:

muons –> indicating the muon collection of choice. shift –> indicating the relative shift of the transverse momentum for the estimate of the effect on the invariant mass.

The shift is applied to all mass calculations.

Definition at line 32 of file PatZToMuMuAnalyzer.cc.

Member Typedef Documentation

Definition at line 36 of file PatZToMuMuAnalyzer.cc.

typedef's to simplify get functions

Definition at line 35 of file PatZToMuMuAnalyzer.cc.

Constructor & Destructor Documentation

PatZToMuMuAnalyzer::PatZToMuMuAnalyzer ( const edm::ParameterSet cfg)
explicit

default constructor

Definition at line 77 of file PatZToMuMuAnalyzer.cc.

References hists_, and TFileService::make().

79  shift_(cfg.getParameter<double>("shift")) {
80  edm::Service<TFileService> fileService;
81 
82  // mass plot around Z peak from global tracks
83  hists_["globalMass"] = fileService->make<TH1D>("globalMass", "Mass_{Z} (global) (GeV)", 90, 30., 120.);
84  // eta from global tracks
85  hists_["globalEta"] = fileService->make<TH1D>("globalEta", "#eta (global)", 48, -2.4, 2.4);
86  // pt from global tracks
87  hists_["globalPt"] = fileService->make<TH1D>("globalPt", "p_{T} (global) (GeV)", 100, 0., 100.);
88  // mass plot around Z peak from inner tracks
89  hists_["innerMass"] = fileService->make<TH1D>("innerMass", "Mass_{Z} (inner) (GeV)", 90, 30., 120.);
90  // eta from inner tracks
91  hists_["innerEta"] = fileService->make<TH1D>("innerEta", "#eta (inner)", 48, -2.4, 2.4);
92  // pt from inner tracks
93  hists_["innerPt"] = fileService->make<TH1D>("innerPt", "p_{T} (inner) (GeV)", 100, 0., 100.);
94  // mass plot around Z peak from outer tracks
95  hists_["outerMass"] = fileService->make<TH1D>("outerMass", "Mass_{Z} (outer) (GeV)", 90, 30., 120.);
96  // eta from outer tracks
97  hists_["outerEta"] = fileService->make<TH1D>("outerEta", "#eta (outer)", 48, -2.4, 2.4);
98  // pt from outer tracks
99  hists_["outerPt"] = fileService->make<TH1D>("outerPt", "p_{T} (outer) (GeV)", 100, 0., 100.);
100  // delta pt between global and outer track
101  hists_["deltaPt"] = fileService->make<TH1D>("deltaPt", "#Delta p_{T} (GeV)", 100, -20., 20.);
102  // delta eta between global and outer track
103  hists_["deltaEta"] = fileService->make<TH1D>("deltaEta", "#Delta #eta", 100, -0.2, 0.2);
104  // delta phi between global and outer track
105  hists_["deltaPhi"] = fileService->make<TH1D>("deltaPhi", "#Delta #phi", 100, -0.2, 0.2);
106 }
T * make(const Args &...args) const
make new ROOT object
Definition: TFileService.h:64
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
std::map< std::string, TH1D * > hists_
management of 1d histograms
edm::EDGetTokenT< edm::View< pat::Muon > > muonsToken_
input for muons
PatZToMuMuAnalyzer::~PatZToMuMuAnalyzer ( )
inlineoverride

default destructor

Definition at line 41 of file PatZToMuMuAnalyzer.cc.

41 {};

Member Function Documentation

void PatZToMuMuAnalyzer::analyze ( const edm::Event event,
const edm::EventSetup setup 
)
overrideprivatevirtual

everything that needs to be done during the event loop

Implements edm::EDAnalyzer.

Definition at line 127 of file PatZToMuMuAnalyzer.cc.

References fill(), patZpeak::muons, muonsToken_, and AlCaHLTBitMon_QueryRunRegistry::string.

127  {
128  // pat candidate collection
130  event.getByToken(muonsToken_, muons);
131 
132  // Fill some basic muon quantities as
133  // reconstructed from inner and outer
134  // tack
135  for (edm::View<pat::Muon>::const_iterator mu1 = muons->begin(); mu1 != muons->end(); ++mu1) {
136  for (edm::View<pat::Muon>::const_iterator mu2 = muons->begin(); mu2 != muons->end(); ++mu2) {
137  if (mu2 > mu1) { // prevent double conting
138  if (mu1->charge() * mu2->charge() < 0) { // check only muon pairs of unequal charge
139  fill(std::string("inner"), mu1->innerTrack(), mu2->innerTrack());
140  fill(std::string("outer"), mu1->outerTrack(), mu2->outerTrack());
141  fill(std::string("global"), mu1->globalTrack(), mu2->globalTrack());
142 
143  if (mu1->isGlobalMuon()) {
144  fill("deltaPt", mu1->outerTrack()->pt() - mu1->globalTrack()->pt());
145  fill("deltaEta", mu1->outerTrack()->eta() - mu1->globalTrack()->eta());
146  fill("deltaPhi", mu1->outerTrack()->phi() - mu1->globalTrack()->phi());
147  }
148  if (mu2->isGlobalMuon()) {
149  fill("deltaPt", mu2->outerTrack()->pt() - mu2->globalTrack()->pt());
150  fill("deltaEta", mu2->outerTrack()->eta() - mu2->globalTrack()->eta());
151  fill("deltaPhi", mu2->outerTrack()->phi() - mu2->globalTrack()->phi());
152  }
153  }
154  }
155  }
156  }
157 }
void fill(const std::string histName, double value) const
fill histogram if it had been booked before
tuple muons
Definition: patZpeak.py:39
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
edm::EDGetTokenT< edm::View< pat::Muon > > muonsToken_
input for muons
bool PatZToMuMuAnalyzer::booked ( const std::string  histName) const
inlineprivate

check if histogram was booked

Definition at line 50 of file PatZToMuMuAnalyzer.cc.

References hists_.

Referenced by fill().

50 { return hists_.find(histName) != hists_.end(); };
std::map< std::string, TH1D * > hists_
management of 1d histograms
void PatZToMuMuAnalyzer::fill ( const std::string  histName,
double  value 
) const
inlineprivate

fill histogram if it had been booked before

Definition at line 52 of file PatZToMuMuAnalyzer.cc.

References booked(), and hists_.

Referenced by analyze(), and fill().

52  {
53  if (booked(histName))
54  hists_.find(histName)->second->Fill(value);
55  };
bool booked(const std::string histName) const
check if histogram was booked
std::map< std::string, TH1D * > hists_
management of 1d histograms
void PatZToMuMuAnalyzer::fill ( std::string  hists,
const reco::TrackRef t1,
const reco::TrackRef t2 
) const
private

fill a predefined set of histograms from inner outer or global tracks for first and second mu candidate

Definition at line 108 of file PatZToMuMuAnalyzer.cc.

References bitset_utilities::append(), fill(), edm::Ref< C, T, F >::isAvailable(), mass(), and AlCaHLTBitMon_QueryRunRegistry::string.

108  {
109  if (t1.isAvailable()) {
110  // fill pt from global track for first muon
111  fill(std::string(hists).append("Pt"), t1->pt());
112  // fill pt from global track for second muon
113  fill(std::string(hists).append("Eta"), t1->eta());
114  }
115  if (t2.isAvailable()) {
116  // fill eta from global track for first muon
117  fill(std::string(hists).append("Pt"), t2->pt());
118  // fill eta from global track for second muon
119  fill(std::string(hists).append("Eta"), t2->eta());
120  }
121  if (t1.isAvailable() && t2.isAvailable()) {
122  // fill invariant mass of the Z boson candidate
123  fill(std::string(hists).append("Mass"), mass(t1->momentum(), t2->momentum()));
124  }
125 }
bool isAvailable() const
Definition: Ref.h:537
boost::dynamic_bitset append(const boost::dynamic_bitset<> &bs1, const boost::dynamic_bitset<> &bs2)
this method takes two bitsets bs1 and bs2 and returns result of bs2 appended to the end of bs1 ...
void fill(const std::string histName, double value) const
fill histogram if it had been booked before
double mass(const math::XYZVector &t1, const math::XYZVector &t2) const
calculate the mass of the Z boson from the tracker momenta by hand
list hists
Definition: compare.py:318
double PatZToMuMuAnalyzer::mass ( const math::XYZVector t1,
const math::XYZVector t2 
) const
inlineprivate

calculate the mass of the Z boson from the tracker momenta by hand

Definition at line 68 of file PatZToMuMuAnalyzer.cc.

References shift_, and mathSSE::sqrt().

Referenced by Particle.Particle::__str__(), DiObject.DiMuon::__str__(), and fill().

68  {
69  return (LorentzVector(shift_ * t1.x(), shift_ * t1.y(), t1.z(), sqrt((0.1057 * 0.1057) + t1.mag2())) +
70  LorentzVector(shift_ * t2.x(), shift_ * t2.y(), t2.z(), sqrt((0.1057 * 0.1057) + t2.mag2())))
71  .mass();
72 }
T sqrt(T t)
Definition: SSEVec.h:19
double mass(const math::XYZVector &t1, const math::XYZVector &t2) const
calculate the mass of the Z boson from the tracker momenta by hand
math::XYZTLorentzVector LorentzVector

Member Data Documentation

std::map<std::string, TH1D*> PatZToMuMuAnalyzer::hists_
private

management of 1d histograms

Definition at line 65 of file PatZToMuMuAnalyzer.cc.

Referenced by booked(), fill(), and PatZToMuMuAnalyzer().

edm::EDGetTokenT<edm::View<pat::Muon> > PatZToMuMuAnalyzer::muonsToken_
private

input for muons

Definition at line 60 of file PatZToMuMuAnalyzer.cc.

Referenced by analyze().

double PatZToMuMuAnalyzer::shift_
private

shift in transverse momentum to determine a rough uncertainty on the Z mass estimation

Definition at line 63 of file PatZToMuMuAnalyzer.cc.

Referenced by mass().