Photons¶
Introduction¶
Photons are measured in the CMS experiment in the electromagnetic calorimeter and, in case they convert to electron-positron pairs, also in the inner tracker as summarized on introductory page on Finding electrons and photons. The signals from these systems are processed with CMSSW through subsequent steps to form photon candidates which are then available in the photon collection of the data files.
Photon 4-vector information¶
An example of an EDAnalyzer accessing photon information is available in the PhotonAnalyzer of the Physics Object Extractor Tool (POET). The following header files needed for accessing electron information are included:
//classes to extract Photon information
#include "DataFormats/EgammaCandidates/interface/Photon.h"
#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h"
#include "DataFormats/GsfTrackReco/interface/GsfTrack.h"
#include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
#include "RecoEgamma/EgammaTools/interface/ConversionTools.h"
#include "EgammaAnalysis/ElectronTools/interface/PFIsolationEstimator.h"
In PhotonAnalyzer.cc, the photon four-vector elements are accessed as shown below.
Handle<reco::PhotonCollection> myphotons;
iEvent.getByLabel(photonInput, myphotons);
[...]
for (reco::PhotonCollection::const_iterator itphoton=myphotons->begin(); itphoton!=myphotons->end(); ++itphoton){
[...]
photon_e.push_back(itphoton->energy());
photon_pt.push_back(itphoton->pt());
photon_px.push_back(itphoton->px());
photon_py.push_back(itphoton->py());
photon_pz.push_back(itphoton->pz());
photon_eta.push_back(itphoton->eta());
photon_phi.push_back(itphoton->phi());
[...]
}
An example of an EDAnalyzer accessing electron information is available in the PhotonAnalyzer of the Physics Object Extractor Tool (POET). The following header file needed for accessing photon information is included:
//class to extract photon information
#include "DataFormats/PatCandidates/interface/Photon.h"
In PhotonAnalyzer.cc, the electron four-vector elements are accessed from the pat::photon
collection as shown below.
Handle<pat::PhotonCollection> photons;
iEvent.getByToken(photonToken_, photons);
[...]
for (const pat::Photon &pho : *photons)
{
photon_e.push_back(pho.energy());
photon_pt.push_back(pho.pt());
photon_px.push_back(pho.px());
photon_py.push_back(pho.py());
photon_pz.push_back(pho.pz());
photon_eta.push_back(pho.eta());
photon_phi.push_back(pho.phi());
[...]
}
with photonToken_
defined as a member of the PhotonAnalyzer
class and its value read from the configuration file.
Photon identification¶
As explained in the Physics Object page, a mandatory task in the physics analysis is to identify photons, i.e. to separate “real” objects from “fakes”. A large fraction of the energy deposited in the detector by all proton-proton interactions arises from photons originating in the decay of neutral mesons, and these electromagnetic showers provide a substantial background to signal photons. The identification criteria depend on the type of analysis.
The standard identification and isolation algorithm results can be accessed from the photon object class and the recommended working points for 2012 are implemented in the example code PhotonAnalyzer.cc.
Three levels of identification criteria are defined
bool isLoose = false, isMedium = false, isTight = false;
For photons in the electromagnetic calorimeter barrel area, they are determined as follows:
if ( itphoton->eta() <= 1.479 ){
if ( ph_hOverEm<.05 && ph_sigIetaIeta<.012 &&
corrPFCHIso<2.6 && corrPFNHIso<(3.5+.04*itphoton->pt()) &&
corrPFPhIso<(1.3+.005*itphoton->pt()) && passelectronveto==true) {
isLoose = true;
if ( ph_sigIetaIeta<.011 && corrPFCHIso<1.5
&& corrPFNHIso<(1.0+.04*itphoton->pt())
&& corrPFPhIso<(.7+.005*itphoton->pt())){
isMedium = true;
if ( corrPFCHIso<.7 && corrPFNHIso<(.4+.04*itphoton->pt())
&& corrPFPhIso<(.5+0.005*itphoton->pt()) ){
isTight = true;
}
}
}
}
where
ph_sigIetaIeta
describes the variance of the ECAL cluster in psuedorapidity ("ieta" is an integer index for this angle).ph_hOverEm
describes the ratio of HCAL to ECAL energy deposits, which should be small for good quality photons.- The electron veto
passelectronveto
is obtained from an algorithm that indicates if photons have been identified also as electrons. corr...Iso
variables represent different isolation properties of the photon.
The isolation variables are defined with the PFIsolationEstimator
class in the default cone size of 0.3 with
PFIsolationEstimator isolator;
isolator.initializePhotonIsolation(kTRUE);
isolator. setConeSize(0.3);
const reco::VertexRef vertex(vertices, 0);
const reco::Photon &thephoton = *itphoton;
isolator.fGetIsolation(&thephoton, pfCands.product(), vertex, vertices);
double corrPFCHIso =
std::max(isolator.getIsolationCharged() - rhoIso * aEff.CH_AEff, 0.)/itphoton->pt();
double corrPFNHIso =
std::max(isolator.getIsolationNeutral() - rhoIso * aEff.NH_AEff, 0.)/itphoton->pt();
double corrPFPhIso =
std::max(isolator.getIsolationPhoton() - rhoIso * aEff.Ph_AEff, 0.)/itphoton->pt();
In the endcap part of the electromagnetic calorimeter, the procedure is similar with different values.
To do
- The isolation snippet needs more explanation
The standard identification and isolation algorithm results can be accessed from the pat photon object class. Three levels of identification criteria are defined: loose, medium, and tight. An example selection is implemented in PhotonAnalyzer.cc:
photon_isLoose.push_back(pho.photonID("cutBasedPhotonID-PHYS14-PU20bx25-V2p1-standalone-loose"));
photon_isMedium.push_back(pho.photonID("cutBasedPhotonID-PHYS14-PU20bx25-V2p1-standalone-medium"));
photon_isTight.push_back(pho.photonID("cutBasedPhotonID-PHYS14-PU20bx25-V2p1-standalone-tight"));
Warning
The choice of recommended photon ID criteria for 2015 data needs to be verified. In addition to PHYS14_PU20bx25_V2
other sets, for example Spring15_25ns_V1
, are available.
Several isolation methods are available through the class member methods, for example:
photon_chIso.push_back(pho.chargedHadronIso());
photon_nhIso.push_back(pho.neutralHadronIso());
photon_phIso.push_back(pho.photonIso());
To do
- Verify the recommended isolation, many other are available in the photon class
To do
Add a mention on photon conversions both for Run 1 and Run 2