CMS 3D CMS Logo

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 ()
 default destructor More...
 
- Public Member Functions inherited from edm::EDAnalyzer
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzer ()
 
ModuleDescription const & moduleDescription () const
 
std::string workerType () const
 
virtual ~EDAnalyzer ()
 
- 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
 
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::vector< ModuleDescription const * > &modules, 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 updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

virtual 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 &)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
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 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)
 

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 33 of file PatZToMuMuAnalyzer.cc.

Member Typedef Documentation

Definition at line 38 of file PatZToMuMuAnalyzer.cc.

typedef's to simplify get functions

Definition at line 37 of file PatZToMuMuAnalyzer.cc.

Constructor & Destructor Documentation

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

default constructor

Definition at line 76 of file PatZToMuMuAnalyzer.cc.

References fileService, hists_, and TFileService::make().

76  :
78  shift_(cfg.getParameter< double >("shift"))
79 {
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 getParameter(std::string const &) const
T * make(const Args &...args) const
make new ROOT object
Definition: TFileService.h:64
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
std::map< std::string, TH1D * > hists_
management of 1d histograms
edm::Service< TFileService > fileService
edm::EDGetTokenT< edm::View< pat::Muon > > muonsToken_
input for muons
PatZToMuMuAnalyzer::~PatZToMuMuAnalyzer ( )
inline

default destructor

Definition at line 43 of file PatZToMuMuAnalyzer.cc.

References analyze(), mass(), GeneralSetup::setup(), and reco::t2.

43 {};

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

Definition at line 128 of file PatZToMuMuAnalyzer.cc.

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

Referenced by ~PatZToMuMuAnalyzer().

129 {
130  // pat candidate collection
132  event.getByToken(muonsToken_, muons);
133 
134  // Fill some basic muon quantities as
135  // reconstructed from inner and outer
136  // tack
137  for(edm::View<pat::Muon>::const_iterator mu1=muons->begin(); mu1!=muons->end(); ++mu1){
138  for(edm::View<pat::Muon>::const_iterator mu2=muons->begin(); mu2!=muons->end(); ++mu2){
139  if(mu2>mu1){ // prevent double conting
140  if( mu1->charge()*mu2->charge()<0 ){ // check only muon pairs of unequal charge
141  fill(std::string("inner" ), mu1->innerTrack (), mu2->innerTrack ());
142  fill(std::string("outer" ), mu1->outerTrack (), mu2->outerTrack ());
143  fill(std::string("global"), mu1->globalTrack(), mu2->globalTrack());
144 
145  if(mu1->isGlobalMuon()){
146  fill("deltaPt" , mu1->outerTrack()->pt ()-mu1->globalTrack()->pt ());
147  fill("deltaEta", mu1->outerTrack()->eta()-mu1->globalTrack()->eta());
148  fill("deltaPhi", mu1->outerTrack()->phi()-mu1->globalTrack()->phi());
149  }
150  if(mu2->isGlobalMuon()){
151  fill("deltaPt" , mu2->outerTrack()->pt ()-mu2->globalTrack()->pt ());
152  fill("deltaEta", mu2->outerTrack()->eta()-mu2->globalTrack()->eta());
153  fill("deltaPhi", mu2->outerTrack()->phi()-mu2->globalTrack()->phi());
154  }
155  }
156  }
157  }
158  }
159 }
void fill(const std::string histName, double value) const
fill histogram if it had been booked before
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 52 of file PatZToMuMuAnalyzer.cc.

References hists_.

Referenced by fill().

52 { return hists_.find(histName.c_str())!=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 54 of file PatZToMuMuAnalyzer.cc.

References booked(), compare::hists, hists_, edm::second(), and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by analyze(), and fill().

54 { if(booked(histName.c_str())) hists_.find(histName.c_str())->second->Fill(value); };
bool booked(const std::string histName) const
check if histogram was booked
U second(std::pair< T, U > const &p)
Definition: value.py:1
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 mps_alisetup::append, fill(), edm::Ref< C, T, F >::isAvailable(), mass(), and AlCaHLTBitMon_QueryRunRegistry::string.

109 {
110  if( t1.isAvailable() ){
111  // fill pt from global track for first muon
112  fill( std::string(hists).append("Pt") , t1->pt() );
113  // fill pt from global track for second muon
114  fill( std::string(hists).append("Eta"), t1->eta() );
115  }
116  if( t2.isAvailable() ){
117  // fill eta from global track for first muon
118  fill( std::string(hists).append("Pt") , t2->pt() );
119  // fill eta from global track for second muon
120  fill( std::string(hists).append("Eta"), t2->eta() );
121  }
122  if( t1.isAvailable() && t2.isAvailable() ){
123  // fill invariant mass of the Z boson candidate
124  fill( std::string(hists).append("Mass"), mass(t1->momentum(), t2->momentum()));
125  }
126 }
bool isAvailable() const
Definition: Ref.h:576
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
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__(), fill(), and ~PatZToMuMuAnalyzer().

69 {
70  return (LorentzVector(shift_*t1.x(), shift_*t1.y(), t1.z(), sqrt((0.1057*0.1057)+t1.mag2())) + LorentzVector(shift_*t2.x(), shift_*t2.y(), t2.z(), sqrt((0.1057*0.1057)+t2.mag2()))).mass();
71 }
auto const T2 &decltype(t1.eta()) t2
Definition: deltaR.h:16
T sqrt(T t)
Definition: SSEVec.h:18
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 64 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 59 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 62 of file PatZToMuMuAnalyzer.cc.

Referenced by mass().