يحتوي هذا المستودع على عوامل القياس الموصى بها (SFs) للعديد من أدوات تمييز تاو، وأدوات لقراءتها. يمكن العثور على توصيات أكثر تفصيلاً على صفحة TWiki هذه: https://twiki.cern.ch/twiki/bin/viewauth/CMS/TauIDRecommendationForRun2
️ يرجى ملاحظة أنه في المستقبل القريب سيتم التخلص التدريجي من ملفات SF بتنسيق ملفات ROOT، وسيتم استبدالها على المدى الطويل بأداةcorrectionlib
وملفات JSON المقدمة مركزيًا بواسطة XPOG. تعليمات أكثر تفصيلاً لتصحيحات تاو هنا.
لتثبيت أداة قراءة tau ID SFs، قم بذلك
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
يمكن إجراء اختبار للأداة في بايثون باستخدام
./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
هذا ملخص تقريبي لـ SFs المتاحة لـ DeepTau2017v2p1
و DeepTau2018v2p5
في data/
:
مكون تاو | genmatch | DeepTau2017v2p1 VSjet | DeepTau2017v2p1 VSe | DeepTau2017v2p1 VSmu | DeepTau2018v2p5 VSjet | مقياس الطاقة |
---|---|---|---|---|---|---|
تاو الحقيقي | 5 | مقابل pT وDM (لـ MC) أو مقابل pT، أو مقابل DM (لـ Embed.) | – (*) | – (*) | مقابل pT وDM (لـ MC)، لا يوجد تضمين. التصحيحات المستمدة حتى الآن | مقابل مارك ألماني |
ه -> تاو وهمية | 1 , 3 | - | مقابل إيتا | - | مقابل DM وeta | |
مو -> تاو وهمية | 2 , 4 | - | - | مقابل إيتا | – (±1% unc.) |
(*) يتم توفير عوامل المقياس فقط لمجموعة فرعية من نقاط العمل. بالنسبة لأداة تمييز VSele، يتم قياسها وفقًا لـ VVLoose وTight WPs - ويتم تشجيع المستخدمين بشدة على استخدام إحدى نقطتي العمل هاتين ويجب عليهم إبلاغ TauPOG للموافقة عليها في حالة استخدام نقطة عمل أخرى. بالنسبة لـ VSmu، يتم قياسها وفقًا لـ Tight WP ولكننا لا نتوقع اعتمادًا كبيرًا على VSmu WP المختار في هذه الحالة، لذلك لديك الحرية في استخدام أي WP متاح تريد لرفض الميون.
يتم تعريف مطابقة الجينات على النحو التالي:
1
للإلكترونات السريعة2
للميونات السريعة3
للإلكترونات من اضمحلال تاو4
للميونات من اضمحلال تاو5
لتاووس حقيقي6
لعدم وجود تطابق, أو الطائرات تزييف taus. لمزيد من المعلومات حول المطابقة الجينية لـ taus، يرجى الاطلاع هنا. لاحظ أنه في nanoAOD يتوفر هذا كـ Tau_GenPartFlav
، لكن jet أو لا يوجد تطابق يتوافق مع Tau_GenPartFlav==0
بدلاً من 6
.إن SFs مخصصة للحملات التالية:
تسمية السنة | حملة إم سي | حملة البيانات |
---|---|---|
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* |
(*) تتبع SFs المقدمة لعينات ما قبل UL الاتفاقيات القديمة للتغليف إما بواسطة pT أو DM، وتتبع مخطط عدم اليقين القديم حيث يتم الإبلاغ عن إجمالي حالات عدم اليقين فقط
يتم تقديم برنامج نصي بسيط لتفريغ التصحيحات المحفوظة في الرسوم البيانية أو وظائف الملفات الموجودة في data/
. استخدم على سبيل المثال
./test/dumpTauIDSFs.py data/TauID_SF_*_DeepTau2017v2p1VSjet_*.root
يتم توفير SFs المعتمدة على DM وpT كوظائف 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.
على سبيل المثال، للحصول على القيمة المركزية لـ SFs لـ Medium VSjet وVVLoose VSele WPs لتمييز '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 | سلسلة لتمريرها إلى الأداة | ملحوظات | المرتبطة بالعصر | ترتبط بواسطة مارك ألماني |
---|---|---|---|---|---|
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 | سلسلة لتمريرها إلى الأداة | ملحوظات | المرتبطة بالعصر | ترتبط بواسطة مارك ألماني |
---|---|---|---|---|---|
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 | ✗ | ✗ |
يمكن أيضًا الوصول إلى SFs باستخدام الأداة:
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 GeV إلى معامل pT SFs العالي المخصص والمقاس في صناديق pT أعلى من 140 GeV
يتم توفير SFs ككائنات TGraphAsymmErrors في ملفات ROOT "TauID_SF_Highpt_DeepTau2017v2p1VSjet_VSjetX_VSeleY_Mar07.root"، حيث يتوافق X مع VSjet WP ويتوافق Y مع VSele WP.
تحتوي ملفات ROOT على العديد من الرسوم البيانية. يتم الحصول على القيم المركزية من الرسوم البيانية المسماة مثل "DMinclusive_$ERA" حيث $ERA = 2016_preVFP، أو 2016_postVFP، أو 2017، أو 2018. تحتوي هذه الرسوم البيانية على سلتين pT مع pT 100-200، وpT> 200 GeV. يجب عليك استخدام هذه فقط كقيم مهملة. بالنسبة لـ taus بين 140-200 GeV استخدم الصندوق الأول، وبالنسبة لـ taus مع pT> 200 GeV استخدم الصندوق الثاني.
يمكن أيضًا الوصول إلى SFs باستخدام الأداة:
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 - استخدم SFs المعتمدة على DM وpT بدلاً من ذلك!
لا تزال عوامل المقياس المضمنة تتبع الوصفات القديمة الخاصة بـ pT أو DM binned SFs، لذلك تظل هذه التعليمات سارية في هذه الحالة
يتم توفير SFs المعتمدة على pT كوظائف 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 فقط على كائنات tau التي تطابق taus "الحقيقي" على مستوى الجيل ( 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 SF للعينات المضمنة ، اضبط علامة emb
على True
:
tauSFTool = TauIDSFTool('2017ReReco','DeepTau2017v2p1VSjet','Medium',emb=True)
إذا كان التحليل الخاص بك يستخدم DeepTauVSe WP أكثر مرونة من VLoose و/أو DeepTauVSmu أكثر مرونة من أدوات التمييز المتوسطة، فيجب إضافة المزيد من عدم اليقين باستخدام علامة otherVSlepWP
:
tauSFTool = TauIDSFTool('2017ReReco','DeepTau2017v2p1VSjet','Medium',otherVSlepWP=True)
تم إهماله لـ UL MC - استخدم SFs المعتمدة على DM وpT بدلاً من ذلك!
لا تزال عوامل المقياس المضمنة تتبع الوصفات القديمة الخاصة بـ pT أو DM binned SFs، لذلك تظل هذه التعليمات سارية في هذه الحالة
التحليلات باستخدام مشغلات ditau وtau pT > 40 GeV، قد تستخدم SFs المعتمدة على DM. يرجى ملاحظة أنه لا تتوفر SFs لوضعي الاضمحلال 5 و6، وستعيد الأداة 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
اختياريًا.
لتطبيق SFs على الإلكترونات أو الميونات التي تزيف تاو، استخدم إيتا تاو المعاد بناؤه ورمز 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
يتم توفير تصحيحات مقياس طاقة tau (TES) لـ taus مع pT <140 GeV في الملفات data/TauES_dm_DeepTau2018v2p5VSjet_$ERA_VSjet$X_VSele$Y_Jul18.root
، حيث يتوافق $X مع VSjet WP، و $Y يتوافق مع VSele WP، و عصر $ = 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 GeV، لا ينبغي تطبيق أي تصحيحات على قيمة TES الاسمية من MC ولكن ينبغي إدراج نسبة عدم يقين أكبر بنسبة 3%. يتم توفير فئة بسيطة، TauESTool
، للحصول على TES as
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'
) مع تمركز 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
يتم توفير فئة بسيطة، TauESTool
، للحصول على TES as
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). التحليلات التي تريد فقط استخدام TES عند درجة حرارة عالية، يمكنها استخدام ما يلي بدلاً من ذلك:
tes = testool.getTES_highpt(dm,genmatch)
يتم توفير مقياس الطاقة المزيف e -> tau (FES) في الملفات data/TauFES_eta-dm_*.root
. يحتوي كل ملف على رسم بياني واحد ( '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')