Этот репозиторий содержит рекомендуемые масштабные коэффициенты (SF) для нескольких тау-дискриминаторов и инструменты для их чтения. Более подробные рекомендации можно найти на этой странице TWiki: https://twiki.cern.ch/twiki/bin/viewauth/CMS/TauIDRecommendationForRun2.
️ Обратите внимание, что в ближайшем будущем SF в формате ROOT-файлов будут постепенно прекращены, а в долгосрочной перспективе заменены инструментомcorrectionlib
и файлами JSON, централизованно предоставляемыми XPOG. Более подробная инструкция по коррекции тау здесь.
Чтобы установить инструмент для чтения tau ID SF, выполните
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
После компиляции с соответствующей иерархией каталогов вы можете получить доступ к инструменту ( python/TauIDSFTool.py
) в Python как
from TauPOG.TauIDSFs.TauIDSFTool import TauIDSFTool
Тест инструмента на Python можно запустить с помощью
./test/testTauIDSFTool.py
Аналогичная реализация C++ доступна в src/TauIDSFTool.cc
, а простой пример использования — в ( test/testTauIDSFTool.cc
). Это также установочный тест, который можно скомпилировать и запустить с помощью
scram b runtests -j8
В качестве альтернативы, если вы хотите использовать автономный инструмент Python без CMSSW, клонируйте репозиторий и убедитесь, что ваш PYTHONPATH
указывает на модуль TauIDSFTool
.
export PYTHONPATH=<path to python directory>:$PYTHONPATH
После этого вы сможете сделать:
from TauIDSFTool import TauIDSFTool
Это приблизительный обзор доступных SF для DeepTau2017v2p1
и DeepTau2018v2p5
в data/
:
Тау-компонент | genmatch | DeepTau2017v2p1 VSjet | DeepTau2017v2p1 VSe | DeepTau2017v2p1 VSmu | DeepTau2018v2p5 VSjet | энергетическая шкала |
---|---|---|---|---|---|---|
настоящий тау | 5 | против pT и DM (для MC), или против pT, или против DM (для встраивания). | – (*) | – (*) | vs pT и DM (для MC), без встраивания. поправки уже внесены | против ДМ |
е -> тау фейк | 1 , 3 | – | против эта | – | против DM и эта | |
му -> тау фейк | 2 , 4 | – | – | против эта | – (±1% нераз.) |
(*) Масштабные коэффициенты указаны только для подмножества рабочих точек. Для дискриминатора VSele они измеряются для VVLoose и Tight WP — пользователям настоятельно рекомендуется использовать одну из этих двух рабочих точек, и они должны сообщить TauPOG для одобрения, если используется другая рабочая точка. Для VSmu они измерены для Tight WP, но в этом случае мы не ожидаем большой зависимости от выбранного VSmu WP, поэтому вы можете использовать любую доступную WP для подавления мюонов.
Соответствие генов определяется как:
1
для мгновенных электронов2
для мгновенных мюонов3
для электронов от тау-распада4
для мюонов от тау-распада5
за настоящий Таус6
— нет совпадения, или самолеты имитируют таус. Дополнительную информацию о сопоставлении поколений taus можно найти здесь. Обратите внимание, что в nanoAOD это доступно как Tau_GenPartFlav
, но jet или отсутствие соответствия соответствуют Tau_GenPartFlav==0
вместо 6
.SF предназначены для следующих кампаний:
Этикетка года | MC кампания | Кампания по сбору данных |
---|---|---|
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* |
(*) SF, предоставленные для проб до UL, соответствуют старым правилам группировки по pT или DM и следуют старой схеме неопределенности, в которой сообщаются только общие неопределенности.
Приведен простой скрипт для сброса исправлений, сохраненных в гистограммах или функциях файлов в data/
. Используйте, например
./test/dumpTauIDSFs.py data/TauID_SF_*_DeepTau2017v2p1VSjet_*.root
Зависимые от DM и pT SF предоставляются как функции TF1 в ROOT-файлах «TauID_SF_dm_DeepTau2017v2p1VSjet_VSjetX_VSeleY_Mar07.root» для DeepTau2017v2p1 и «TauID_SF_dm_DeepTau2018v2p5VSjet_VSjetX_VSeleY_Jul18.root» для DeepTau2018v2p5, где X соответствует VSjet WP, а Y соответствует VSele WP.
ROOT-файлы содержат несколько функций. Центральные значения получаются из функций с именами типа «DM$DM_$ERA_fit», где $DM — режим затухания = 0, 1, 10 или 11, а $ERA = 2016_preVFP, 2016_postVFP, 2017 или 2018.
Например, чтобы получить центральное значение SF для WP Medium VSjet и VVLoose VSele дискриминатора 'DeepTau2017v2p1VSjet'
для DM=1 в 2018 году, используйте
file = TFile("data/TauID_SF_dm_DeepTau2017v2p1VSjet_VSjetMedium_VSeleVVLoose_Mar07.root")
func = file.Get('DM1_2018_fit')
sf = func.Eval(pt)
Существуют также функции, соответствующие систематическим изменениям, доступ к которым можно получить таким же образом. В таблице ниже приведены имена функций и неопределенности, которым они соответствуют для DeepTau2017v2p1:
Неопределенность | Имя функции в ROOT-файлах | Строка для передачи инструменту | Примечания | Коррелируется по эпохе | Коррелируется по 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 | ✗ | ✗ |
В таблице ниже приведены имена функций и неопределенности, которым они соответствуют для DeepTau2018v2p5:
Неопределенность | Имя функции в ROOT-файлах | Строка для передачи инструменту | Примечания | Коррелируется по эпохе | Коррелируется по 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 | ✗ | ✗ |
Доступ к SF также можно получить с помощью инструмента:
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)
Доступ к вариациям неопределенности можно получить, используя:
sf = tauSFTool.getSFvsDMandPT(pt,dm,genmatch,unc)
где строка unc
используется для идентификации систематического отклонения, как указано в третьем столбце приведенной выше таблицы.
Анализы, чувствительные к taus с pT>140 ГэВ, должны переключаться на специальные SF с высоким pT, измеренные в интервалах pT выше 140 ГэВ.
SF предоставляются как объекты TGraphAsymmErrors в корневых файлах «TauID_SF_Highpt_DeepTau2017v2p1VSjet_VSjetX_VSeleY_Mar07.root», где X соответствует VSjet WP, а Y соответствует VSele WP.
ROOT-файлы содержат несколько графиков. Центральные значения получены из графиков с названием «DMinclusive_$ERA», где $ERA = 2016_preVFP, 2016_postVFP, 2017 или 2018. Эти графики содержат 2 элемента pT с pT 100–200 и pT>200 ГэВ. Вы должны использовать их только как объединенные значения. Для тау между 140–200 ГэВ используйте первый бин, а для тау с pT>200 ГэВ используйте второй бин.
Доступ к SF также можно получить с помощью инструмента:
from TauPOG.TauIDSFs.TauIDSFTool import TauIDSFTool
tauSFTool = TauIDSFTool(year='UL2018',id='DeepTau2017v2p1VSjet',wp='Medium',wp_vsele='VVLoose',highpT=True)
sf = tauSFTool.getHighPTSFvsPT(pt,genmatch)
Доступ к вариациям неопределенности можно получить, используя:
sf = tauSFTool.getHighPTSFvsPT(pt,genmatch,unc)
где «unc» зависит от источника неопределенности. В таблице ниже описаны источники неопределенности и строка, которую необходимо передать инструменту для их получения:
Неопределенность | Строка для передачи инструменту | Примечания | Коррелируется по эпохе | Коррелирует с 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 | ✓ | ✓ |
Устарело для UL MC — вместо этого используйте SF, зависящие от DM и pT!
Встроенные масштабные коэффициенты по-прежнему соответствуют старым предписаниям для SF с интервалами pT или DM, поэтому эти инструкции по-прежнему применимы в этом случае.
pT-зависимые SF представлены как функции TF1
. Например, чтобы получить значения для среднего WP дискриминатора 'DeepTau2017v2p1VSjet'
за 2016 год, используйте
file = TFile("data/TauID_SF_pt_DeepTau2017v2p1VSjet_2016Legacy.root")
func = file.Get('Medium_cent')
sf = func.Eval(pt)
Инструмент можно использовать как
from TauPOG.TauIDSFs.TauIDSFTool import TauIDSFTool
tauSFTool = TauIDSFTool('2016Legacy','DeepTau2017v2p1VSjet','Medium',ptdm=False)
и чтобы получить SF для данного тау pT, выполните
sf = tauSFTool.getSFvsPT(pt)
SF следует применять только к объектам тау, которые соответствуют «настоящим» тау на уровне поколения ( genmatch==5
). Вы можете передать необязательный аргумент genmatch
, и функция вернет соответствующий SF, если genmatch==5
, и 1.0
в противном случае.
sf = tauSFTool.getSFvsPT(pt,genmatch)
Рекомендуемые неопределенности можно получить как
sf_up = tauSFTool.getSFvsPT(pt,genmatch,unc='Up')
sf_down = tauSFTool.getSFvsPT(pt,genmatch,unc='Down')
или все три за один раз:
sf_down, sf, sf_up = tauSFTool.getSFvsPT(pt,genmatch,unc='All')
Для tau ID SF внедренных образцов установите флаг emb
в True
:
tauSFTool = TauIDSFTool('2017ReReco','DeepTau2017v2p1VSjet','Medium',emb=True)
Если в вашем анализе используется более слабый дискриминатор DeepTauVSe WP, чем VLoose, и/или DeepTauVSmu, более слабый, чем средние дискриминаторы, следует добавить дополнительную неопределенность с помощью otherVSlepWP
:
tauSFTool = TauIDSFTool('2017ReReco','DeepTau2017v2p1VSjet','Medium',otherVSlepWP=True)
Устарело для UL MC — вместо этого используйте SF, зависящие от DM и pT!
Встроенные масштабные коэффициенты по-прежнему соответствуют старым предписаниям для SF с интервалами pT или DM, поэтому эти инструкции по-прежнему применимы в этом случае.
Анализы с использованием дитау-триггеров и тау pT > 40 ГэВ могут использовать SF, зависящие от DM. Обратите внимание, что для режимов затухания 5 и 6 SF недоступны, и инструмент по умолчанию возвращает 1, пожалуйста, прочитайте этот раздел TWiki. Они представлены в виде гистограмм TH1
. Например, чтобы получить значения для среднего WP дискриминатора 'DeepTau2017v2p1VSjet'
за 2016 год, используйте
file = TFile("data/TauID_SF_dm_DeepTau2017v2p1VSjet_2016Legacy.root")
hist = file.Get('Medium')
sf = hist.GetBinContent(hist.GetXaxis().FindBin(dm))
или с помощью инструмента,
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')
где genmatch
является необязательным.
Чтобы применить SF к электронам или мюонам, имитирующим тау, используйте эта реконструированного тау и код genmatch
. Они представлены в виде гистограмм TH1
:
file = TFile("data/TauID_SF_eta_DeepTau2017v2p1VSmu_2016Legacy.root")
hist = file.Get('Medium')
sf = hist.GetBinContent(hist.GetXaxis().FindBin(eta))
или с помощью инструмента,
python/TauIDSFTool.py
antiEleSFTool = TauIDSFTool('2017ReReco','antiEleMVA6','Loose')
antiMuSFTool = TauIDSFTool('2017ReReco','antiMu3','Tight')
antiEleSF = antiEleSFTool.getSFvsEta(eta,genmatch)
antiMuSF = antiMuSFTool.getSFvsEta(eta,genmatch)
Неопределенность получается аналогичным образом, как указано выше.
Использование для DeepTau2018v2p5
Поправки тау-шкалы энергии (TES) для тау с pT<140 ГэВ представлены в файлах data/TauES_dm_DeepTau2018v2p5VSjet_$ERA_VSjet$X_VSele$Y_Jul18.root
, где $X соответствует VSjet WP, $Y соответствует VSele WP, и $ERA = UL2016_preVFP, UL2016_postVFP, UL2017 или UL2018
Каждый файл содержит одну гистограмму ( 'tes'
) с TES, сосредоточенным около 1.0
измеренным в интервалах режима распада тау. Его следует применить к настоящему тау путем умножения тау TLorentzVector
или, что эквивалентно, энергии тау, pT и массы следующим образом:
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
Неопределенности равны 1,5% для режимов затухания 0, 1 и 10 и 2% для режима затухания 11. Неопределенности должны быть декоррелированы по режимам затухания и эрам. Для taus с pT>140 ГэВ к номинальному значению TES от MC не следует вносить никаких поправок, но следует включить большую неопределенность в 3%. Для получения TES предусмотрен простой класс TauESTool
.
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')
Этот метод вычисляет центральные значения и неопределенность для низких значений pT (20 ГэВ < pT < 140 ГэВ) и более высоких значений pT (pT > 140 ГэВ).
Использование для DeepTau2017v2p1
Шкала энергии тау (TES) представлена в файлах data/TauES_dm_*.root
. Каждый файл содержит одну гистограмму ( 'tes'
) с TES по центру около 1.0
. Его следует применить к настоящему тау путем умножения тау TLorentzVector
или, что эквивалентно, энергии тау, pT и массы следующим образом:
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
Для получения TES предусмотрен простой класс TauESTool
.
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')
Этот метод рассчитывает правильную неопределенность при промежуточных (34 ГэВ < pT < 170 ГэВ) и более высоких значениях pT (pT > 170 ГэВ). Анализы, в которых требуется использовать TES только при высоком pT, вместо этого могут использовать следующее:
tes = testool.getTES_highpt(dm,genmatch)
Шкала ложной энергии e -> tau (FES) представлена в файлах data/TauFES_eta-dm_*.root
. Каждый файл содержит один график ( 'fes'
) с FES по центру около 1.0
. Его следует применять только к реконструированным тау, которые подделаны электронами (т.е. genmatch==1
или 3
) и имеют DM 0 или 1. Применение аналогично описанному выше TES. Простой класс TauFESTool
предназначен для получения FES в виде
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')