Ce référentiel contient les facteurs d'échelle (SF) recommandés pour plusieurs discriminateurs tau, ainsi que des outils pour les lire. Des recommandations plus détaillées peuvent être trouvées sur cette page TWiki : https://twiki.cern.ch/twiki/bin/viewauth/CMS/TauIDRecommendationForRun2
️ Veuillez noter que dans un avenir proche, les SF au format de fichiers ROOT seront progressivement supprimés et, à long terme, remplacés par l'outilcorrectionlib
et les fichiers JSON fournis de manière centralisée par XPOG. Des instructions plus détaillées pour les corrections de tau sont ici.
Pour installer l'outil de lecture des SF tau ID, faites
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
Après avoir compilé avec cette hiérarchie de répertoires respective, vous pouvez accéder à l'outil ( python/TauIDSFTool.py
) en python comme
from TauPOG.TauIDSFs.TauIDSFTool import TauIDSFTool
Un test de l'outil en python peut être lancé avec
./test/testTauIDSFTool.py
Une implémentation C++ similaire est disponible dans src/TauIDSFTool.cc
, avec un exemple simple d'utilisation dans ( test/testTauIDSFTool.cc
). Il s'agit également d'un test d'installation qui peut être compilé et exécuté avec
scram b runtests -j8
Alternativement, si vous souhaitez utiliser l'outil Python de manière autonome sans CMSSW, clonez le référentiel et assurez-vous que votre PYTHONPATH
pointe vers le module TauIDSFTool
.
export PYTHONPATH=<path to python directory>:$PYTHONPATH
Ensuite, vous devriez être capable de faire :
from TauIDSFTool import TauIDSFTool
Ceci est un résumé approximatif des SF disponibles pour DeepTau2017v2p1
et DeepTau2018v2p5
dans data/
:
Composant Tau | genmatch | DeepTau2017v2p1 VSjet | DeepTau2017v2p1 VSe | DeepTau2017v2p1 VSmu | DeepTau2018v2p5 VSjet | échelle d'énergie |
---|---|---|---|---|---|---|
vrai tau | 5 | vs pT et DM (pour MC) ou vs pT, ou vs DM (pour Embed.) | – (*) | – (*) | vs pT et DM (pour MC), pas d'intégration. corrections dérivées encore | contre DM |
e -> tau faux | 1 , 3 | – | contre eta | – | vs DM et êta | |
mu -> tau faux | 2 , 4 | – | – | contre eta | – (±1% inc.) |
(*) Les facteurs d'échelle sont fournis uniquement pour un sous-ensemble des points de travail. Pour le discriminateur VSele, ils sont mesurés pour les WP VVLoose et Tight - les utilisateurs sont fortement encouragés à utiliser l'un de ces deux points de travail et doivent signaler au TauPOG pour approbation si un autre point de travail est utilisé. Pour le VSmu, ils sont mesurés pour le Tight WP mais nous ne nous attendons pas à une grande dépendance au VSmu WP choisi dans ce cas, vous êtes donc libre d'utiliser n'importe quel WP disponible que vous souhaitez pour le rejet du muon.
Le gen-matching est défini comme :
1
pour les électrons rapides2
pour les muons rapides3
pour les électrons issus de la désintégration de la protéine Tau4
pour les muons issus de la désintégration tau5
pour de vrais taus6
pour aucun match, ou des jets simulant des taus. Pour plus d'informations sur la correspondance entre les générations de taus, veuillez consulter ici. Notez que dans nanoAOD, cela est disponible sous la forme Tau_GenPartFlav
, mais jet ou aucune correspondance ne correspond à Tau_GenPartFlav==0
au lieu de 6
.Les SF sont destinés aux campagnes suivantes :
Étiquette de l'année | Campagne MC | Campagne de données |
---|---|---|
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* |
(*) Les SF fournis pour les échantillons pré-UL suivent les anciennes conventions de regroupement par pT ou DM, et suivent l'ancien schéma d'incertitude où seules les incertitudes totales sont rapportées.
Un script simple est fourni pour vider les corrections enregistrées dans les histogrammes ou les fonctions des fichiers dans data/
. Utiliser par exemple
./test/dumpTauIDSFs.py data/TauID_SF_*_DeepTau2017v2p1VSjet_*.root
Les SF dépendants de DM et pT sont fournis en tant que fonctions TF1 dans les fichiers ROOT "TauID_SF_dm_DeepTau2017v2p1VSjet_VSjetX_VSeleY_Mar07.root" pour DeepTau2017v2p1 et "TauID_SF_dm_DeepTau2018v2p5VSjet_VSjetX_VSeleY_Jul18.root". pour DeepTau2018v2p5, où X correspond au VSjet WP et Y correspond au VSele WP.
Les fichiers ROOT contiennent plusieurs fonctions. Les valeurs centrales sont obtenues à partir des fonctions nommées comme "DM$DM_$ERA_fit" où $DM est le mode de désintégration = 0, 1, 10 ou 11 et $ERA = 2016_preVFP, 2016_postVFP, 2017 ou 2018.
Par exemple, pour obtenir la valeur centrale des SF pour les WP Medium VSjet et VVLoose VSele du discriminateur 'DeepTau2017v2p1VSjet'
pour DM=1 en 2018, utilisez
file = TFile("data/TauID_SF_dm_DeepTau2017v2p1VSjet_VSjetMedium_VSeleVVLoose_Mar07.root")
func = file.Get('DM1_2018_fit')
sf = func.Eval(pt)
Il existe également des fonctions correspondant à des variations systématiques accessibles de la même manière. Le tableau ci-dessous donne un résumé des noms de fonctions et des incertitudes auxquelles ils correspondent pour DeepTau2017v2p1 :
Incertitude | Nom de la fonction dans les fichiers ROOT | Chaîne à transmettre à l'outil | Remarques | Corrélé par époque | Corrélé par 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 | ✗ | ✗ |
Le tableau ci-dessous donne un résumé des noms de fonctions et des incertitudes auxquelles ils correspondent pour DeepTau2018v2p5 :
Incertitude | Nom de la fonction dans les fichiers ROOT | Chaîne à transmettre à l'outil | Remarques | Corrélé par époque | Corrélé par 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 | ✗ | ✗ |
Les SF sont également accessibles via l'outil :
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)
Et les variations d'incertitude sont accessibles en utilisant :
sf = tauSFTool.getSFvsDMandPT(pt,dm,genmatch,unc)
où la chaîne unc
est utilisée pour identifier la variation systématique comme indiqué dans la troisième colonne du tableau ci-dessus
Les analyses sensibles au taus avec un pT> 140 GeV doivent passer aux SF dédiés à pT élevé mesurés dans des groupes de pT supérieurs à 140 GeV.
Les SF sont fournis sous forme d'objets TGraphAsymmErrors dans les fichiers ROOT "TauID_SF_Highpt_DeepTau2017v2p1VSjet_VSjetX_VSeleY_Mar07.root", où X correspond au VSjet WP et Y correspond au VSele WP.
Les fichiers ROOT contiennent plusieurs graphiques. Les valeurs centrales sont obtenues à partir des graphiques nommés comme "DMinclusive_$ERA" où $ERA = 2016_preVFP, 2016_postVFP, 2017 ou 2018. Ces graphiques contiennent 2 bacs pT avec pT 100-200 et pT>200 GeV. Vous ne devez les utiliser que comme valeurs regroupées. Pour les taus entre 140 et 200 GeV, utilisez le premier bac, et pour les taus avec pT>200 GeV, utilisez le deuxième bac.
Les SF sont également accessibles via l'outil :
from TauPOG.TauIDSFs.TauIDSFTool import TauIDSFTool
tauSFTool = TauIDSFTool(year='UL2018',id='DeepTau2017v2p1VSjet',wp='Medium',wp_vsele='VVLoose',highpT=True)
sf = tauSFTool.getHighPTSFvsPT(pt,genmatch)
Et les variations d'incertitude sont accessibles en utilisant :
sf = tauSFTool.getHighPTSFvsPT(pt,genmatch,unc)
où "unc" dépend de la source d'incertitude. Le tableau ci-dessous décrit les sources d'incertitude et la chaîne que vous devez transmettre à l'outil pour les récupérer :
Incertitude | Chaîne à transmettre à l'outil | Remarques | Corrélé par époque | Corrélé par 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 | ✓ | ✓ |
Obsolète pour UL MC - utilisez plutôt les SF dépendants de DM et de pT !
Les facteurs d'échelle intégrés suivent toujours les anciennes prescriptions pour les SF regroupés pT ou DM, donc ces instructions s'appliquent toujours dans ce cas.
Les SF dépendants de pT sont fournis sous forme de fonctions TF1
. Par exemple, pour obtenir ceux du WP moyen du discriminateur 'DeepTau2017v2p1VSjet'
pour 2016, utilisez
file = TFile("data/TauID_SF_pt_DeepTau2017v2p1VSjet_2016Legacy.root")
func = file.Get('Medium_cent')
sf = func.Eval(pt)
L'outil peut être utilisé comme
from TauPOG.TauIDSFs.TauIDSFTool import TauIDSFTool
tauSFTool = TauIDSFTool('2016Legacy','DeepTau2017v2p1VSjet','Medium',ptdm=False)
et pour récupérer le SF pour un tau pT donné, faites
sf = tauSFTool.getSFvsPT(pt)
Le SF ne doit être appliqué qu'aux objets tau qui correspondent aux taus « réels » au niveau de la génération ( genmatch==5
). Vous pouvez passer l'argument facultatif genmatch
et la fonction renverra le SF approprié si genmatch==5
, et 1.0
sinon,
sf = tauSFTool.getSFvsPT(pt,genmatch)
Les incertitudes recommandées peuvent être récupérées sous la forme
sf_up = tauSFTool.getSFvsPT(pt,genmatch,unc='Up')
sf_down = tauSFTool.getSFvsPT(pt,genmatch,unc='Down')
ou, les trois en une seule fois :
sf_down, sf, sf_up = tauSFTool.getSFvsPT(pt,genmatch,unc='All')
Pour l'ID tau SF des échantillons intégrés , définissez l'indicateur emb
sur True
:
tauSFTool = TauIDSFTool('2017ReReco','DeepTau2017v2p1VSjet','Medium',emb=True)
Si votre analyse utilise un DeepTauVSe WP plus lâche que VLoose et/ou DeepTauVSmu plus lâche que les discriminateurs moyens, vous devez ajouter une incertitude supplémentaire en utilisant l'indicateur otherVSlepWP
:
tauSFTool = TauIDSFTool('2017ReReco','DeepTau2017v2p1VSjet','Medium',otherVSlepWP=True)
Obsolète pour UL MC - utilisez plutôt les SF dépendants de DM et de pT !
Les facteurs d'échelle intégrés suivent toujours les anciennes prescriptions pour les SF regroupés pT ou DM, donc ces instructions s'appliquent toujours dans ce cas.
Les analyses utilisant des déclencheurs ditau et tau pT > 40 GeV peuvent utiliser des SF dépendants du DM. Veuillez noter qu'aucun SF n'est disponible pour les modes de désintégration 5 et 6, et que l'outil renverra 1 par défaut, veuillez lire cette section TWiki. Ils sont fournis sous forme d'histogrammes TH1
. Par exemple, pour obtenir ceux du WP moyen du discriminateur 'DeepTau2017v2p1VSjet'
pour 2016, utilisez
file = TFile("data/TauID_SF_dm_DeepTau2017v2p1VSjet_2016Legacy.root")
hist = file.Get('Medium')
sf = hist.GetBinContent(hist.GetXaxis().FindBin(dm))
ou avec l'outil,
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')
où genmatch
est facultatif.
Pour appliquer des SF à des électrons ou des muons simulant le taus, utilisez l'êta du tau reconstruit et le code genmatch
. Ils sont fournis sous forme d'histogrammes TH1
:
file = TFile("data/TauID_SF_eta_DeepTau2017v2p1VSmu_2016Legacy.root")
hist = file.Get('Medium')
sf = hist.GetBinContent(hist.GetXaxis().FindBin(eta))
ou avec l'outil,
python/TauIDSFTool.py
antiEleSFTool = TauIDSFTool('2017ReReco','antiEleMVA6','Loose')
antiMuSFTool = TauIDSFTool('2017ReReco','antiMu3','Tight')
antiEleSF = antiEleSFTool.getSFvsEta(eta,genmatch)
antiMuSF = antiMuSFTool.getSFvsEta(eta,genmatch)
L'incertitude est obtenue de la même manière que ci-dessus.
Utilisation pour DeepTau2018v2p5
Les corrections de l'échelle d'énergie tau (TES) pour les taus avec pT<140 GeV sont fournies dans les fichiers data/TauES_dm_DeepTau2018v2p5VSjet_$ERA_VSjet$X_VSele$Y_Jul18.root
, où $X correspond au VSjet WP, $Y correspond au VSele WP, et $ERA = UL2016_preVFP, UL2016_postVFP, UL2017 ou UL2018
Chaque fichier contient un histogramme ( 'tes'
) avec le TES centré autour de 1.0
mesuré dans les bacs du mode de désintégration de tau. Il doit être appliqué à un véritable tau en multipliant le tau TLorentzVector
, ou de manière équivalente, l'énergie tau, le pT et la masse comme suit :
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
Les incertitudes sont égales à 1,5% pour les modes de désintégration 0, 1 et 10, et à 2% pour le mode de désintégration 11. Les incertitudes doivent être décorrélées par les modes de désintégration et les époques. Pour les taus avec pT>140 GeV, aucune correction ne doit être appliquée à la valeur nominale du TES de MC mais une incertitude plus grande de 3 % doit être incluse. Une classe simple, TauESTool
, est fournie pour obtenir le TES comme
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')
Cette méthode calcule les valeurs centrales et l'incertitude pour les valeurs de pT faibles (20 GeV < pT < 140 GeV) et les valeurs de pT plus élevées (pT > 140 GeV).
Utilisation pour DeepTau2017v2p1
L'échelle d'énergie tau (TES) est fournie dans les fichiers data/TauES_dm_*.root
. Chaque fichier contient un histogramme ( 'tes'
) avec le TES centré autour de 1.0
. Il doit être appliqué à un véritable tau en multipliant le tau TLorentzVector
, ou de manière équivalente, l'énergie tau, le pT et la masse comme suit :
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
Une classe simple, TauESTool
, est fournie pour obtenir le TES comme
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')
Cette méthode calcule la bonne incertitude aux valeurs pT intermédiaires (34 GeV < pT < 170 GeV) et supérieures (pT > 170 GeV). Les analyses qui souhaitent uniquement utiliser le TES à un pT élevé peuvent utiliser à la place les éléments suivants :
tes = testool.getTES_highpt(dm,genmatch)
La fausse échelle d'énergie e -> tau (FES) est fournie dans les fichiers data/TauFES_eta-dm_*.root
. Chaque fichier contient un graphique ( 'fes'
) avec le FES centré autour de 1.0
. Il ne doit être appliqué qu'aux taus reconstruits qui sont truqués par des électrons (c'est-à-dire genmatch==1
ou 3
) et ont DM 0 ou 1. L'application est similaire à celle du TES ci-dessus. Une classe simple, TauFESTool
, est fournie pour obtenir le FES comme
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')