Este repositório contém os fatores de escala recomendados (SFs) para vários discriminadores de tau e ferramentas para lê-los. Recomendações mais detalhadas podem ser encontradas nesta página do TWiki: https://twiki.cern.ch/twiki/bin/viewauth/CMS/TauIDRecommendationForRun2
️ Observe que, em um futuro próximo, os SFs no formato de arquivos ROOT serão eliminados e, a longo prazo, serão substituídos pela ferramentacorrectionlib
e pelos arquivos JSON fornecidos centralmente pelo XPOG. Instruções mais detalhadas para correções de tau estão aqui.
Para instalar a ferramenta de leitura dos SFs tau ID, faça
export SCRAM_ARCH=slc6_amd64_gcc700 # for CMSSW_10_3_3, check "scram list"
CMSSW_BASE=CMSSW_10_3_3 # or whichever release you desire
cmsrel $CMSSW_BASE
cd $CMSSW_BASE/src
git clone https://github.com/cms-tau-pog/TauIDSFs TauPOG/TauIDSFs
cmsenv
scram b -j8
Após compilar com esta respectiva hierarquia de diretórios, você pode acessar a ferramenta ( python/TauIDSFTool.py
) em python como
from TauPOG.TauIDSFs.TauIDSFTool import TauIDSFTool
Um teste da ferramenta em python pode ser executado com
./test/testTauIDSFTool.py
Uma implementação C++ semelhante está disponível em src/TauIDSFTool.cc
, com um exemplo simples de uso em ( test/testTauIDSFTool.cc
). Este também é um teste de instalação que pode ser compilado e executado com
scram b runtests -j8
Alternativamente, se você quiser usar a ferramenta python autônoma sem CMSSW, clone o repositório e certifique-se de que seu PYTHONPATH
aponte para o módulo TauIDSFTool
.
export PYTHONPATH=<path to python directory>:$PYTHONPATH
Depois, você deverá ser capaz de fazer:
from TauIDSFTool import TauIDSFTool
Este é um resumo aproximado dos SFs disponíveis para DeepTau2017v2p1
e DeepTau2018v2p5
em data/
:
Componente tau | genmatch | DeepTau2017v2p1 VSjet | DeepTau2017v2p1 VSe | DeepTau2017v2p1 VSmu | DeepTau2018v2p5 VSjet | escala de energia |
---|---|---|---|---|---|---|
verdadeiro tau | 5 | vs pT e DM (para MC) ou vs. pT, ou vs. DM (para Incorporar.) | – (*) | – (*) | vs pT e DM (para MC), sem incorporação. correções derivadas ainda | vs DM |
e -> tau falso | 1 , 3 | – | versus eta | – | vs. DM e eta | |
mu -> tau falso | 2 , 4 | – | – | versus eta | – (±1% unc.) |
(*) Os fatores de escala são fornecidos apenas para um subconjunto dos pontos de trabalho. Para o discriminador VSele, eles são medidos para os WPs VVLoose e Tight - os usuários são fortemente incentivados a usar um desses dois pontos de trabalho e devem reportar ao TauPOG para aprovação se outro ponto de trabalho for usado. Para o VSmu, eles são medidos para o WP Tight, mas não esperamos uma grande dependência do WP VSmu escolhido neste caso, então você está livre para usar qualquer WP disponível que desejar para a rejeição de múons.
A correspondência de geração é definida como:
1
para elétrons imediatos2
para múons imediatos3
para elétrons do decaimento tau4
para múons de decaimento de tau5
para taus de verdade6
sem correspondência ou jatos fingindo taus. Para obter mais informações sobre a correspondência de geração de taus, consulte aqui. Observe que no nanoAOD isso está disponível como Tau_GenPartFlav
, mas jet ou nenhuma correspondência corresponde a Tau_GenPartFlav==0
em vez de 6
.Os SFs destinam-se às seguintes campanhas:
Etiqueta do ano | Campanha MC | Campanha de dados |
---|---|---|
2016Legacy (*) | RunIISummer16MiniAODv3 | 17Jul2018 |
2017ReReco (*) | RunIIFall17MiniAODv2 | 31Mar2018 |
2018ReReco (*) | RunIIAutumn18MiniAOD | 17Sep2018 / 22Jan2019 |
UL2016_preVFP | RunIISummer20UL16*APV | (HIPM_)UL2016_MiniAODv* |
UL2016_postVFP | RunIISummer20UL16 | UL2016_MiniAODv* |
UL2017 | RunIISummer20UL17 | UL2017_MiniAODv* |
UL2018 | RunIISummer20UL18 | UL2018_MiniAODv* |
(*) Os SFs fornecidos para amostras pré-UL seguem as antigas convenções para binning por pT ou DM, e seguem o antigo esquema de incerteza onde apenas as incertezas totais são relatadas
Um script simples é fornecido para despejar as correções salvas em histogramas ou funções dos arquivos em data/
. Use por exemplo
./test/dumpTauIDSFs.py data/TauID_SF_*_DeepTau2017v2p1VSjet_*.root
Os SFs dependentes de DM e pT são fornecidos como funções TF1 nos arquivos ROOT "TauID_SF_dm_DeepTau2017v2p1VSjet_VSjetX_VSeleY_Mar07.root" para DeepTau2017v2p1 e "TauID_SF_dm_DeepTau2018v2p5VSjet_VSjetX_VSeleY_Jul18.root" para DeepTau2018v2p5, onde X corresponde ao VSjet WP e Y corresponde ao VSele WP.
Os arquivos ROOT contêm várias funções. Os valores centrais são obtidos a partir de funções denominadas como "DM$DM_$ERA_fit" onde $DM é o modo de decaimento = 0, 1, 10 ou 11, e $ERA = 2016_preVFP, 2016_postVFP, 2017 ou 2018.
Por exemplo, para obter o valor central dos SFs para os WPs Medium VSjet e VVLoose VSele do discriminador 'DeepTau2017v2p1VSjet'
para DM = 1 em 2018, use
file = TFile("data/TauID_SF_dm_DeepTau2017v2p1VSjet_VSjetMedium_VSeleVVLoose_Mar07.root")
func = file.Get('DM1_2018_fit')
sf = func.Eval(pt)
Existem também funções que correspondem a variações sistemáticas que podem ser acessadas da mesma forma. A tabela abaixo fornece um resumo dos nomes das funções e a quais incertezas elas correspondem para DeepTau2017v2p1:
Incerteza | Nome da função em arquivos ROOT | String a ser passada para a ferramenta | Notas | Correlacionado por época | Correlacionado por DM |
---|---|---|---|---|---|
Statistical uncertainty 1 | DM$DM_$ERA_fit_uncert0_{up,down} | uncert0_{up,down} | Statistical uncertainty on linear fit parameters from eigendecomposition of covariance matrix. | ✗ | ✗ |
Statistical uncertainty 2 | DM$DM_$ERA_fit_uncert1_{up,down} | uncert1_{up,down} | Statistical uncertainty on linear fit parameters from eigendecomposition of covariance matrix. | ✗ | ✗ |
Systematic alleras | DM$DM_$ERA_syst_alleras_{up,down}_fit | syst_alleras_{up,down} | The component of the systematic uncertainty that is correlated across DMs and eras | ✓ | ✓ |
Systematic by-era | DM$DM_$ERA_syst_$ERA_{up,down}_fit | syst_$ERA_{up,down} | The component of the systematic uncertainty that is correlated across DMs but uncorrelated by eras | ✗ | ✓ |
Systematic by-era and by-DM | DM$DM_$ERA_syst_dm$DM_$ERA_{up,down}_fit | syst_dm$DM_$ERA_{up,down} | The component of the systematic uncertainty that is uncorrelated across DMs and eras | ✗ | ✗ |
A tabela abaixo fornece um resumo dos nomes das funções e a quais incertezas elas correspondem para DeepTau2018v2p5:
Incerteza | Nome da função em arquivos ROOT | String a ser passada para a ferramenta | Notas | Correlacionado por época | Correlacionado por DM |
---|---|---|---|---|---|
Statistical uncertainty 1 | DM$DM_$ERA_fit_uncert0_{up,down} | uncert0_{up,down} | Statistical uncertainty on linear fit parameters from eigendecomposition of covariance matrix. | ✗ | ✗ |
Statistical uncertainty 2 | DM$DM_$ERA_fit_uncert1_{up,down} | uncert1_{up,down} | Statistical uncertainty on linear fit parameters from eigendecomposition of covariance matrix. | ✗ | ✗ |
Systematic alleras | DM$DM_$ERA_syst_alleras_{up,down}_fit | syst_alleras_{up,down} | The component of the systematic uncertainty that is correlated across DMs and eras | ✓ | ✓ |
Systematic by-era | DM$DM_$ERA_syst_alldms_$ERA_{up,down}_fit | syst_alldms_$ERA_{up,down} | The component of the systematic uncertainty that is correlated across DMs but uncorrelated by eras | ✗ | ✗ |
Systematic Tau Energy scale | DM$DM_$ERA_TES{Up,Down}_fit | TES_{up,down} | The uncertainty due to the tauenergy scale systematic uncertainty | ✗ | ✗ |
Os SFs também podem ser acessados através da ferramenta:
from TauPOG.TauIDSFs.TauIDSFTool import TauIDSFTool
tauSFTool = TauIDSFTool(year='UL2018',id='DeepTau2017v2p1VSjet',wp='Medium',wp_vsele='VVLoose',ptdm=True)
sf = tauSFTool.getSFvsDMandPT(pt,dm,genmatch)
E as variações de incerteza podem ser acessadas usando:
sf = tauSFTool.getSFvsDMandPT(pt,dm,genmatch,unc)
onde a string unc
é usada para identificar a variação sistemática conforme fornecido na terceira coluna da tabela acima
As análises que são sensíveis a taus com pT>140 GeV devem mudar para os SFs de alto pT dedicados medidos em caixas de pT acima de 140 GeV
Os SFs são fornecidos como objetos TGraphAsymmErrors nos arquivos ROOT "TauID_SF_Highpt_DeepTau2017v2p1VSjet_VSjetX_VSeleY_Mar07.root", onde X corresponde ao VSjet WP e Y corresponde ao VSele WP.
Os arquivos ROOT contêm vários gráficos. Os valores centrais são obtidos dos gráficos denominados como "DMinclusive_$ERA" onde $ERA = 2016_preVFP, 2016_postVFP, 2017 ou 2018. Esses gráficos contêm 2 compartimentos pT com pT 100-200 e pT>200 GeV. Você só deve usá-los como valores agrupados. Para taus entre 140-200 GeV use o primeiro compartimento, e para taus com pT>200 GeV use o segundo compartimento.
Os SFs também podem ser acessados através da ferramenta:
from TauPOG.TauIDSFs.TauIDSFTool import TauIDSFTool
tauSFTool = TauIDSFTool(year='UL2018',id='DeepTau2017v2p1VSjet',wp='Medium',wp_vsele='VVLoose',highpT=True)
sf = tauSFTool.getHighPTSFvsPT(pt,genmatch)
E as variações de incerteza podem ser acessadas usando:
sf = tauSFTool.getHighPTSFvsPT(pt,genmatch,unc)
onde "unc" depende da fonte de incerteza. A tabela abaixo descreve as fontes de incerteza e a string que você precisa passar para a ferramenta para recuperá-las:
Incerteza | String a ser passada para a ferramenta | Notas | Correlacionado por época | Correlacionado por pT |
---|---|---|---|---|
Statistical uncertainty 1 | stat_bin1_{up,down} | Statistical uncertainty on the pT 140-200 GeV bin. Note this also includes systematic uncertainties that are decorrelated by pT bin and era (since they also behave like statistical uncertainties) | ✗ | ✗ |
Statistical uncertainty 2 | stat_bin2_{up,down} | Statistical uncertainty on the pT >200 GeV bin. Note this also includes systematic uncertainties that are decorrelated by pT bin and era (since they also behave like statistical uncertainties) | ✗ | ✗ |
Systematic | syst_{up,down} | The systematic uncertainty that is correlated across pT regions and eras | ✓ | ✓ |
Extrapolation Systematic | extrap_{up,down} | The systematics uncertainty due to the extrapolation of the SF to higher pT regions | ✓ | ✓ |
Obsoleto para UL MC - use SFs dependentes de DM e pT!
Os fatores de escala incorporados ainda seguem as prescrições antigas para SFs armazenados em pT ou DM, portanto, estas instruções ainda se aplicam neste caso
Os SFs dependentes de pT são fornecidos como funções TF1
. Por exemplo, para obter aqueles para o WP médio do discriminador 'DeepTau2017v2p1VSjet'
para 2016, use
file = TFile("data/TauID_SF_pt_DeepTau2017v2p1VSjet_2016Legacy.root")
func = file.Get('Medium_cent')
sf = func.Eval(pt)
A ferramenta pode ser usada como
from TauPOG.TauIDSFs.TauIDSFTool import TauIDSFTool
tauSFTool = TauIDSFTool('2016Legacy','DeepTau2017v2p1VSjet','Medium',ptdm=False)
e para recuperar o SF para um determinado tau pT, faça
sf = tauSFTool.getSFvsPT(pt)
O SF só deve ser aplicado a objetos tau que correspondam ao taus "real" no nível gen ( genmatch==5
). Você pode passar o argumento opcional genmatch
e a função retornará o SF apropriado se genmatch==5
e 1.0
caso contrário,
sf = tauSFTool.getSFvsPT(pt,genmatch)
As incertezas recomendadas podem ser recuperadas como
sf_up = tauSFTool.getSFvsPT(pt,genmatch,unc='Up')
sf_down = tauSFTool.getSFvsPT(pt,genmatch,unc='Down')
ou todos os três de uma só vez:
sf_down, sf, sf_up = tauSFTool.getSFvsPT(pt,genmatch,unc='All')
Para o tau ID SF das amostras incorporadas , defina o sinalizador emb
como True
:
tauSFTool = TauIDSFTool('2017ReReco','DeepTau2017v2p1VSjet','Medium',emb=True)
Se sua análise usa um DeepTauVSe WP mais flexível que VLoose e/ou DeepTauVSmu mais flexível que discriminadores médios, deve adicionar incerteza adicional usando o sinalizador otherVSlepWP
:
tauSFTool = TauIDSFTool('2017ReReco','DeepTau2017v2p1VSjet','Medium',otherVSlepWP=True)
Obsoleto para UL MC - use SFs dependentes de DM e pT!
Os fatores de escala incorporados ainda seguem as prescrições antigas para SFs armazenados em pT ou DM, portanto, estas instruções ainda se aplicam neste caso
Análises usando gatilhos ditau e tau pT > 40 GeV podem usar SFs dependentes de DM. Observe que nenhum SFs está disponível para os modos de decaimento 5 e 6, e a ferramenta retornará 1 por padrão, leia esta seção do TWiki. Eles são fornecidos como histogramas TH1
. Por exemplo, para obter aqueles para o WP médio do discriminador 'DeepTau2017v2p1VSjet'
para 2016, use
file = TFile("data/TauID_SF_dm_DeepTau2017v2p1VSjet_2016Legacy.root")
hist = file.Get('Medium')
sf = hist.GetBinContent(hist.GetXaxis().FindBin(dm))
ou com a ferramenta,
from TauPOG.TauIDSFs.TauIDSFTool import TauIDSFTool
tauSFTool = TauIDSFTool('2017ReReco','MVAoldDM2017v2','Tight',dm=True,ptdm=False)
sf = tauSFTool.getSFvsDM(pt,dm,genmatch)
sf_up = tauSFTool.getSFvsDM(pt,dm,genmatch,unc='Up')
sf_down = tauSFTool.getSFvsDM(pt,dm,genmatch,unc='Down')
onde genmatch
é opcional.
Para aplicar SFs a elétrons ou múons falsificando taus, use o eta do tau reconstruído e o código genmatch
. Eles são fornecidos como histogramas TH1
:
file = TFile("data/TauID_SF_eta_DeepTau2017v2p1VSmu_2016Legacy.root")
hist = file.Get('Medium')
sf = hist.GetBinContent(hist.GetXaxis().FindBin(eta))
ou com a ferramenta,
python/TauIDSFTool.py
antiEleSFTool = TauIDSFTool('2017ReReco','antiEleMVA6','Loose')
antiMuSFTool = TauIDSFTool('2017ReReco','antiMu3','Tight')
antiEleSF = antiEleSFTool.getSFvsEta(eta,genmatch)
antiMuSF = antiMuSFTool.getSFvsEta(eta,genmatch)
A incerteza é obtida de maneira semelhante à acima.
Uso para DeepTau2018v2p5
As correções da escala de energia tau (TES) para taus com pT<140 GeV são fornecidas nos arquivos data/TauES_dm_DeepTau2018v2p5VSjet_$ERA_VSjet$X_VSele$Y_Jul18.root
, onde $X corresponde ao VSjet WP, $Y corresponde ao VSele WP, e $ERA = UL2016_preVFP, UL2016_postVFP, UL2017 ou UL2018
Cada arquivo contém um histograma ( 'tes'
) com o TES centrado em torno de 1.0
medido em compartimentos do modo de decaimento tau. Deve ser aplicado a um tau genuíno multiplicando o tau TLorentzVector
, ou equivalentemente, a energia do tau, pT e massa da seguinte forma:
file = TFile("data/TauES_dm_DeepTau2018v2p5VSjet_UL2018_VSjetMedium_VSeleVVLoose_Jul18.root")
hist = file.Get('tes')
tes = hist.GetBinContent(hist.GetXaxis().FindBin(dm))
# scale the tau's TLorentzVector
tau_tlv *= tes
# OR, scale the energy, mass and pT
tau_E *= tes
tau_pt *= tes
tau_m *= tes
As incertezas são iguais a 1,5% para os modos de decaimento 0, 1 e 10, e 2% para o modo de decaimento 11. As incertezas devem ser correlacionadas por modos de decaimento e eras. Para taus com pT>140 GeV, nenhuma correção deve ser aplicada ao valor nominal do TES do MC, mas uma incerteza maior de 3% deve ser incluída. Uma classe simples, TauESTool
, é fornecida para obter o TES como
from TauPOG.TauIDSFs.TauIDSFTool import TauESTool
testool = TauESTool('UL2018','DeepTau2018v2p5VSjet',wp='Medium', wp_vsele='VVLoose')
tes = testool.getTES(pt,dm,genmatch)
tesUp = testool.getTES(pt,dm,genmatch,unc='Up')
tesDown = testool.getTES(pt,dm,genmatch,unc='Down')
Este método calcula os valores centrais e a incerteza para pT baixo (20 GeV < pT < 140 GeV) e valores de pT mais altos (pT > 140 GeV).
Uso para DeepTau2017v2p1
A escala de energia tau (TES) é fornecida nos arquivos data/TauES_dm_*.root
. Cada arquivo contém um histograma ( 'tes'
) com o TES centrado em 1.0
. Deve ser aplicado a um tau genuíno multiplicando o tau TLorentzVector
, ou equivalentemente, a energia do tau, pT e massa da seguinte forma:
file = TFile("data/TauES_dm_DeepTau2017v2p1VSjet_UL2018.root")
hist = file.Get('tes')
tes = hist.GetBinContent(hist.GetXaxis().FindBin(dm))
# scale the tau's TLorentzVector
tau_tlv *= tes
# OR, scale the energy, mass and pT
tau_E *= tes
tau_pt *= tes
tau_m *= tes
Uma classe simples, TauESTool
, é fornecida para obter o TES como
from TauPOG.TauIDSFs.TauIDSFTool import TauESTool
testool = TauESTool('2017ReReco','DeepTau2017v2p1VSjet')
tes = testool.getTES(pt,dm,genmatch)
tesUp = testool.getTES(pt,dm,genmatch,unc='Up')
tesDown = testool.getTES(pt,dm,genmatch,unc='Down')
Este método calcula a incerteza correta em valores de pT intermediários (34 GeV < pT < 170 GeV) e superiores (pT > 170 GeV). As análises que desejam usar apenas o TES em pT alto podem usar o seguinte:
tes = testool.getTES_highpt(dm,genmatch)
A escala de energia falsa e -> tau (FES) é fornecida nos arquivos data/TauFES_eta-dm_*.root
. Cada arquivo contém um gráfico ( 'fes'
) com o FES centrado em 1.0
. Deve ser aplicado apenas a taus reconstruídos que são falsificados por elétrons (ou seja, genmatch==1
ou 3
) e têm DM 0 ou 1. A aplicação é semelhante à do TES acima. Uma classe simples, TauFESTool
, é fornecida para obter o FES como
from TauPOG.TauIDSFs.TauIDSFTool import TauFESTool
festool = TauESTool('2017ReReco')
fes = festool.getFES(eta,dm,genmatch)
fesUp = festool.getFES(eta,dm,genmatch,unc='Up')
fesDown = festool.getFES(eta,dm,genmatch,unc='Down')