此儲存庫包含幾個 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”根文件和 DeepTau2018v 的“TauID_SF_dm_DrootTau2018181818121202018 月 201812120018 2p5,其中 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。您應該僅將它們用作分箱值。對於 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 10, post 、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。提供了一個簡單的類別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')