Aod ntuple
This page contains basic prescriptions to get physics objects from the AOD and the AOD-based Root ntuple (from now on defined as Woutuple).
Some comments on quality selection cuts will be added as work progresses.
Electron
AOD Container Name | AOD Variable | Woutuple Variable | Variable Type | Comment |
ElectronCollection | (*elecTES)->size()
|
n_elec | Int | Number of electrons in the Woutuple |
(*elecItr)->hlv().x()
|
px_elec | Double | Px | |
(*elecItr)->hlv().y()
|
py_elec | Double | Py | |
(*elecItr)->hlv().z()
|
pz_elec | Double | Pz | |
(*elecItr)->hlv().perp()
|
pt_elec | Double | Pt | |
(*elecItr)->hlv().eta()
|
eta_elec | Double | Eta | |
(*elecItr)->hlv().phi()
|
phi_elec | Double | Phi | |
(*elecItr)->isEM()
|
isem_elec | Int | isEM flag (see below)
| |
(*elecItr)->hasTrack()
|
hastrk_elec | Int (bool) | HasTrack flag: presence of charged track in the Inner Detector
| |
(*elecItr)->z0wrtPrimVtx()
|
z0vtx_elec | Double | Intersection (z) of track with the beam axis | |
(*elecItr)->d0wrtPrimVtx()
|
d0vtx_elec | Double | Transverse impact parameter d0 | |
(*elecItr)->numberOfBLayerHits()
|
nblayerhits_elec | Int | Number of hits in the Pixel B-layer | |
(*elecItr)->numberOfPixelHits()
|
npixelhits_elec | Int | Number of hits in the Pixel detector | |
(*elecItr)->numberOfSCTHits()
|
nscthits_elec | Int | Number of hits in the SCT | |
(*elecItr)->numberOfTRTHits()
|
ntrthits_elec | Int | Number of hits in the TRT | |
(*elecItr)->numberOfTRTHighThresholdHits()
|
ntrththits_elec | Int | Number of high threshold hits in the TRT | |
(*elecItr)->author()
|
auth_elec | Int (enum) | Algorithm used to create the electron: unknown=0 , egamma=1 , softe=2
| |
(*elecItr)->parameter(ElectronParameters::EoverP)
|
eoverp_elec | Double | E/P ratio | |
(*elecItr)->parameter(ElectronParameters::etcone)
|
etcone_elec | Double | Energy deposition in a cone dR=0.45 around the electron cluster | |
(*elecItr)->parameter(ElectronParameters::etcone20)
|
etcone20_elec | Double | Energy deposition in a cone dR=0.20 around the electron cluster. Standard cone size for ATLFAST | |
(*elecItr)->parameter(ElectronParameters::etcone30)
|
etcone30_elec | Double | Energy deposition in a cone dR=0.30 around the electron cluster. Currently empty | |
(*elecItr)->parameter(ElectronParameters::etcone40)
|
etcone40_elec | Double | Energy deposition in a cone dR=0.40 around the electron cluster | |
(*elecItr)->parameter(ElectronParameters::emWeight)
|
emwgt_elec | Double | Weight for electrons (see below) | |
(*elecItr)->parameter(ElectronParameters::pionWeight)
|
piwgt_elec | Double | Weight for pions (see below) |
There are 3 types of quality cuts you can perform on the electron candidates:
- Cuts based on the
isEM
flag - Cuts based on likelihood
- Cuts based on NeuralNet output
1.
The isEM
flag uses both calorimeter and tracking information in addition to TRT
information. The flag is a bit field which marks whether the candidate passed or not some safety checks.
The bit field marks the following checks:
Cluster based egamma
ClusterEtaRange = 0,
ClusterHadronicLeakage = 1,
ClusterMiddleSampling = 2,
ClusterFirstSampling = 3,
Track based egamma
TrackEtaRange = 8,
TrackHitsA0 = 9,
TrackMatchAndEoP = 10,
TrackTRT = 11
In 9.0.4 there is a problem with TRT simulation so one has to mask TRT bit to recover the lost efficiency.
To get the flag in your AOD analysis you should use:
(*elec)->isEM()
To mask the TRT bits you should use: (*elec)->isEM()&0x7FF==0
If you use isEM
then you will select electrons with an overall efficiency of about
80% in the barrel but much lower in the crack and endcap.
2.
The likelihood ratio is constructed using the following variables: energy in different calorimeter samplings, shower shapes in both eta and phi and E/P ration. No TRT information is used here.
You need to access two variables called emweight
and pionweight
then you can construct the likelihood ratio, defined by: emweight/(emweight+pionweight)
.
In AOD, you use the following code:
ElecEMWeight = elec*->parameter(ElectronParameters::emWeight);
ElecPiWeight = elec*->parameter(ElectronParameters::pionWeight);
Then form the variable:
X = ElecEMWeight/(ElecEMWeight+ElecPiWeight);
Requiring X > 0.6 will give you more than 90% efficiency for electrons.
3.
The NeuralNet variable uses as inputs the same variables used for likelihood. To use it in AOD you should proceed as follow:
ElecepiNN = elec*->parameter(ElectronParameters::epiNN);
Requiring ElecepiNN > 0.6 will give you about 90% eff for electrons.
However, you should be aware that the NN was trained in full eta range while the likelihood was computed in 3 bins in eta: barrel, crack and endcap. So I would suggest to use likelihood for now.
To require an isolated electron, you have to cut on the energy deposited in the cone around the electron cluster. ATLFAST for example requires Et<10 GeV in a cone of dR=0.2. You can simulate the ATLFAST cut by requiring etcone20<10.*GeV
Photon
Muon
AOD Container Name | AOD Variable | Woutuple Variable | Variable Type | Comment |
MuonCollection | (*muonTES)->size()
|
n_muon | Int | Number of muons in the Woutuple |
(*muonItr)->hlv().x()
|
px_muon | Double | Px | |
(*muonItr)->hlv().y()
|
py_muon | Double | Py | |
(*muonItr)->hlv().z()
|
pz_muon | Double | Pz | |
(*muonItr)->hlv().perp()
|
pt_muon | Double | Pt | |
(*muonItr)->hlv().eta()
|
eta_muon | Double | Eta | |
(*muonItr)->hlv().phi()
|
phi_muon | Double | Phi | |
(*muonItr)->author()
|
auth_muon | Int (enum) | Algorithm used to create the muon: unknown=0 , highPt=1 , lowPt=2
| |
(*muonItr)->chi2()
|
chi2_muon | Double | Chi2 of the track fit. Empty for now (see below) | |
(*muonItr)->getConeIsol()[0]
|
coneiso0_muon | Double | ||
(*muonItr)->getEtIsol()[0]
|
etiso0_muon | Double | ||
(*muonItr)->hasCombinedMuon()
|
hascombi_muon | Int (bool) | ||
(*muonItr)->hasInDetTrackParticle()
|
hasindettp_muon | Int (bool) | ||
(*muonItr)->hasMuonSpectrometerTrackParticle()
|
hasmuspectp_muon | Int (bool) | ||
(*muonItr)->hasMuonExtrapolatedTrackParticle()
|
hasmmuextrtp_muon | Int (bool) | ||
(*muonItr)->hasCombinedMuonTrackParticle()
|
hascombimutp_muon | Int (bool) | ||
(*muonItr)->hasCluster()
|
hasclus_muon | Int (bool) | ||
(*muonItr)->isHighPt()
|
ishipt_muon | Int (bool) | Is the muon produced with the highPt algorithm? (see also author() )
| |
(*muonItr)->isLowPt()
|
islopt_muon | Int (bool) | Is the muon produced with the lowPt algorithm? (see also author() )
| |
(*muonItr)->numberOfBLayerHits()
|
nblayerhits_muon | Int | ||
(*muonItr)->numberOfPixelHits(
|
npixelhits_muon | Int | ||
(*muonItr)->numberOfSCTHits()
|
nscthits_muon | Int | ||
(*muonItr)->numberOfTRTHits()
|
ntrthits_muon | Int | ||
(*muonItr)->numberOfMDTHits()
|
nmdthits_muon | Int | ||
(*muonItr)->numberOfCSCEtaHits()
|
ncscetahits_muon | Int | ||
(*muonItr)->numberOfCSCPhiHits()
|
ncscphihits_muon | Int | ||
(*muonItr)->numberOfRPCEtaHits()
|
nrpcetahits_muon | Int | ||
(*muonItr)->numberOfRPCPhiHits(
|
nrpcphihits_muon | Int | ||
(*muonItr)->numberOfTGCEtaHits()
|
ntgcetahits_muon | Int | ||
(*muonItr)->numberOfTGCPhiHits()
|
ntgcphihits_muon | Int | ||
(*muonItr)->z0wrtPrimVtx()
|
z0vtx_muon | Double | ||
(*muonItr)->d0wrtPrimVtx()
|
d0vtx_muon | Double |
temporary: The muons have highPt and lowPt algorithms. The overlap is removed, but you may want to only use the highPt ones. The chi2()
method is always 0 in 10.0.1, so you will have to access the CombinedMuon through something like
const Rec::TrackParticle* cbndMuon = part->get_CombinedMuonTrackParticle();
if( cbndMuon ) {
double chi2 = cbndMuon->fitQuality()->chiSquared();
int ndof = cbndMuon->fitQuality()->numberDoF();
if( ndof > 0 ) chi2 = chi2/ndof;
return chi2;
}
Tau
Jet
There are three collections of jets:
- KtTowerParticleJets (Kt algorithm with parameter D=1)
- Cone4TowerParticleJets (Cone algorithm with R=0.4)
- ConeTowerParticleJets (Cone algorithm with R=0.7)
Unfortunately, the Woutuple contains only one collection for the time being. The collection can be selected when you produce the Woutuple, by modifying the jobOptions file.
All three alogrithms have a common data structure:
AOD Container Name | AOD Variable | Woutuple Variable | Variable Type | Comment |
KtTowerParticleJets Cone4TowerParticleJets ConeTowerParticleJets | (*jetTES)->size()
|
n_elec | Int | Number of jets in the Woutuple |
(*jetItr)->hlv().x()
|
px_elec | Double | Px | |
(*jetItr)->hlv().y()
|
py_elec | Double | Py | |
(*jetItr)->hlv().z()
|
pz_elec | Double | Pz | |
(*jetItr)->hlv().perp()
|
pt_elec | Double | Pt | |
(*jetItr)->hlv().eta()
|
eta_elec | Double | Eta | |
(*jetItr)->hlv().phi()
|
phi_elec | Double | Phi | |
(*jetItr)->pCalo().x()
|
px_calo_jet | Double | ||
(*jetItr)->pCalo().y()
|
py_calo_jet | Double | ||
(*jetItr)->pCalo().z()
|
pz_calo_jet | Double | ||
(*jetItr)->etEM(0)
|
etem0_jet | Double | ||
(*jetItr)->etEM(1)
|
etem1_jet | Double | ||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|