Dieses Repository enthält die empfohlenen Skalenfaktoren (SFs) für mehrere Tau-Diskriminatoren und Tools zum Lesen dieser. Detailliertere Empfehlungen finden Sie auf dieser TWiki-Seite: https://twiki.cern.ch/twiki/bin/viewauth/CMS/TauIDRecommendationForRun2
️ Bitte beachten Sie, dass die SFs im Format von ROOT-Dateien in naher Zukunft auslaufen und langfristig durch das von der XPOG zentral bereitgestelltecorrectionlib
Tool und JSON-Dateien ersetzt werden. Ausführlichere Anweisungen zur Tau-Korrektur finden Sie hier.
Um das Tool zum Lesen der Tau-ID-SFs zu installieren, gehen Sie wie folgt vor:
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
Nach dem Kompilieren mit dieser entsprechenden Verzeichnishierarchie können Sie in Python als auf das Tool ( python/TauIDSFTool.py
) zugreifen
from TauPOG.TauIDSFs.TauIDSFTool import TauIDSFTool
Ein Test des Tools in Python kann mit ausgeführt werden
./test/testTauIDSFTool.py
Eine ähnliche C++-Implementierung ist in src/TauIDSFTool.cc
verfügbar, mit einem einfachen Anwendungsbeispiel in ( test/testTauIDSFTool.cc
). Dies ist auch ein Installationstest, der kompiliert und ausgeführt werden kann
scram b runtests -j8
Wenn Sie alternativ das Python-Tool eigenständig ohne CMSSW verwenden möchten, klonen Sie das Repository und stellen Sie sicher, dass Ihr PYTHONPATH
auf das TauIDSFTool
-Modul verweist.
export PYTHONPATH=<path to python directory>:$PYTHONPATH
Anschließend sollten Sie in der Lage sein:
from TauIDSFTool import TauIDSFTool
Dies ist eine grobe Zusammenfassung der verfügbaren SFs für DeepTau2017v2p1
und DeepTau2018v2p5
in data/
:
Tau-Komponente | genmatch | DeepTau2017v2p1 VSjet | DeepTau2017v2p1 VSe | DeepTau2017v2p1 VSmu | DeepTau2018v2p5 VSjet | Energieskala |
---|---|---|---|---|---|---|
echtes Tau | 5 | vs. pT und DM (für MC) oder vs. pT, oder vs. DM (für Embed.) | – (*) | – (*) | vs. pT und DM (für MC), keine Einbettung. Korrekturen noch abgeleitet | vs. DM |
e -> Tau Fake | 1 , 3 | – | vs. eta | – | vs. DM und eta | |
mu -> tau fake | 2 , 4 | – | – | vs. eta | – (±1 % unz.) |
(*) Die Skalierungsfaktoren werden nur für eine Teilmenge der Arbeitspunkte bereitgestellt. Für den VSele-Diskriminator werden sie für die VVLoose- und Tight-WPs gemessen. Benutzern wird dringend empfohlen, einen dieser beiden Arbeitspunkte zu verwenden, und sie sollten sich bei der TauPOG zur Genehmigung melden, wenn ein anderer Arbeitspunkt verwendet wird. Für den VSmu werden sie für den Tight WP gemessen, aber wir erwarten in diesem Fall keine große Abhängigkeit vom gewählten VSmu WP, sodass Sie für die Myonenunterdrückung jeden verfügbaren WP verwenden können, den Sie möchten.
Das Gen-Matching ist definiert als:
1
für schnelle Elektronen2
für schnelle Myonen3
für Elektronen aus dem Tau-Zerfall4
für Myonen aus Tau-Zerfall5
für echte Taus6
für kein Match oder Jets, die Taus vortäuschen. Weitere Informationen zum Gen-Matching von Taus finden Sie hier. Beachten Sie, dass dies in nanoAOD als Tau_GenPartFlav
verfügbar ist, Jet oder keine Übereinstimmung jedoch Tau_GenPartFlav==0
statt 6
entsprechen.Die SFs sind für folgende Kampagnen gedacht:
Jahresbeschriftung | MC-Kampagne | Datenkampagne |
---|---|---|
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* |
(*) Die für Proben vor UL bereitgestellten SFs folgen den alten Konventionen für die Klasseneinteilung entweder nach pT oder DM und folgen dem alten Unsicherheitsschema, bei dem nur Gesamtunsicherheiten gemeldet werden
Es wird ein einfaches Skript bereitgestellt, um die in Histogrammen oder Funktionen der Dateien gespeicherten Korrekturen in data/
abzulegen. Verwenden Sie zum Beispiel
./test/dumpTauIDSFs.py data/TauID_SF_*_DeepTau2017v2p1VSjet_*.root
Die DM- und pT-abhängigen SFs werden als TF1-Funktionen in den ROOT-Dateien „TauID_SF_dm_DeepTau2017v2p1VSjet_VSjetX_VSeleY_Mar07.root“ für DeepTau2017v2p1 und „TauID_SF_dm_DeepTau2018v2p5VSjet_VSjetX_VSeleY_Jul18.root“ bereitgestellt. für DeepTau2018v2p5, wobei X dem VSjet WP und Y dem VSele WP entspricht.
Die ROOT-Dateien enthalten mehrere Funktionen. Die zentralen Werte werden aus Funktionen mit dem Namen „DM$DM_$ERA_fit“ erhalten, wobei $DM der Abklingmodus = 0, 1, 10 oder 11 ist und $ERA = 2016_preVFP, 2016_postVFP, 2017 oder 2018.
Um beispielsweise den zentralen Wert der SFs für die WPs Medium VSjet und VVLoose VSele des Diskriminators 'DeepTau2017v2p1VSjet'
für DM=1 im Jahr 2018 zu erhalten, verwenden Sie
file = TFile("data/TauID_SF_dm_DeepTau2017v2p1VSjet_VSjetMedium_VSeleVVLoose_Mar07.root")
func = file.Get('DM1_2018_fit')
sf = func.Eval(pt)
Es gibt auch Funktionen, die systematischen Variationen entsprechen und auf die gleiche Weise zugegriffen werden kann. Die folgende Tabelle enthält eine Zusammenfassung der Funktionsnamen und deren Unsicherheiten für DeepTau2017v2p1:
Unsicherheit | Funktionsname in ROOT-Dateien | Zeichenfolge, die an das Tool übergeben werden soll | Notizen | Korrelation nach Epoche | Korreliert durch 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 | ✗ | ✗ |
Die folgende Tabelle gibt eine Zusammenfassung der Funktionsnamen und deren Unsicherheiten für DeepTau2018v2p5:
Unsicherheit | Funktionsname in ROOT-Dateien | Zeichenfolge, die an das Tool übergeben werden soll | Notizen | Korrelation nach Epoche | Korreliert durch 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 | ✗ | ✗ |
Auf die SFs kann auch über das Tool zugegriffen werden:
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)
Auf Unsicherheitsvariationen kann zugegriffen werden mit:
sf = tauSFTool.getSFvsDMandPT(pt,dm,genmatch,unc)
Dabei wird die unc
Zeichenfolge verwendet, um die systematische Variation zu identifizieren, wie in der dritten Spalte der obigen Tabelle angegeben
Analysen, die empfindlich auf Taus mit pT>140 GeV reagieren, sollten auf die dedizierten SFs mit hohem pT umsteigen, die in pT-Bins über 140 GeV gemessen werden
Die SFs werden als TGraphAsymmErrors-Objekte in den ROOT-Dateien „TauID_SF_Highpt_DeepTau2017v2p1VSjet_VSjetX_VSeleY_Mar07.root“ bereitgestellt, wobei X dem VSjet-WP und Y dem VSele-WP entspricht.
Die ROOT-Dateien enthalten mehrere Diagramme. Die zentralen Werte werden aus den Diagrammen mit dem Namen „DMinclusive_$ERA“ ermittelt, wobei $ERA = 2016_preVFP, 2016_postVFP, 2017 oder 2018 ist. Diese Diagramme enthalten 2 pT-Bins mit pT 100–200 und pT>200 GeV. Sie sollten diese nur als gruppierte Werte verwenden. Für Taus zwischen 140 und 200 GeV verwenden Sie die erste Klasse und für Taus mit pT>200 GeV die zweite Klasse.
Auf die SFs kann auch über das Tool zugegriffen werden:
from TauPOG.TauIDSFs.TauIDSFTool import TauIDSFTool
tauSFTool = TauIDSFTool(year='UL2018',id='DeepTau2017v2p1VSjet',wp='Medium',wp_vsele='VVLoose',highpT=True)
sf = tauSFTool.getHighPTSFvsPT(pt,genmatch)
Und auf Unsicherheitsvariationen kann zugegriffen werden mit:
sf = tauSFTool.getHighPTSFvsPT(pt,genmatch,unc)
wobei „unc“ von der Unsicherheitsquelle abhängt. In der folgenden Tabelle werden die Unsicherheitsquellen und die Zeichenfolge beschrieben, die Sie an das Tool übergeben müssen, um sie abzurufen:
Unsicherheit | Zeichenfolge, die an das Tool übergeben werden soll | Notizen | Korrelation nach Epoche | Korreliert durch 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 | ✓ | ✓ |
Für UL MC veraltet – verwenden Sie stattdessen DM- und pT-abhängige SFs!
Die eingebetteten Skalierungsfaktoren folgen immer noch den alten Vorschriften für pT- oder DM-klassifizierte SFs, sodass diese Anweisungen in diesem Fall weiterhin gelten
Die pT-abhängigen SFs werden als TF1
Funktionen bereitgestellt. Um beispielsweise die Werte für das mittlere WP des Diskriminators 'DeepTau2017v2p1VSjet'
für 2016 zu erhalten, verwenden Sie
file = TFile("data/TauID_SF_pt_DeepTau2017v2p1VSjet_2016Legacy.root")
func = file.Get('Medium_cent')
sf = func.Eval(pt)
Das Tool kann als verwendet werden
from TauPOG.TauIDSFs.TauIDSFTool import TauIDSFTool
tauSFTool = TauIDSFTool('2016Legacy','DeepTau2017v2p1VSjet','Medium',ptdm=False)
und um die SF für einen gegebenen Tau-pT abzurufen, tun Sie dies
sf = tauSFTool.getSFvsPT(pt)
Die SF sollte nur auf Tau-Objekte angewendet werden, die auf Gen-Ebene mit „echten“ Taus übereinstimmen ( genmatch==5
). Sie können das optionale Argument genmatch
übergeben und die Funktion gibt die entsprechende SF zurück, wenn genmatch==5
, andernfalls 1.0
.
sf = tauSFTool.getSFvsPT(pt,genmatch)
Die empfohlenen Unsicherheiten können wie folgt abgerufen werden
sf_up = tauSFTool.getSFvsPT(pt,genmatch,unc='Up')
sf_down = tauSFTool.getSFvsPT(pt,genmatch,unc='Down')
oder alle drei auf einmal:
sf_down, sf, sf_up = tauSFTool.getSFvsPT(pt,genmatch,unc='All')
Setzen Sie für die Tau-ID SF der eingebetteten Proben das emb
Flag auf True
:
tauSFTool = TauIDSFTool('2017ReReco','DeepTau2017v2p1VSjet','Medium',emb=True)
Wenn Ihre Analyse einen DeepTauVSe WP lockerer als VLoose und/oder DeepTauVSmu lockerer als mittlere Diskriminatoren verwendet, sollten Sie mithilfe des otherVSlepWP
-Flags zusätzliche Unsicherheit hinzufügen:
tauSFTool = TauIDSFTool('2017ReReco','DeepTau2017v2p1VSjet','Medium',otherVSlepWP=True)
Für UL MC veraltet – verwenden Sie stattdessen DM- und pT-abhängige SFs!
Die eingebetteten Skalierungsfaktoren folgen immer noch den alten Vorschriften für pT- oder DM-klassifizierte SFs, sodass diese Anweisungen in diesem Fall weiterhin gelten
Analysen mit Ditau-Triggern und Tau-pT > 40 GeV können DM-abhängige SFs verwenden. Bitte beachten Sie, dass für die Abklingmodi 5 und 6 keine SFs verfügbar sind und das Tool standardmäßig 1 zurückgibt. Bitte lesen Sie diesen TWiki-Abschnitt. Sie werden als TH1
Histogramme bereitgestellt. Um beispielsweise die Werte für das mittlere WP des Diskriminators 'DeepTau2017v2p1VSjet'
für 2016 zu erhalten, verwenden Sie
file = TFile("data/TauID_SF_dm_DeepTau2017v2p1VSjet_2016Legacy.root")
hist = file.Get('Medium')
sf = hist.GetBinContent(hist.GetXaxis().FindBin(dm))
oder mit dem Werkzeug,
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')
wobei genmatch
optional ist.
Um SFs auf Elektronen oder Myonen anzuwenden, die Taus vortäuschen, verwenden Sie das Eta des rekonstruierten Taus und den genmatch
-Code. Sie werden als TH1
Histogramme bereitgestellt:
file = TFile("data/TauID_SF_eta_DeepTau2017v2p1VSmu_2016Legacy.root")
hist = file.Get('Medium')
sf = hist.GetBinContent(hist.GetXaxis().FindBin(eta))
oder mit dem Werkzeug,
python/TauIDSFTool.py
antiEleSFTool = TauIDSFTool('2017ReReco','antiEleMVA6','Loose')
antiMuSFTool = TauIDSFTool('2017ReReco','antiMu3','Tight')
antiEleSF = antiEleSFTool.getSFvsEta(eta,genmatch)
antiMuSF = antiMuSFTool.getSFvsEta(eta,genmatch)
Die Unsicherheit wird auf ähnliche Weise wie oben ermittelt.
Verwendung für DeepTau2018v2p5
Die Korrekturen der Tau-Energieskala (TES) für Taus mit pT<140 GeV werden in den Dateien data/TauES_dm_DeepTau2018v2p5VSjet_$ERA_VSjet$X_VSele$Y_Jul18.root
bereitgestellt, wobei $X dem VSjet-WP entspricht, $Y dem VSele-WP entspricht und $ERA = UL2016_preVFP, UL2016_postVFP, UL2017 oder UL2018
Jede Datei enthält ein Histogramm ( 'tes'
), wobei der TES um 1.0
zentriert ist, gemessen in Bins des Tau-Zerfallsmodus. Es sollte auf ein echtes Tau angewendet werden, indem der Tau- TLorentzVector
oder gleichwertig die Tau-Energie, pT und die Masse wie folgt multipliziert werden:
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
Die Unsicherheiten betragen 1,5 % für die Zerfallsmodi 0, 1 und 10 und 2 % für den Zerfallsmodus 11. Die Unsicherheiten sollten nach Zerfallsmodi und Epochen dekorreliert werden. Für Taus mit pT>140 GeV sollten keine Korrekturen auf den nominalen TES-Wert von MC angewendet werden, es sollte jedoch eine größere Unsicherheit von 3 % berücksichtigt werden. Eine einfache Klasse, TauESTool
, wird bereitgestellt, um das TES als zu erhalten
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')
Diese Methode berechnet die zentralen Werte und die Unsicherheit für niedrige pT-Werte (20 GeV < pT < 140 GeV) und höhere pT-Werte (pT > 140 GeV).
Verwendung für DeepTau2017v2p1
Die Tau-Energieskala (TES) wird in den Dateien data/TauES_dm_*.root
bereitgestellt. Jede Datei enthält ein Histogramm ( 'tes'
), wobei der TES um 1.0
herum zentriert ist. Es sollte auf ein echtes Tau angewendet werden, indem der Tau- TLorentzVector
oder gleichwertig die Tau-Energie, pT und die Masse wie folgt multipliziert werden:
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
Eine einfache Klasse, TauESTool
, wird bereitgestellt, um das TES als zu erhalten
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')
Diese Methode berechnet die richtige Unsicherheit bei mittleren (34 GeV < pT < 170 GeV) und höheren pT-Werten (pT > 170 GeV). Analysen, die den TES nur bei hohem pT verwenden möchten, können stattdessen Folgendes verwenden:
tes = testool.getTES_highpt(dm,genmatch)
Die e -> Tau Fake Energy Scale (FES) wird in den Dateien data/TauFES_eta-dm_*.root
bereitgestellt. Jede Datei enthält ein Diagramm ( 'fes'
), wobei der FES um 1.0
herum zentriert ist. Es sollte nur auf rekonstruierte Taus angewendet werden, die durch Elektronen gefälscht sind (z. B. genmatch==1
oder 3
) und DM 0 oder 1 haben. Die Anwendung ist ähnlich wie für das TES oben. Eine einfache Klasse, TauFESTool
, wird bereitgestellt, um das FES als zu erhalten
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')