이 저장소에는 여러 타우 판별자에 권장되는 SF(규모 인자)와 이를 읽는 도구가 포함되어 있습니다. 더 자세한 권장 사항은 이 TWiki 페이지에서 확인할 수 있습니다: https://twiki.cern.ch/twiki/bin/viewauth/CMS/TauIDRecommendationForRun2
️ 가까운 미래에 ROOT 파일 형식의 SF는 단계적으로 폐지될 예정이며 장기적으로는 XPOG에서 중앙에서 제공하는correctionlib
도구 및 JSON 파일로 대체될 예정입니다. 타우 수정에 대한 자세한 지침은 여기에 있습니다.
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
유사한 C++ 구현은 src/TauIDSFTool.cc
에서 사용할 수 있으며 간단한 사용 예는 ( 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에 대한 대략적인 요약입니다.
타우 성분 | genmatch | DeepTau2017v2p1 VSjet | DeepTau2017v2p1 VSe | DeepTau2017v2p1 VSmu | DeepTau2018v2p5 VSjet | 에너지 규모 |
---|---|---|---|---|---|---|
진짜 타우 | 5 | 대 pT 및 DM(MC의 경우) 또는 대 pT 또는 대 DM(Embed의 경우) | – (*) | – (*) | pT 및 DM(MC의 경우), 포함 없음. 아직 파생된 수정 사항 | 대 DM |
e -> 타우 가짜 | 1 , 3 | – | 대 에타 | – | 대 DM 및 에타 | |
뮤 -> 타우 가짜 | 2 , 4 | – | – | 대 에타 | – (±1% 단위) |
(*) 축척 계수는 작업 지점의 하위 집합에 대해서만 제공됩니다. VSele 판별기의 경우 VVLoose 및 Tight WP에 대해 측정됩니다. 사용자는 이 두 작업 지점 중 하나를 사용하도록 강력히 권장되며 다른 작업 지점이 사용되는 경우 승인을 위해 TauPOG에 보고해야 합니다. VSmu의 경우 Tight WP에 대해 측정되지만 이 경우 선택한 VSmu WP에 크게 의존할 것으로 예상되지 않으므로 뮤온 제거에 대해 원하는 사용 가능한 WP를 자유롭게 사용할 수 있습니다.
젠 매칭은 다음과 같이 정의됩니다.
1
2
3
4
5
6
. 타우스의 젠 매칭에 대한 자세한 내용은 여기를 참조하세요. nanoAOD에서는 Tau_GenPartFlav
로 사용할 수 있지만 제트 또는 일치 항목 없음은 6
대신 Tau_GenPartFlav==0
에 해당합니다.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" ROOT 파일에 TF1 기능으로 제공됩니다. DeepTau2018v2p5의 경우 "TauID_SF_dm_DeepTau2018v2p5VSjet_VSjetX_VSeleY_Jul18.root"입니다. 여기서 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인 타우스에 민감한 분석은 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)라는 이름의 그래프에서 가져옵니다. 이 그래프에는 pT 100-200 및 pT>200 GeV인 2개의 pT 저장소가 포함되어 있습니다. 이를 구간화된 값으로만 사용해야 합니다. 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)
주어진 타우 pT에 대한 SF를 검색하려면 다음을 수행하십시오.
sf = tauSFTool.getSFvsPT(pt)
SF는 세대 수준( 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를 적용하려면 재구성된 타우의 에타와 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의 사용법
pT<140 GeV인 taus에 대한 TES(타우 에너지 규모) 수정 사항은 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가 1.0
중심으로 하는 하나의 히스토그램( 'tes'
)이 포함되어 있습니다. 이는 다음과 같이 타우 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
불확실성은 붕괴 모드 0, 1, 10의 경우 1.5%, 붕괴 모드 11의 경우 2%와 같습니다. 불확실성은 붕괴 모드 및 연대에 따라 상관 관계가 해제되어야 합니다. pT>140 GeV인 taus의 경우 MC의 공칭 TES 값에 수정을 적용해서는 안 되지만 더 큰 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 GeV < pT < 140 GeV) 및 높은 pT 값(pT > 140 GeV)에 대한 중심 값과 불확실성을 계산합니다.
DeepTau2017v2p1의 사용법
TES(타우 에너지 규모)는 data/TauES_dm_*.root
파일에 제공됩니다. 각 파일에는 TES가 1.0
중심에 있는 하나의 히스토그램( 'tes'
)이 포함되어 있습니다. 이는 다음과 같이 타우 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 GeV < pT < 170 GeV) 및 더 높은 pT 값(pT > 170 GeV)에서 올바른 불확실성을 계산합니다. 높은 pT에서만 TES를 사용하려는 분석에서는 대신 다음을 사용할 수 있습니다.
tes = testool.getTES_highpt(dm,genmatch)
e -> tau 가짜 에너지 규모(FES)는 data/TauFES_eta-dm_*.root
파일에 제공됩니다. 각 파일에는 FES가 1.0
중심에 있는 하나의 그래프( 'fes'
)가 포함되어 있습니다. 이는 전자에 의해 위조되고(즉, genmatch==1
또는 3
) DM 0 또는 1을 갖는 재구성된 타우스에만 적용되어야 합니다. 적용은 위의 TES와 유사합니다. FES를 얻기 위해 간단한 클래스인 TauFESTool
이 제공됩니다.
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')