该存储库包含几个 tau 鉴别器的推荐比例因子 (SF) 以及读取它们的工具。更详细的建议可以在此 TWiki 页面上找到:https://twiki.cern.ch/twiki/bin/viewauth/CMS/TauIDRecommendationForRun2
️ 请注意,在不久的将来,ROOT 文件格式的 SF 将被淘汰,并在长期内由 XPOG 集中提供的correctionlib
工具和 JSON 文件取代。有关 tau 校正的更详细说明请参见此处。
要安装用于读取 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 中访问该工具 ( python/TauIDSFTool.py
),如下所示
from TauPOG.TauIDSFs.TauIDSFTool import TauIDSFTool
可以使用 python 运行该工具的测试
./test/testTauIDSFTool.py
src/TauIDSFTool.cc
中提供了类似的 C++ 实现,并在 ( test/testTauIDSFTool.cc
) 中提供了简单的使用示例。这也是一个安装测试,可以编译并运行
scram b runtests -j8
或者,如果您想在没有 CMSSW 的情况下独立使用 python 工具,请克隆存储库并确保您的PYTHONPATH
指向TauIDSFTool
模块。
export PYTHONPATH=<path to python directory>:$PYTHONPATH
之后,您应该能够执行以下操作:
from TauIDSFTool import TauIDSFTool
这是data/
中DeepTau2017v2p1
和DeepTau2018v2p5
的可用 SF 的粗略摘要:
Tau 成分 | genmatch | DeepTau2017v2p1 VSjet | DeepTau2017v2p1 VSe | DeepTau2017v2p1 VSmu | DeepTau2018v2p5 VSjet | 能量等级 |
---|---|---|---|---|---|---|
真正的tau蛋白 | 5 | 与 pT 和 DM(对于 MC)或与 pT 或与 DM(对于嵌入) | – (*) | – (*) | 与 pT 和 DM(对于 MC),无嵌入。尚未得出修正 | 与 DM |
e -> tau 假冒 | 1 , 3 | – | 与 eta | – | 与 DM 和 eta | |
mu -> tau 假 | 2 , 4 | – | – | 与 eta | –(±1% 未计算) |
(*) 仅针对工作点的子集提供比例因子。对于 VSele 判别器,它们是针对 VVLoose 和 Tight WP 进行测量的 - 强烈鼓励用户使用这两个工作点之一,如果使用另一个工作点,应向 TauPOG 报告以获得批准。对于 VSmu,它们是针对紧密 WP 进行测量的,但我们预计在这种情况下不会对所选的 VSmu WP 有很大的依赖性,因此您可以自由地使用任何您喜欢的可用 WP 来抑制 μ 子。
基因匹配定义为:
1
为瞬发电子2
为瞬发μ介子3
表示来自 tau 衰变的电子4
代表来自 tau 衰变的 μ 子5
代表真正的 taus6
代表不匹配,或者喷气式飞机假装 taus。有关 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* |
(*) 为 UL 前样本提供的 SF 遵循 pT 或 DM 分档的旧惯例,并遵循旧的不确定性方案,其中仅报告总不确定性
给出了一个简单的脚本来转储保存在data/
中文件的直方图或函数中的校正。使用例如
./test/dumpTauIDSFs.py data/TauID_SF_*_DeepTau2017v2p1VSjet_*.root
DM 和 pT 相关 SF 在 DeepTau2017v2p1 的“TauID_SF_dm_DeepTau2017v2p1VSjet_VSjetX_VSeleY_Mar07.root”根文件和 DeepTau2017v2p1 的“TauID_SF_dm_DeepTau2018v2p5VSjet_VSjetX_VSeleY_Jul18.root”根文件中作为 TF1 函数提供。 DeepTau2018v2p5,其中 X 对应于 VSjet WP,Y 对应于 VSele WP。
ROOT 文件包含多个函数。中心值是从名为“DM$DM_$ERA_fit”的函数中获得的,其中 $DM 是衰减模式 = 0、1、10 或 11,$ERA = 2016_preVFP、2016_postVFP、2017 或 2018。
例如,要获取 2018 年 DM=1 时'DeepTau2017v2p1VSjet'
鉴别器的 Medium VSjet 和 VVLoose VSele WP 的 SF 中心值,请使用
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
字符串用于识别上表第三列中给出的系统变异
对 pT>140 GeV 的 taus 敏感的分析应切换到在 140 GeV 以上的 pT 箱中测量的专用高 pT SF
SF 在“TauID_SF_Highpt_DeepTau2017v2p1VSjet_VSjetX_VSeleY_Mar07.root”ROOT 文件中作为 TGraphAsymmErrors 对象提供,其中 X 对应于 VSjet WP,Y 对应于 VSele WP。
ROOT 文件包含多个图表。中心值是从名为“DMinclusive_$ERA”的图表中获得的,其中 $ERA = 2016_preVFP、2016_postVFP、2017 或 2018。这些图表包含 2 个 pT bin,pT 为 100-200,且 pT>200 GeV。您应该仅将它们用作分箱值。对于 140-200 GeV 之间的 taus,使用第一个 bin,对于 pT>200 GeV 的 taus,使用第二个 bin。
还可以使用以下工具访问 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 - 请改用 DM 和 pT 相关的 SF!
嵌入的比例因子仍然遵循 pT 或 DM 分档 SF 的旧规定,因此这些说明在这种情况下仍然适用
pT 依赖性 SF 作为TF1
函数提供。例如,要获取 2016 年'DeepTau2017v2p1VSjet'
鉴别器的中 WP 的值,请使用
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)
并检索给定 tau pT 的 SF,执行
sf = tauSFTool.getSFvsPT(pt)
SF 应该只应用于在 gen 级别匹配“真实”taus 的 tau 对象 ( genmatch==5
)。您可以传递可选的genmatch
参数,如果genmatch==5
,该函数将返回适当的 SF ,否则返回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)
如果您的分析使用比 VLoose 宽松的 DeepTauVSe WP 和/或比中等鉴别器宽松的 DeepTauVSmu,则应使用otherVSlepWP
标志添加额外的不确定性:
tauSFTool = TauIDSFTool('2017ReReco','DeepTau2017v2p1VSjet','Medium',otherVSlepWP=True)
已弃用 UL MC - 请改用 DM 和 pT 相关的 SF!
嵌入的比例因子仍然遵循 pT 或 DM 分档 SF 的旧规定,因此这些说明在这种情况下仍然适用
使用 ditau 触发器和 tau pT > 40 GeV 进行分析,可以使用 DM 依赖性 SF。请注意,衰减模式 5 和 6 没有可用的 SF,并且该工具默认返回 1,请阅读此 TWiki 部分。它们以TH1
直方图的形式提供。例如,要获取 2016 年'DeepTau2017v2p1VSjet'
鉴别器的中 WP 的值,请使用
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 应用于伪造 tau 的电子或 μ 子,请使用重建 tau 的 eta 和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 的用法
文件data/TauES_dm_DeepTau2018v2p5VSjet_$ERA_VSjet$X_VSele$Y_Jul18.root
中提供了 pT<140 GeV 的 tau 能量标度 (TES) 校正,其中 $X 对应于 VSjet WP,$Y 对应于 VSele WP, $ERA = UL2016_preVFP, UL2016_postVFP、UL2017 或 UL2018
每个文件包含一个直方图 ( 'tes'
),TES 以1.0
为中心,在 tau 衰变模式的 bin 中测量。它应该通过乘以 tau TLorentzVector
或等效的 tau 能量、pT 和质量来应用于真正的 tau,如下所示:
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
衰减模式 0、1 和 10 的不确定性等于 1.5%,衰减模式 11 的不确定性等于 2%。不确定性应与衰减模式和时代去相关。对于 pT>140 GeV 的 taus,不应对 MC 的标称 TES 值进行修正,但应包括更大的 3% 不确定性。提供了一个简单的类TauESTool
来获取 TES:
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 GeV < pT < 140 GeV) 和较高 pT 值 (pT > 140 GeV) 的中心值和不确定性。
DeepTau2017v2p1 的用法
文件data/TauES_dm_*.root
中提供了 tau 能量标度 (TES)。每个文件包含一个直方图( 'tes'
),TES 以1.0
为中心。它应该通过乘以 tau TLorentzVector
或等效的 tau 能量、pT 和质量来应用于真正的 tau,如下所示:
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
提供了一个简单的类TauESTool
来获取 TES:
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 GeV < pT < 170 GeV) 和较高 pT 值 (pT > 170 GeV) 的正确不确定性。只想在高 pT 下使用 TES 的分析,可以使用以下内容:
tes = testool.getTES_highpt(dm,genmatch)
文件data/TauFES_eta-dm_*.root
中提供了 e -> tau 假能量标度 (FES)。每个文件包含一个图表( 'fes'
),FES 以1.0
为中心。它只能应用于由电子伪造的重建 taus(即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')