diff --git a/.flake8 b/.flake8 index c90c600d..6359511f 100644 --- a/.flake8 +++ b/.flake8 @@ -1,5 +1,5 @@ [flake8] -ignore = W391, W503 +ignore = W391, W503, E712 max-line-length = 88 extend-ignore = E203, E704, E266 -exclude = menu_tools/object_performance/quality_obj.py +exclude = menu_tools/object_performance/quality_obj.py,menu_tools/**/test_*.py diff --git a/.gitignore b/.gitignore index f47363bb..e8b04cc2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,22 @@ **/__pycache__/* +*.pyc +pyenv/* +*.swp **/*.png +**/*.pdf **/.DS_Store **/*.parquet **/*.root rates/table/out/* rates/table/cache/**/* rates/table/lib/* +rates/table/rates_tables/* +*.backup* **/tmp/* +*~ outputs +menu_tools.egg-info +dist +ph2-menu-tools +prod_ph2-menu-tools +dev_ph2-menu-tools diff --git a/README.md b/README.md index dd6960cc..82170b99 100644 --- a/README.md +++ b/README.md @@ -2,32 +2,38 @@ ## Trigger efficiencies and rates - This repository contains the python-based framework for the measurement of matching efficiencies, trigger turn-on curves, and scalings for the assessment of the physics performance of the CMS Phase-2 L1 Menu. + This repository contains the python-based framework for the measurement of matching efficiencies, + trigger turn-on curves, and scalings for the assessment of the physics performance of the CMS Phase-2 L1 Menu. - The repository is organized as follows: + For further instructions on how to run the tools, see the `docs`. + Some documentation can also be found in the [wiki](https://github.com/cms-l1-dpg/Phase2-L1MenuTools/wiki). - * `objectPerformance`: tools for the measurement of the performance (matching efficiency, L1 turn-on efficiency curves, and online-to-offline scalings) of L1 objects. The definition of the L1 objects should follow the recommendations detailed [here](https://twiki.cern.ch/twiki/bin/view/CMS/PhaseIIL1TriggerMenuTools). +## Setup - * `rates`: tools for the measurement of trigger rates starting from the scalings derived with the tools in `objectPerformance`. + These tools are expected to be used primarily on lxplus. + To clone the repository run - Detailed instructions on how to run each step of the workflow are - provided in each folder. - -## Setup of Python environment - **Note:** The code should run without any setup on `lxplus`. + ```bash + git clone git@github.com:cms-l1-dpg/Phase2-L1MenuTools.git + ``` A standard venv with Python3.11 can be created on lxplus via `python3.11 -m venv ` and all necessary - dependencies installed via `pip install -r requirements.txt`: + dependencies installed via `pip install -e .`: ```bash python3.11 -m venv source /bin/activate - pip install . + pip install -e . ``` - You can then execute the tools (e.g. for object performance) via + **ATTENTION:** If you do not use the `-e` flag (editable), you will `pip install . --upgrade` whenever you pull changes. + + You can then execute the tools via ```python - python -m menu_tools.object_performance.plotter + cache_objects + object_performance + rate_plots + rate_table ``` diff --git a/cache b/cache new file mode 120000 index 00000000..5a2aa4fe --- /dev/null +++ b/cache @@ -0,0 +1 @@ +/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/cache \ No newline at end of file diff --git a/configs/V22/caching.yaml b/configs/V22/caching.yaml deleted file mode 100644 index 6340be58..00000000 --- a/configs/V22/caching.yaml +++ /dev/null @@ -1,75 +0,0 @@ -V22: - DY: - ntuple_path: /eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/DYToLL_M-50_TuneCP5_14TeV-pythia8/DY_PU200_v22/220407_094155/0000//L1NtuplePhaseII_Step1_*.root - trees_branches: - genTree/L1GenTree: - part_e: [Id, Stat, Pt, Eta, Phi] - part_mu: [Id, Stat, Pt, Eta, Phi] - l1PhaseIITree/L1PhaseIITree: - tkMuon: [Pt, Eta, Phi, Chg, TrkIso, Bx, Qual, zVtx, MuRefPt, MuRefPhi, MuRefEta, DRMuTrack, NMatchedTracks, MuRefChg, Region] - globalMuon: [Pt, Eta, Phi, EtaAtVtx, PhiAtVtx, IEt, IEta, IPhi, IEtaAtVtx, IPhiAtVtx, IDEta, IDPhi, Chg, Iso, Qual, TfMuonIdx, Bx] - tkGlbMuon: [Pt, Eta, Phi, Chg, TrkIso, Bx, Qual, zVtx, MuRefPt, MuRefPhi, MuRefEta, DRMuTrack, NMatchedTracks] - gmtMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, Bx] - gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] - tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, EGRefPt, EGRefEta, EGRefPhi, HGC, PassesLooseTrackID, PassesPhotonID] - EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesPhotonID, PassesLooseTrackID] - TT: - ntuple_path: /eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/TT_TuneCP5_14TeV-powheg-pythia8/TT_PU200_v22/220407_094308/0000//L1NtuplePhaseII_Step1_*.root - trees_branches: - genTree/L1GenTree: - genMetTrue: "all" - jet: "all" - l1PhaseIITree/L1PhaseIITree: - trackerMET: "all" - puppiMET: "all" - phase1PuppiMHT: "all" - trackerHT: "all" - phase1PuppiHT: "all" - phase1PuppiJet: "all" - seededConePuppiHT: "all" - seededConePuppiMHT: "all" - seededConePuppiJet: [Pt, Et, Eta, Phi] - trackerJet: [Pt, Eta, Phi] - caloJet: [Et, Pt, Eta, Phi] - VBFHToTauTau: - ntuple_path: /eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/VBFHToTauTau_M125_14TeV_powheg_pythia8_correctedGridpack_tuneCP5/VBFToTauTau_PU200_v22/220407_095503/0000//L1NtuplePhaseII_Step1_*.root - trees_branches: - genTree/L1GenTree: - part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] - l1PhaseIITree/L1PhaseIITree: - nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] - GluGluToGG: - ntuple_path: /eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/GluGluHToGG_M125_14TeV_powheg_pythia8_TuneCP5/HGG_PU200_v22/220407_094856/0000//L1NtuplePhaseII_Step1_*.root - trees_branches: - genTree/L1GenTree: - part_gamma: [Id, Stat, Pt, Eta, Phi] - l1PhaseIITree/L1PhaseIITree: - tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesPhotonID] - GluGluToHHTo2B2Tau: - ntuple_path: /eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/GluGluToHHTo2B2Tau_node_SM_TuneCP5_14TeV-madgraph-pythia8/GGToHHTo2B2Tau_PU200_v22/220408_073133/0000//L1NtuplePhaseII_Step1_*.root - trees_branches: - genTree/L1GenTree: - part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] - l1PhaseIITree/L1PhaseIITree: - nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] - MinBias: - ntuple_path: /eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/minbias_merged_nTuplesEmu_v22_2.root - trees_branches: - l1PhaseIITree/L1PhaseIITree: - # trackerMET: "all" - puppiMET: "all" - phase1PuppiMHT: "all" - # trackerHT: "all" - phase1PuppiHT: "all" - phase1PuppiJet: "all" - seededConePuppiJet: [Pt, Et, Eta, Phi] - trackerJet: [Pt, Eta, Phi] - caloJet: [Et, Pt, Eta, Phi] - nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] - tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesPhotonID] - gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] - tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, EGRefPt, EGRefEta, EGRefPhi, HGC, PassesLooseTrackID, PassesPhotonID] - EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesPhotonID, PassesLooseTrackID] diff --git a/configs/V22/object_performance/electron_matching.yaml b/configs/V22/object_performance/electron_matching.yaml deleted file mode 100644 index 92a9df39..00000000 --- a/configs/V22/object_performance/electron_matching.yaml +++ /dev/null @@ -1,94 +0,0 @@ -ElectronsMatchingBarrel: - sample: DY - default_version: V22 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - cuts: - - "abs({eta}) < 2.4" - - "{passesloosetrackid} == 1" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passesloosetrackid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - quality_id: "QUAL_BarrelNoneEndcap3" - cuts: - - "abs({eta}) < 2.4" - # - "{passesloosetrackid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 3 - -ElectronsMatchingEndcap: - sample: DY - default_version: V22 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - cuts: - - "abs({eta}) < 2.4" - - "{passesloosetrackid} == 1" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passesloosetrackid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - quality_id: "QUAL_BarrelNoneEndcap3" - cuts: - - "abs({eta}) < 2.4" - - "{passesloosetrackid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 3 - diff --git a/configs/V22/object_performance/electron_matching_eta.yaml b/configs/V22/object_performance/electron_matching_eta.yaml deleted file mode 100644 index 1b1f28a2..00000000 --- a/configs/V22/object_performance/electron_matching_eta.yaml +++ /dev/null @@ -1,96 +0,0 @@ -ElectronsMatching_Eta_Pt10to25: - sample: DY - default_version: V22 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - cuts: - - "abs({eta}) < 3.0" - - "{passesloosetrackid} == 1" - tkElectron: - match_dR: 0.15 - suffix: "Eta" - label: "TkElectron" - quality_id: "QUAL_BarrelNoneEndcap3" - cuts: - - "abs({eta}) < 3.0" - - "{passesloosetrackid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Eta" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - quality_id: "QUAL_BarrelNoneEndcap3" - cuts: - - "abs({eta}) < 2.4" - - "{passesloosetrackid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -ElectronsMatching_Eta_Pt25toInf: - sample: DY - default_version: V22 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - cuts: - - "abs({eta}) < 3.0" - - "{passesloosetrackid} == 1" - tkElectron: - suffix: "Eta" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 3.0" - - "{passesloosetrackid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Eta" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - quality_id: "QUAL_BarrelNoneEndcap3" - cuts: - - "abs({eta}) < 2.4" - - "{passesloosetrackid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - diff --git a/configs/V22/object_performance/electron_trigger.yaml b/configs/V22/object_performance/electron_trigger.yaml deleted file mode 100644 index 904e5b2a..00000000 --- a/configs/V22/object_performance/electron_trigger.yaml +++ /dev/null @@ -1,100 +0,0 @@ -ElectronsTriggerBarrel: - sample: DY - default_version: V22 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.8" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - cuts: - - "abs({eta}) < 2.8" - - "{passesloosetrackid} == 1" - tkElectron: - suffix: "Pt" - label: "tkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.8" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "tkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - quality_id: "QUAL_BarrelNoneEndcap3" - cuts: - - "abs({eta}) < 2.4" - - "{passesloosetrackid} == 1" - thresholds: [30] #10, 20, 30, 40] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" - binning: - min: 0 - max: 150 - step: 1.5 - -ElectronsTriggerEndcap: - sample: DY - default_version: V22 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.8" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - cuts: - - "abs({eta}) < 2.8" - - "{passesloosetrackid} == 1" - tkElectron: - suffix: "Pt" - label: "tkElectron" - match_dR: 0.15 - cuts: - - "{passesloosetrackid} == 1" - - "abs({eta}) < 2.8" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "tkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - quality_id: "QUAL_BarrelNoneEndcap3" - cuts: - - "abs({eta}) < 2.4" - - "{passesloosetrackid} == 1" - thresholds: [30] #10, 20, 30, 40] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" - binning: - min: 0 - max: 150 - step: 1.5 diff --git a/configs/V22/object_performance/jets_matching_eta.yaml b/configs/V22/object_performance/jets_matching_eta.yaml deleted file mode 100644 index b0ea9071..00000000 --- a/configs/V22/object_performance/jets_matching_eta.yaml +++ /dev/null @@ -1,88 +0,0 @@ -JetMatching_Eta_Pt40To100: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 40" - - "{pt} < 100" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Eta" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - trackerJet: - match_dR: 0.4 - suffix: "Eta" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (40-100 GeV)" - binning: - min: -5 - max: 5 - step: 0.25 - -JetMatching_Eta_Pt100ToInf: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 100" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Eta" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - trackerJet: - match_dR: 0.4 - suffix: "Eta" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>100 GeV)" - binning: - min: -5 - max: 5 - step: 0.25 diff --git a/configs/V22/object_performance/jets_trigger.yaml b/configs/V22/object_performance/jets_trigger.yaml deleted file mode 100644 index a3eba075..00000000 --- a/configs/V22/object_performance/jets_trigger.yaml +++ /dev/null @@ -1,137 +0,0 @@ -JetTurnonBarrel: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 2.4" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - thresholds: [50] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" - binning: - min: 0 - max: 700 - step: 10 - -JetTurnonEndcap: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 2.4" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - thresholds: [50] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" - binning: - min: 0 - max: 900 - step: 20 - -JetTurnonForward: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 2.4" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - thresholds: [50] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" - binning: - min: 0 - max: 700 - step: 10 diff --git a/configs/V22/object_performance/met_ht_mht.yaml b/configs/V22/object_performance/met_ht_mht.yaml deleted file mode 100644 index 0b44e045..00000000 --- a/configs/V22/object_performance/met_ht_mht.yaml +++ /dev/null @@ -1,169 +0,0 @@ -HT_90perc: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen HT" - trafo: "HT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - test_objects: - trackerHT: - suffix: "" - label: "Tracker HT" - phase1PuppiHT: - suffix: "" - label: "Histogrammed Puppi HT" - thresholds: [350] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. HT (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 750 - step: 20 - -HT_50perc: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen HT" - trafo: "HT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - test_objects: - trackerHT: - suffix: "" - label: "Tracker HT" - phase1PuppiHT: - suffix: "" - label: "Histogrammed Puppi HT" - thresholds: [350] - scalings: - method: "naive" - threshold: 0.50 - xlabel: "Gen. HT (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 750 - step: 20 - -MHT_50perc: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - trafo: "MHT" - test_objects: - trackerMHT: - suffix: "" - label: "Tracker MHT" - phase1PuppiMHT: - suffix: "et" - label: "Histogrammed Puppi MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.50 - xlabel: "Gen. MHT30 (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 20 - -MHT_90perc: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - trafo: "MHT" - test_objects: - trackerMHT: - suffix: "" - label: "Tracker MHT" - phase1PuppiMHT: - suffix: "et" - label: "Histogrammed Puppi MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MHT30 (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 20 - -MET_90perc: - sample: TT - default_version: V22 - reference_object: - object: "genMetTrue" - suffix: "" - label: "Gen MET" - test_objects: - trackerMET: - suffix: "" - label: "Tracker MET" - puppiMET: - suffix: "et" - label: "Puppi MET" - thresholds: [150] - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 500 - step: 20 - -MET_50perc: - sample: TT - default_version: V22 - reference_object: - object: "genMetTrue" - suffix: "" - label: "Gen MET" - test_objects: - trackerMET: - suffix: "" - label: "Tracker MET" - puppiMET: - suffix: "et" - label: "Puppi MET" - thresholds: [150] - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - scalings: - method: "naive" - threshold: 0.50 - binning: - min: 0 - max: 500 - step: 20 diff --git a/configs/V22/object_performance/met_ht_mht_trigger.yaml b/configs/V22/object_performance/met_ht_mht_trigger.yaml deleted file mode 100644 index af00c209..00000000 --- a/configs/V22/object_performance/met_ht_mht_trigger.yaml +++ /dev/null @@ -1,114 +0,0 @@ -HT: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen HT" - trafo: "HT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - test_objects: - trackerHT: - suffix: "" - label: "Tracker HT" - phase1PuppiHT: - suffix: "" - label: "Histogrammed Puppi HT" - seededConePuppiHT: - suffix: "" - label: "SeededCone HT" - thresholds: [350] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 750 - step: 20 - -MHT30: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - trafo: "MHT" - test_objects: - trackerMHT: - suffix: "" - label: "Tracker MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 20 - -MHT15: - sample: TT - default_version: V22 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 15" - trafo: "MHT" - test_objects: - phase1PuppiMHT: - suffix: "et" - label: "Histogrammed Puppi MHT" - seededConePuppiMHT: - suffix: "et" - label: "SeededCone MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 12 - -MET: - sample: TT - default_version: V22 - reference_object: - object: "genMetTrue" - suffix: "" - label: "Gen MET" - test_objects: - trackerMET: - suffix: "" - label: "Tracker MET" - puppiMET: - suffix: "et" - label: "Puppi MET" - thresholds: [150] - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 500 - step: 20 diff --git a/configs/V22/object_performance/mht_comparison.yaml b/configs/V22/object_performance/mht_comparison.yaml deleted file mode 100644 index b4f2c2ea..00000000 --- a/configs/V22/object_performance/mht_comparison.yaml +++ /dev/null @@ -1,12 +0,0 @@ -MHT_150_V22: - files: - MHT30_150: - object: trackerMHT - dir: outputs/V22/turnons/ - MHT15_150: - object: phase1PuppiMHT - dir: outputs/V22/turnons/ - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_MHTBarrel" - save_dir: "outputs/V22/turnons" \ No newline at end of file diff --git a/configs/V22/object_performance/muon_matching.yaml b/configs/V22/object_performance/muon_matching.yaml deleted file mode 100644 index 755b08e2..00000000 --- a/configs/V22/object_performance/muon_matching.yaml +++ /dev/null @@ -1,101 +0,0 @@ -MuonsMatchingBarrel: - sample: DY - default_version: V22 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) < 0.83" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) < 0.83" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (barrel)" - binning: - min: 0 - max: 150 - step: 3 - -MuonsMatchingOverlap: - sample: DY - default_version: V22 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (overlap)" - binning: - min: 0 - max: 150 - step: 3 - -MuonsMatchingEndcap: - sample: DY - default_version: V22 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (endcap)" - binning: - min: 0 - max: 150 - step: 3 \ No newline at end of file diff --git a/configs/V22/object_performance/muon_trigger.yaml b/configs/V22/object_performance/muon_trigger.yaml deleted file mode 100644 index ac707213..00000000 --- a/configs/V22/object_performance/muon_trigger.yaml +++ /dev/null @@ -1,140 +0,0 @@ -MuonsTrigger: - sample: DY - default_version: V22 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 - -MuonsTrigger_Barrel: - sample: DY - default_version: V22 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) < 0.83" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 - -MuonsTrigger_Overlap: - sample: DY - default_version: V22 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 - -MuonsTrigger_Endcap: - sample: DY - default_version: V22 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 1.24" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 diff --git a/configs/V22/object_performance/tau_matching.yaml b/configs/V22/object_performance/tau_matching.yaml deleted file mode 100644 index 11bc09e0..00000000 --- a/configs/V22/object_performance/tau_matching.yaml +++ /dev/null @@ -1,67 +0,0 @@ -TausMatchingBarrel: - sample: GluGluToHHTo2B2Tau - default_version: V22 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 6 - -TausMatchingEndcap: - sample: GluGluToHHTo2B2Tau - default_version: V22 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 6 diff --git a/configs/V22/object_performance/tau_trigger.yaml b/configs/V22/object_performance/tau_trigger.yaml deleted file mode 100644 index 0f143826..00000000 --- a/configs/V22/object_performance/tau_trigger.yaml +++ /dev/null @@ -1,75 +0,0 @@ -TauTriggerBarrel: - sample: GluGluToHHTo2B2Tau - default_version: V22 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" - thresholds: [20, 30] - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 150 - step: 6 - -TauTriggerEndcap: - sample: GluGluToHHTo2B2Tau - default_version: V22 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" - thresholds: [20, 30] - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 150 - step: 6 diff --git a/configs/V22/object_performance/version_comparison.yaml b/configs/V22/object_performance/version_comparison.yaml deleted file mode 100644 index 26147cca..00000000 --- a/configs/V22/object_performance/version_comparison.yaml +++ /dev/null @@ -1,14 +0,0 @@ -V22_V26_ElectronsBarrel_Comparison: - files: - ElectronsTriggerBarrel_30_V22: - object: tkElectron - dir: outputs/V22/turnons/ - label: "tkElectron (V22)" - ElectronsTriggerBarrel_30_V26: - object: tkElectron - dir: outputs/V26/turnons/ - label: "tkElectron (V26)" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_V26_EGBarrel_Comp" - save_dir: "outputs/V22/turnons" \ No newline at end of file diff --git a/configs/V26/caching.yaml b/configs/V26/caching.yaml deleted file mode 100644 index eb6b7c17..00000000 --- a/configs/V26/caching.yaml +++ /dev/null @@ -1,53 +0,0 @@ -V26: - Zmm: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/RelVal/CMSSW_12_5_1/Zmm_1251_200PU_condor/NTP/v26_PU200_fixGenMET_EGID/*.root - trees_branches: - genTree/L1GenTree: - part_mu: [Id, Stat, Pt, Eta, Phi] - l1PhaseIITree/L1PhaseIITree: - #tkMuon: [Pt, Eta, Phi, Chg, TrkIso, Bx, Qual, zVtx, MuRefPt, MuRefPhi, MuRefEta, DRMuTrack, NMatchedTracks, MuRefChg, Region] - #globalMuon: [Pt, Eta, Phi, EtaAtVtx, PhiAtVtx, IEt, IEta, IPhi, IEtaAtVtx, IPhiAtVtx, IDEta, IDPhi, Chg, Iso, Qual, TfMuonIdx, Bx] - #tkGlbMuon: [Pt, Eta, Phi, Chg, TrkIso, Bx, Qual, zVtx, MuRefPt, MuRefPhi, MuRefEta, DRMuTrack, NMatchedTracks] - gmtMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, Bx] - gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] - Zee: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/RelVal/CMSSW_12_5_1/Zee_1251_200PU_condor/NTP/v26_PU200_fixGenMET_EGID/*.root - trees_branches: - genTree/L1GenTree: - part_e: [Id, Stat, Pt, Eta, Phi] - l1PhaseIITree/L1PhaseIITree: - tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, EGRefPt, EGRefEta, EGRefPhi, HGC, PassesEleID, PassesPhoID] - EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] - TT: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/RelVal/CMSSW_12_5_1/TTbar_1251_200PU_condor/NTP/v26_PU200_fixGenMET_EGID/*.root - trees_branches: - genTree/L1GenTree: - genMetTrue: "all" - jet: "all" - l1PhaseIITree/L1PhaseIITree: - trackerMET: "all" - trackerMHT: "all" - puppiMET: "all" - phase1PuppiMHT: "all" - trackerHT: "all" - phase1PuppiHT: "all" - seededConePuppiJet: [Pt, Et, Eta, Phi] - trackerJet: [Pt, Eta, Phi] - phase1PuppiJet: "all" - # caloJet: "all" - Ztt: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/RelVal/CMSSW_12_5_1/Ztt_1251_200PU_condor/NTP/v26_PU200_fixGenMET_EGID/*.root - trees_branches: - genTree/L1GenTree: - part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] - l1PhaseIITree/L1PhaseIITree: - nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] - Hgg: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/RelVal/CMSSW_12_5_1/Hgg_1251_200PU_condor/NTP/v26_PU200_fixGenMET_EGID/*.root - trees_branches: - genTree/L1GenTree: - part_gamma: [Id, Stat, Pt, Eta, Phi] - l1PhaseIITree/L1PhaseIITree: - tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID] - EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] diff --git a/configs/V26/object_performance/electron_iso.yaml b/configs/V26/object_performance/electron_iso.yaml deleted file mode 100644 index e66f0572..00000000 --- a/configs/V26/object_performance/electron_iso.yaml +++ /dev/null @@ -1,29 +0,0 @@ -ElectronsIsolation: - sample: Zee - default_version: V26 - iso_vs_efficiency: True - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - tkElectron: - suffix: "trkiso" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Isolation" - ylabel: "Efficiency" - binning: - min: 0 - max: 0.5 - step: 0.005 - diff --git a/configs/V26/object_performance/electron_matching.yaml b/configs/V26/object_performance/electron_matching.yaml deleted file mode 100644 index 28fa6ed3..00000000 --- a/configs/V26/object_performance/electron_matching.yaml +++ /dev/null @@ -1,80 +0,0 @@ -ElectronsMatchingBarrel: - sample: Zee - default_version: V26 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - # - "{passeseleid} == 1" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - #tkElectronIso: - # suffix: "Pt" - # label: "TkElectron Iso" - # iso_BB: 0.13 - # iso_EE: 0.28 - # iso_branch: "trkiso" - # quality_id: "QUAL_BarrelNoneEndcap3" - # cuts: - # - "abs({eta}) < 2.4" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 3 - -ElectronsMatchingEndcap: - sample: Zee - default_version: V26 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - # - "{passessaid} == 1" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 3 diff --git a/configs/V26/object_performance/electron_matching_eta.yaml b/configs/V26/object_performance/electron_matching_eta.yaml deleted file mode 100644 index 75dc9f6b..00000000 --- a/configs/V26/object_performance/electron_matching_eta.yaml +++ /dev/null @@ -1,72 +0,0 @@ -ElectronsMatching_Eta_Pt10to25: - sample: Zee - default_version: V26 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3.0" -# - "{passeseleid} == 1" - tkElectron: - match_dR: 0.15 - suffix: "Eta" - label: "TkElectron" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -ElectronsMatching_Eta_Pt25toInf: - sample: Zee - default_version: V26 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3.0" -# - "{passeseleid} == 1" - tkElectron: - suffix: "Eta" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V26/object_performance/electron_matching_eta_test.yaml b/configs/V26/object_performance/electron_matching_eta_test.yaml deleted file mode 100644 index 82be91b1..00000000 --- a/configs/V26/object_performance/electron_matching_eta_test.yaml +++ /dev/null @@ -1,36 +0,0 @@ -ElectronsMatching_Eta_Pt10to25: - sample: Zee - default_version: V26 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 2.8" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - # - "{passeseleid} == 1" - tkElectron: - match_dR: 0.15 - suffix: "Eta" - label: "TkElectron" - cuts: - - "abs({eta}) < 2.8" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V26/object_performance/jets_trigger.yaml b/configs/V26/object_performance/jets_trigger.yaml deleted file mode 100644 index 7037b7a1..00000000 --- a/configs/V26/object_performance/jets_trigger.yaml +++ /dev/null @@ -1,113 +0,0 @@ -JetTurnonBarrel: - sample: TT - default_version: V26 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - thresholds: [50] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" - binning: - min: 0 - max: 700 - step: 10 - -JetTurnonEndcap: - sample: TT - default_version: V26 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - thresholds: [50] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" - binning: - min: 0 - max: 900 - step: 20 - -JetTurnonForward: - sample: TT - default_version: V26 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 2.4" - object: - - "abs({eta}) < 5" - test_objects: - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - thresholds: [50] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" - binning: - min: 0 - max: 700 - step: 10 diff --git a/configs/V26/object_performance/met_ht_mht.yaml b/configs/V26/object_performance/met_ht_mht.yaml deleted file mode 100644 index 9de0740f..00000000 --- a/configs/V26/object_performance/met_ht_mht.yaml +++ /dev/null @@ -1,108 +0,0 @@ -HT: - sample: TT - default_version: V26 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen HT" - trafo: "HT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - test_objects: - trackerHT: - suffix: "" - label: "Tracker HT" - phase1PuppiHT: - suffix: "" - label: "Histogrammed Puppi HT" - thresholds: [350] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 750 - step: 20 - -MHT30: - sample: TT - default_version: V26 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - trafo: "MHT" - test_objects: - trackerMHT: - suffix: "" - label: "Tracker MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" - binning: - min: 0 - max: 500 - step: 20 - -MHT15: - sample: TT - default_version: V26 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 15" - trafo: "MHT" - test_objects: - phase1PuppiMHT: - suffix: "et" - label: "Histogrammed Puppi MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" - binning: - min: 0 - max: 500 - step: 12 - -MET: - sample: TT - default_version: V26 - reference_object: - object: "genMetTrue" - suffix: "" - label: "Gen MET" - test_objects: - trackerMET: - suffix: "" - label: "Tracker MET" - puppiMET: - suffix: "et" - label: "Puppi MET" - thresholds: [150] - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 500 - step: 20 diff --git a/configs/V26/object_performance/muon_matching.yaml b/configs/V26/object_performance/muon_matching.yaml deleted file mode 100644 index de945fe3..00000000 --- a/configs/V26/object_performance/muon_matching.yaml +++ /dev/null @@ -1,101 +0,0 @@ -MuonsMatchingBarrel: - sample: Zmm - default_version: V26 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) < 0.83" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) < 0.83" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (barrel)" - binning: - min: 0 - max: 150 - step: 3 - -MuonsMatchingOverlap: - sample: Zmm - default_version: V26 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (overlap)" - binning: - min: 0 - max: 150 - step: 3 - -MuonsMatchingEndcap: - sample: Zmm - default_version: V26 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (endcap)" - binning: - min: 0 - max: 150 - step: 3 \ No newline at end of file diff --git a/configs/V26/object_performance/photons_matching_eta.yaml b/configs/V26/object_performance/photons_matching_eta.yaml deleted file mode 100644 index 5670e196..00000000 --- a/configs/V26/object_performance/photons_matching_eta.yaml +++ /dev/null @@ -1,145 +0,0 @@ -PhotonsMatching_Eta_Pt10to25_PassEleID: - sample: Hgg - default_version: V26 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton EleID" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt10to25_PassSa_PhoID: - sample: Hgg - default_version: V26 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG SaID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passessaid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton PhoID" - cuts: - - "abs({eta}) < 3.0" - - "{passesphoid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25_PassEleID: - sample: Hgg - default_version: V26 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton EleID" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25_PassSa_PhoID: - sample: Hgg - default_version: V26 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG SaID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passessaid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton PhoID" - cuts: - - "abs({eta}) < 3.0" - - "{passesphoid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V26/object_performance/photons_matching_eta_iso.yaml b/configs/V26/object_performance/photons_matching_eta_iso.yaml deleted file mode 100644 index f6bb7503..00000000 --- a/configs/V26/object_performance/photons_matching_eta_iso.yaml +++ /dev/null @@ -1,161 +0,0 @@ -PhotonsMatching_Eta_Pt25_PassSa_NOPhoID_iso0p2: - sample: Hgg - default_version: V26 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton NO PhoID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - # - "{passesphoid} == 1" - EG: - suffix: "Eta" - label: "EG SaID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passessaid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt15to25_PassEleID_iso0p2: - sample: Hgg - default_version: V26 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 15" - - "{pt} < 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton EleID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($15 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25_PassEleID_iso0p2: - sample: Hgg - default_version: V26 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton EleID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25_PassSa_PhoID_iso0p2: - sample: Hgg - default_version: V26 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton PhoID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - - "{passesphoid} == 1" - EG: - suffix: "Eta" - label: "EG SaID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passessaid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - diff --git a/configs/V26/object_performance/scaling_thresholds.yaml b/configs/V26/object_performance/scaling_thresholds.yaml deleted file mode 100644 index 838980ea..00000000 --- a/configs/V26/object_performance/scaling_thresholds.yaml +++ /dev/null @@ -1,5 +0,0 @@ -Jet: {25, 30, 35, 40, 45, 50, 55, 60, 70, 75, 80, 85, 90, 100, 120, 125, 130, 140, 150, 175} -Muon: {7, 9, 10, 12, 14, 15, 17, 20, 26, 25, 27, 30} -Tau: {27, 30, 40, 50, 60, 70} -EG: {7, 9, 12, 14, 15, 17, 20, 26, 25, 27, 30, 40, 50} -HT: {70, 80, 90, 100, 125, 150, 175} diff --git a/configs/V26/object_performance/tau_matching.yaml b/configs/V26/object_performance/tau_matching.yaml deleted file mode 100644 index f71ece7a..00000000 --- a/configs/V26/object_performance/tau_matching.yaml +++ /dev/null @@ -1,67 +0,0 @@ -TausMatchingBarrel: - sample: Ztt - default_version: V26 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 6 - -TausMatchingEndcap: - sample: Ztt - default_version: V26 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 6 diff --git a/configs/V26/object_performance/tau_trigger.yaml b/configs/V26/object_performance/tau_trigger.yaml deleted file mode 100644 index a1d59a92..00000000 --- a/configs/V26/object_performance/tau_trigger.yaml +++ /dev/null @@ -1,75 +0,0 @@ -TauTriggerBarrel: - sample: Ztt - default_version: V26 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" - thresholds: [20, 30] - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 150 - step: 6 - -TauTriggerEndcap: - sample: Ztt - default_version: V26 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" - thresholds: [20, 30] - scalings: - method: "naive" - threshold: 0.90 - binning: - min: 0 - max: 150 - step: 6 \ No newline at end of file diff --git a/configs/V27/caching_bTagNN.yaml b/configs/V27/caching_bTagNN.yaml deleted file mode 100644 index 7e6aea5a..00000000 --- a/configs/V27/caching_bTagNN.yaml +++ /dev/null @@ -1,10 +0,0 @@ -V27: - TT: - ntuple_path: /afs/cern.ch/work/e/ejclemen/TJM/BJetNN/Phase2-L1MenuTools/ntuples_dr4.root - trees_branches: - genTree/L1GenTree: - genMetTrue: "all" - jet: "all" - l1PhaseIITree/L1PhaseIITree: - seededConeExtendedPuppiJet: [Pt, Et, Eta, Phi, BJetNN] - seededConePuppiJet: [Pt, Et, Eta, Phi] diff --git a/configs/V27/object_performance/electron_matching.yaml b/configs/V27/object_performance/electron_matching.yaml deleted file mode 100644 index 35b9d2c6..00000000 --- a/configs/V27/object_performance/electron_matching.yaml +++ /dev/null @@ -1,92 +0,0 @@ -ElectronsMatchingBarrel: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 3 - -ElectronsMatchingEndcap: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 3 - diff --git a/configs/V27/object_performance/electron_matching_eta.yaml b/configs/V27/object_performance/electron_matching_eta.yaml deleted file mode 100644 index ec66ff33..00000000 --- a/configs/V27/object_performance/electron_matching_eta.yaml +++ /dev/null @@ -1,92 +0,0 @@ -ElectronsMatching_Eta_Pt10to25: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3.0" - tkElectron: - match_dR: 0.15 - suffix: "Eta" - label: "TkElectron" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Eta" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -ElectronsMatching_Eta_Pt25toInf: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3.0" - tkElectron: - suffix: "Eta" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Eta" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V27/object_performance/electron_matching_eta_test.yaml b/configs/V27/object_performance/electron_matching_eta_test.yaml deleted file mode 100644 index 6d23f019..00000000 --- a/configs/V27/object_performance/electron_matching_eta_test.yaml +++ /dev/null @@ -1,34 +0,0 @@ -ElectronsMatching_Eta_Pt25toInf_fixEGID: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3.0" - tkElectron: - suffix: "Eta" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V27/object_performance/electron_trigger.yaml b/configs/V27/object_performance/electron_trigger.yaml deleted file mode 100644 index 22846aa0..00000000 --- a/configs/V27/object_performance/electron_trigger.yaml +++ /dev/null @@ -1,99 +0,0 @@ -ElectronsTriggerBarrel: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.8" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.8" - tkElectron: - suffix: "Pt" - label: "tkElectron" - match_dR: 0.15 - cuts: - - "{passeseleid} == 1" - - "abs({eta}) < 2.8" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "tkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.8" - - "{passeseleid} == 1" - thresholds: [10, 20, 30, 40] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" - binning: - min: 0 - max: 150 - step: 1.5 - -ElectronsTriggerEndcap: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.8" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.8" - tkElectron: - suffix: "Pt" - label: "tkElectron" - match_dR: 0.15 - cuts: - - "{passeseleid} == 1" - - "abs({eta}) < 2.8" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "tkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.8" - - "{passeseleid} == 1" - thresholds: [10, 20, 30, 40] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" - binning: - min: 0 - max: 150 - step: 1.5 diff --git a/configs/V27/object_performance/jets_matching.yaml b/configs/V27/object_performance/jets_matching.yaml deleted file mode 100644 index 1b53f5b8..00000000 --- a/configs/V27/object_performance/jets_matching.yaml +++ /dev/null @@ -1,164 +0,0 @@ -JetMatchingForward_3p7to7: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 3.7" - object: - - "abs({eta}) < 5" - test_objects: - # phase1PuppiJet: - # match_dR: 0.3 - # suffix: "Pt" - # label: "Histogrammed PuppiJet" - # cuts: - # - "abs({eta}) < 7" - # seededConePuppiJet: - # match_dR: 0.35 - # suffix: "Pt" - # label: "Seeded Cone PuppiJet" - # cuts: - # - "abs({eta}) < 7" - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" - binning: - min: 0 - max: 300 - step: 5 - -JetMatchingBarrel: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 2.5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" - binning: - min: 0 - max: 700 - step: 10 - -JetMatchingEndcap: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" - binning: - min: 0 - max: 900 - step: 20 - -JetMatchingForward: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 2.4" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" - binning: - min: 0 - max: 700 - step: 10 - diff --git a/configs/V27/object_performance/jets_matching_eta.yaml b/configs/V27/object_performance/jets_matching_eta.yaml deleted file mode 100644 index cdc1749b..00000000 --- a/configs/V27/object_performance/jets_matching_eta.yaml +++ /dev/null @@ -1,163 +0,0 @@ -JetMatching_Eta_Pt40To100: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 40" - - "{pt} < 100" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Eta" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - trackerJet: - match_dR: 0.4 - suffix: "Eta" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (40-100 GeV)" - binning: - min: -5 - max: 5 - step: 0.25 - -JetMatching_Eta_Pt100ToInf: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 100" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Eta" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - trackerJet: - match_dR: 0.4 - suffix: "Eta" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>100 GeV)" - binning: - min: -5 - max: 5 - step: 0.25 - -JetMatching_Eta_Pt100ToInf_extEta: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 100" - object: - - "abs({eta}) < 7" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" - # phase1PuppiJet: - # match_dR: 0.3 - # suffix: "Eta" - # label: "Histogrammed PuppiJet" - # cuts: - # - "abs({eta}) < 7" - # seededConePuppiJet: - # match_dR: 0.35 - # suffix: "Eta" - # label: "Seeded Cone PuppiJet" - # cuts: - # - "abs({eta}) < 7" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>100 GeV)" - binning: - min: -5.5 - max: 5.5 - step: 0.25 -JetMatching_Eta_Pt100ToInf_extEta: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 100" - object: - - "abs({eta}) < 7" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" - # phase1PuppiJet: - # match_dR: 0.3 - # suffix: "Eta" - # label: "Histogrammed PuppiJet" - # cuts: - # - "abs({eta}) < 7" - # seededConePuppiJet: - # match_dR: 0.35 - # suffix: "Eta" - # label: "Seeded Cone PuppiJet" - # cuts: - # - "abs({eta}) < 7" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>100 GeV)" - binning: - min: -7 - max: 7 - step: 0.25 diff --git a/configs/V27/object_performance/jets_trigger.yaml b/configs/V27/object_performance/jets_trigger.yaml deleted file mode 100644 index cc1665c4..00000000 --- a/configs/V27/object_performance/jets_trigger.yaml +++ /dev/null @@ -1,137 +0,0 @@ -JetTurnonBarrel: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 2.5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - thresholds: [50,100] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" - binning: - min: 0 - max: 700 - step: 10 - -JetTurnonEndcap: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - thresholds: [50] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" - binning: - min: 0 - max: 900 - step: 20 - -JetTurnonForward: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 2.4" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - thresholds: [50,100] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" - binning: - min: 0 - max: 700 - step: 10 diff --git a/configs/V27/object_performance/jets_trigger_fwd.yaml b/configs/V27/object_performance/jets_trigger_fwd.yaml deleted file mode 100644 index cdf184c6..00000000 --- a/configs/V27/object_performance/jets_trigger_fwd.yaml +++ /dev/null @@ -1,41 +0,0 @@ -JetTurnonFwd_3p7to7: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 3.7" - object: - - "abs({eta}) < 7" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 7" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 7" - thresholds: [50,100] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: r'Trigger Efficiency ( GeV, $3.6<\eta<6$)' - binning: - min: 0 - max: 300 - step: 10 diff --git a/configs/V27/object_performance/mht.yaml b/configs/V27/object_performance/mht.yaml deleted file mode 100644 index 61b7f512..00000000 --- a/configs/V27/object_performance/mht.yaml +++ /dev/null @@ -1,32 +0,0 @@ -MHT30: - sample: TT - default_version: V27 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - trafo: "MHT" - test_objects: - phase1PuppiMHT: - suffix: "et" - label: "Histogrammed Puppi MHT" - seededConePuppiMHT: - suffix: "et" - label: "SeededCone MHT" - trackerMHT: - suffix: "" - label: "Tracker MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MHT30 (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 20 diff --git a/configs/V27/object_performance/muon_trigger.yaml b/configs/V27/object_performance/muon_trigger.yaml deleted file mode 100644 index 8290ea61..00000000 --- a/configs/V27/object_performance/muon_trigger.yaml +++ /dev/null @@ -1,140 +0,0 @@ -# MuonsTrigger: -# sample: DYLL_M50 -# default_version: V27 -# reference_object: -# object: "part_mu" -# suffix: "Pt" -# label: "Gen Muons" -# cuts: -# event: -# - "{dr_0.3} < 0.15" -# test_objects: -# gmtMuon: -# suffix: "Pt" -# label: "GMT Muon" -# match_dR: 0.3 -# gmtTkMuon: -# suffix: "Pt" -# label: "GMT TkMuon" -# match_dR: 0.3 -# xlabel: "Gen. pT (GeV)" -# ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" -# thresholds: [20, 25] -# scalings: -# method: "naive" -# threshold: 0.95 -# binning: -# min: 0 -# max: 50 -# step: 1.5 - -MuonsTrigger_Barrel: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) < 0.83" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 - -MuonsTrigger_Overlap: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 - -MuonsTrigger_Endcap: - sample: DYLL_M50 - default_version: V27 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 1.24" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 diff --git a/configs/V27/object_performance/photons_matching.yaml b/configs/V27/object_performance/photons_matching.yaml deleted file mode 100644 index 756f3654..00000000 --- a/configs/V27/object_performance/photons_matching.yaml +++ /dev/null @@ -1,92 +0,0 @@ -PhotonsMatching_Barrel: - sample: Hgg - default_version: V27 - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Photon" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 3 - -PhotonsMatching_Endcap: - sample: Hgg - default_version: V27 - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Photon" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 3 diff --git a/configs/V27/object_performance/photons_matching_eta.yaml b/configs/V27/object_performance/photons_matching_eta.yaml deleted file mode 100644 index 792cecc4..00000000 --- a/configs/V27/object_performance/photons_matching_eta.yaml +++ /dev/null @@ -1,99 +0,0 @@ -PhotonsMatching_Eta_Pt10to25: - sample: Hgg - default_version: V27 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Photon" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - #- "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "({quality} // 4) == 1" - #- "{passeseleid} == 1" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Eta" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25: - sample: Hgg - default_version: V27 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} >= 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "{passeseleid} == 1" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Eta" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V27/object_performance/photons_matching_eta_iso.yaml b/configs/V27/object_performance/photons_matching_eta_iso.yaml deleted file mode 100644 index 0e9940a1..00000000 --- a/configs/V27/object_performance/photons_matching_eta_iso.yaml +++ /dev/null @@ -1,161 +0,0 @@ -PhotonsMatching_Eta_Pt25_PassSa_NOPhoID_iso0p2: - sample: Hgg - default_version: V27 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton NO PhoID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - # - "{passesphoid} == 1" - EG: - suffix: "Eta" - label: "EG SaID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passessaid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt15to25_PassEleID_iso0p2: - sample: Hgg - default_version: V27 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 15" - - "{pt} < 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton EleID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($15 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25_PassEleID_iso0p2: - sample: Hgg - default_version: V27 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton EleID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25_PassSa_PhoID_iso0p2: - sample: Hgg - default_version: V27 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton PhoID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - - "{passesphoid} == 1" - EG: - suffix: "Eta" - label: "EG SaID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passessaid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - diff --git a/configs/V27/object_performance/photons_trigger.yaml b/configs/V27/object_performance/photons_trigger.yaml deleted file mode 100644 index b2eb22a9..00000000 --- a/configs/V27/object_performance/photons_trigger.yaml +++ /dev/null @@ -1,100 +0,0 @@ -PhotonsTrigger_Barrel: - sample: Hgg - default_version: V27 - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Photon" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - thresholds: [10, 20, 30, 40] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" - binning: - min: 0 - max: 150 - step: 1.5 - -PhotonsTrigger_Endcap: - sample: Hgg - default_version: V27 - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Photon" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - thresholds: [10, 20, 30, 40] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" - binning: - min: 0 - max: 150 - step: 1.5 diff --git a/configs/V27/object_performance/scaling_thresholds.yaml b/configs/V27/object_performance/scaling_thresholds.yaml deleted file mode 100644 index 838980ea..00000000 --- a/configs/V27/object_performance/scaling_thresholds.yaml +++ /dev/null @@ -1,5 +0,0 @@ -Jet: {25, 30, 35, 40, 45, 50, 55, 60, 70, 75, 80, 85, 90, 100, 120, 125, 130, 140, 150, 175} -Muon: {7, 9, 10, 12, 14, 15, 17, 20, 26, 25, 27, 30} -Tau: {27, 30, 40, 50, 60, 70} -EG: {7, 9, 12, 14, 15, 17, 20, 26, 25, 27, 30, 40, 50} -HT: {70, 80, 90, 100, 125, 150, 175} diff --git a/configs/V28/caching.yaml b/configs/V28/caching.yaml deleted file mode 100644 index 69c40fe1..00000000 --- a/configs/V28/caching.yaml +++ /dev/null @@ -1,75 +0,0 @@ -V28: - DYLL_M50: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v28/DYToLL_M-50_TuneCP5_14TeV-pythia8/DY_M50_1252_crab_v28_v0/230412_202821/0000/*.root - trees_branches: - genTree/L1GenTree: - part_mu: [Id, Stat, Pt, Eta, Phi] - part_e: [Id, Stat, Pt, Eta, Phi] - l1PhaseIITree/L1PhaseIITree: - tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, EGRefPt, EGRefEta, EGRefPhi, HGC, PassesEleID, PassesPhoID] - EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] - gmtMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, Bx] - gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] - TT: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v28/TT_TuneCP5_14TeV-powheg-pythia8/TT_1252_crab_v28_v0/230412_194315/0000/*.root - trees_branches: - genTree/L1GenTree: - genMetTrue: "all" - jet: "all" - l1PhaseIITree/L1PhaseIITree: - trackerMET: "all" - trackerMHT: "all" - puppiMET: "all" - phase1PuppiMHT: "all" - trackerHT: "all" - phase1PuppiHT: "all" - seededConePuppiJet: [Pt, Et, Eta, Phi] - seededConeExtendedPuppiJet: [Pt, Et, Eta, Phi, BJetNN] - seededConePuppiHT: "all" - seededConePuppiMHT: "all" - trackerJet: [Pt, Eta, Phi] - phase1PuppiJet: "all" - # caloJet: "all" - caloJet: [Et, Pt, Eta, Phi] - # VBFHToTauTau: - # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/VBFHToTauTau_1252_200PU/NTP/v27_PU200/*.root - # trees_branches: - # genTree/L1GenTree: - # part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] - # l1PhaseIITree/L1PhaseIITree: - # nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - # caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] - # HHToTauTau: - # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/GluGluToHHTo2B2Tau_node_SM_TuneCP5_14TeV-madgraph-pythia8/HHToTauTau_1252_200PU_crab_v27_PU200_fixHwQual/230320_095340/0000/L1NtuplePhaseII_Step1_1.root - # trees_branches: - # genTree/L1GenTree: - # part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] - # l1PhaseIITree/L1PhaseIITree: - # nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - # caloTau: [Et, Eta, Pt, Phi, Iso, HwQual] - Hgg: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v28/GluGluHToGG_M-125_TuneCP5_14TeV-powheg-pythia8/GluGluHToGG_1252_crab_v28_v0/230412_202835/0000/*.root - trees_branches: - genTree/L1GenTree: - part_gamma: [Id, Stat, Pt, Eta, Phi] - l1PhaseIITree/L1PhaseIITree: - tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID] - EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] - MinBias: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v28/MinBias_TuneCP5_14TeV-pythia8/MinBias_1252_crb_v28_v0/230412_203649/*/*.root - trees_branches: - l1PhaseIITree/L1PhaseIITree: - puppiMET: "all" - phase1PuppiJet: "all" - phase1PuppiMHT: "all" - phase1PuppiHT: "all" - seededConePuppiJet: [Pt, Et, Eta, Phi] - seededConePuppiHT: "all" - seededConePuppiMHT: "all" - tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, HGC, PassesEleID, PassesPhoID] - EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] - gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] - nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID] - z0L1TkPV: "all" - diff --git a/configs/V28/object_performance/electron_iso.yaml b/configs/V28/object_performance/electron_iso.yaml deleted file mode 100644 index 5f2a9c69..00000000 --- a/configs/V28/object_performance/electron_iso.yaml +++ /dev/null @@ -1,29 +0,0 @@ -ElectronsIsolation: - sample: DYLL_M50 - default_version: V28 - iso_vs_efficiency: True - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - tkElectron: - suffix: "trkiso" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Isolation" - ylabel: "Efficiency" - binning: - min: 0 - max: 0.5 - step: 0.005 - diff --git a/configs/V28/object_performance/electron_matching.yaml b/configs/V28/object_performance/electron_matching.yaml deleted file mode 100644 index 897ff250..00000000 --- a/configs/V28/object_performance/electron_matching.yaml +++ /dev/null @@ -1,92 +0,0 @@ -ElectronsMatchingBarrel: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 3 - -ElectronsMatchingEndcap: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 3 - diff --git a/configs/V28/object_performance/electron_matching_eta b/configs/V28/object_performance/electron_matching_eta deleted file mode 100644 index be17de22..00000000 --- a/configs/V28/object_performance/electron_matching_eta +++ /dev/null @@ -1,88 +0,0 @@ -ElectronsMatchingBarrel: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - tkElectronIso: - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 3 - -ElectronsMatchingEndcap: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - tkElectronIso: - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 3 - diff --git a/configs/V28/object_performance/electron_matching_eta.yaml b/configs/V28/object_performance/electron_matching_eta.yaml deleted file mode 100644 index 7cb7753e..00000000 --- a/configs/V28/object_performance/electron_matching_eta.yaml +++ /dev/null @@ -1,92 +0,0 @@ -ElectronsMatching_Eta_Pt10to25: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3.0" - tkElectron: - match_dR: 0.15 - suffix: "Eta" - label: "TkElectron" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Eta" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -ElectronsMatching_Eta_Pt25toInf: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3.0" - tkElectron: - suffix: "Eta" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Eta" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V28/object_performance/electron_matching_eta_test.yaml b/configs/V28/object_performance/electron_matching_eta_test.yaml deleted file mode 100644 index d2122814..00000000 --- a/configs/V28/object_performance/electron_matching_eta_test.yaml +++ /dev/null @@ -1,34 +0,0 @@ -ElectronsMatching_Eta_Pt25toInf_fixEGID: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_e" - suffix: "Eta" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3.0" - tkElectron: - suffix: "Eta" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V28/object_performance/electron_matching_new.yaml b/configs/V28/object_performance/electron_matching_new.yaml deleted file mode 100644 index b54780c2..00000000 --- a/configs/V28/object_performance/electron_matching_new.yaml +++ /dev/null @@ -1,87 +0,0 @@ -ElectronsMatchingBarrel: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - tkElectronIso: - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 3 - -ElectronsMatchingEndcap: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_e" - suffix: "Pt" - label: "Gen Electrons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - tkElectronIso: - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 3 diff --git a/configs/V28/object_performance/jets_matching.yaml b/configs/V28/object_performance/jets_matching.yaml deleted file mode 100644 index f41f1b01..00000000 --- a/configs/V28/object_performance/jets_matching.yaml +++ /dev/null @@ -1,164 +0,0 @@ -JetMatchingForward_3p7to7: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 3.7" - object: - - "abs({eta}) < 5" - test_objects: - # phase1PuppiJet: - # match_dR: 0.3 - # suffix: "Pt" - # label: "Histogrammed PuppiJet" - # cuts: - # - "abs({eta}) < 7" - # seededConePuppiJet: - # match_dR: 0.35 - # suffix: "Pt" - # label: "Seeded Cone PuppiJet" - # cuts: - # - "abs({eta}) < 7" - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" - binning: - min: 0 - max: 300 - step: 5 - -JetMatchingBarrel: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 2.5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" - binning: - min: 0 - max: 700 - step: 10 - -JetMatchingEndcap: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" - binning: - min: 0 - max: 900 - step: 20 - -JetMatchingForward: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 2.4" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" - binning: - min: 0 - max: 700 - step: 10 - diff --git a/configs/V28/object_performance/jets_matching_eta.yaml b/configs/V28/object_performance/jets_matching_eta.yaml deleted file mode 100644 index 5ed773e9..00000000 --- a/configs/V28/object_performance/jets_matching_eta.yaml +++ /dev/null @@ -1,163 +0,0 @@ -JetMatching_Eta_Pt40To100: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 40" - - "{pt} < 100" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Eta" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - trackerJet: - match_dR: 0.4 - suffix: "Eta" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (40-100 GeV)" - binning: - min: -5 - max: 5 - step: 0.25 - -JetMatching_Eta_Pt100ToInf: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 100" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Eta" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - trackerJet: - match_dR: 0.4 - suffix: "Eta" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>100 GeV)" - binning: - min: -5 - max: 5 - step: 0.25 - -JetMatching_Eta_Pt100ToInf_extEta: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 100" - object: - - "abs({eta}) < 7" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" - # phase1PuppiJet: - # match_dR: 0.3 - # suffix: "Eta" - # label: "Histogrammed PuppiJet" - # cuts: - # - "abs({eta}) < 7" - # seededConePuppiJet: - # match_dR: 0.35 - # suffix: "Eta" - # label: "Seeded Cone PuppiJet" - # cuts: - # - "abs({eta}) < 7" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>100 GeV)" - binning: - min: -5.5 - max: 5.5 - step: 0.25 -JetMatching_Eta_Pt100ToInf_extEta: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Eta" - label: "Gen Jets" - cuts: - event: - - "{pt} > 100" - object: - - "abs({eta}) < 7" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" - # phase1PuppiJet: - # match_dR: 0.3 - # suffix: "Eta" - # label: "Histogrammed PuppiJet" - # cuts: - # - "abs({eta}) < 7" - # seededConePuppiJet: - # match_dR: 0.35 - # suffix: "Eta" - # label: "Seeded Cone PuppiJet" - # cuts: - # - "abs({eta}) < 7" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency (>100 GeV)" - binning: - min: -7 - max: 7 - step: 0.25 diff --git a/configs/V28/object_performance/jets_trigger.yaml b/configs/V28/object_performance/jets_trigger.yaml deleted file mode 100644 index 8b85e29f..00000000 --- a/configs/V28/object_performance/jets_trigger.yaml +++ /dev/null @@ -1,137 +0,0 @@ -JetTurnonBarrel: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 2.5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - thresholds: [50,100] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" - binning: - min: 0 - max: 700 - step: 10 - -JetTurnonEndcap: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - thresholds: [50] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" - binning: - min: 0 - max: 900 - step: 20 - -JetTurnonForward: - sample: TT - default_version: V28 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 2.4" - object: - - "abs({eta}) < 5" - test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - thresholds: [50,100] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" - binning: - min: 0 - max: 700 - step: 10 diff --git a/configs/V28/object_performance/muon_trigger.yaml b/configs/V28/object_performance/muon_trigger.yaml deleted file mode 100644 index 513d3566..00000000 --- a/configs/V28/object_performance/muon_trigger.yaml +++ /dev/null @@ -1,140 +0,0 @@ -# MuonsTrigger: -# sample: DYLL_M50 -# default_version: V28 -# reference_object: -# object: "part_mu" -# suffix: "Pt" -# label: "Gen Muons" -# cuts: -# event: -# - "{dr_0.3} < 0.15" -# test_objects: -# gmtMuon: -# suffix: "Pt" -# label: "GMT Muon" -# match_dR: 0.3 -# gmtTkMuon: -# suffix: "Pt" -# label: "GMT TkMuon" -# match_dR: 0.3 -# xlabel: "Gen. pT (GeV)" -# ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" -# thresholds: [20, 25] -# scalings: -# method: "naive" -# threshold: 0.95 -# binning: -# min: 0 -# max: 50 -# step: 1.5 - -MuonsTrigger_Barrel: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) < 0.83" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 - -MuonsTrigger_Overlap: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 - -MuonsTrigger_Endcap: - sample: DYLL_M50 - default_version: V28 - reference_object: - object: "part_mu" - suffix: "Pt" - label: "Gen Muons" - cuts: - event: - - "{dr_0.3} < 0.15" - object: - - "abs({eta}) > 1.24" - test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" - thresholds: [20, 25] - scalings: - method: "naive" - threshold: 0.95 - binning: - min: 0 - max: 50 - step: 1.5 diff --git a/configs/V28/object_performance/photon_iso.yaml b/configs/V28/object_performance/photon_iso.yaml deleted file mode 100644 index bed6af45..00000000 --- a/configs/V28/object_performance/photon_iso.yaml +++ /dev/null @@ -1,58 +0,0 @@ -PhotonIsolation_Barrel: - sample: Hgg - default_version: V28 - iso_vs_efficiency: True - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 1.5" - test_objects: - tkPhoton: - suffix: "trkiso" - label: "TkPhoton" - match_dR: 0.15 - cuts: - - "abs({eta}) < 1.5" - - "{passesphoid} == 1" - xlabel: "Isolation" - ylabel: "Efficiency" - binning: - min: 0 - max: 0.5 - step: 0.005 - -PhotonIsolation_Endcap: - sample: Hgg - default_version: V28 - iso_vs_efficiency: True - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) > 1.5" - test_objects: - tkPhoton: - suffix: "trkiso" - label: "TkPhoton" - match_dR: 0.15 - cuts: - - "abs({eta}) > 1.5" - - "{passesphoid} == 1" - xlabel: "Isolation" - ylabel: "Efficiency" - binning: - min: 0 - max: 0.5 - step: 0.005 - diff --git a/configs/V28/object_performance/photons_matching.yaml b/configs/V28/object_performance/photons_matching.yaml deleted file mode 100644 index 5c95d869..00000000 --- a/configs/V28/object_performance/photons_matching.yaml +++ /dev/null @@ -1,92 +0,0 @@ -PhotonsMatching_Barrel: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Photon" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 3 - -PhotonsMatching_Endcap: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Photon" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 3 diff --git a/configs/V28/object_performance/photons_matching_eta.yaml b/configs/V28/object_performance/photons_matching_eta.yaml deleted file mode 100644 index bd7fa469..00000000 --- a/configs/V28/object_performance/photons_matching_eta.yaml +++ /dev/null @@ -1,99 +0,0 @@ -PhotonsMatching_Eta_Pt10to25: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG Photon" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - #- "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "({quality} // 4) == 1" - #- "{passeseleid} == 1" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Eta" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} >= 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "{passeseleid} == 1" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Eta" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V28/object_performance/photons_matching_eta_IDtest.yaml b/configs/V28/object_performance/photons_matching_eta_IDtest.yaml deleted file mode 100644 index 69f8f06d..00000000 --- a/configs/V28/object_performance/photons_matching_eta_IDtest.yaml +++ /dev/null @@ -1,156 +0,0 @@ -PhotonsMatching_Eta_Pt10to25_PassEleID: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Eta" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt10to25_PassSa_PhoID: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} < 25" - - "{pt} > 10" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG SaID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passessaid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton PhoID" - cuts: - - "abs({eta}) < 3.0" - - "{passesphoid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25_PassEleID: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton EleID" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25_PassSa_PhoID: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - EG: - suffix: "Eta" - label: "EG SaID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passessaid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton PhoID" - cuts: - - "abs({eta}) < 3.0" - - "{passesphoid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 diff --git a/configs/V28/object_performance/photons_matching_eta_iso.yaml b/configs/V28/object_performance/photons_matching_eta_iso.yaml deleted file mode 100644 index 09ed7b18..00000000 --- a/configs/V28/object_performance/photons_matching_eta_iso.yaml +++ /dev/null @@ -1,161 +0,0 @@ -PhotonsMatching_Eta_Pt25_PassSa_NOPhoID_iso0p2: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton NO PhoID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - # - "{passesphoid} == 1" - EG: - suffix: "Eta" - label: "EG SaID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passessaid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt15to25_PassEleID_iso0p2: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 15" - - "{pt} < 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton EleID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($15 < p_T < 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25_PassEleID_iso0p2: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton EleID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - EG: - suffix: "Eta" - label: "EG EleID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - -PhotonsMatching_Eta_Pt25_PassSa_PhoID_iso0p2: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Eta" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "{pt} > 25" - object: - - "abs({eta}) < 3.0" - test_objects: - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "TkPhoton PhoID" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - #quality_id: "QUAL_TkPho" - cuts: - - "abs({eta}) < 3.0" - - "{passesphoid} == 1" - EG: - suffix: "Eta" - label: "EG SaID" - match_dR: 0.2 - #quality_id: "QUAL_EG" - cuts: - - "abs({eta}) < 3" - - "{passessaid} == 1" - xlabel: "Gen. $\\eta$" - ylabel: "Matching Efficiency ($p_T > 25$ GeV)" - binning: - min: -3 - max: 3 - step: 0.2 - diff --git a/configs/V28/object_performance/photons_trigger.yaml b/configs/V28/object_performance/photons_trigger.yaml deleted file mode 100644 index 3403aeb5..00000000 --- a/configs/V28/object_performance/photons_trigger.yaml +++ /dev/null @@ -1,100 +0,0 @@ -PhotonsTrigger_Barrel: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Photon" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - thresholds: [10, 20, 30, 40] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" - binning: - min: 0 - max: 150 - step: 1.5 - -PhotonsTrigger_Endcap: - sample: Hgg - default_version: V28 - reference_object: - object: "part_gamma" - suffix: "Pt" - label: "Gen Photons" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - EG: - suffix: "Pt" - label: "EG Photon" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - thresholds: [10, 20, 30, 40] - scalings: - method: "naive" - threshold: 0.95 - xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" - binning: - min: 0 - max: 150 - step: 1.5 diff --git a/configs/V28/object_performance/scaling_thresholds.yaml b/configs/V28/object_performance/scaling_thresholds.yaml deleted file mode 100644 index 838980ea..00000000 --- a/configs/V28/object_performance/scaling_thresholds.yaml +++ /dev/null @@ -1,5 +0,0 @@ -Jet: {25, 30, 35, 40, 45, 50, 55, 60, 70, 75, 80, 85, 90, 100, 120, 125, 130, 140, 150, 175} -Muon: {7, 9, 10, 12, 14, 15, 17, 20, 26, 25, 27, 30} -Tau: {27, 30, 40, 50, 60, 70} -EG: {7, 9, 12, 14, 15, 17, 20, 26, 25, 27, 30, 40, 50} -HT: {70, 80, 90, 100, 125, 150, 175} diff --git a/configs/V28/object_performance/tau_matching_wHH.yaml b/configs/V28/object_performance/tau_matching_wHH.yaml deleted file mode 100644 index 93508232..00000000 --- a/configs/V28/object_performance/tau_matching_wHH.yaml +++ /dev/null @@ -1,67 +0,0 @@ -HHTausMatchingBarrel: - sample: HHToTauTau - default_version: V28 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" - binning: - min: 0 - max: 150 - step: 6 - -HHTausMatchingEndcap: - sample: HHToTauTau - default_version: V28 - reference_object: - object: "part_tau" - suffix: "Pt" - label: "Gen Taus" - cuts: - event: - - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" - test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 - xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" - binning: - min: 0 - max: 150 - step: 6 diff --git a/configs/V29/caching.yaml b/configs/V29/caching.yaml index ab927ad5..0bb97970 100644 --- a/configs/V29/caching.yaml +++ b/configs/V29/caching.yaml @@ -68,7 +68,6 @@ V29: phase1PuppiHT: "all" seededConePuppiJet: [Pt, Et, Eta, Phi] seededConeExtendedPuppiJet: [Pt, Et, Eta, Phi, BJetNN] - seededConeExtendedPuppiHT: "all" seededConePuppiHT: "all" seededConePuppiMHT: "all" tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, HGC, PassesEleID, PassesPhoID] diff --git a/configs/V29/object_performance/electron_iso.yaml b/configs/V29/object_performance/electron_iso.yaml index d87d8937..771386f3 100644 --- a/configs/V29/object_performance/electron_iso.yaml +++ b/configs/V29/object_performance/electron_iso.yaml @@ -1,10 +1,11 @@ ElectronsIsolation_Barrel: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True iso_vs_efficiency: True reference_object: object: "part_e" - suffix: "Pt" + x_arg: "Pt" label: "Gen Electrons" cuts: event: @@ -13,13 +14,7 @@ ElectronsIsolation_Barrel: object: - "abs({eta}) < 1.479" test_objects: - tkElectron: - suffix: "trkiso" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" + tkElectron:NoIso: "trkiso" xlabel: "Isolation" ylabel: "Efficiency (Barrel)" binning: @@ -29,11 +24,12 @@ ElectronsIsolation_Barrel: ElectronsIsolation_Endcap: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True iso_vs_efficiency: True reference_object: object: "part_e" - suffix: "Pt" + x_arg: "Pt" label: "Gen Electrons" cuts: event: @@ -42,13 +38,7 @@ ElectronsIsolation_Endcap: object: - "abs({eta}) < 2.4" test_objects: - tkElectron: - suffix: "trkiso" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - #- "{passeseleid} == 1" + tkElectron:NoIsoForIso: "trkiso" xlabel: "Isolation" ylabel: "Efficiency (Endcap)" binning: diff --git a/configs/V29/object_performance/electron_matching.yaml b/configs/V29/object_performance/electron_matching.yaml index 7ca9cf12..68ed26f2 100644 --- a/configs/V29/object_performance/electron_matching.yaml +++ b/configs/V29/object_performance/electron_matching.yaml @@ -1,9 +1,10 @@ ElectronsMatchingBarrel: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_e" - suffix: "Pt" + x_arg: "Pt" label: "Gen Electrons" cuts: event: @@ -12,31 +13,10 @@ ElectronsMatchingBarrel: object: - "abs({eta}) < 2.4" test_objects: - EG: - suffix: "Pt" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" + EG:default: "Pt" + tkElectron:NoIso: "Pt" + tkElectron:NoIsoLowPt: "Pt" + tkElectron:Iso: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" binning: @@ -46,10 +26,11 @@ ElectronsMatchingBarrel: ElectronsMatchingEndcap: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_e" - suffix: "Pt" + x_arg: "Pt" label: "Gen Electrons" cuts: event: @@ -58,31 +39,10 @@ ElectronsMatchingEndcap: object: - "abs({eta}) < 2.4" test_objects: - EG: - suffix: "Pt" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.4" - tkElectron: - suffix: "Pt" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" + EG:default: "Pt" + tkElectron:NoIso: "Pt" + tkElectron:NoIsoLowPt: "Pt" + tkElectron:Iso: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Endcap)" binning: diff --git a/configs/V29/object_performance/electron_matching_eta.yaml b/configs/V29/object_performance/electron_matching_eta.yaml index d2c46d18..4e470d51 100644 --- a/configs/V29/object_performance/electron_matching_eta.yaml +++ b/configs/V29/object_performance/electron_matching_eta.yaml @@ -1,9 +1,10 @@ ElectronsMatching_Eta_Pt10to25: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_e" - suffix: "Eta" + x_arg: "Eta" label: "Gen Electrons" cuts: event: @@ -13,31 +14,10 @@ ElectronsMatching_Eta_Pt10to25: object: - "abs({eta}) < 3.0" test_objects: - EG: - suffix: "Eta" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3.0" - tkElectron: - match_dR: 0.15 - suffix: "Eta" - label: "TkElectron" - cuts: - - "abs({eta}) < 3.0" - #- "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Eta" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - #- "{passeseleid} == 1" + EG:default: "Eta" + tkElectron:NoIso: "Eta" + tkElectron:NoIsoLowPt: "Eta" + tkElectron:Iso: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" binning: @@ -47,10 +27,11 @@ ElectronsMatching_Eta_Pt10to25: ElectronsMatching_Eta_Pt25toInf: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_e" - suffix: "Eta" + x_arg: "Eta" label: "Gen Electrons" cuts: event: @@ -59,31 +40,10 @@ ElectronsMatching_Eta_Pt25toInf: object: - "abs({eta}) < 3.0" test_objects: - EG: - suffix: "Eta" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3.0" - tkElectron: - suffix: "Eta" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 3.0" - - "{passeseleid} == 1" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Eta" - label: "TkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" + EG:default: "Eta" + tkElectron:NoIso: "Eta" + tkElectron:NoIsoLowPt: "Eta" + tkElectron:Iso: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency ($p_T > 25$ GeV)" binning: diff --git a/configs/V29/object_performance/electron_trigger.yaml b/configs/V29/object_performance/electron_trigger.yaml index 2e615595..18bc8f3d 100644 --- a/configs/V29/object_performance/electron_trigger.yaml +++ b/configs/V29/object_performance/electron_trigger.yaml @@ -1,9 +1,10 @@ ElectronsTriggerBarrel: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_e" - suffix: "Pt" + x_arg: "Pt" label: "Gen Electrons" cuts: event: @@ -12,31 +13,10 @@ ElectronsTriggerBarrel: object: - "abs({eta}) < 2.8" test_objects: - EG: - suffix: "Pt" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.8" - tkElectron: - suffix: "Pt" - label: "tkElectron" - match_dR: 0.15 - cuts: - - "{passeseleid} == 1" - - "abs({eta}) < 2.8" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "tkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.8" - - "{passeseleid} == 1" + EG:default:barrel: "Pt" + tkElectron:NoIso:barrel: "Pt" + tkElectron:NoIsoLowPt:barrel: "Pt" + tkElectron:Iso:barrel: "Pt" thresholds: [10, 20, 30, 40] scalings: method: "naive" @@ -50,10 +30,11 @@ ElectronsTriggerBarrel: ElectronsTriggerEndcap: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_e" - suffix: "Pt" + x_arg: "Pt" label: "Gen Electrons" cuts: event: @@ -62,31 +43,10 @@ ElectronsTriggerEndcap: object: - "abs({eta}) < 2.8" test_objects: - EG: - suffix: "Pt" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.8" - tkElectron: - suffix: "Pt" - label: "tkElectron" - match_dR: 0.15 - cuts: - - "{passeseleid} == 1" - - "abs({eta}) < 2.8" - tkIsoElectron: - base_obj: "tkElectron" - suffix: "Pt" - label: "tkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.8" - - "{passeseleid} == 1" + EG:default:endcap: "Pt" + tkElectron:NoIso:endcap: "Pt" + tkElectron:NoIsoLowPt:endcap: "Pt" + tkElectron:Iso:endcap: "Pt" thresholds: [10, 20, 30, 40] scalings: method: "naive" diff --git a/configs/V29/object_performance/jets_matching.yaml b/configs/V29/object_performance/jets_matching.yaml index b979ebdb..92d0989c 100644 --- a/configs/V29/object_performance/jets_matching.yaml +++ b/configs/V29/object_performance/jets_matching.yaml @@ -1,9 +1,10 @@ JetMatchingForward_3p7to7: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen Jets" cuts: event: @@ -11,26 +12,9 @@ JetMatchingForward_3p7to7: object: - "abs({eta}) < 5" test_objects: - # phase1PuppiJet: - # match_dR: 0.3 - # suffix: "Pt" - # label: "Histogrammed PuppiJet" - # cuts: - # - "abs({eta}) < 7" - # seededConePuppiJet: - # match_dR: 0.35 - # suffix: "Pt" - # label: "Seeded Cone PuppiJet" - # cuts: - # - "abs({eta}) < 7" - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" + caloJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" + ylabel: "Matching Efficiency (forward)" binning: min: 0 max: 300 @@ -38,10 +22,11 @@ JetMatchingForward_3p7to7: JetMatchingBarrel: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen Jets" cuts: event: @@ -49,32 +34,11 @@ JetMatchingBarrel: object: - "abs({eta}) < 2.4" test_objects: - # caloJet: - # match_dR: 0.3 - # suffix: "Pt" - # label: "Calo Jet" - # cuts: - # - "abs({eta}) < 2.5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" + trackerJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" + ylabel: "Matching Efficiency (barrel)" binning: min: 0 max: 500 @@ -82,10 +46,11 @@ JetMatchingBarrel: JetMatchingEndcap: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen Jets" cuts: event: @@ -93,43 +58,23 @@ JetMatchingEndcap: object: - "abs({eta}) < 2.4" test_objects: - # caloJet: - # match_dR: 0.3 - # suffix: "Pt" - # label: "Calo Jet" - # cuts: - # - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" + trackerJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" + ylabel: "Matching Efficiency (endcap)" binning: min: 0 max: 500 step: 10 JetMatchingForward: + version: V29 sample: TT - default_version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen Jets" cuts: event: @@ -137,28 +82,11 @@ JetMatchingForward: object: - "abs({eta}) < 5" test_objects: - # caloJet: - # match_dR: 0.3 - # suffix: "Pt" - # label: "Calo Jet" - # cuts: - # - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" + ylabel: "Matching Efficiency (forward)" binning: min: 0 max: 500 step: 10 - diff --git a/configs/V29/object_performance/jets_matching_eta.yaml b/configs/V29/object_performance/jets_matching_eta.yaml index a0bf6e5d..cad33a1e 100644 --- a/configs/V29/object_performance/jets_matching_eta.yaml +++ b/configs/V29/object_performance/jets_matching_eta.yaml @@ -1,9 +1,10 @@ JetMatching_Eta_Pt40To100: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Eta" + x_arg: "Eta" label: "Gen Jets" cuts: event: @@ -12,30 +13,9 @@ JetMatching_Eta_Pt40To100: object: - "abs({eta}) < 5" test_objects: - # caloJet: - # match_dR: 0.3 - # suffix: "Eta" - # label: "Calo Jet" - # cuts: - # - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Eta" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - trackerJet: - match_dR: 0.4 - suffix: "Eta" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" + phase1PuppiJet:default: "Eta" + seededConePuppiJet:default: "Eta" + trackerJet:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (40-100 GeV)" binning: @@ -45,10 +25,11 @@ JetMatching_Eta_Pt40To100: JetMatching_Eta_Pt100ToInf: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Eta" + x_arg: "Eta" label: "Gen Jets" cuts: event: @@ -56,30 +37,9 @@ JetMatching_Eta_Pt100ToInf: object: - "abs({eta}) < 5" test_objects: - # caloJet: - # match_dR: 0.3 - # suffix: "Eta" - # label: "Calo Jet" - # cuts: - # - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Eta" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - trackerJet: - match_dR: 0.4 - suffix: "Eta" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" + phase1PuppiJet:default: "Eta" + seededConePuppiJet:default: "Eta" + trackerJet:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>100 GeV)" binning: @@ -89,10 +49,11 @@ JetMatching_Eta_Pt100ToInf: JetMatching_Eta_Pt100ToInf_extEta: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Eta" + x_arg: "Eta" label: "Gen Jets" cuts: event: @@ -100,36 +61,21 @@ JetMatching_Eta_Pt100ToInf_extEta: object: - "abs({eta}) < 7" test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" - # phase1PuppiJet: - # match_dR: 0.3 - # suffix: "Eta" - # label: "Histogrammed PuppiJet" - # cuts: - # - "abs({eta}) < 7" - # seededConePuppiJet: - # match_dR: 0.35 - # suffix: "Eta" - # label: "Seeded Cone PuppiJet" - # cuts: - # - "abs({eta}) < 7" + caloJet:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>100 GeV)" binning: min: -5.5 max: 5.5 step: 0.25 + JetMatching_Eta_Pt100ToInf_extEta: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Eta" + x_arg: "Eta" label: "Gen Jets" cuts: event: @@ -137,24 +83,7 @@ JetMatching_Eta_Pt100ToInf_extEta: object: - "abs({eta}) < 7" test_objects: - caloJet: - match_dR: 0.3 - suffix: "Eta" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" - # phase1PuppiJet: - # match_dR: 0.3 - # suffix: "Eta" - # label: "Histogrammed PuppiJet" - # cuts: - # - "abs({eta}) < 7" - # seededConePuppiJet: - # match_dR: 0.35 - # suffix: "Eta" - # label: "Seeded Cone PuppiJet" - # cuts: - # - "abs({eta}) < 7" + caloJet:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>100 GeV)" binning: diff --git a/configs/V29/object_performance/jets_matching_wBTag.yaml b/configs/V29/object_performance/jets_matching_wBTag.yaml index 34a1d08f..e8a35ec5 100644 --- a/configs/V29/object_performance/jets_matching_wBTag.yaml +++ b/configs/V29/object_performance/jets_matching_wBTag.yaml @@ -1,9 +1,10 @@ JetMatching_Eta_Pt40To100_ExtendedVsRegular: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Eta" + x_arg: "Eta" label: "Gen Jets" cuts: event: @@ -12,18 +13,8 @@ JetMatching_Eta_Pt40To100_ExtendedVsRegular: object: - "abs({eta}) < 5" test_objects: - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConeExtendedPuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone Extended PuppiJet" - cuts: - - "abs({eta}) < 5" + seededConePuppiJet:default: "Eta" + seededConeExtendedPuppiJet:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (40-100 GeV)" binning: @@ -33,10 +24,11 @@ JetMatching_Eta_Pt40To100_ExtendedVsRegular: JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Eta" + x_arg: "Eta" label: "Gen Jets" cuts: event: @@ -44,18 +36,8 @@ JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: object: - "abs({eta}) < 5" test_objects: - seededConePuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConeExtendedPuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone Extended PuppiJet" - cuts: - - "abs({eta}) < 5" + seededConePuppiJet:default: "Eta" + seededConeExtendedPuppiJet:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>100 GeV)" binning: @@ -65,10 +47,11 @@ JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: JetMatching_Eta_Pt30ToInf_genBJets: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Eta" + x_arg: "Eta" label: "Gen Jets" cuts: event: @@ -77,16 +60,9 @@ JetMatching_Eta_Pt30ToInf_genBJets: object: - "abs({eta}) < 2.4" test_objects: - seededConeExtendedPuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone Extended PuppiJet" - cuts: - - "abs({eta}) < 5" - - "{bjetnn}>0.71" + seededConeExtendedPuppiJet:bjetnn: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>30 GeV)" - # thresholds: [0.0,0.5,0.7,0.71,0.72] binning: min: -2.4 max: 2.4 @@ -94,10 +70,11 @@ JetMatching_Eta_Pt30ToInf_genBJets: JetMatching_Eta_Pt30ToInf_genNotBJets: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Eta" + x_arg: "Eta" label: "Gen Jets" cuts: event: @@ -106,16 +83,9 @@ JetMatching_Eta_Pt30ToInf_genNotBJets: object: - "abs({eta}) < 2.4" test_objects: - seededConeExtendedPuppiJet: - match_dR: 0.35 - suffix: "Eta" - label: "Seeded Cone Extended PuppiJet" - cuts: - - "abs({eta}) < 5" - - "{bjetnn}>0.71" + seededConeExtendedPuppiJet:bjetnn: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>30 GeV)" - # thresholds: [0.0,0.5,0.7,0.71,0.72] binning: min: -2.4 max: 2.4 @@ -123,10 +93,11 @@ JetMatching_Eta_Pt30ToInf_genNotBJets: JetMatching_Pt_Pt30ToInf_genBJets: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen Jets" cuts: event: @@ -134,17 +105,9 @@ JetMatching_Pt_Pt30ToInf_genBJets: object: - "abs({eta}) < 2.4" test_objects: - seededConeExtendedPuppiJet: - match_dR: 0.4 - suffix: "Pt" - label: "Seeded Cone Extended PuppiJet" - cuts: - - "abs({eta}) < 5" - - "{bjetnn}>0.71" + seededConeExtendedPuppiJet:bjetnn: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency" - # thresholds: [-999,0,0.5,0.68,0.71,0.74,0.9] - # thresholds: [0.0,0.5,0.7,0.71,0.72] binning: min: 30 max: 200 @@ -152,10 +115,11 @@ JetMatching_Pt_Pt30ToInf_genBJets: JetMatching_Pt_Pt30ToInf_genNotBJets: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen Jets" cuts: event: @@ -163,16 +127,9 @@ JetMatching_Pt_Pt30ToInf_genNotBJets: object: - "abs({eta}) < 2.4" test_objects: - seededConeExtendedPuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone Extended PuppiJet" - cuts: - - "abs({eta}) < 5" - - "{bjetnn}>0.71" + seededConeExtendedPuppiJet:bjetnn: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency" - # thresholds: [0.0,0.5,0.7,0.71,0.72] binning: min: 30 max: 200 diff --git a/configs/V29/object_performance/jets_trigger.yaml b/configs/V29/object_performance/jets_trigger.yaml index 73bdfb45..feb5d7c6 100644 --- a/configs/V29/object_performance/jets_trigger.yaml +++ b/configs/V29/object_performance/jets_trigger.yaml @@ -1,9 +1,10 @@ JetTurnonBarrel: + version: V29 sample: TT - default_version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen Jets" cuts: event: @@ -11,31 +12,10 @@ JetTurnonBarrel: object: - "abs({eta}) < 2.4" test_objects: - # caloJet: - # match_dR: 0.3 - # suffix: "Pt" - # label: "Calo Jet" - # cuts: - # - "abs({eta}) < 2.5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" - thresholds: [50,100] + phase1PuppiJet:default:barrel: "Pt" + seededConePuppiJet:default:barrel: "Pt" + trackerJet:default:barrel: "Pt" + thresholds: [50, 100] scalings: method: "naive" threshold: 0.95 @@ -47,11 +27,12 @@ JetTurnonBarrel: step: 10 JetTurnonEndcap: + version: V29 sample: TT - default_version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen Jets" cuts: event: @@ -59,30 +40,9 @@ JetTurnonEndcap: object: - "abs({eta}) < 2.4" test_objects: - # caloJet: - # match_dR: 0.3 - # suffix: "Pt" - # label: "Calo Jet" - # cuts: - # - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 2.4" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 2.4" - trackerJet: - match_dR: 0.4 - suffix: "Pt" - label: "Tracker Jet" - cuts: - - "abs({eta}) < 2.4" + phase1PuppiJet:default:endcap: "Pt" + seededConePuppiJet:default:endcap: "Pt" + trackerJet:default:endcap: "Pt" thresholds: [50] scalings: method: "naive" @@ -95,11 +55,12 @@ JetTurnonEndcap: step: 10 JetTurnonForward: + version: V29 sample: TT - default_version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen Jets" cuts: event: @@ -107,25 +68,9 @@ JetTurnonForward: object: - "abs({eta}) < 5" test_objects: - # caloJet: - # match_dR: 0.3 - # suffix: "Pt" - # label: "Calo Jet" - # cuts: - # - "abs({eta}) < 5" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 5" - thresholds: [50,100] + phase1PuppiJet:default:forward: "Pt" + seededConePuppiJet:default:forward: "Pt" + thresholds: [50, 100] scalings: method: "naive" threshold: 0.95 diff --git a/configs/V29/object_performance/jets_trigger_fwd.yaml b/configs/V29/object_performance/jets_trigger_fwd.yaml index bfc26425..5533a9ba 100644 --- a/configs/V29/object_performance/jets_trigger_fwd.yaml +++ b/configs/V29/object_performance/jets_trigger_fwd.yaml @@ -1,9 +1,10 @@ JetTurnonFwd_3p7to7: sample: TT - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen Jets" cuts: event: @@ -11,24 +12,8 @@ JetTurnonFwd_3p7to7: object: - "abs({eta}) < 7" test_objects: - # caloJet: - # match_dR: 0.3 - # suffix: "Pt" - # label: "Calo Jet" - # cuts: - # - "abs({eta}) < 7" - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 7" - seededConePuppiJet: - match_dR: 0.35 - suffix: "Pt" - label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 7" + phase1PuppiJet:default:forward: "Pt" + seededConePuppiJet:default:forward: "Pt" thresholds: [50,100] scalings: method: "naive" diff --git a/configs/V29/object_performance/met_ht_mht.yaml b/configs/V29/object_performance/met_ht_mht.yaml index 06653174..269fbe0a 100644 --- a/configs/V29/object_performance/met_ht_mht.yaml +++ b/configs/V29/object_performance/met_ht_mht.yaml @@ -1,9 +1,9 @@ HT_90perc: sample: TT - default_version: V29 + version: V29 reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen HT" trafo: "HT" cuts: @@ -11,15 +11,9 @@ HT_90perc: - "abs({eta}) < 2.4" - "{pt} > 30" test_objects: - trackerHT: - suffix: "" - label: "Tracker HT" - phase1PuppiHT: - suffix: "" - label: "Histogrammed Puppi HT" - seededConePuppiHT: - suffix: "" - label: "SeededCone HT" + trackerHT:default: "" + phase1PuppiHT:default: "" + seededConePuppiHT:default: "" thresholds: [350] scalings: method: "naive" @@ -31,45 +25,12 @@ HT_90perc: max: 750 step: 20 -HT_50perc: - sample: TT - default_version: V29 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen HT" - trafo: "HT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - test_objects: - trackerHT: - suffix: "" - label: "Tracker HT" - phase1PuppiHT: - suffix: "" - label: "Histogrammed Puppi HT" - seededConePuppiHT: - suffix: "" - label: "SeededCone HT" - thresholds: [350] - scalings: - method: "naive" - threshold: 0.50 - xlabel: "Gen. HT (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 750 - step: 20 - MHT_50perc: sample: TT - default_version: V29 + version: V29 reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen MHT" cuts: object: @@ -77,15 +38,9 @@ MHT_50perc: - "{pt} > 30" trafo: "MHT" test_objects: - trackerMHT: - suffix: "" - label: "Tracker MHT" - phase1PuppiMHT: - suffix: "et" - label: "Phase1 Puppi MHT" - seededConePuppiMHT: - suffix: "et" - label: "SeededCone MHT" + trackerMHT:default: "" + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" thresholds: [70, 150] scalings: method: "naive" @@ -97,53 +52,16 @@ MHT_50perc: max: 500 step: 20 -MHT_90perc: - sample: TT - default_version: V29 - reference_object: - object: "jet" - suffix: "Pt" - label: "Gen MHT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" - trafo: "MHT" - test_objects: - trackerMHT: - suffix: "" - label: "Tracker MHT" - phase1PuppiMHT: - suffix: "et" - label: "Phase1 Puppi MHT" - seededConePuppiMHT: - suffix: "et" - label: "SeededCone MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MHT30 (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 20 - MET_90perc: sample: TT - default_version: V29 + version: V29 reference_object: object: "genMetTrue" - suffix: "" + x_arg: "" label: "Gen MET" test_objects: - trackerMET: - suffix: "" - label: "Tracker MET" - puppiMET: - suffix: "et" - label: "Puppi MET" + trackerMET:default: "" + puppiMET:default: "et" thresholds: [150] xlabel: "Gen. MET (GeV)" ylabel: "Trigger Efficiency ( GeV)" @@ -154,28 +72,3 @@ MET_90perc: min: 0 max: 500 step: 20 - -MET_50perc: - sample: TT - default_version: V29 - reference_object: - object: "genMetTrue" - suffix: "" - label: "Gen MET" - test_objects: - trackerMET: - suffix: "" - label: "Tracker MET" - puppiMET: - suffix: "et" - label: "Puppi MET" - thresholds: [150] - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - scalings: - method: "naive" - threshold: 0.50 - binning: - min: 0 - max: 500 - step: 20 diff --git a/configs/V29/object_performance/mht.yaml b/configs/V29/object_performance/mht.yaml index 65ff7df2..a85d166b 100644 --- a/configs/V29/object_performance/mht.yaml +++ b/configs/V29/object_performance/mht.yaml @@ -1,9 +1,9 @@ MHT30_90perc: sample: TT - default_version: V29 + version: V29 reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen MHT" cuts: object: @@ -11,12 +11,8 @@ MHT30_90perc: - "{pt} > 30" trafo: "MHT" test_objects: - phase1PuppiMHT: - suffix: "et" - label: "Phase1 Puppi MHT" - seededConePuppiMHT: - suffix: "et" - label: "SeededCone MHT" + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" thresholds: [70, 150] scalings: method: "naive" @@ -30,10 +26,10 @@ MHT30_90perc: MHT30_50perc: sample: TT - default_version: V29 + version: V29 reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen MHT" cuts: object: @@ -41,15 +37,9 @@ MHT30_50perc: - "{pt} > 30" trafo: "MHT" test_objects: - phase1PuppiMHT: - suffix: "et" - label: "Phase1 Puppi MHT" - seededConePuppiMHT: - suffix: "et" - label: "SeededCone MHT" - trackerMHT: - suffix: "" - label: "Tracker MHT" + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" + trackerMHT:default: "" thresholds: [70, 150] scalings: method: "naive" diff --git a/configs/V29/object_performance/muon_matching.yaml b/configs/V29/object_performance/muon_matching.yaml index 3a70ec76..501f1c04 100644 --- a/configs/V29/object_performance/muon_matching.yaml +++ b/configs/V29/object_performance/muon_matching.yaml @@ -1,9 +1,10 @@ MuonsMatchingBarrel: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Pt" + x_arg: "Pt" label: "Gen Muons" cuts: event: @@ -11,19 +12,8 @@ MuonsMatchingBarrel: object: - "abs({eta}) < 0.83" test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) < 0.83" - - "({quality}) > 0" + gmtMuon:default:barrel: "Pt" + gmtTkMuon:default:barrel: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (barrel)" binning: @@ -33,10 +23,11 @@ MuonsMatchingBarrel: MuonsMatchingOverlap: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Pt" + x_arg: "Pt" label: "Gen Muons" cuts: event: @@ -45,21 +36,9 @@ MuonsMatchingOverlap: - "abs({eta}) > 0.83" - "abs({eta}) < 1.24" test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "({quality}) > 0" - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" + gmtMuon:default:overlap: "Pt" + gmtMuon:oldRateID:overlap: "Pt" + gmtTkMuon:default:overlap: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (overlap)" binning: @@ -69,10 +48,11 @@ MuonsMatchingOverlap: MuonsMatchingEndcap: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Pt" + x_arg: "Pt" label: "Gen Muons" cuts: event: @@ -81,21 +61,8 @@ MuonsMatchingEndcap: - "abs({eta}) > 1.24" - "abs({eta}) < 2.4" test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - - "({quality}) > 0" + gmtMuon:default:endcap: "Pt" + gmtTkMuon:default:endcap: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (endcap)" binning: diff --git a/configs/V29/object_performance/muon_matching_eta.yaml b/configs/V29/object_performance/muon_matching_eta.yaml index 1ac547d8..dfeec848 100644 --- a/configs/V29/object_performance/muon_matching_eta.yaml +++ b/configs/V29/object_performance/muon_matching_eta.yaml @@ -1,9 +1,10 @@ MuonsMatching_Eta_Pt2to5: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Eta" + x_arg: "Eta" label: "Gen Muons" cuts: event: @@ -13,16 +14,8 @@ MuonsMatching_Eta_Pt2to5: object: - "abs({eta}) < 2.4" test_objects: - gmtMuon: - suffix: "Eta" - label: "GMT Muon" - match_dR: 0.3 - gmtTkMuon: - suffix: "Eta" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "({quality}) > 0" + gmtMuon:default: "Eta" + gmtTkMuon:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (2-5 GeV)" binning: @@ -32,10 +25,11 @@ MuonsMatching_Eta_Pt2to5: MuonsMatching_Eta_Pt15toInf: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Eta" + x_arg: "Eta" label: "Gen Muons" cuts: event: @@ -44,19 +38,12 @@ MuonsMatching_Eta_Pt15toInf: object: - "abs({eta}) < 2.4" test_objects: - gmtMuon: - suffix: "Eta" - label: "GMT Muon" - match_dR: 0.3 - gmtTkMuon: - suffix: "Eta" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "({quality}) > 0" + gmtMuon:default: "Eta" + gmtMuon:oldRateID: "Eta" + gmtTkMuon:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>15 GeV)" binning: min: -3 max: 3 - step: 0.2 \ No newline at end of file + step: 0.2 diff --git a/configs/V29/object_performance/muon_trigger.yaml b/configs/V29/object_performance/muon_trigger.yaml index 8e55207d..e111b854 100644 --- a/configs/V29/object_performance/muon_trigger.yaml +++ b/configs/V29/object_performance/muon_trigger.yaml @@ -1,39 +1,10 @@ -# MuonsTrigger: -# sample: DYLL_M50 -# default_version: V29 -# reference_object: -# object: "part_mu" -# suffix: "Pt" -# label: "Gen Muons" -# cuts: -# event: -# - "{dr_0.3} < 0.15" -# test_objects: -# gmtMuon: -# suffix: "Pt" -# label: "GMT Muon" -# match_dR: 0.3 -# gmtTkMuon: -# suffix: "Pt" -# label: "GMT TkMuon" -# match_dR: 0.3 -# xlabel: "Gen. pT (GeV)" -# ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" -# thresholds: [20, 25] -# scalings: -# method: "naive" -# threshold: 0.95 -# binning: -# min: 0 -# max: 50 -# step: 1.5 - MuonsTrigger_Barrel: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Pt" + x_arg: "Pt" label: "Gen Muons" cuts: event: @@ -41,19 +12,8 @@ MuonsTrigger_Barrel: object: - "abs({eta}) < 0.83" test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "({quality}) > 0" - - "abs({eta}) < 0.83" + gmtMuon:default:barrel: "Pt" + gmtTkMuon:default:barrel: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" thresholds: [20, 25] @@ -67,10 +27,11 @@ MuonsTrigger_Barrel: MuonsTrigger_Overlap: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Pt" + x_arg: "Pt" label: "Gen Muons" cuts: event: @@ -79,21 +40,8 @@ MuonsTrigger_Overlap: - "abs({eta}) > 0.83" - "abs({eta}) < 1.24" test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "({quality}) > 0" - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" + gmtMuon:default:overlap: "Pt" + gmtTkMuon:default:overlap: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" thresholds: [20, 25] @@ -107,10 +55,11 @@ MuonsTrigger_Overlap: MuonsTrigger_Endcap: sample: DYLL_M50 - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Pt" + x_arg: "Pt" label: "Gen Muons" cuts: event: @@ -118,19 +67,8 @@ MuonsTrigger_Endcap: object: - "abs({eta}) > 1.24" test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.3 - cuts: - - "({quality}) > 0" - - "abs({eta}) > 1.24" + gmtMuon:default:endcap: "Pt" + gmtTkMuon:default:endcap: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" thresholds: [20, 25] @@ -140,4 +78,4 @@ MuonsTrigger_Endcap: binning: min: 0 max: 50 - step: 1.5 \ No newline at end of file + step: 1.5 diff --git a/configs/V29/object_performance/photon_iso.yaml b/configs/V29/object_performance/photon_iso.yaml index 9d9aa4e6..e4e9e1bd 100644 --- a/configs/V29/object_performance/photon_iso.yaml +++ b/configs/V29/object_performance/photon_iso.yaml @@ -1,10 +1,11 @@ PhotonIsolation_Barrel: sample: Hgg - default_version: V29 + version: V29 iso_vs_efficiency: True + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Pt" + x_arg: "Pt" label: "Gen Photons" cuts: event: @@ -13,13 +14,7 @@ PhotonIsolation_Barrel: object: - "abs({eta}) < 1.479" test_objects: - tkPhoton: - suffix: "trkiso" - label: "TkPhoton" - match_dR: 0.15 - cuts: - - "abs({eta}) < 1.479" - - "{passeseleid} == 1" + tkPhoton:NoIso:barrel: "trkiso" xlabel: "Isolation" ylabel: "Efficiency (Barrel)" binning: @@ -29,11 +24,12 @@ PhotonIsolation_Barrel: PhotonIsolation_Endcap: sample: Hgg - default_version: V29 + version: V29 iso_vs_efficiency: True + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Pt" + x_arg: "Pt" label: "Gen Photons" cuts: event: @@ -43,14 +39,7 @@ PhotonIsolation_Endcap: object: - "abs({eta}) > 1.479" test_objects: - tkPhoton: - suffix: "trkiso" - label: "TkPhoton" - match_dR: 0.15 - cuts: - - "abs({eta}) > 1.479" - - "abs({eta}) < 2.4" - - "{passesphoid} == 1" + tkPhoton:NoIso:endcap: "trkiso" xlabel: "Isolation" ylabel: "Efficiency (Endcap)" binning: diff --git a/configs/V29/object_performance/photons_matching.yaml b/configs/V29/object_performance/photons_matching.yaml index 2fa9e3bc..2d203b6a 100644 --- a/configs/V29/object_performance/photons_matching.yaml +++ b/configs/V29/object_performance/photons_matching.yaml @@ -1,9 +1,10 @@ PhotonsMatching_Barrel: sample: Hgg - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Pt" + x_arg: "Pt" label: "Gen Photons" cuts: event: @@ -12,31 +13,9 @@ PhotonsMatching_Barrel: object: - "abs({eta}) < 2.4" test_objects: - EG: - suffix: "Pt" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" + EG:default: "Pt" + tkPhoton:NoIso: "Pt" + tkPhoton:Iso: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" binning: @@ -46,10 +25,11 @@ PhotonsMatching_Barrel: PhotonsMatching_Endcap: sample: Hgg - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Pt" + x_arg: "Pt" label: "Gen Photons" cuts: event: @@ -58,32 +38,9 @@ PhotonsMatching_Endcap: object: - "abs({eta}) < 2.4" test_objects: - EG: - suffix: "Pt" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" + EG:default: "Pt" + tkPhoton:NoIso: "Pt" + tkPhoton:Iso: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Endcap)" binning: diff --git a/configs/V29/object_performance/photons_matching_eta.yaml b/configs/V29/object_performance/photons_matching_eta.yaml index aa067474..cda31e40 100644 --- a/configs/V29/object_performance/photons_matching_eta.yaml +++ b/configs/V29/object_performance/photons_matching_eta.yaml @@ -1,9 +1,10 @@ PhotonsMatching_Eta_Pt10to25: sample: Hgg - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Eta" + x_arg: "Eta" label: "Gen Photons" cuts: event: @@ -13,35 +14,9 @@ PhotonsMatching_Eta_Pt10to25: object: - "abs({eta}) < 3.0" test_objects: - EG: - suffix: "Eta" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - #- "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "({quality} // 4) == 1" - #- "{passeseleid} == 1" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Eta" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "{passeseleid} == 1" + EG:default: "Eta" + tkPhoton:NoIso: "Eta" + tkPhoton:Iso: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" binning: @@ -51,10 +26,11 @@ PhotonsMatching_Eta_Pt10to25: PhotonsMatching_Eta_Pt25toInf: sample: Hgg - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Eta" + x_arg: "Eta" label: "Gen Photons" cuts: event: @@ -63,34 +39,9 @@ PhotonsMatching_Eta_Pt25toInf: object: - "abs({eta}) < 3.0" test_objects: - EG: - suffix: "Eta" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - #- "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Eta" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "{passeseleid} == 1" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Eta" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - #- "{passeseleid} == 1" + EG:default: "Eta" + tkPhoton:NoIso: "Eta" + tkPhoton:Iso: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" binning: diff --git a/configs/V29/object_performance/photons_trigger.yaml b/configs/V29/object_performance/photons_trigger.yaml index 65cc3b0e..26d94e67 100644 --- a/configs/V29/object_performance/photons_trigger.yaml +++ b/configs/V29/object_performance/photons_trigger.yaml @@ -1,9 +1,10 @@ PhotonsTrigger_Barrel: sample: Hgg - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Pt" + x_arg: "Pt" label: "Gen Photons" cuts: event: @@ -12,31 +13,9 @@ PhotonsTrigger_Barrel: object: - "abs({eta}) < 2.4" test_objects: - EG: - suffix: "Pt" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" + EG:default:barrel: "Pt" + tkPhoton:NoIso:barrel: "Pt" + tkPhoton:Iso:barrel: "Pt" thresholds: [10, 20, 30, 40] scalings: method: "naive" @@ -50,10 +29,11 @@ PhotonsTrigger_Barrel: PhotonsTrigger_Endcap: sample: Hgg - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Pt" + x_arg: "Pt" label: "Gen Photons" cuts: event: @@ -62,32 +42,9 @@ PhotonsTrigger_Endcap: object: - "abs({eta}) < 2.4" test_objects: - EG: - suffix: "Pt" - label: "EG" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 3" - - "{passeseleid} == 1" - tkPhoton: - match_dR: 0.15 - suffix: "Pt" - label: "tkPhoton" - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" - tkIsoPhoton: - base_obj: "tkPhoton" - match_dR: 0.15 - suffix: "Pt" - label: "tkIsoPhoton" - iso_EE: 0.2 - iso_BB: 0.2 - iso_branch: trkiso - quality_id: "QUAL_125x_tkPhoID" - cuts: - - "abs({eta}) < 3.0" + EG:default:endcap: "Pt" + tkPhoton:NoIso:endcap: "Pt" + tkPhoton:Iso:endcap: "Pt" thresholds: [10, 20, 30, 40] scalings: method: "naive" diff --git a/configs/V29/object_performance/tau_matching.yaml b/configs/V29/object_performance/tau_matching.yaml index a35e41e6..f0468abd 100644 --- a/configs/V29/object_performance/tau_matching.yaml +++ b/configs/V29/object_performance/tau_matching.yaml @@ -1,9 +1,10 @@ TausMatchingBarrel: sample: VBFHToTauTau - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -12,19 +13,8 @@ TausMatchingBarrel: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default: "Pt" + caloTau:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" binning: @@ -34,10 +24,11 @@ TausMatchingBarrel: TausMatchingEndcap: sample: VBFHToTauTau - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -46,19 +37,8 @@ TausMatchingEndcap: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default: "Pt" + caloTau:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Endcap)" binning: diff --git a/configs/V29/object_performance/tau_matching_wHH.yaml b/configs/V29/object_performance/tau_matching_wHH.yaml index fc60c249..5f9f7aa4 100644 --- a/configs/V29/object_performance/tau_matching_wHH.yaml +++ b/configs/V29/object_performance/tau_matching_wHH.yaml @@ -1,9 +1,10 @@ HHTausMatchingBarrel: sample: HHToTauTau - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -12,19 +13,8 @@ HHTausMatchingBarrel: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default: "Pt" + caloTau:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" binning: @@ -34,10 +24,11 @@ HHTausMatchingBarrel: HHTausMatchingEndcap: sample: HHToTauTau - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -46,19 +37,8 @@ HHTausMatchingEndcap: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default: "Pt" + caloTau:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Endcap)" binning: diff --git a/configs/V29/object_performance/tau_trigger.yaml b/configs/V29/object_performance/tau_trigger.yaml index a89c2bcb..2bd6456d 100644 --- a/configs/V29/object_performance/tau_trigger.yaml +++ b/configs/V29/object_performance/tau_trigger.yaml @@ -1,9 +1,10 @@ TauTriggerBarrel_90perc: sample: VBFHToTauTau - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -12,19 +13,8 @@ TauTriggerBarrel_90perc: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default:barrel: "Pt" + caloTau:default:barrel: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" thresholds: [20, 30] @@ -38,10 +28,11 @@ TauTriggerBarrel_90perc: TauTriggerEndcap_90perc: sample: VBFHToTauTau - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -50,19 +41,8 @@ TauTriggerEndcap_90perc: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default:endcap: "Pt" + caloTau:default:endcap: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" thresholds: [20, 30] @@ -74,12 +54,17 @@ TauTriggerEndcap_90perc: max: 150 step: 6 +# ATTENTION: The scalings from this config are in conflict with the 90prec +# configurations above and will be written to a file with the plot name as +# prefix. To use these scalings in the rate plots/table, overwrite the standard +# scalings yaml files in outputs! TauTriggerBarrel_50perc: sample: VBFHToTauTau - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -88,19 +73,8 @@ TauTriggerBarrel_50perc: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default:barrel: "Pt" + caloTau:default:barrel: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" thresholds: [20, 30] @@ -112,12 +86,17 @@ TauTriggerBarrel_50perc: max: 150 step: 6 +# ATTENTION: The scalings from this config are in conflict with the 90prec +# configurations above and will be written to a file with the plot name as +# prefix. To use these scalings in the rate plots/table, overwrite the standard +# scalings yaml files in outputs! TauTriggerEndcap_50perc: sample: VBFHToTauTau - default_version: V29 + version: V29 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -126,19 +105,8 @@ TauTriggerEndcap_50perc: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default:endcap: "Pt" + caloTau:default:endcap: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" thresholds: [20, 30] diff --git a/configs/V29/objects/electrons.yaml b/configs/V29/objects/electrons.yaml new file mode 100644 index 00000000..32a7a6c8 --- /dev/null +++ b/configs/V29/objects/electrons.yaml @@ -0,0 +1,63 @@ +part_e: + label: "Gen Electron" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "{dr_0.3} < 0.15" + +tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + #- "({passeseleid} == 1)" + - "({passeseleid} == 1) | ({pt} < 25)" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron, no ID" + cuts: + inclusive: + - "abs({eta}) < 2.7" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({trkiso}) < 0.13" + endcap: + - "abs({trkiso}) < 0.28" + NoIsoLowPt: + label: "TkElectron, no ID for $p_T<25$" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "({passeseleid} == 1) | ({pt} < 25)" + +EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{passeseleid} == 1" + endcap: + - "{passessaid} == 1" diff --git a/configs/V29/objects/jets.yaml b/configs/V29/objects/jets.yaml new file mode 100644 index 00000000..0866c01d --- /dev/null +++ b/configs/V29/objects/jets.yaml @@ -0,0 +1,71 @@ +caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +seededConeExtendedPuppiJet: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + bjetnn: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{bjetnn} > 0.71" + +phase1PuppiJet: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +seededConePuppiJet: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "{et}>25" + - "abs({eta}) < 7" + +trackerJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" diff --git a/configs/V29/objects/met_ht_mht.yaml b/configs/V29/objects/met_ht_mht.yaml new file mode 100644 index 00000000..8e0a6e45 --- /dev/null +++ b/configs/V29/objects/met_ht_mht.yaml @@ -0,0 +1,39 @@ +phase1PuppiHT: + label: "Histogrammed Puppi HT" + ids: + default: {} + +phase1PuppiMHT: + label: "Phase1 Puppi MHT" + ids: + default: {} + +puppiMET: + label: "Puppi MET" + ids: + default: {} + +seededConePuppiHT: + label: "SeededCone HT" + ids: + default: {} + +seededConePuppiMHT: + label: "SeededCone MHT" + ids: + default: {} + +trackerHT: + label: "Tracker HT" + ids: + default: {} + +trackerMET: + label: "Tracker MET" + ids: + default: {} + +trackerMHT: + label: "Tracker MHT" + ids: + default: {} diff --git a/configs/V29/objects/muons.yaml b/configs/V29/objects/muons.yaml new file mode 100644 index 00000000..7a607325 --- /dev/null +++ b/configs/V29/objects/muons.yaml @@ -0,0 +1,29 @@ +gmtMuon: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + oldRateID: + label: "GMT Muon, Qual>=12 in OMTF" + cuts: + overlap: + - "{quality} >= 12" + +gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + inclusive: + - "({quality} > 0) | ({pt} > 8)" # quality criterion only to be appied for p_T < 8 GeV diff --git a/configs/V29/objects/photons.yaml b/configs/V29/objects/photons.yaml new file mode 100644 index 00000000..234d5bc2 --- /dev/null +++ b/configs/V29/objects/photons.yaml @@ -0,0 +1,27 @@ +tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "{passeseleid} == 1" + endcap: + - "{passesphoid} == 1" + Iso: + label: "tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({trkiso}) < 0.25" + - "{passeseleid} == 1" + endcap: + - "abs({trkiso}) < 0.205" + - "{passesphoid} == 1" diff --git a/configs/V29/objects/pv.yaml b/configs/V29/objects/pv.yaml new file mode 100644 index 00000000..adc3eab4 --- /dev/null +++ b/configs/V29/objects/pv.yaml @@ -0,0 +1,4 @@ +z0L1TkPV: + label: "Primary Vertex" + ids: + default: {} diff --git a/configs/V29/objects/taus.yaml b/configs/V29/objects/taus.yaml new file mode 100644 index 00000000..2f1bf535 --- /dev/null +++ b/configs/V29/objects/taus.yaml @@ -0,0 +1,29 @@ +nnTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + cuts: + inclusive: + - "{passloosenn}==1" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{passloosenn}==1" + +caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" diff --git a/configs/V29/rate_plots/all_rate_plots.yaml b/configs/V29/rate_plots/all_rate_plots.yaml new file mode 100644 index 00000000..e49aff68 --- /dev/null +++ b/configs/V29/rate_plots/all_rate_plots.yaml @@ -0,0 +1,59 @@ +# HTRates: +# sample: MinBias +# version: V29 +# test_objects: +# - phase1PuppiHT:default +# - seededConePuppiHT:default +# # - trackerJet:default +# binning: +# min: 40 +# max: 420 +# step: 20 + +# JetDefaultRates: +# sample: MinBias +# version: V29 +# test_objects: +# - phase1PuppiJet:default +# - seededConePuppiJet:default +# # - trackerJet:default +# binning: +# min: 40 +# max: 420 +# step: 20 + +# ElectronDefaultRates: +# sample: MinBias +# version: V29 +# test_objects: +# - EG:default +# - tkElectron:NoIso +# - tkElectron:Iso +# - tkPhoton:Iso +# binning: +# min: 10 +# max: 97 +# step: 3 + +MuonRates: + sample: MinBias + version: V29 + test_objects: + - gmtMuon:default + - gmtMuon:oldRateID + - gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 + +# TauRates: +# sample: MinBias +# version: V29 +# test_objects: +# - nnTau:default +# - caloTau:default +# binning: +# min: 10 +# max: 155 +# step: 5 diff --git a/configs/V29/rate_plots/eg.yaml b/configs/V29/rate_plots/eg.yaml new file mode 100644 index 00000000..4c1a38e8 --- /dev/null +++ b/configs/V29/rate_plots/eg.yaml @@ -0,0 +1,12 @@ +EGRates: + sample: MinBias + version: V29 + test_objects: + - EG:default + - tkElectron:NoIso + - tkElectron:Iso + - tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 diff --git a/configs/V29/rate_plots/ht.yaml b/configs/V29/rate_plots/ht.yaml new file mode 100644 index 00000000..c855e7f9 --- /dev/null +++ b/configs/V29/rate_plots/ht.yaml @@ -0,0 +1,11 @@ +HTRates: + sample: MinBias + version: V29 + test_objects: + - phase1PuppiHT:default + - seededConePuppiHT:default + - trackerHT:default + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V29/rate_plots/jets.yaml b/configs/V29/rate_plots/jets.yaml new file mode 100644 index 00000000..738c05ca --- /dev/null +++ b/configs/V29/rate_plots/jets.yaml @@ -0,0 +1,27 @@ +JetDefaultRates: + sample: MinBias + version: V29 + test_objects: + - phase1PuppiJet:default + - seededConePuppiJet:default + # - seededConeExtendedPuppiJet:default + - trackerJet:default + # - caloJet:default + binning: + min: 40 + max: 420 + step: 20 + +JetsByRegion: + sample: MinBias + version: V29 + test_objects: + - phase1PuppiJet:default:barrel + - phase1PuppiJet:default:endcap + - seededConePuppiJet:default:barrel + - seededConePuppiJet:default:endcap + binning: + min: 40 + max: 420 + step: 20 + diff --git a/configs/V29/rate_plots/met.yaml b/configs/V29/rate_plots/met.yaml new file mode 100644 index 00000000..7e527eaa --- /dev/null +++ b/configs/V29/rate_plots/met.yaml @@ -0,0 +1,10 @@ +METRates: + sample: MinBias + version: V29 + test_objects: + - puppiMET:default + - trackerMET:default + binning: + min: 50 + max: 500 + step: 25 diff --git a/configs/V29/rate_plots/muons.yaml b/configs/V29/rate_plots/muons.yaml new file mode 100644 index 00000000..74c911b0 --- /dev/null +++ b/configs/V29/rate_plots/muons.yaml @@ -0,0 +1,22 @@ +gmtMuonByRegion: + sample: MinBias + version: V29 + test_objects: + - gmtMuon:default:barrel + - gmtMuon:default:overlap + - gmtMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +MuonRates: + sample: MinBias + version: V29 + test_objects: + - gmtMuon:default + - gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 diff --git a/configs/V29/rate_plots/taus.yaml b/configs/V29/rate_plots/taus.yaml new file mode 100644 index 00000000..16ba3066 --- /dev/null +++ b/configs/V29/rate_plots/taus.yaml @@ -0,0 +1,23 @@ +TauRates: + sample: MinBias + version: V29 + test_objects: + - nnTau:default + - caloTau:default + binning: + min: 10 + max: 155 + step: 5 + +TauRatesByRegion: + sample: MinBias + version: V29 + test_objects: + - caloTau:default:barrel + - caloTau:default:endcap + - nnTau:default:barrel + - nnTau:default:endcap + binning: + min: 10 + max: 155 + step: 5 diff --git a/configs/V29/rate_table/v29_16Seeds_Final_clean_cfg.yml b/configs/V29/rate_table/v29_16Seeds_Final_clean_cfg.yml new file mode 100644 index 00000000..79bdd1b7 --- /dev/null +++ b/configs/V29/rate_table/v29_16Seeds_Final_clean_cfg.yml @@ -0,0 +1,208 @@ +L1_DoubleEGEle: + cross_masks: + - ak.where(abs(leg2.phi-leg1.phi) 0.1 + leg1: + leg_mask: + - leg1.offline_pt >= 37 + - abs(leg1.eta)<2.4 + - leg1.passeseleid * (abs(leg1.eta)<1.5) + leg1.passessaid * (abs(leg1.eta) >= 1.5) + # - ak.where(abs(leg1.eta)<1.5, leg1.passeseleid, leg1.passessaid) + obj: EG + leg2: + leg_mask: + - leg2.offline_pt >= 24 + - abs(leg2.eta)<2.4 + - leg2.passeseleid * (abs(leg2.eta)<1.5) + leg2.passessaid * (abs(leg2.eta) >= 1.5) + # - ak.where(abs(leg2.eta)<1.5, leg2.passeseleid, leg2.passessaid) + obj: EG +L1_SingleEGEle: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 51.0 + - abs(leg1.eta)<2.4 + - leg1.passeseleid * (abs(leg1.eta)<1.5) + leg1.passessaid * (abs(leg1.eta) >= 1.5) + obj: EG +L1_SinglePfJet: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt > 230.0 + - leg1.et>25 + - abs(leg1.eta)<2.4 + obj: seededConePuppiJet +L1_SingleTkEle: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 36.0 + - abs(leg1.eta)<2.4 + - leg1.passeseleid + # - leg1.passeseleid > 0 + obj: tkElectron +L1_SingleTkEleIso: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 28.0 + - leg1.passeseleid>=0 + - ak.where(abs(leg1.eta)<1.479, leg1.trkiso<0.13, leg1.trkiso<0.28) + obj: tkIsoElectron +L1_SingleTkMu: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt > 22.0 + - abs(leg1.eta)<2.4 + obj: gmtTkMuon +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt >= 36.0 + - abs(leg1.eta)<2.4 + - ak.where(abs(leg1.eta)<1.5, leg1.passeseleid, leg1.passesphoid) + - ak.where(abs(leg1.eta)<1.479, leg1.trkiso<0.25, leg1.trkiso<0.205) + obj: tkPhoton +L1_TkEleIso_EG: + cross_masks: + - leg2.deltaR(leg1) > 0.1 + leg1: + leg_mask: + - leg1.offline_pt > 22.0 + - abs(leg1.eta)<2.4 + - leg1.passeseleid >= 0 + - ak.where(abs(leg1.eta)<1.479, leg1.trkiso<0.13, leg1.trkiso<0.28) + obj: tkIsoElectron + leg2: + leg_mask: + - leg2.offline_pt > 12.0 + - abs(leg2.eta)<2.4 + - ak.where(abs(leg2.eta)<1.5, leg2.passeseleid, leg2.passessaid) + obj: EG +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0)<1 + - abs(leg3.z0-leg1.z0)<1 + leg1: + leg_mask: + - leg1.pt>5 + - abs(leg1.eta)<2.4 + - leg1.qual>0 + obj: gmtTkMuon + leg2: + leg_mask: + - leg2.pt>3 + - abs(leg2.eta)<2.4 + - leg2.qual>0 + obj: gmtTkMuon + leg3: + leg_mask: + - leg3.pt>3 + - abs(leg3.eta)<2.4 + - leg3.qual>0 + obj: gmtTkMuon +L1_DoubleTkEle: + cross_masks: + - abs(leg2.zvtx-leg1.zvtx)<1 + leg1: + leg_mask: + - leg1.offline_pt >= 25.0 + - abs(leg1.eta)<2.4 + - (((leg1.passeseleid) * (abs(leg1.eta)<1.479)) + ((abs(leg1.eta)>1.479))) + obj: tkElectron + leg2: + leg_mask: + - leg2.offline_pt >= 12.0 + - abs(leg2.eta)<2.4 + - (((leg2.passeseleid) * (abs(leg2.eta)<1.479)) + ((abs(leg2.eta)>1.479))) + obj: tkElectron +L1_DoubleTkMu: + cross_masks: + - abs(leg1.z0-leg2.z0)<1 + leg1: + leg_mask: + - leg1.offline_pt > 15.0 + - abs(leg1.eta)<2.4 + obj: gmtTkMuon + leg2: + leg_mask: + - leg2.pt > 7.0 + - abs(leg2.eta)<2.4 + - leg2.qual > 0 + obj: gmtTkMuon +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt > 22.0 + - abs(leg1.eta)<2.4 + - ak.where(abs(leg1.eta)<1.5, leg1.passeseleid, leg1.passesphoid) + - ak.where(abs(leg1.eta)<1.479, leg1.trkiso<0.25, leg1.trkiso<0.205) + obj: tkPhoton + leg2: + leg_mask: + - leg2.offline_pt > 12.0 + - abs(leg2.eta)<2.4 + - ak.where(abs(leg2.eta)<1.5, leg2.passeseleid, leg2.passesphoid) + - ak.where(abs(leg2.eta)<1.479, leg2.trkiso<0.25, leg2.trkiso<0.205) + obj: tkPhoton +L1_PFHTT: + cross_masks: [] + leg1: + leg_mask: + # - leg1.pt > 372.9 + - leg1.offline_pt > 450 + obj: seededConePuppiHT +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt > 400.0 + obj: seededConePuppiHT + leg2: + leg_mask: + - leg2.offline_pt > 70.0 + - leg2.et>25.0 + - abs(leg2.eta)<2.4 + obj: seededConePuppiJet + leg3: + leg_mask: + - leg3.offline_pt > 55.0 + - leg3.et>25.0 + - abs(leg3.eta)<2.4 + obj: seededConePuppiJet + leg4: + leg_mask: + - leg4.offline_pt > 40.0 + - leg4.et>25.0 + - abs(leg4.eta)<2.4 + obj: seededConePuppiJet + leg5: + leg_mask: + - leg5.offline_pt > 40.0 + - leg5.et>25.0 + - abs(leg5.eta)<2.4 + obj: seededConePuppiJet +L1_PFIsoTau_PFIsoTau: + cross_masks: + # - ak.where(abs(leg2.phi-leg1.phi) 0.5 + - leg1.deltaR(leg2) > 0.5 + leg1: + leg_mask: + - leg1.offline_pt > 52.0 + - abs(leg1.eta)<2.172 + - leg1.passloosenn>0 + obj: nnTau + leg2: + leg_mask: + - leg2.offline_pt > 52.0 + - abs(leg2.eta)<2.172 + - leg2.passloosenn>0 + obj: nnTau +L1_PFMet: + cross_masks: [] + leg1: + leg_mask: + - leg1.offline_pt > 200.0 + obj: puppiMET diff --git a/configs/V29/rate_table/v29_16seed_cfg.yml b/configs/V29/rate_table/v29_16seed_cfg.yml new file mode 100644 index 00000000..539d5291 --- /dev/null +++ b/configs/V29/rate_table/v29_16seed_cfg.yml @@ -0,0 +1,6 @@ +MenuV29: + version: "V29" + menu_config: "configs/V29/rate_table/v29_16Seeds_Final_clean_cfg.yml" + table: + table_fname: "rates_16Seeds_Final" + table_outdir: "rates_tables/V29" diff --git a/configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml b/configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml new file mode 100644 index 00000000..3aec068c --- /dev/null +++ b/configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml @@ -0,0 +1,440 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: seededConePuppiHT:default +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: seededConePuppiMHT:default +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: puppiMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.chg*leg2.chg < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 4.4 + obj: gmtTkMuon:default +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1['']) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.chg*leg2.chg < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 0 + obj: gmtTkMuon:default +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: seededConePuppiJet:default +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: gmtTkMuon:default +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.zvtx-leg1['']) < 1 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: seededConePuppiHT:default +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.zvtx-leg1['']) < 1 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: nnTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.zvtx-leg1['']) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.zvtx) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: gmtTkMuon:default +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.zvtx-leg1.z0) < 1 + - abs(leg3.zvtx-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 17.0 + obj: tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1['']) < 1 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: pt > 6 + obj: gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 320.0 + obj: seededConePuppiHT:default +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1['']) < 1 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 110.0 + obj: seededConePuppiJet:default + leg4: + threshold_cut: offline_pt >= 120.0 + obj: puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.zvtx-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 23.0 + obj: tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.zvtx-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 20.0 + obj: tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: gmtTkMuon:default +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.chg*leg2.chg < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg3: + threshold_cut: pt > 0 + obj: gmtTkMuon:default +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.chg*leg3.chg < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 3.5 + obj: gmtTkMuon:default + leg3: + threshold_cut: pt > 2.5 + obj: gmtTkMuon:default +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.zvtx-leg1['']) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.zvtx-leg1['']) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: seededConePuppiHT:default +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: seededConePuppiJet:default + leg2: + threshold_cut: offline_pt >= 35.0 + obj: seededConePuppiJet:default +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: seededConePuppiJet:default + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: seededConePuppiJet:default +L1_DoubleTkEle: + cross_masks: + - abs(leg2.zvtx-leg1.zvtx) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 7 + obj: gmtTkMuon:default +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.chg*leg2.chg < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 4 + obj: gmtTkMuon:default +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1['']) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1['']) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg4: + threshold_cut: offline_pt >= 300.0 + obj: seededConePuppiHT:default +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1['']) < 1 + - abs(leg3.z0-leg1['']) < 1 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg4: + threshold_cut: offline_pt >= 60.0 + obj: seededConePuppiJet:default + leg5: + threshold_cut: offline_pt >= 130.0 + obj: puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.zvtx-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 5 + obj: gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 9.0 + obj: tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: seededConePuppiHT:default + leg2: + threshold_cut: offline_pt >= 70.0 + obj: seededConePuppiJet:default + leg3: + threshold_cut: offline_pt >= 55.0 + obj: seededConePuppiJet:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: nnTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: nnTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: nnTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1['']) < 1 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: nnTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: gmtTkMuon:default diff --git a/configs/V29/rate_table/v29_cfg.yml b/configs/V29/rate_table/v29_cfg.yml new file mode 100644 index 00000000..8bf21cbe --- /dev/null +++ b/configs/V29/rate_table/v29_cfg.yml @@ -0,0 +1,4 @@ +version: "V29" +sample: "MinBias" +menu_config: "configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml" +table_fname: "rates_full_Final" diff --git a/configs/V29_13X/object_performance/jets_matching.yaml b/configs/V29_13X/object_performance/jets_matching.yaml index cf204f41..145510e9 100644 --- a/configs/V29_13X/object_performance/jets_matching.yaml +++ b/configs/V29_13X/object_performance/jets_matching.yaml @@ -30,7 +30,7 @@ JetMatchingForward_3p7to7: cuts: - "abs({eta}) < 7" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" + ylabel: "Matching Efficiency (forward)" binning: min: 0 max: 300 @@ -74,7 +74,7 @@ JetMatchingBarrel: cuts: - "abs({eta}) < 2.4" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" + ylabel: "Matching Efficiency (barrel)" binning: min: 0 max: 500 @@ -118,7 +118,7 @@ JetMatchingEndcap: cuts: - "abs({eta}) < 2.4" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" + ylabel: "Matching Efficiency (endcap)" binning: min: 0 max: 500 @@ -156,7 +156,7 @@ JetMatchingForward: cuts: - "abs({eta}) < 5" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" + ylabel: "Matching Efficiency (forward)" binning: min: 0 max: 500 diff --git a/configs/V30/object_performance/jets_matching.yaml b/configs/V30/object_performance/jets_matching.yaml index 61cfb0d7..1b7fd0c3 100644 --- a/configs/V30/object_performance/jets_matching.yaml +++ b/configs/V30/object_performance/jets_matching.yaml @@ -30,7 +30,7 @@ JetMatchingForward_3p7to7: cuts: - "abs({eta}) < 7" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" + ylabel: "Matching Efficiency (forward)" binning: min: 0 max: 300 @@ -74,7 +74,7 @@ JetMatchingBarrel: cuts: - "abs({eta}) < 2.4" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, barrel)" + ylabel: "Matching Efficiency (barrel)" binning: min: 0 max: 500 @@ -118,7 +118,7 @@ JetMatchingEndcap: cuts: - "abs({eta}) < 2.4" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, endcap)" + ylabel: "Matching Efficiency (endcap)" binning: min: 0 max: 500 @@ -156,7 +156,7 @@ JetMatchingForward: cuts: - "abs({eta}) < 5" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Trigger Efficiency ( GeV, forward)" + ylabel: "Matching Efficiency (forward)" binning: min: 0 max: 500 diff --git a/configs/V27/caching.yaml b/configs/V31/caching.yaml similarity index 52% rename from configs/V27/caching.yaml rename to configs/V31/caching.yaml index d8d03eb2..57d6c31a 100644 --- a/configs/V27/caching.yaml +++ b/configs/V31/caching.yaml @@ -1,20 +1,6 @@ -V27: - DYLL_M10to50: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/DY_M10to50_1252_200PU_condor/NTP/v27_PU200/*.root - trees_branches: - genTree/L1GenTree: - part_mu: [Id, Stat, Pt, Eta, Phi] - part_e: [Id, Stat, Pt, Eta, Phi] - part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] - l1PhaseIITree/L1PhaseIITree: - tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, EGRefPt, EGRefEta, EGRefPhi, HGC, PassesEleID, PassesPhoID] - EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] - gmtMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, Bx] - gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] - nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] +V31: DYLL_M50: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/DY_M50_1252_200PU/NTP/v27_PU200/*.root + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29/DYToLL_M-50_TuneCP5_14TeV-pythia8/DY_M50_1252_200PU_v29_13x_fixTkPhi/230822_121429/0000/L*.root trees_branches: genTree/L1GenTree: part_mu: [Id, Stat, Pt, Eta, Phi] @@ -24,28 +10,34 @@ V27: EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] gmtMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, Bx] gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] + z0L1TkPV: "all" TT: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/TT_1252_200PU/NTP/v27_PU200/*.root + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29/TT_TuneCP5_14TeV-powheg-pythia8/TT_131_200PU_v29_13x_fixTkPhi/230822_122619/0000/L*.root trees_branches: genTree/L1GenTree: genMetTrue: "all" jet: "all" l1PhaseIITree/L1PhaseIITree: - trackerMET: "all" - trackerMHT: "all" puppiMET: "all" + phase1PuppiJet: "all" phase1PuppiMHT: "all" - trackerHT: "all" phase1PuppiHT: "all" seededConePuppiJet: [Pt, Et, Eta, Phi] + seededConeExtendedPuppiJet: [Pt, Et, Eta, Phi, BJetNN] seededConePuppiHT: "all" seededConePuppiMHT: "all" trackerJet: [Pt, Eta, Phi] - phase1PuppiJet: "all" + trackerMET: "all" + trackerMHT: "all" + trackerHT: "all" # caloJet: "all" caloJet: [Et, Pt, Eta, Phi] + ## DEBUG + #tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, EGRefPt, EGRefEta, EGRefPhi, HGC, PassesEleID, PassesPhoID] + #tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID] + z0L1TkPV: "all" VBFHToTauTau: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/VBFHToTauTau_1252_200PU/NTP/v27_PU200/*.root + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29/VBFHToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/VBFHToTauTau_131_200PU_v29_13x_fixTkPhi/230822_122634/0000/L*.root trees_branches: genTree/L1GenTree: part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] @@ -53,7 +45,7 @@ V27: nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] HHToTauTau: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/GluGluToHHTo2B2Tau_node_SM_TuneCP5_14TeV-madgraph-pythia8/HHToTauTau_1252_200PU_crab_v27_PU200_fixHwQual/230320_095340/0000/L1NtuplePhaseII_Step1_1.root + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29/GluGluToHHTo2B2Tau_node_SM_TuneCP5_14TeV-madgraph-pythia8/HHTo2B2Tau_131_200PU_v29_13x_fixTkPhi/230824_130354/0000/L*.root trees_branches: genTree/L1GenTree: part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] @@ -61,16 +53,15 @@ V27: nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] caloTau: [Et, Eta, Pt, Phi, Iso, HwQual] Hgg: - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/GluGluHToGG_1252_200PU/NTP/v27_PU200/*.root + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29/GluGluHToGG_M-125_TuneCP5_14TeV-powheg-pythia8/GluGluHToGG_131_200PU_v29_13x_fixTkPhi/230822_122650/0000/L*.root trees_branches: genTree/L1GenTree: part_gamma: [Id, Stat, Pt, Eta, Phi] l1PhaseIITree/L1PhaseIITree: - tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID] + tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID, TrkIsoPV] EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] MinBias: - #ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/MinBias_TuneCP5_14TeV-pythia8/MinBias_1252_200PU_crb_v27_PU200/230213_192753/0000/L1NtuplePhaseII_Step1*.root - ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/MinBias_TuneCP5_14TeV-pythia8/MinBias_1252_200PU_crb_v27_PU200/230213_192753/L1NtuplePhaseII_Step1.root + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/13X/v29/MinBias_TuneCP5_14TeV-pythia8/MinBias_131_v29_13x_fixTkPhi/230825_103803/M*.root trees_branches: l1PhaseIITree/L1PhaseIITree: puppiMET: "all" @@ -78,12 +69,22 @@ V27: phase1PuppiMHT: "all" phase1PuppiHT: "all" seededConePuppiJet: [Pt, Et, Eta, Phi] + seededConeExtendedPuppiJet: [Pt, Et, Eta, Phi, BJetNN] + seededConeExtendedPuppiHT: "all" seededConePuppiHT: "all" seededConePuppiMHT: "all" - tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, HGC, PassesEleID, PassesPhoID] - EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] - gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] - nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] - tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID] + caloJet: [Et, Pt, Eta, Phi] + tkElectron: [Pt, Et, Eta, Phi, Chg, TrkIso, PfIso, PuppiIso, zVtx, HwQual, HGC, PassesEleID, PassesPhoID] + EG: [Pt, Et, Eta, Phi, Iso, HwQual, HGC, PassesEleID, PassesSaID] + gmtTkMuon: [Pt, Eta, Phi, Z0, D0, Chg, Qual ] + gmtMuon: [Pt, Eta, Phi, Z0, D0, Chg, Qual ] + nnTau: [Et, Eta, Pt, Phi, Z0, PassTightNN, Chg, DXY, PassLooseNN] + tkPhoton: [Pt, Et, Eta, Phi, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID] z0L1TkPV: "all" + caloTau: [Et, Eta, Pt, Phi, Iso, HwQual] + trackerJet: [Pt, Eta, Phi] + trackerMET: "all" + trackerMHT: "all" + trackerHT: "all" + diff --git a/configs/V31/object_performance/comparisons/bJetEff.yml b/configs/V31/object_performance/comparisons/bJetEff.yml new file mode 100644 index 00000000..eaa197fb --- /dev/null +++ b/configs/V31/object_performance/comparisons/bJetEff.yml @@ -0,0 +1,30 @@ +BJetEff_Pt: + files: + JetMatching_Pt_Pt30ToInf_genBJets_-999_V31: + object: seededConeExtendedPuppiJet + dir: outputs/V31/turnons/ + label: "Signal: Matched b-jets" + JetMatching_Pt_Pt30ToInf_genNotBJets_-999_V31: + object: seededConeExtendedPuppiJet + dir: outputs/V31/turnons/ + label: "Background: Unmatched b-jets" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + watermark: "BJet_Pt" + save_dir: "outputs/V31/BJet/turnons" + + +BJetEff_Eta: + files: + JetMatching_Eta_Pt30ToInf_genBJets_-999_V31: + object: seededConeExtendedPuppiJet + dir: outputs/V31/turnons/ + label: "Signal: Matched b-jets" + JetMatching_Eta_Pt30ToInf_genNotBJets_-999_V31: + object: seededConeExtendedPuppiJet + dir: outputs/V31/turnons/ + label: "Background: Unmatched b-jets" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency" + watermark: "BJet_Eta" + save_dir: "outputs/V31/BJet/turnons" diff --git a/configs/V27/object_performance/version_comparison.yaml b/configs/V31/object_performance/comparisons/version_comparison.yaml similarity index 60% rename from configs/V27/object_performance/version_comparison.yaml rename to configs/V31/object_performance/comparisons/version_comparison.yaml index 3aeeab6e..166cd6ed 100644 --- a/configs/V27/object_performance/version_comparison.yaml +++ b/configs/V31/object_performance/comparisons/version_comparison.yaml @@ -1,44 +1,44 @@ -V22_V27_GMTMuonsBarrel_Comparison: +V22_V31_GMTMuonsBarrel_Comparison: files: MuonsTrigger_20_V22: object: gmtMuon dir: outputs/V22/turnons/ label: "GMT Muon (V22)" - MuonsTrigger_20_V27: + MuonsTrigger_20_V31: object: gmtMuon - dir: outputs/V27/turnons/ - label: "GMT Muon (V27)" + dir: outputs/V31/turnons/ + label: "GMT Muon (V31)" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_V27_gmtMuonBarrel_Comp" + watermark: "V22_V31_gmtMuonBarrel_Comp" save_dir: "outputs/V22vs27/turnons" -V22_V27_ElectronsBarrel_Comparison: +V22_V31_ElectronsBarrel_Comparison: files: ElectronsTriggerBarrel_30_V22: object: tkElectron dir: outputs/V22/turnons/ label: "tkElectron (V22)" - ElectronsTriggerBarrel_30_V27: + ElectronsTriggerBarrel_30_V31: object: tkElectron - dir: outputs/V27/turnons/ - label: "tkElectron (V27)" + dir: outputs/V31/turnons/ + label: "tkElectron (V31)" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_V27_EGBarrel_Comp" + watermark: "V22_V31_EGBarrel_Comp" save_dir: "outputs/V22vs27/turnons" -V22_V27_GMTtkMuonsBarrel_Comparison: +V22_V31_GMTtkMuonsBarrel_Comparison: files: MuonsTrigger_20_V22: object: gmtMuon dir: outputs/V22/turnons/ label: "GMT tkMuon (V22)" - MuonsTrigger_20_V27: + MuonsTrigger_20_V31: object: gmtMuon - dir: outputs/V27/turnons/ - label: "GMT tkMuon (V27)" + dir: outputs/V31/turnons/ + label: "GMT tkMuon (V31)" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_V27_gmtTkMuonBarrel_Comp" + watermark: "V22_V31_gmtTkMuonBarrel_Comp" save_dir: "outputs/V22vs27/turnons" diff --git a/configs/V27/object_performance/electron_iso.yaml b/configs/V31/object_performance/electron_iso.yaml similarity index 66% rename from configs/V27/object_performance/electron_iso.yaml rename to configs/V31/object_performance/electron_iso.yaml index 2e276ef0..e3495dae 100644 --- a/configs/V27/object_performance/electron_iso.yaml +++ b/configs/V31/object_performance/electron_iso.yaml @@ -1,10 +1,11 @@ ElectronsIsolation_Barrel: sample: DYLL_M50 - default_version: V27 + version: V31 + match_test_to_ref: True iso_vs_efficiency: True reference_object: object: "part_e" - suffix: "Pt" + x_arg: "Pt" label: "Gen Electrons" cuts: event: @@ -13,13 +14,7 @@ ElectronsIsolation_Barrel: object: - "abs({eta}) < 1.479" test_objects: - tkElectron: - suffix: "trkiso" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - - "{passeseleid} == 1" + tkElectron:NoIso: "trkiso" xlabel: "Isolation" ylabel: "Efficiency (Barrel)" binning: @@ -29,11 +24,12 @@ ElectronsIsolation_Barrel: ElectronsIsolation_Endcap: sample: DYLL_M50 - default_version: V27 + version: V31 + match_test_to_ref: True iso_vs_efficiency: True reference_object: object: "part_e" - suffix: "Pt" + x_arg: "Pt" label: "Gen Electrons" cuts: event: @@ -42,13 +38,7 @@ ElectronsIsolation_Endcap: object: - "abs({eta}) < 2.4" test_objects: - tkElectron: - suffix: "trkiso" - label: "TkElectron" - match_dR: 0.15 - cuts: - - "abs({eta}) < 2.4" - #- "{passeseleid} == 1" + tkElectron:NoIsoForIso: "trkiso" xlabel: "Isolation" ylabel: "Efficiency (Endcap)" binning: diff --git a/configs/V31/object_performance/electron_matching.yaml b/configs/V31/object_performance/electron_matching.yaml new file mode 100644 index 00000000..80145763 --- /dev/null +++ b/configs/V31/object_performance/electron_matching.yaml @@ -0,0 +1,49 @@ +ElectronsMatchingBarrel: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default: "Pt" + tkElectron:NoIso: "Pt" + tkElectron:Iso: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +ElectronsMatchingEndcap: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default: "Pt" + tkElectron:NoIso: "Pt" + tkElectron:Iso: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V31/object_performance/electron_matching_eta.yaml b/configs/V31/object_performance/electron_matching_eta.yaml new file mode 100644 index 00000000..c88dd333 --- /dev/null +++ b/configs/V31/object_performance/electron_matching_eta.yaml @@ -0,0 +1,50 @@ +ElectronsMatching_Eta_Pt10to25: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Eta" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + EG:default: "Eta" + tkElectron:NoIso: "Eta" + tkElectron:Iso: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +ElectronsMatching_Eta_Pt25toInf: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Eta" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} > 25" + object: + - "abs({eta}) < 3.0" + test_objects: + EG:default: "Eta" + tkElectron:NoIso: "Eta" + tkElectron:Iso: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V26/object_performance/electron_trigger.yaml b/configs/V31/object_performance/electron_trigger.yaml similarity index 52% rename from configs/V26/object_performance/electron_trigger.yaml rename to configs/V31/object_performance/electron_trigger.yaml index 5cd2a8f1..df459773 100644 --- a/configs/V26/object_performance/electron_trigger.yaml +++ b/configs/V31/object_performance/electron_trigger.yaml @@ -1,9 +1,10 @@ ElectronsTriggerBarrel: - sample: Zee - default_version: V26 + sample: DYLL_M50 + version: V31 + match_test_to_ref: True reference_object: object: "part_e" - suffix: "Pt" + x_arg: "Pt" label: "Gen Electrons" cuts: event: @@ -12,21 +13,9 @@ ElectronsTriggerBarrel: object: - "abs({eta}) < 2.8" test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.8" - # - "{passeseleid} == 1" - tkElectron: - suffix: "Pt" - label: "tkElectron" - match_dR: 0.15 - cuts: - - "{passeseleid} == 1" - - "abs({eta}) < 2.8" + EG:default:barrel: "Pt" + tkElectron:NoIso:barrel: "Pt" + tkElectron:Iso:barrel: "Pt" thresholds: [10, 20, 30, 40] scalings: method: "naive" @@ -35,15 +24,16 @@ ElectronsTriggerBarrel: ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" binning: min: 0 - max: 150 + max: 100 step: 1.5 ElectronsTriggerEndcap: - sample: Zee - default_version: V26 + sample: DYLL_M50 + version: V31 + match_test_to_ref: True reference_object: object: "part_e" - suffix: "Pt" + x_arg: "Pt" label: "Gen Electrons" cuts: event: @@ -52,21 +42,9 @@ ElectronsTriggerEndcap: object: - "abs({eta}) < 2.8" test_objects: - EG: - suffix: "Pt" - label: "EG Electron" - match_dR: 0.2 - quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.8" - # - "{passessaid} == 1" - tkElectron: - suffix: "Pt" - label: "tkElectron" - match_dR: 0.15 - cuts: - - "{passeseleid} == 1" - - "abs({eta}) < 2.8" + EG:default:endcap: "Pt" + tkElectron:NoIso:endcap: "Pt" + tkElectron:Iso:endcap: "Pt" thresholds: [10, 20, 30, 40] scalings: method: "naive" @@ -75,5 +53,5 @@ ElectronsTriggerEndcap: ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" binning: min: 0 - max: 150 + max: 100 step: 1.5 diff --git a/configs/V31/object_performance/jets_matching.yaml b/configs/V31/object_performance/jets_matching.yaml new file mode 100644 index 00000000..1ad6fec1 --- /dev/null +++ b/configs/V31/object_performance/jets_matching.yaml @@ -0,0 +1,95 @@ +JetMatchingForward_3p7to7: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 3.7" + object: + - "abs({eta}) < 5" + test_objects: + caloJet:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (forward)" + binning: + min: 0 + max: 300 + step: 5 + +JetMatchingBarrel: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" + caloJet:default: "Pt" + trackerJet:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcap: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" + caloJet:default: "Pt" + trackerJet:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingForward: + version: V31 + sample: TT + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" + caloJet:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V31/object_performance/jets_matching_eta.yaml b/configs/V31/object_performance/jets_matching_eta.yaml new file mode 100644 index 00000000..1bfa6331 --- /dev/null +++ b/configs/V31/object_performance/jets_matching_eta.yaml @@ -0,0 +1,72 @@ +JetMatching_Eta_Pt40To100: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + phase1PuppiJet:default: "Eta" + seededConePuppiJet:default: "Eta" + caloJet:default: "Eta" + trackerJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + phase1PuppiJet:default: "Eta" + seededConePuppiJet:default: "Eta" + caloJet:default: "Eta" + trackerJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + caloJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5.5 + max: 5.5 + step: 0.25 \ No newline at end of file diff --git a/configs/V31/object_performance/jets_matching_wBTag.yaml b/configs/V31/object_performance/jets_matching_wBTag.yaml new file mode 100644 index 00000000..50cd0938 --- /dev/null +++ b/configs/V31/object_performance/jets_matching_wBTag.yaml @@ -0,0 +1,136 @@ +JetMatching_Eta_Pt40To100_ExtendedVsRegular: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + seededConePuppiJet:default: "Eta" + seededConeExtendedPuppiJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + seededConePuppiJet:default: "Eta" + seededConeExtendedPuppiJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genBJets: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonflavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + seededConeExtendedPuppiJet:bjetnn: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genNotBJets: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonflavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + seededConeExtendedPuppiJet:bjetnn: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Pt_Pt30ToInf_genBJets: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonflavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + seededConeExtendedPuppiJet:bjetnn: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 + +JetMatching_Pt_Pt30ToInf_genNotBJets: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonflavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + seededConeExtendedPuppiJet:bjetnn: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 diff --git a/configs/V31/object_performance/jets_trigger.yaml b/configs/V31/object_performance/jets_trigger.yaml new file mode 100644 index 00000000..58511967 --- /dev/null +++ b/configs/V31/object_performance/jets_trigger.yaml @@ -0,0 +1,85 @@ +JetTurnonBarrel: + version: V31 + sample: TT + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + phase1PuppiJet:default:barrel: "Pt" + seededConePuppiJet:default:barrel: "Pt" + caloJet:default:barrel: "Pt" + trackerJet:default:barrel: "Pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcap: + version: V31 + sample: TT + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + phase1PuppiJet:default:endcap: "Pt" + seededConePuppiJet:default:endcap: "Pt" + caloJet:default:endcap: "Pt" + trackerJet:default:endcap: "Pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForward: + version: V31 + sample: TT + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + phase1PuppiJet:default:forward: "Pt" + seededConePuppiJet:default:forward: "Pt" + caloJet:default:forward: "Pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V31/object_performance/jets_trigger_fwd.yaml b/configs/V31/object_performance/jets_trigger_fwd.yaml new file mode 100644 index 00000000..ce0a68a3 --- /dev/null +++ b/configs/V31/object_performance/jets_trigger_fwd.yaml @@ -0,0 +1,26 @@ +JetTurnonFwd_3p7to7: + sample: TT + version: V31 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 3.7" + object: + - "abs({eta}) < 7" + test_objects: + #phase1PuppiJet:default:forward: "Pt" + seededConePuppiJet:default:forward: "Pt" + thresholds: [50,100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: r'Trigger Efficiency ( GeV, $3.6<\eta<6$)' + binning: + min: 0 + max: 300 + step: 10 diff --git a/configs/V27/object_performance/met_ht_mht.yaml b/configs/V31/object_performance/met_ht_mht.yaml similarity index 68% rename from configs/V27/object_performance/met_ht_mht.yaml rename to configs/V31/object_performance/met_ht_mht.yaml index cca4063d..6a93d431 100644 --- a/configs/V27/object_performance/met_ht_mht.yaml +++ b/configs/V31/object_performance/met_ht_mht.yaml @@ -1,9 +1,9 @@ HT_90perc: sample: TT - default_version: V27 + version: V31 reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen HT" trafo: "HT" cuts: @@ -11,12 +11,9 @@ HT_90perc: - "abs({eta}) < 2.4" - "{pt} > 30" test_objects: - trackerHT: - suffix: "" - label: "Tracker HT" - phase1PuppiHT: - suffix: "" - label: "Histogrammed Puppi HT" + trackerHT:default: "" + phase1PuppiHT:default: "" + seededConePuppiHT:default: "" thresholds: [350] scalings: method: "naive" @@ -30,10 +27,10 @@ HT_90perc: HT_50perc: sample: TT - default_version: V27 + version: V31 reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen HT" trafo: "HT" cuts: @@ -41,12 +38,9 @@ HT_50perc: - "abs({eta}) < 2.4" - "{pt} > 30" test_objects: - trackerHT: - suffix: "" - label: "Tracker HT" - phase1PuppiHT: - suffix: "" - label: "Histogrammed Puppi HT" + trackerHT:default: "" + phase1PuppiHT:default: "" + seededConePuppiHT:default: "" thresholds: [350] scalings: method: "naive" @@ -60,10 +54,10 @@ HT_50perc: MHT_50perc: sample: TT - default_version: V27 + version: V31 reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen MHT" cuts: object: @@ -71,12 +65,9 @@ MHT_50perc: - "{pt} > 30" trafo: "MHT" test_objects: - trackerMHT: - suffix: "" - label: "Tracker MHT" - phase1PuppiMHT: - suffix: "et" - label: "Histogrammed Puppi MHT" + trackerMHT:default: "" + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" thresholds: [70, 150] scalings: method: "naive" @@ -90,10 +81,10 @@ MHT_50perc: MHT_90perc: sample: TT - default_version: V27 + version: V31 reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen MHT" cuts: object: @@ -101,12 +92,9 @@ MHT_90perc: - "{pt} > 30" trafo: "MHT" test_objects: - trackerMHT: - suffix: "" - label: "Tracker MHT" - phase1PuppiMHT: - suffix: "et" - label: "Histogrammed Puppi MHT" + trackerMHT:default: "" + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" thresholds: [70, 150] scalings: method: "naive" @@ -120,18 +108,14 @@ MHT_90perc: MET_90perc: sample: TT - default_version: V27 + version: V31 reference_object: object: "genMetTrue" - suffix: "" + x_arg: "" label: "Gen MET" test_objects: - trackerMET: - suffix: "" - label: "Tracker MET" - puppiMET: - suffix: "et" - label: "Puppi MET" + trackerMET:default: "" + puppiMET:default: "et" thresholds: [150] xlabel: "Gen. MET (GeV)" ylabel: "Trigger Efficiency ( GeV)" @@ -145,18 +129,14 @@ MET_90perc: MET_50perc: sample: TT - default_version: V27 + version: V31 reference_object: object: "genMetTrue" - suffix: "" + x_arg: "" label: "Gen MET" test_objects: - trackerMET: - suffix: "" - label: "Tracker MET" - puppiMET: - suffix: "et" - label: "Puppi MET" + trackerMET:default: "" + puppiMET:default: "et" thresholds: [150] xlabel: "Gen. MET (GeV)" ylabel: "Trigger Efficiency ( GeV)" diff --git a/configs/V22/object_performance/mht.yaml b/configs/V31/object_performance/mht.yaml similarity index 52% rename from configs/V22/object_performance/mht.yaml rename to configs/V31/object_performance/mht.yaml index 4eacd1bf..c2bdac75 100644 --- a/configs/V22/object_performance/mht.yaml +++ b/configs/V31/object_performance/mht.yaml @@ -1,9 +1,9 @@ -MHT30: +MHT30_50perc: sample: TT - default_version: V22 + version: V31 reference_object: object: "jet" - suffix: "Pt" + x_arg: "Pt" label: "Gen MHT" cuts: object: @@ -11,19 +11,13 @@ MHT30: - "{pt} > 30" trafo: "MHT" test_objects: - phase1PuppiMHT: - suffix: "et" - label: "Histogrammed Puppi MHT" - seededConePuppiMHT: - suffix: "et" - label: "SeededCone MHT" - trackerMHT: - suffix: "" - label: "Tracker MHT" - thresholds: [70, 150] + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" + trackerMHT:default: "" + thresholds: [70] scalings: method: "naive" - threshold: 0.90 + threshold: 0.50 xlabel: "Gen. MHT30 (GeV)" ylabel: "Trigger Efficiency ( GeV)" binning: diff --git a/configs/V28/object_performance/muon_matching.yaml b/configs/V31/object_performance/muon_matching.yaml similarity index 50% rename from configs/V28/object_performance/muon_matching.yaml rename to configs/V31/object_performance/muon_matching.yaml index 5513e074..d8684fcb 100644 --- a/configs/V28/object_performance/muon_matching.yaml +++ b/configs/V31/object_performance/muon_matching.yaml @@ -1,9 +1,10 @@ MuonsMatchingBarrel: sample: DYLL_M50 - default_version: V28 + version: V31 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Pt" + x_arg: "Pt" label: "Gen Muons" cuts: event: @@ -11,31 +12,22 @@ MuonsMatchingBarrel: object: - "abs({eta}) < 0.83" test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) < 0.83" + gmtMuon:default:barrel: "Pt" + gmtTkMuon:default:barrel: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (barrel)" binning: min: 0 - max: 150 + max: 100 step: 3 MuonsMatchingOverlap: sample: DYLL_M50 - default_version: V28 + version: V31 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Pt" + x_arg: "Pt" label: "Gen Muons" cuts: event: @@ -44,33 +36,22 @@ MuonsMatchingOverlap: - "abs({eta}) > 0.83" - "abs({eta}) < 1.24" test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" + gmtMuon:default:overlap: "Pt" + gmtTkMuon:default:overlap: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (overlap)" binning: min: 0 - max: 150 + max: 100 step: 3 MuonsMatchingEndcap: sample: DYLL_M50 - default_version: V28 + version: V31 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Pt" + x_arg: "Pt" label: "Gen Muons" cuts: event: @@ -79,23 +60,11 @@ MuonsMatchingEndcap: - "abs({eta}) > 1.24" - "abs({eta}) < 2.4" test_objects: - gmtMuon: - suffix: "Pt" - label: "GMT Muon" - match_dR: 0.3 - cuts: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" - gmtTkMuon: - suffix: "Pt" - label: "GMT TkMuon" - match_dR: 0.1 - cuts: - - "abs({eta}) > 1.24" - - "abs({eta}) < 2.4" + gmtMuon:default:endcap: "Pt" + gmtTkMuon:default:endcap: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (endcap)" binning: min: 0 - max: 150 - step: 3 \ No newline at end of file + max: 100 + step: 3 diff --git a/configs/V26/object_performance/muon_matching_eta.yaml b/configs/V31/object_performance/muon_matching_eta.yaml similarity index 72% rename from configs/V26/object_performance/muon_matching_eta.yaml rename to configs/V31/object_performance/muon_matching_eta.yaml index cb34ec16..4a948de0 100644 --- a/configs/V26/object_performance/muon_matching_eta.yaml +++ b/configs/V31/object_performance/muon_matching_eta.yaml @@ -1,9 +1,10 @@ MuonsMatching_Eta_Pt2to5: - sample: Zmm - default_version: V26 + sample: DYLL_M50 + version: V31 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Eta" + x_arg: "Eta" label: "Gen Muons" cuts: event: @@ -13,10 +14,8 @@ MuonsMatching_Eta_Pt2to5: object: - "abs({eta}) < 2.4" test_objects: - gmtTkMuon: - suffix: "Eta" - label: "GMT TkMuon" - match_dR: 0.1 + gmtMuon:default: "Eta" + gmtTkMuon:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (2-5 GeV)" binning: @@ -25,11 +24,12 @@ MuonsMatching_Eta_Pt2to5: step: 0.2 MuonsMatching_Eta_Pt15toInf: - sample: Zmm - default_version: V26 + sample: DYLL_M50 + version: V31 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Eta" + x_arg: "Eta" label: "Gen Muons" cuts: event: @@ -38,10 +38,8 @@ MuonsMatching_Eta_Pt15toInf: object: - "abs({eta}) < 2.4" test_objects: - gmtTkMuon: - suffix: "Eta" - label: "GMT TkMuon" - match_dR: 0.1 + gmtMuon:default: "Eta" + gmtTkMuon:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>15 GeV)" binning: diff --git a/configs/V31/object_performance/muon_trigger.yaml b/configs/V31/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..fd0fbe34 --- /dev/null +++ b/configs/V31/object_performance/muon_trigger.yaml @@ -0,0 +1,81 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 0.83" + test_objects: + gmtMuon:default:barrel: "Pt" + gmtTkMuon:default:barrel: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + gmtMuon:default:overlap: "Pt" + gmtTkMuon:default:overlap: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V31 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) > 1.24" + test_objects: + gmtMuon:default:endcap: "Pt" + gmtTkMuon:default:endcap: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V27/object_performance/photon_iso.yaml b/configs/V31/object_performance/photon_iso.yaml similarity index 65% rename from configs/V27/object_performance/photon_iso.yaml rename to configs/V31/object_performance/photon_iso.yaml index 498abd0c..6a55b569 100644 --- a/configs/V27/object_performance/photon_iso.yaml +++ b/configs/V31/object_performance/photon_iso.yaml @@ -1,10 +1,11 @@ PhotonIsolation_Barrel: sample: Hgg - default_version: V27 + version: V31 iso_vs_efficiency: True + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Pt" + x_arg: "Pt" label: "Gen Photons" cuts: event: @@ -13,13 +14,7 @@ PhotonIsolation_Barrel: object: - "abs({eta}) < 1.479" test_objects: - tkPhoton: - suffix: "trkiso" - label: "TkPhoton" - match_dR: 0.15 - cuts: - - "abs({eta}) < 1.479" - - "{passeseleid} == 1" + tkPhoton:NoIso:barrel: "trkiso" xlabel: "Isolation" ylabel: "Efficiency (Barrel)" binning: @@ -29,28 +24,22 @@ PhotonIsolation_Barrel: PhotonIsolation_Endcap: sample: Hgg - default_version: V27 + version: V31 iso_vs_efficiency: True + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Pt" + x_arg: "Pt" label: "Gen Photons" cuts: event: - "{dr_0.3} < 0.15" - "abs({eta}) > 1.479" - object: - "abs({eta}) < 2.4" + object: - "abs({eta}) > 1.479" test_objects: - tkPhoton: - suffix: "trkiso" - label: "TkPhoton" - match_dR: 0.15 - cuts: - - "abs({eta}) > 1.479" - - "abs({eta}) < 2.4" - - "{passesphoid} == 1" + tkPhoton:NoIso:endcap: "trkiso" xlabel: "Isolation" ylabel: "Efficiency (Endcap)" binning: diff --git a/configs/V31/object_performance/photons_matching.yaml b/configs/V31/object_performance/photons_matching.yaml new file mode 100644 index 00000000..76167a8a --- /dev/null +++ b/configs/V31/object_performance/photons_matching.yaml @@ -0,0 +1,49 @@ +PhotonsMatching_Barrel: + sample: Hgg + version: V31 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default: "Pt" + tkPhoton:NoIso: "Pt" + tkPhoton:Iso: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap: + sample: Hgg + version: V31 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default: "Pt" + tkPhoton:NoIso: "Pt" + tkPhoton:Iso: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V31/object_performance/photons_matching_eta.yaml b/configs/V31/object_performance/photons_matching_eta.yaml new file mode 100644 index 00000000..ddc39d4c --- /dev/null +++ b/configs/V31/object_performance/photons_matching_eta.yaml @@ -0,0 +1,50 @@ +PhotonsMatching_Eta_Pt10to25: + sample: Hgg + version: V31 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Eta" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + EG:default: "Eta" + tkPhoton:NoIso: "Eta" + tkPhoton:Iso: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +PhotonsMatching_Eta_Pt25toInf: + sample: Hgg + version: V31 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Eta" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} >= 25" + object: + - "abs({eta}) < 3.0" + test_objects: + EG:default: "Eta" + tkPhoton:NoIso: "Eta" + tkPhoton:Iso: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V31/object_performance/photons_trigger.yaml b/configs/V31/object_performance/photons_trigger.yaml new file mode 100644 index 00000000..4ee00e33 --- /dev/null +++ b/configs/V31/object_performance/photons_trigger.yaml @@ -0,0 +1,57 @@ +PhotonsTrigger_Barrel: + sample: Hgg + version: V31 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default:barrel: "Pt" + tkPhoton:NoIso:barrel: "Pt" + tkPhoton:Iso:barrel: "Pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Endcap: + sample: Hgg + version: V31 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default:endcap: "Pt" + tkPhoton:NoIso:endcap: "Pt" + tkPhoton:Iso:endcap: "Pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V31/object_performance/slim/.backups/.cele.yaml~ b/configs/V31/object_performance/slim/.backups/.cele.yaml~ new file mode 100644 index 00000000..91ccd23e --- /dev/null +++ b/configs/V31/object_performance/slim/.backups/.cele.yaml~ @@ -0,0 +1,19 @@ + +Electrons_Turnons_V29: + files: + ElectronsMatching_10_-999_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>10)" + ElectronsMatching_20_-999_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>20)" + ElectronsMatching_30_-999_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>30)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + watermark: "V29_tkIsoEle_Comp" + save_dir: "outputs/V29/turnons" diff --git a/configs/V31/object_performance/slim/cele.yaml b/configs/V31/object_performance/slim/cele.yaml new file mode 100644 index 00000000..65c3f929 --- /dev/null +++ b/configs/V31/object_performance/slim/cele.yaml @@ -0,0 +1,18 @@ +Electrons_Turnons_V29: + files: + ElectronsMatching_10_-999_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>10)" + ElectronsMatching_20_-999_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>20)" + ElectronsMatching_30_-999_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>30)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + watermark: "V29_tkIsoEle_Comp" + save_dir: "outputs/V29/turnons" diff --git a/configs/V31/object_performance/slim/cjet.yaml b/configs/V31/object_performance/slim/cjet.yaml new file mode 100644 index 00000000..b3af3c02 --- /dev/null +++ b/configs/V31/object_performance/slim/cjet.yaml @@ -0,0 +1,22 @@ +Jets_Turnons_V29: + files: + JetMatching_25_-999_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>25)" + JetMatching_50_-999_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>50)" + JetMatching_75_-999_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>75)" + JetMatching_100_-999_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>100)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + watermark: "V29_SCJet_Comp" + save_dir: "outputs/V29/turnons" diff --git a/configs/V31/object_performance/slim/compare_gammas.yaml b/configs/V31/object_performance/slim/compare_gammas.yaml new file mode 100644 index 00000000..00a041b2 --- /dev/null +++ b/configs/V31/object_performance/slim/compare_gammas.yaml @@ -0,0 +1,18 @@ +Photons_Turnons_V29: + files: + PhotonsTrigger_Iso_Inclusive_10_V29: + object: tkIsoPhoton + dir: outputs/V29/turnons/ + label: "tkIsoPhoton (L1 $p_T$>10)" + PhotonsTrigger_Iso_Inclusive_20_V29: + object: tkIsoPhoton + dir: outputs/V29/turnons/ + label: "tkIsoPhoton (L1 $p_T$>20)" + PhotonsTrigger_Iso_Inclusive_30_V29: + object: tkIsoPhoton + dir: outputs/V29/turnons/ + label: "tkIsoPhoton (L1 $p_T$>30)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency" + watermark: "V29_tkIsoPhoton_Comp" + save_dir: "outputs/V29/turnons" diff --git a/configs/V31/object_performance/slim/compare_jets.yaml b/configs/V31/object_performance/slim/compare_jets.yaml new file mode 100644 index 00000000..0d787d2f --- /dev/null +++ b/configs/V31/object_performance/slim/compare_jets.yaml @@ -0,0 +1,22 @@ +Jets_Turnons_V29: + files: + JetTurnon_SC_Inclusive_25_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>25)" + JetTurnon_SC_Inclusive_50_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>50)" + JetTurnon_SC_Inclusive_75_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>75)" + JetTurnon_SC_Inclusive_100_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>100)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency" + watermark: "V29_SCJet_Comp" + save_dir: "outputs/V29/turnons" diff --git a/configs/V31/object_performance/slim/compare_mus.yaml b/configs/V31/object_performance/slim/compare_mus.yaml new file mode 100644 index 00000000..e07ffa49 --- /dev/null +++ b/configs/V31/object_performance/slim/compare_mus.yaml @@ -0,0 +1,18 @@ +Muons_Turnons_V29: + files: + MuonsTrigger_gmtkMu_Inclusive_5_V29: + object: gmtTkMuon + dir: outputs/V29/turnons/ + label: "GMT TkMuon (L1 $p_T$>5)" + MuonsTrigger_gmtkMu_Inclusive_15_V29: + object: gmtTkMuon + dir: outputs/V29/turnons/ + label: "GMT TkMuon (L1 $p_T$>15)" + MuonsTrigger_gmtkMu_Inclusive_25_V29: + object: gmtTkMuon + dir: outputs/V29/turnons/ + label: "GMT TkMuon (L1 $p_T$>25)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency" + watermark: "V29_gmtTkMuon_Comp" + save_dir: "outputs/V29/turnons" diff --git a/configs/V31/object_performance/slim/comparisons.yaml b/configs/V31/object_performance/slim/comparisons.yaml new file mode 100644 index 00000000..b45fc48f --- /dev/null +++ b/configs/V31/object_performance/slim/comparisons.yaml @@ -0,0 +1,79 @@ +Photons_Turnons_V29: + files: + PhotonsMatching_10_-999_V29: + object: tkIsoPhoton + dir: outputs/V29/turnons/ + label: "tkIsoPhoton (L1 $p_T$>10)" + PhotonsMatching_20_-999_V29: + object: tkIsoPhoton + dir: outputs/V29/turnons/ + label: "tkIsoPhoton (L1 $p_T$>20)" + PhotonsMatching_30_-999_V29: + object: tkIsoPhoton + dir: outputs/V29/turnons/ + label: "tkIsoPhoton (L1 $p_T$>30)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + watermark: "V29_tkIsoPhoton_Comp" + save_dir: "outputs/V29/turnons" + +Jets_Turnons_V29: + files: + JetMatching_25_-999_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>25)" + JetMatching_50_-999_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>50)" + JetMatching_75_-999_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>75)" + JetMatching_100_-999_V29: + object: seededConePuppiJet + dir: outputs/V29/turnons/ + label: "SC PuppiJet (L1 $p_T$>100)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + watermark: "V29_SCJet_Comp" + save_dir: "outputs/V29/turnons" + +Electrons_Turnons_V29: + files: + ElectronsMatching_10_-999_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>10)" + ElectronsMatching_20_-999_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>20)" + ElectronsMatching_30_-999_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>30)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + watermark: "V29_tkIsoEle_Comp" + save_dir: "outputs/V29/turnons" + +Muons_Turnons_V29: + files: + MuonsMatching_5_-999_V29: + object: gmtTkMuon + dir: outputs/V29/turnons/ + label: "GMT TkMuon (L1 $p_T$>5)" + MuonsMatching_15_-999_V29: + object: gmtTkMuon + dir: outputs/V29/turnons/ + label: "GMT TkMuon (L1 $p_T$>15)" + MuonsMatching_25_-999_V29: + object: gmtTkMuon + dir: outputs/V29/turnons/ + label: "GMT TkMuon (L1 $p_T$>25)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + watermark: "V29_gmtTkMuon_Comp" + save_dir: "outputs/V29/turnons" diff --git a/configs/V28/object_performance/electron_trigger.yaml b/configs/V31/object_performance/slim/egamma_trigger_inclusive.yaml similarity index 53% rename from configs/V28/object_performance/electron_trigger.yaml rename to configs/V31/object_performance/slim/egamma_trigger_inclusive.yaml index 2d2a48ba..fd66981f 100644 --- a/configs/V28/object_performance/electron_trigger.yaml +++ b/configs/V31/object_performance/slim/egamma_trigger_inclusive.yaml @@ -1,6 +1,6 @@ -ElectronsTriggerBarrel: +ElectronsTrigger_Inclusive: sample: DYLL_M50 - default_version: V28 + default_version: V29 reference_object: object: "part_e" suffix: "Pt" @@ -8,24 +8,18 @@ ElectronsTriggerBarrel: cuts: event: - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" - object: - - "abs({eta}) < 2.8" test_objects: EG: suffix: "Pt" - label: "EG Electron" + label: "EG" match_dR: 0.2 quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.8" tkElectron: suffix: "Pt" label: "tkElectron" match_dR: 0.15 cuts: - "{passeseleid} == 1" - - "abs({eta}) < 2.8" tkIsoElectron: base_obj: "tkElectron" suffix: "Pt" @@ -35,65 +29,57 @@ ElectronsTriggerBarrel: iso_branch: "trkiso" match_dR: 0.15 cuts: - - "abs({eta}) < 2.8" - "{passeseleid} == 1" - thresholds: [10, 20, 30, 40] + thresholds: [30] #[10, 20, 30, 40] scalings: method: "naive" threshold: 0.95 xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + ylabel: "Trigger Efficiency (L1 $p_T > $ GeV)" binning: min: 0 - max: 150 + max: 100 step: 1.5 -ElectronsTriggerEndcap: - sample: DYLL_M50 - default_version: V28 +PhotonsTrigger_Inclusive: + sample: Hgg + default_version: V29 reference_object: - object: "part_e" + object: "part_gamma" suffix: "Pt" - label: "Gen Electrons" + label: "Gen Photons" cuts: event: - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.8" test_objects: EG: suffix: "Pt" - label: "EG Electron" + label: "EG" match_dR: 0.2 quality_id: "QUAL_125x_EGID" - cuts: - - "abs({eta}) < 2.8" - tkElectron: - suffix: "Pt" - label: "tkElectron" - match_dR: 0.15 cuts: - "{passeseleid} == 1" - - "abs({eta}) < 2.8" - tkIsoElectron: - base_obj: "tkElectron" + tkPhoton: + match_dR: 0.15 suffix: "Pt" - label: "tkIsoElectron" - iso_BB: 0.13 - iso_EE: 0.28 - iso_branch: "trkiso" + label: "tkPhoton" + quality_id: "QUAL_125x_tkPhoID" + tkIsoPhoton: + base_obj: "tkPhoton" match_dR: 0.15 - cuts: - - "abs({eta}) < 2.8" - - "{passeseleid} == 1" - thresholds: [10, 20, 30, 40] + suffix: "Pt" + label: "tkIsoPhoton" + iso_EE: 0.2 + iso_BB: 0.2 + iso_branch: trkiso + quality_id: "QUAL_125x_tkPhoID" + thresholds: [30] #[10, 20, 30, 40] scalings: method: "naive" threshold: 0.95 xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + ylabel: "Trigger Efficiency (L1 $p_T > $ GeV)" binning: min: 0 - max: 150 + max: 100 step: 1.5 diff --git a/configs/V31/object_performance/slim/egamma_trigger_tkiso_inclusive.yaml b/configs/V31/object_performance/slim/egamma_trigger_tkiso_inclusive.yaml new file mode 100644 index 00000000..d2b367c4 --- /dev/null +++ b/configs/V31/object_performance/slim/egamma_trigger_tkiso_inclusive.yaml @@ -0,0 +1,62 @@ +ElectronsTrigger_Iso_Inclusive: + sample: DYLL_M50 + default_version: V29 + reference_object: + object: "part_e" + suffix: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + test_objects: + tkIsoElectron: + base_obj: "tkElectron" + suffix: "Pt" + label: "tkIsoElectron" + iso_BB: 0.13 + iso_EE: 0.28 + iso_branch: "trkiso" + match_dR: 0.15 + cuts: + - "{passeseleid} == 1" + thresholds: [10, 20, 30] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Iso_Inclusive: + sample: Hgg + default_version: V29 + reference_object: + object: "part_gamma" + suffix: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + test_objects: + tkIsoPhoton: + base_obj: "tkPhoton" + match_dR: 0.15 + suffix: "Pt" + label: "tkIsoPhoton" + iso_EE: 0.2 + iso_BB: 0.2 + iso_branch: trkiso + quality_id: "QUAL_125x_tkPhoID" + thresholds: [10, 20, 30] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V31/object_performance/slim/ele_test.yaml b/configs/V31/object_performance/slim/ele_test.yaml new file mode 100644 index 00000000..a43c6949 --- /dev/null +++ b/configs/V31/object_performance/slim/ele_test.yaml @@ -0,0 +1,45 @@ +ElectronsMatching_25: + sample: DYLL_M50 + default_version: V29 + reference_object: + object: "part_e" + suffix: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} > 25" + object: + - "abs({eta}) < 2.5" + test_objects: + EG: + suffix: "Pt" + label: "EG" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "abs({eta}) < 2.5" + tkElectron: + suffix: "Pt" + label: "TkElectron" + match_dR: 0.15 + cuts: + - "abs({eta}) < 2.5" + - "{passeseleid} == 1" + tkIsoElectron: + base_obj: "tkElectron" + suffix: "Pt" + label: "TkIsoElectron" + iso_BB: 0.13 + iso_EE: 0.28 + iso_branch: "trkiso" + match_dR: 0.15 + cuts: + - "{passeseleid} == 1" + - "abs({eta}) < 2.5" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 0 + max: 150 + step: 3 diff --git a/configs/V31/object_performance/slim/electron_matching.yaml b/configs/V31/object_performance/slim/electron_matching.yaml new file mode 100644 index 00000000..5463cb9f --- /dev/null +++ b/configs/V31/object_performance/slim/electron_matching.yaml @@ -0,0 +1,191 @@ +ElectronsMatching_10: + sample: DYLL_M50 + default_version: V29 + reference_object: + object: "part_e" + suffix: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.5" + test_objects: + EG: + suffix: "Pt" + label: "EG (L1 $p_{T}$ > 10 GeV)" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 10" + tkElectron: + suffix: "Pt" + label: "TkElectron (L1 $p_{T}$ > 10 GeV)" + match_dR: 0.15 + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 10" + - "{passeseleid} == 1" + tkIsoElectron: + base_obj: "tkElectron" + suffix: "Pt" + label: "TkIsoElectron (L1 $p_{T}$ > 10 GeV)" + iso_BB: 0.13 + iso_EE: 0.28 + iso_branch: "trkiso" + match_dR: 0.15 + cuts: + - "abs({eta}) < 2.5" + - "{passeseleid} == 1" + - "{pt} > 10" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 150 + step: 3 + +ElectronsMatching_20: + sample: DYLL_M50 + default_version: V29 + reference_object: + object: "part_e" + suffix: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.5" + test_objects: + EG: + suffix: "Pt" + label: "EG (L1 $p_{T}$ > 20 GeV)" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 20" + tkElectron: + suffix: "Pt" + label: "TkElectron (L1 $p_{T}$ > 20 GeV)" + match_dR: 0.15 + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 20" + - "{passeseleid} == 1" + tkIsoElectron: + base_obj: "tkElectron" + suffix: "Pt" + label: "TkIsoElectron (L1 $p_{T}$ > 20 GeV)" + iso_BB: 0.13 + iso_EE: 0.28 + iso_branch: "trkiso" + match_dR: 0.15 + cuts: + - "abs({eta}) < 2.5" + - "{passeseleid} == 1" + - "{pt} > 20" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 150 + step: 3 + +ElectronsMatching_25: + sample: DYLL_M50 + default_version: V29 + reference_object: + object: "part_e" + suffix: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.5" + test_objects: + EG: + suffix: "Pt" + label: "EG (L1 $p_{T}$ > 25 GeV)" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + tkElectron: + suffix: "Pt" + label: "TkElectron (L1 $p_{T}$ > 25 GeV)" + match_dR: 0.15 + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + - "{passeseleid} == 1" + tkIsoElectron: + base_obj: "tkElectron" + suffix: "Pt" + label: "TkIsoElectron (L1 $p_{T}$ > 25 GeV)" + iso_BB: 0.13 + iso_EE: 0.28 + iso_branch: "trkiso" + match_dR: 0.15 + cuts: + - "abs({eta}) < 2.5" + - "{passeseleid} == 1" + - "{pt} > 25" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 150 + step: 3 + +ElectronsMatching_30: + sample: DYLL_M50 + default_version: V29 + reference_object: + object: "part_e" + suffix: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.5" + test_objects: + EG: + suffix: "Pt" + label: "EG (L1 $p_{T}$ > 30 GeV)" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 30" + tkElectron: + suffix: "Pt" + label: "TkElectron (L1 $p_{T}$ > 30 GeV)" + match_dR: 0.15 + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 30" + - "{passeseleid} == 1" + tkIsoElectron: + base_obj: "tkElectron" + suffix: "Pt" + label: "TkIsoElectron (L1 $p_{T}$ > 30 GeV)" + iso_BB: 0.13 + iso_EE: 0.28 + iso_branch: "trkiso" + match_dR: 0.15 + cuts: + - "abs({eta}) < 2.5" + - "{passeseleid} == 1" + - "{pt} > 30" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 150 + step: 3 diff --git a/configs/V31/object_performance/slim/electrons_comparisons.yaml b/configs/V31/object_performance/slim/electrons_comparisons.yaml new file mode 100644 index 00000000..c5e35714 --- /dev/null +++ b/configs/V31/object_performance/slim/electrons_comparisons.yaml @@ -0,0 +1,18 @@ +Electrons_Turnons_V29: + files: + ElectronsTrigger_Iso_Inclusive_10_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>10)" + ElectronsTrigger_Iso_Inclusive_20_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>20)" + ElectronsTrigger_Iso_Inclusive_30_V29: + object: tkIsoElectron + dir: outputs/V29/turnons/ + label: "tkIsoElectron (L1 $p_T$>30)" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency" + watermark: "V29_tkIsoEle_Comp" + save_dir: "outputs/V29/turnons" diff --git a/configs/V31/object_performance/slim/jets_matching.yaml b/configs/V31/object_performance/slim/jets_matching.yaml new file mode 100644 index 00000000..d8c38fd5 --- /dev/null +++ b/configs/V31/object_performance/slim/jets_matching.yaml @@ -0,0 +1,128 @@ +JetMatching_25: + sample: TT + default_version: V29 + reference_object: + object: "jet" + suffix: "Pt" + label: "Gen Jets" + cuts: + object: + - "abs({eta}) < 2.5" + test_objects: + seededConePuppiJet: + match_dR: 0.35 + suffix: "Pt" + label: "Seeded Cone PuppiJet (L1 $p_{T}$ > 25 GeV)" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + trackerJet: + match_dR: 0.4 + suffix: "Pt" + label: "Tracker Jet (L1 $p_{T}$ > 25 GeV)" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 500 + step: 10 + +JetMatching_50: + sample: TT + default_version: V29 + reference_object: + object: "jet" + suffix: "Pt" + label: "Gen Jets" + cuts: + object: + - "abs({eta}) < 2.5" + test_objects: + seededConePuppiJet: + match_dR: 0.35 + suffix: "Pt" + label: "Seeded Cone PuppiJet (L1 $p_{T}$ > 50 GeV)" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 50" + trackerJet: + match_dR: 0.4 + suffix: "Pt" + label: "Tracker Jet (L1 $p_{T}$ > 50 GeV)" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 50" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 500 + step: 10 + +JetMatching_75: + sample: TT + default_version: V29 + reference_object: + object: "jet" + suffix: "Pt" + label: "Gen Jets" + cuts: + object: + - "abs({eta}) < 2.5" + test_objects: + seededConePuppiJet: + match_dR: 0.35 + suffix: "Pt" + label: "Seeded Cone PuppiJet (L1 $p_{T}$ > 75 GeV)" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 75" + trackerJet: + match_dR: 0.4 + suffix: "Pt" + label: "Tracker Jet (L1 $p_{T}$ > 75 GeV)" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 75" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 500 + step: 10 + +JetMatching_160: + sample: TT + default_version: V29 + reference_object: + object: "jet" + suffix: "Pt" + label: "Gen Jets" + cuts: + object: + - "abs({eta}) < 2.5" + test_objects: + seededConePuppiJet: + match_dR: 0.35 + suffix: "Pt" + label: "Seeded Cone PuppiJet (L1 $p_{T}$ > 160 GeV)" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 160" + trackerJet: + match_dR: 0.4 + suffix: "Pt" + label: "Tracker Jet (L1 $p_{T}$ > 160 GeV)" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 160" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 500 + step: 10 + diff --git a/configs/V26/object_performance/jets_matching_eta.yaml b/configs/V31/object_performance/slim/jets_matching_eta.yaml similarity index 79% rename from configs/V26/object_performance/jets_matching_eta.yaml rename to configs/V31/object_performance/slim/jets_matching_eta.yaml index de51ebd9..eb3aad26 100644 --- a/configs/V26/object_performance/jets_matching_eta.yaml +++ b/configs/V31/object_performance/slim/jets_matching_eta.yaml @@ -1,6 +1,6 @@ JetMatching_Eta_Pt40To100: sample: TT - default_version: V26 + default_version: V29 reference_object: object: "jet" suffix: "Eta" @@ -12,12 +12,6 @@ JetMatching_Eta_Pt40To100: object: - "abs({eta}) < 5" test_objects: - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 5" seededConePuppiJet: match_dR: 0.35 suffix: "Eta" @@ -39,7 +33,7 @@ JetMatching_Eta_Pt40To100: JetMatching_Eta_Pt100ToInf: sample: TT - default_version: V26 + default_version: V29 reference_object: object: "jet" suffix: "Eta" @@ -48,14 +42,8 @@ JetMatching_Eta_Pt100ToInf: event: - "{pt} > 100" object: - - "abs({eta}) < 2.5" - test_objects: - phase1PuppiJet: - match_dR: 0.3 - suffix: "Pt" - label: "Histogrammed PuppiJet" - cuts: - "abs({eta}) < 5" + test_objects: seededConePuppiJet: match_dR: 0.35 suffix: "Eta" diff --git a/configs/V28/object_performance/jets_trigger_fwd.yaml b/configs/V31/object_performance/slim/jets_trigger_inclusive.yaml similarity index 51% rename from configs/V28/object_performance/jets_trigger_fwd.yaml rename to configs/V31/object_performance/slim/jets_trigger_inclusive.yaml index e568ed61..52bb659d 100644 --- a/configs/V28/object_performance/jets_trigger_fwd.yaml +++ b/configs/V31/object_performance/slim/jets_trigger_inclusive.yaml @@ -1,41 +1,30 @@ -JetTurnonFwd_3p7to7: +JetTurnon_Inclusive: sample: TT - default_version: V28 + default_version: V29 reference_object: object: "jet" suffix: "Pt" label: "Gen Jets" - cuts: - event: - - "abs({eta}) > 3.7" - object: - - "abs({eta}) < 7" test_objects: - caloJet: - match_dR: 0.3 - suffix: "Pt" - label: "Calo Jet" - cuts: - - "abs({eta}) < 7" phase1PuppiJet: match_dR: 0.3 suffix: "Pt" label: "Histogrammed PuppiJet" - cuts: - - "abs({eta}) < 7" seededConePuppiJet: match_dR: 0.35 suffix: "Pt" label: "Seeded Cone PuppiJet" - cuts: - - "abs({eta}) < 7" - thresholds: [50,100] + trackerJet: + match_dR: 0.4 + suffix: "Pt" + label: "Tracker Jet" + thresholds: [100] scalings: method: "naive" threshold: 0.95 xlabel: "Gen. $p_T$ (GeV)" - ylabel: r'Trigger Efficiency ( GeV, $3.6<\eta<6$)' + ylabel: "Trigger Efficiency ( GeV, barrel)" binning: min: 0 - max: 300 + max: 500 step: 10 diff --git a/configs/V31/object_performance/slim/jets_trigger_sc_inclusive.yaml b/configs/V31/object_performance/slim/jets_trigger_sc_inclusive.yaml new file mode 100644 index 00000000..bff95210 --- /dev/null +++ b/configs/V31/object_performance/slim/jets_trigger_sc_inclusive.yaml @@ -0,0 +1,22 @@ +JetTurnon_SC_Inclusive: + sample: TT + default_version: V29 + reference_object: + object: "jet" + suffix: "Pt" + label: "Gen Jets" + test_objects: + seededConePuppiJet: + match_dR: 0.35 + suffix: "Pt" + label: "Seeded Cone PuppiJet" + thresholds: [25, 50, 75, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V28/object_performance/met_ht_mht.yaml b/configs/V31/object_performance/slim/met.yaml similarity index 66% rename from configs/V28/object_performance/met_ht_mht.yaml rename to configs/V31/object_performance/slim/met.yaml index 49a68cfa..6ad199f6 100644 --- a/configs/V28/object_performance/met_ht_mht.yaml +++ b/configs/V31/object_performance/slim/met.yaml @@ -1,39 +1,31 @@ -HT: +MET: sample: TT - default_version: V28 + default_version: V29 reference_object: - object: "jet" - suffix: "Pt" - label: "Gen HT" - trafo: "HT" - cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 30" + object: "genMetTrue" + suffix: "" + label: "Gen MET" test_objects: - trackerHT: - suffix: "" - label: "Tracker HT" - phase1PuppiHT: - suffix: "" - label: "Histogrammed Puppi HT" - seededConePuppiHT: + puppiMET: + suffix: "et" + label: "Puppi MET" + trackerMET: suffix: "" - label: "SeededCone HT" - thresholds: [350] + label: "Tracker MET" + thresholds: [90] + xlabel: "Gen. MET (GeV)" + ylabel: "Trigger Efficiency ( GeV)" scalings: method: "naive" threshold: 0.90 - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" binning: min: 0 - max: 750 + max: 500 step: 20 MHT30: sample: TT - default_version: V28 + default_version: V29 reference_object: object: "jet" suffix: "Pt" @@ -44,71 +36,49 @@ MHT30: - "{pt} > 30" trafo: "MHT" test_objects: + seededConePuppiMHT: + suffix: "et" + label: "SeededCone MHT" trackerMHT: suffix: "" label: "Tracker MHT" - thresholds: [70, 150] + thresholds: [150] scalings: method: "naive" threshold: 0.90 - xlabel: "Gen. MET (GeV)" + xlabel: "Gen. MHT30 (GeV)" ylabel: "Trigger Efficiency ( GeV)" binning: min: 0 max: 500 step: 20 -MHT15: +HT: sample: TT - default_version: V28 + default_version: V29 reference_object: object: "jet" suffix: "Pt" - label: "Gen MHT" + label: "Gen HT" + trafo: "HT" cuts: - object: - - "abs({eta}) < 2.4" - - "{pt} > 15" - trafo: "MHT" - test_objects: - phase1PuppiMHT: - suffix: "et" - label: "Histogrammed Puppi MHT" - seededConePuppiMHT: - suffix: "et" - label: "SeededCone MHT" - thresholds: [70, 150] - scalings: - method: "naive" - threshold: 0.90 - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" - binning: - min: 0 - max: 500 - step: 12 - -MET: - sample: TT - default_version: V28 - reference_object: - object: "genMetTrue" - suffix: "" - label: "Gen MET" + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" test_objects: - trackerMET: + seededConePuppiHT: suffix: "" - label: "Tracker MET" - puppiMET: - suffix: "et" - label: "Puppi MET" - thresholds: [150] - xlabel: "Gen. MET (GeV)" - ylabel: "Trigger Efficiency ( GeV)" + label: "SeededCone HT" + trackerHT: + suffix: "" + label: "Tracker HT" + thresholds: [350] scalings: method: "naive" threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" binning: min: 0 - max: 500 + max: 750 step: 20 diff --git a/configs/V27/object_performance/muon_matching.yaml b/configs/V31/object_performance/slim/muon_matching.yaml similarity index 56% rename from configs/V27/object_performance/muon_matching.yaml rename to configs/V31/object_performance/slim/muon_matching.yaml index 6297051f..755f0c12 100644 --- a/configs/V27/object_performance/muon_matching.yaml +++ b/configs/V31/object_performance/slim/muon_matching.yaml @@ -1,6 +1,6 @@ -MuonsMatchingBarrel: +MuonsMatching_5: sample: DYLL_M50 - default_version: V27 + default_version: V29 reference_object: object: "part_mu" suffix: "Pt" @@ -9,30 +9,33 @@ MuonsMatchingBarrel: event: - "{dr_0.3} < 0.15" object: - - "abs({eta}) < 0.83" + - "abs({eta}) < 2.4" test_objects: gmtMuon: suffix: "Pt" - label: "GMT Muon" + label: "GMT Muon (L1 $p_{T}$ > 5 GeV)" match_dR: 0.3 cuts: - - "abs({eta}) < 0.83" + - "abs({eta}) < 2.4" + - "{pt} > 5" gmtTkMuon: suffix: "Pt" - label: "GMT TkMuon" + label: "GMT TkMuon (L1 $p_{T}$ > 5 GeV)" match_dR: 0.1 cuts: - - "abs({eta}) < 0.83" + - "abs({eta}) < 2.4" + - "{pt} > 5" + - "({quality}) > 0" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (barrel)" + ylabel: "Efficiency" binning: min: 0 - max: 150 + max: 100 step: 3 -MuonsMatchingOverlap: +MuonsMatching_15: sample: DYLL_M50 - default_version: V27 + default_version: V29 reference_object: object: "part_mu" suffix: "Pt" @@ -41,33 +44,33 @@ MuonsMatchingOverlap: event: - "{dr_0.3} < 0.15" object: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" + - "abs({eta}) < 2.4" test_objects: gmtMuon: suffix: "Pt" - label: "GMT Muon" + label: "GMT Muon (L1 $p_{T}$ > 15 GeV)" match_dR: 0.3 cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" + - "abs({eta}) < 2.4" + - "{pt} > 15" gmtTkMuon: suffix: "Pt" - label: "GMT TkMuon" + label: "GMT TkMuon (L1 $p_{T}$ > 15 GeV)" match_dR: 0.1 cuts: - - "abs({eta}) > 0.83" - - "abs({eta}) < 1.24" + - "abs({eta}) < 2.4" + - "{pt} > 15" + - "({quality}) > 0" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (overlap)" + ylabel: "Efficiency" binning: min: 0 - max: 150 + max: 100 step: 3 -MuonsMatchingEndcap: +MuonsMatching_20: sample: DYLL_M50 - default_version: V27 + default_version: V29 reference_object: object: "part_mu" suffix: "Pt" @@ -76,26 +79,26 @@ MuonsMatchingEndcap: event: - "{dr_0.3} < 0.15" object: - - "abs({eta}) > 1.24" - "abs({eta}) < 2.4" test_objects: gmtMuon: suffix: "Pt" - label: "GMT Muon" + label: "GMT Muon (L1 $p_{T}$ > 20 GeV)" match_dR: 0.3 cuts: - - "abs({eta}) > 1.24" - "abs({eta}) < 2.4" + - "{pt} > 20" gmtTkMuon: suffix: "Pt" - label: "GMT TkMuon" + label: "GMT TkMuon (L1 $p_{T}$ > 20 GeV)" match_dR: 0.1 cuts: - - "abs({eta}) > 1.24" - "abs({eta}) < 2.4" + - "{pt} > 20" + - "({quality}) > 0" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (endcap)" + ylabel: "Efficiency" binning: min: 0 - max: 150 - step: 3 \ No newline at end of file + max: 100 + step: 3 diff --git a/configs/V31/object_performance/slim/muon_trigger_gmtTK_inclusive.yaml b/configs/V31/object_performance/slim/muon_trigger_gmtTK_inclusive.yaml new file mode 100644 index 00000000..9036e9fc --- /dev/null +++ b/configs/V31/object_performance/slim/muon_trigger_gmtTK_inclusive.yaml @@ -0,0 +1,27 @@ +MuonsTrigger_gmtkMu_Inclusive: + sample: DYLL_M50 + default_version: V29 + reference_object: + object: "part_mu" + suffix: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + test_objects: + gmtTkMuon: + suffix: "Pt" + label: "GMT TkMuon" + match_dR: 0.3 + cuts: + - "({quality}) > 0" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (L1 $p_T > $ GeV)" + thresholds: [5, 15, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V26/object_performance/muon_trigger.yaml b/configs/V31/object_performance/slim/muon_trigger_inclusive.yaml similarity index 62% rename from configs/V26/object_performance/muon_trigger.yaml rename to configs/V31/object_performance/slim/muon_trigger_inclusive.yaml index b5dc8678..afc6b492 100644 --- a/configs/V26/object_performance/muon_trigger.yaml +++ b/configs/V31/object_performance/slim/muon_trigger_inclusive.yaml @@ -1,35 +1,31 @@ -MuonsTrigger: - sample: Zmm - default_version: V26 - reference_object: +MuonsTrigger_Inclusive: + sample: DYLL_M50 + default_version: V29 + reference_object: object: "part_mu" suffix: "Pt" label: "Gen Muons" cuts: event: - "{dr_0.3} < 0.15" - object: - - "abs({eta}) < 0.83" test_objects: gmtMuon: suffix: "Pt" label: "GMT Muon" match_dR: 0.3 - cuts: - - "abs({eta}) < 0.83" gmtTkMuon: suffix: "Pt" label: "GMT TkMuon" match_dR: 0.3 cuts: - - "abs({eta}) < 0.83" + - "({quality}) > 0" xlabel: "Gen. pT (GeV)" - ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + ylabel: "Trigger Efficiency (L1 $p_T > 20$ GeV)" thresholds: [20, 25] scalings: method: "naive" threshold: 0.95 binning: min: 0 - max: 50 + max: 50 step: 1.5 diff --git a/configs/V31/object_performance/slim/pho_test.yaml b/configs/V31/object_performance/slim/pho_test.yaml new file mode 100644 index 00000000..6caafc17 --- /dev/null +++ b/configs/V31/object_performance/slim/pho_test.yaml @@ -0,0 +1,47 @@ +PhotonsMatching_25: + sample: Hgg + default_version: V29 + reference_object: + object: "part_gamma" + suffix: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.5" + test_objects: + EG: + suffix: "Pt" + label: "EG" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + tkPhoton: + match_dR: 0.15 + suffix: "Pt" + label: "tkPhoton" + quality_id: "QUAL_125x_tkPhoID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + tkIsoPhoton: + base_obj: "tkPhoton" + match_dR: 0.15 + suffix: "Pt" + label: "tkIsoPhoton" + iso_EE: 0.2 + iso_BB: 0.2 + iso_branch: trkiso + quality_id: "QUAL_125x_tkPhoID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V31/object_performance/slim/photons_matching.yaml b/configs/V31/object_performance/slim/photons_matching.yaml new file mode 100644 index 00000000..db57ed8a --- /dev/null +++ b/configs/V31/object_performance/slim/photons_matching.yaml @@ -0,0 +1,191 @@ +PhotonsMatching_10: + sample: Hgg + default_version: V29 + reference_object: + object: "part_gamma" + suffix: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.5" + test_objects: + EG: + suffix: "Pt" + label: "EG (L1 $p_{T}$ > 10 GeV)" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 10" + tkPhoton: + match_dR: 0.15 + suffix: "Pt" + label: "tkPhoton (L1 $p_{T}$ > 10 GeV)" + quality_id: "QUAL_125x_tkPhoID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 10" + tkIsoPhoton: + base_obj: "tkPhoton" + match_dR: 0.15 + suffix: "Pt" + label: "tkIsoPhoton (L1 $p_{T}$ > 10 GeV)" + iso_EE: 0.2 + iso_BB: 0.2 + iso_branch: trkiso + quality_id: "QUAL_125x_tkPhoID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 10" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_20: + sample: Hgg + default_version: V29 + reference_object: + object: "part_gamma" + suffix: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.5" + test_objects: + EG: + suffix: "Pt" + label: "EG (L1 $p_{T}$ > 20 GeV)" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 20" + tkPhoton: + match_dR: 0.15 + suffix: "Pt" + label: "tkPhoton (L1 $p_{T}$ > 20 GeV)" + quality_id: "QUAL_125x_tkPhoID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 20" + tkIsoPhoton: + base_obj: "tkPhoton" + match_dR: 0.15 + suffix: "Pt" + label: "tkIsoPhoton (L1 $p_{T}$ > 20 GeV)" + iso_EE: 0.2 + iso_BB: 0.2 + iso_branch: trkiso + quality_id: "QUAL_125x_tkPhoID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 20" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_25: + sample: Hgg + default_version: V29 + reference_object: + object: "part_gamma" + suffix: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.5" + test_objects: + EG: + suffix: "Pt" + label: "EG (L1 $p_{T}$ > 25 GeV)" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + tkPhoton: + match_dR: 0.15 + suffix: "Pt" + label: "tkPhoton (L1 $p_{T}$ > 25 GeV)" + quality_id: "QUAL_125x_tkPhoID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + tkIsoPhoton: + base_obj: "tkPhoton" + match_dR: 0.15 + suffix: "Pt" + label: "tkIsoPhoton (L1 $p_{T}$ > 25 GeV)" + iso_EE: 0.2 + iso_BB: 0.2 + iso_branch: trkiso + quality_id: "QUAL_125x_tkPhoID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 25" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_30: + sample: Hgg + default_version: V29 + reference_object: + object: "part_gamma" + suffix: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 2.5" + test_objects: + EG: + suffix: "Pt" + label: "EG (L1 $p_{T}$ > 30 GeV)" + match_dR: 0.2 + quality_id: "QUAL_125x_EGID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 30" + tkPhoton: + match_dR: 0.15 + suffix: "Pt" + label: "tkPhoton (L1 $p_{T}$ > 30 GeV)" + quality_id: "QUAL_125x_tkPhoID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 30" + tkIsoPhoton: + base_obj: "tkPhoton" + match_dR: 0.15 + suffix: "Pt" + label: "tkIsoPhoton (L1 $p_{T}$ > 30 GeV)" + iso_EE: 0.2 + iso_BB: 0.2 + iso_branch: trkiso + quality_id: "QUAL_125x_tkPhoID" + cuts: + - "abs({eta}) < 2.5" + - "{pt} > 30" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Efficiency" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V28/object_performance/tau_matching.yaml b/configs/V31/object_performance/slim/tau_matching.yaml similarity index 60% rename from configs/V28/object_performance/tau_matching.yaml rename to configs/V31/object_performance/slim/tau_matching.yaml index 081bdf31..09dba5c3 100644 --- a/configs/V28/object_performance/tau_matching.yaml +++ b/configs/V31/object_performance/slim/tau_matching.yaml @@ -1,6 +1,6 @@ -TausMatchingBarrel: +TausMatching_25: sample: VBFHToTauTau - default_version: V28 + default_version: V29 reference_object: object: "part_tau" suffix: "Pt" @@ -8,33 +8,34 @@ TausMatchingBarrel: cuts: event: - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" object: - - "abs({eta}) < 2.4" + - "abs({eta}) < 2.5" test_objects: nnTau: suffix: "Pt" - label: "NN Tau" + label: "NN Tau (L1 $p_{T}$ > 25 GeV)" cuts: - - "abs({eta}) < 2.4" + - "abs({eta}) < 2.5" + - "{pt} > 25" - "{passloosenn}==1" match_dR: 0.1 caloTau: suffix: "Pt" - label: "Calo Tau" + label: "Calo Tau (L1 $p_{T}$ > 60 GeV)" cuts: - - "abs({eta}) < 2.4" + - "abs({eta}) < 2.5" + - "{pt} > 60" match_dR: 0.3 xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" + ylabel: "Efficiency" binning: min: 0 max: 150 step: 6 -TausMatchingEndcap: +TausMatching_75: sample: VBFHToTauTau - default_version: V28 + default_version: V29 reference_object: object: "part_tau" suffix: "Pt" @@ -42,25 +43,24 @@ TausMatchingEndcap: cuts: event: - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" - object: - - "abs({eta}) < 2.4" test_objects: nnTau: suffix: "Pt" - label: "NN Tau" + label: "NN Tau (L1 $p_{T}$ > 25 GeV)" cuts: - - "abs({eta}) < 2.4" + - "abs({eta}) < 2.5" + - "{pt} > 75" - "{passloosenn}==1" match_dR: 0.1 caloTau: suffix: "Pt" - label: "Calo Tau" + label: "Calo Tau (L1 $p_{T}$ > 25 GeV)" cuts: - - "abs({eta}) < 2.4" + - "abs({eta}) < 2.5" + - "{pt} > 75" match_dR: 0.3 xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Endcap)" + ylabel: "Efficiency" binning: min: 0 max: 150 diff --git a/configs/V31/object_performance/slim/tau_matching_eta.yaml b/configs/V31/object_performance/slim/tau_matching_eta.yaml new file mode 100644 index 00000000..0982ca3f --- /dev/null +++ b/configs/V31/object_performance/slim/tau_matching_eta.yaml @@ -0,0 +1,137 @@ +TauMatching_Eta_Pt10to25: + sample: VBFHToTauTau + default_version: V29 + reference_object: + object: "part_tau" + suffix: "Eta" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} < 10" + - "{pt} > 25" + object: + - "abs({eta}) < 2.5" + test_objects: + nnTau: + suffix: "Eta" + label: "NN Tau" + cuts: + - "abs({eta}) < 2.5" + - "{passloosenn}==1" + match_dR: 0.1 + caloTau: + suffix: "Eta" + label: "Calo Tau" + cuts: + - "abs({eta}) < 2.5" + match_dR: 0.3 + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +TausMatching_Eta_Pt25toInf: + sample: VBFHToTauTau + default_version: V29 + reference_object: + object: "part_tau" + suffix: "Eta" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} > 25" + object: + - "abs({eta}) < 2.5" + test_objects: + nnTau: + suffix: "Eta" + label: "NN Tau" + cuts: + - "abs({eta}) < 2.5" + - "{passloosenn}==1" + match_dR: 0.1 + caloTau: + suffix: "Eta" + label: "Calo Tau" + cuts: + - "abs({eta}) < 2.5" + match_dR: 0.3 + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +TauMatching_Eta_Pt40to100: + sample: VBFHToTauTau + default_version: V29 + reference_object: + object: "part_tau" + suffix: "Eta" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} < 100" + - "{pt} > 40" + object: + - "abs({eta}) < 2.5" + test_objects: + nnTau: + suffix: "Eta" + label: "NN Tau" + cuts: + - "abs({eta}) < 2.5" + - "{passloosenn}==1" + match_dR: 0.1 + caloTau: + suffix: "Eta" + label: "Calo Tau" + cuts: + - "abs({eta}) < 2.5" + match_dR: 0.3 + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($40 < p_T < 100$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +TausMatching_Eta_Pt100toInf: + sample: VBFHToTauTau + default_version: V29 + reference_object: + object: "part_tau" + suffix: "Eta" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} > 100" + object: + - "abs({eta}) < 2.5" + test_objects: + nnTau: + suffix: "Eta" + label: "NN Tau" + cuts: + - "abs({eta}) < 2.5" + - "{passloosenn}==1" + match_dR: 0.1 + caloTau: + suffix: "Eta" + label: "Calo Tau" + cuts: + - "abs({eta}) < 2.5" + match_dR: 0.3 + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 100$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V31/object_performance/slim/tau_trigger_inclusive.yaml b/configs/V31/object_performance/slim/tau_trigger_inclusive.yaml new file mode 100644 index 00000000..90989e9b --- /dev/null +++ b/configs/V31/object_performance/slim/tau_trigger_inclusive.yaml @@ -0,0 +1,31 @@ +TauTrigger_Inclusive: + sample: VBFHToTauTau + default_version: V29 + reference_object: + object: "part_tau" + suffix: "Pt" + label: "Gen Taus" + cuts: + event: + - "{dr_0.3} < 0.15" + test_objects: + nnTau: + suffix: "Pt" + label: "NN Tau" + cuts: + - "{passloosenn}==1" + match_dR: 0.1 + caloTau: + suffix: "Pt" + label: "Calo Tau" + match_dR: 0.3 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (L1 $p_T > $ GeV)" + thresholds: [25] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V27/object_performance/tau_matching.yaml b/configs/V31/object_performance/tau_matching.yaml similarity index 54% rename from configs/V27/object_performance/tau_matching.yaml rename to configs/V31/object_performance/tau_matching.yaml index cad1e11a..6cce9064 100644 --- a/configs/V27/object_performance/tau_matching.yaml +++ b/configs/V31/object_performance/tau_matching.yaml @@ -1,9 +1,10 @@ TausMatchingBarrel: sample: VBFHToTauTau - default_version: V27 + version: V31 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -12,19 +13,8 @@ TausMatchingBarrel: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default: "Pt" + caloTau:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" binning: @@ -34,10 +24,11 @@ TausMatchingBarrel: TausMatchingEndcap: sample: VBFHToTauTau - default_version: V27 + version: V31 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -46,19 +37,8 @@ TausMatchingEndcap: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default: "Pt" + caloTau:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Endcap)" binning: diff --git a/configs/V27/object_performance/tau_matching_wHH.yaml b/configs/V31/object_performance/tau_matching_wHH.yaml similarity index 54% rename from configs/V27/object_performance/tau_matching_wHH.yaml rename to configs/V31/object_performance/tau_matching_wHH.yaml index 3868ee93..e604d6fc 100644 --- a/configs/V27/object_performance/tau_matching_wHH.yaml +++ b/configs/V31/object_performance/tau_matching_wHH.yaml @@ -1,9 +1,10 @@ HHTausMatchingBarrel: sample: HHToTauTau - default_version: V27 + version: V31 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -12,19 +13,8 @@ HHTausMatchingBarrel: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default: "Pt" + caloTau:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" binning: @@ -34,10 +24,11 @@ HHTausMatchingBarrel: HHTausMatchingEndcap: sample: HHToTauTau - default_version: V27 + version: V31 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -46,19 +37,8 @@ HHTausMatchingEndcap: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default: "Pt" + caloTau:default: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Endcap)" binning: diff --git a/configs/V28/object_performance/tau_trigger.yaml b/configs/V31/object_performance/tau_trigger.yaml similarity index 57% rename from configs/V28/object_performance/tau_trigger.yaml rename to configs/V31/object_performance/tau_trigger.yaml index c5ac4e62..9a99be32 100644 --- a/configs/V28/object_performance/tau_trigger.yaml +++ b/configs/V31/object_performance/tau_trigger.yaml @@ -1,9 +1,10 @@ -TauTriggerBarrel: +TauTriggerBarrel_90perc: sample: VBFHToTauTau - default_version: V28 + version: V31 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -12,19 +13,8 @@ TauTriggerBarrel: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default:barrel: "Pt" + caloTau:default:barrel: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" thresholds: [20, 30] @@ -36,12 +26,13 @@ TauTriggerBarrel: max: 150 step: 6 -TauTriggerEndcap: +TauTriggerEndcap_90perc: sample: VBFHToTauTau - default_version: V28 + version: V31 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -50,19 +41,8 @@ TauTriggerEndcap: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default:endcap: "Pt" + caloTau:default:endcap: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" thresholds: [20, 30] @@ -72,4 +52,4 @@ TauTriggerEndcap: binning: min: 0 max: 150 - step: 6 \ No newline at end of file + step: 6 diff --git a/configs/V31/objects/electrons.yaml b/configs/V31/objects/electrons.yaml new file mode 100644 index 00000000..32a7a6c8 --- /dev/null +++ b/configs/V31/objects/electrons.yaml @@ -0,0 +1,63 @@ +part_e: + label: "Gen Electron" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "{dr_0.3} < 0.15" + +tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + #- "({passeseleid} == 1)" + - "({passeseleid} == 1) | ({pt} < 25)" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron, no ID" + cuts: + inclusive: + - "abs({eta}) < 2.7" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({trkiso}) < 0.13" + endcap: + - "abs({trkiso}) < 0.28" + NoIsoLowPt: + label: "TkElectron, no ID for $p_T<25$" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "({passeseleid} == 1) | ({pt} < 25)" + +EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{passeseleid} == 1" + endcap: + - "{passessaid} == 1" diff --git a/configs/V31/objects/jets.yaml b/configs/V31/objects/jets.yaml new file mode 100644 index 00000000..5c5124b0 --- /dev/null +++ b/configs/V31/objects/jets.yaml @@ -0,0 +1,77 @@ +caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +seededConeExtendedPuppiJet: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + bjetnn: + label: "SC Extended PuppiJet, BtagScore > 0.71" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{bjetnn} > 0.71" + +phase1PuppiJet: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +seededConePuppiJet: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +trackerJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" diff --git a/configs/V31/objects/met_ht_mht.yaml b/configs/V31/objects/met_ht_mht.yaml new file mode 100644 index 00000000..8e0a6e45 --- /dev/null +++ b/configs/V31/objects/met_ht_mht.yaml @@ -0,0 +1,39 @@ +phase1PuppiHT: + label: "Histogrammed Puppi HT" + ids: + default: {} + +phase1PuppiMHT: + label: "Phase1 Puppi MHT" + ids: + default: {} + +puppiMET: + label: "Puppi MET" + ids: + default: {} + +seededConePuppiHT: + label: "SeededCone HT" + ids: + default: {} + +seededConePuppiMHT: + label: "SeededCone MHT" + ids: + default: {} + +trackerHT: + label: "Tracker HT" + ids: + default: {} + +trackerMET: + label: "Tracker MET" + ids: + default: {} + +trackerMHT: + label: "Tracker MHT" + ids: + default: {} diff --git a/configs/V31/objects/muons.yaml b/configs/V31/objects/muons.yaml new file mode 100644 index 00000000..06a6bc43 --- /dev/null +++ b/configs/V31/objects/muons.yaml @@ -0,0 +1,24 @@ +gmtMuon: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + inclusive: + - "({quality} > 0) | ({pt} > 8)" # quality criterion only to be appied for p_T < 8 GeV diff --git a/configs/V31/objects/photons.yaml b/configs/V31/objects/photons.yaml new file mode 100644 index 00000000..234d5bc2 --- /dev/null +++ b/configs/V31/objects/photons.yaml @@ -0,0 +1,27 @@ +tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "{passeseleid} == 1" + endcap: + - "{passesphoid} == 1" + Iso: + label: "tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({trkiso}) < 0.25" + - "{passeseleid} == 1" + endcap: + - "abs({trkiso}) < 0.205" + - "{passesphoid} == 1" diff --git a/configs/V31/objects/pv.yaml b/configs/V31/objects/pv.yaml new file mode 100644 index 00000000..adc3eab4 --- /dev/null +++ b/configs/V31/objects/pv.yaml @@ -0,0 +1,4 @@ +z0L1TkPV: + label: "Primary Vertex" + ids: + default: {} diff --git a/configs/V31/objects/taus.yaml b/configs/V31/objects/taus.yaml new file mode 100644 index 00000000..386adf5b --- /dev/null +++ b/configs/V31/objects/taus.yaml @@ -0,0 +1,31 @@ +nnTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + cuts: + inclusive: + - "{passloosenn}==1" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{passloosenn}==1" + +caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + label: "Calo Tau, pt>20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" diff --git a/configs/V31/rate_plots/bjet.yaml b/configs/V31/rate_plots/bjet.yaml new file mode 100644 index 00000000..b3ffd8cc --- /dev/null +++ b/configs/V31/rate_plots/bjet.yaml @@ -0,0 +1,10 @@ +BJetRates: + sample: MinBias + version: V31 + test_objects: + - seededConeExtendedPuppiJet:default + - seededConeExtendedPuppiJet:bjetnn + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V31/rate_plots/eg.yaml b/configs/V31/rate_plots/eg.yaml new file mode 100644 index 00000000..0048997d --- /dev/null +++ b/configs/V31/rate_plots/eg.yaml @@ -0,0 +1,12 @@ +EGRates: + sample: MinBias + version: V31 + test_objects: + - EG:default + - tkElectron:NoIso + - tkElectron:Iso + - tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 diff --git a/configs/V31/rate_plots/ht.yaml b/configs/V31/rate_plots/ht.yaml new file mode 100644 index 00000000..2a24a1bd --- /dev/null +++ b/configs/V31/rate_plots/ht.yaml @@ -0,0 +1,23 @@ +HTRates: + sample: MinBias + version: V31 + test_objects: + - phase1PuppiHT:default + - seededConePuppiHT:default + - trackerHT:default + binning: + min: 50 + max: 975 + step: 25 + +MHTRates: + sample: MinBias + version: V31 + test_objects: + - phase1PuppiMHT:default + - seededConePuppiMHT:default + - trackerMHT:default + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V31/rate_plots/jets.yaml b/configs/V31/rate_plots/jets.yaml new file mode 100644 index 00000000..174490f3 --- /dev/null +++ b/configs/V31/rate_plots/jets.yaml @@ -0,0 +1,57 @@ +JetDefaultRates: + sample: MinBias + version: V31 + test_objects: + - phase1PuppiJet:default + - seededConePuppiJet:default + # - seededConeExtendedPuppiJet:default + - trackerJet:default + - caloJet:default + binning: + min: 40 + max: 420 + step: 20 + +JetsByRegion: + sample: MinBias + version: V31 + test_objects: + - phase1PuppiJet:default:barrel + - phase1PuppiJet:default:endcap + - phase1PuppiJet:default:forward + - seededConePuppiJet:default:barrel + - seededConePuppiJet:default:endcap + - seededConePuppiJet:default:forward + - caloJet:default:barrel + - caloJet:default:endcap + - caloJet:default:forward + binning: + min: 40 + max: 420 + step: 20 + +JetExtendedRates: + sample: MinBias + version: V31 + test_objects: + - seededConePuppiJet:default:inclusive + - seededConeExtendedPuppiJet:default:inclusive + binning: + min: 40 + max: 420 + step: 20 + +JetExtendedRatesByRegion: + sample: MinBias + version: V31 + test_objects: + - seededConePuppiJet:default:barrel + - seededConePuppiJet:default:endcap + - seededConePuppiJet:default:forward + - seededConeExtendedPuppiJet:default:barrel + - seededConeExtendedPuppiJet:default:endcap + - seededConeExtendedPuppiJet:default:forward + binning: + min: 40 + max: 420 + step: 20 \ No newline at end of file diff --git a/configs/V31/rate_plots/met.yaml b/configs/V31/rate_plots/met.yaml new file mode 100644 index 00000000..a97eda8b --- /dev/null +++ b/configs/V31/rate_plots/met.yaml @@ -0,0 +1,10 @@ +METRates: + sample: MinBias + version: V31 + test_objects: + - puppiMET:default + - trackerMET:default + binning: + min: 50 + max: 500 + step: 25 diff --git a/configs/V31/rate_plots/muons.yaml b/configs/V31/rate_plots/muons.yaml new file mode 100644 index 00000000..a068a027 --- /dev/null +++ b/configs/V31/rate_plots/muons.yaml @@ -0,0 +1,34 @@ +gmtMuonByRegion: + sample: MinBias + version: V31 + test_objects: + - gmtMuon:default:barrel + - gmtMuon:default:overlap + - gmtMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByRegion: + sample: MinBias + version: V31 + test_objects: + - gmtTkMuon:default:barrel + - gmtTkMuon:default:overlap + - gmtTkMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +MuonRates: + sample: MinBias + version: V31 + test_objects: + - gmtMuon:default + - gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 diff --git a/configs/V31/rate_plots/taus.yaml b/configs/V31/rate_plots/taus.yaml new file mode 100644 index 00000000..9d6d90a5 --- /dev/null +++ b/configs/V31/rate_plots/taus.yaml @@ -0,0 +1,23 @@ +TauRates: + sample: MinBias + version: V31 + test_objects: + - nnTau:default + - caloTau:default + binning: + min: 10 + max: 155 + step: 5 + +TauRatesByRegion: + sample: MinBias + version: V31 + test_objects: + - caloTau:default:barrel + - caloTau:default:endcap + - nnTau:default:barrel + - nnTau:default:endcap + binning: + min: 10 + max: 155 + step: 5 diff --git a/configs/V31/rate_table/v31_cfg.yml b/configs/V31/rate_table/v31_cfg.yml new file mode 100644 index 00000000..04ba0252 --- /dev/null +++ b/configs/V31/rate_table/v31_cfg.yml @@ -0,0 +1,4 @@ +version: "V31" +sample: "MinBias" +menu_config: "configs/V31/rate_table/v31_menu_cfg.yml" +table_fname: "rates_full_Final" diff --git a/configs/V31/rate_table/v31_menu_cfg.yml b/configs/V31/rate_table/v31_menu_cfg.yml new file mode 100644 index 00000000..3aec068c --- /dev/null +++ b/configs/V31/rate_table/v31_menu_cfg.yml @@ -0,0 +1,440 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: seededConePuppiHT:default +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: seededConePuppiMHT:default +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: puppiMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.chg*leg2.chg < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 4.4 + obj: gmtTkMuon:default +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1['']) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.chg*leg2.chg < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 0 + obj: gmtTkMuon:default +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: seededConePuppiJet:default +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: gmtTkMuon:default +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.zvtx-leg1['']) < 1 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: seededConePuppiHT:default +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.zvtx-leg1['']) < 1 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: nnTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.zvtx-leg1['']) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.zvtx) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: gmtTkMuon:default +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.zvtx-leg1.z0) < 1 + - abs(leg3.zvtx-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 17.0 + obj: tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1['']) < 1 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: pt > 6 + obj: gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 320.0 + obj: seededConePuppiHT:default +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1['']) < 1 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 110.0 + obj: seededConePuppiJet:default + leg4: + threshold_cut: offline_pt >= 120.0 + obj: puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.zvtx-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 23.0 + obj: tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.zvtx-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 20.0 + obj: tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: gmtTkMuon:default +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.chg*leg2.chg < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg3: + threshold_cut: pt > 0 + obj: gmtTkMuon:default +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.chg*leg3.chg < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 3.5 + obj: gmtTkMuon:default + leg3: + threshold_cut: pt > 2.5 + obj: gmtTkMuon:default +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.zvtx-leg1['']) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.zvtx-leg1['']) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: seededConePuppiHT:default +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: seededConePuppiJet:default + leg2: + threshold_cut: offline_pt >= 35.0 + obj: seededConePuppiJet:default +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: seededConePuppiJet:default + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: seededConePuppiJet:default +L1_DoubleTkEle: + cross_masks: + - abs(leg2.zvtx-leg1.zvtx) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 7 + obj: gmtTkMuon:default +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.chg*leg2.chg < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 4 + obj: gmtTkMuon:default +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1['']) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1['']) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg4: + threshold_cut: offline_pt >= 300.0 + obj: seededConePuppiHT:default +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1['']) < 1 + - abs(leg3.z0-leg1['']) < 1 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: gmtTkMuon:default + leg4: + threshold_cut: offline_pt >= 60.0 + obj: seededConePuppiJet:default + leg5: + threshold_cut: offline_pt >= 130.0 + obj: puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.zvtx-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: gmtTkMuon:default + leg2: + threshold_cut: pt > 5 + obj: gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 9.0 + obj: tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: seededConePuppiHT:default + leg2: + threshold_cut: offline_pt >= 70.0 + obj: seededConePuppiJet:default + leg3: + threshold_cut: offline_pt >= 55.0 + obj: seededConePuppiJet:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: seededConePuppiJet:default +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: nnTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: nnTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: nnTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1['']) < 1 + leg1: + threshold_cut: null + obj: z0L1TkPV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: nnTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: gmtTkMuon:default diff --git a/configs/V32/caching.yaml b/configs/V32/caching.yaml new file mode 100644 index 00000000..e65db535 --- /dev/null +++ b/configs/V32/caching.yaml @@ -0,0 +1,76 @@ +V32: + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v32_reL1only/DYToLL_M-50_TuneCP5_14TeV-pythia8/DY_M50_131_200PU_v32_reL1only/240205_120621/0000/L1NtuplePhaseII_Step1_*.root + trees_branches: + genTree/L1GenTree: + part_mu: [Id, Stat, Pt, Eta, Phi] + part_e: [Id, Stat, Pt, Eta, Phi] + l1PhaseIITree/L1PhaseIITree: + tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, HGC, PassesEleID, PassesPhoID] + EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] + gmtMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, Bx] + gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] + TT: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v32_reL1only/TT_TuneCP5_14TeV-powheg-pythia8/TT_131_200PU_v32_reL1only/240206_115846/0000/L1NtuplePhaseII_Step1_*.root + trees_branches: + genTree/L1GenTree: + # genMetTrue: "all" # DOES NOT EXIST IN ABOVE + jet: [Pt, Eta, Phi] + l1PhaseIITree/L1PhaseIITree: + puppiMET: "all" + phase1PuppiJet: [Pt, Et, Eta, Phi] + phase1PuppiMHT: "all" + phase1PuppiHT: "all" + seededConePuppiJet: [Pt, Et, Eta, Phi] + seededConeExtendedPuppiJet: [Pt, Et, Eta, Phi, BJetNN] + seededConePuppiHT: "all" + seededConePuppiMHT: "all" + trackerJet: [Pt, Eta, Phi] + trackerMET: "all" + trackerMHT: "all" + trackerHT: "all" + caloJet: [Et, Pt, Eta, Phi] + VBFHToTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v32_reL1only/VBFHToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/VBFHToTauTau_131_200PU_v32_reL1only/240206_115854/0000/L1NtuplePhaseII_Step1_*.root + trees_branches: + genTree/L1GenTree: + part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] + l1PhaseIITree/L1PhaseIITree: + nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] + caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] + # HHToTauTau: + # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/HHToTauTau_1252_crab_v29_Snap3/230417_072539/0000/*.root + # trees_branches: + # genTree/L1GenTree: + # part_tau: [Id, Stat, Pt, Eta, Phi, Parent, E] + # l1PhaseIITree/L1PhaseIITree: + # nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] + # caloTau: [Et, Eta, Pt, Phi, Iso, HwQual] + # Hgg: + # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/GluGluHToGG_1252_crab_v29_Snap3/230413_214505/0000/*.root + # trees_branches: + # genTree/L1GenTree: + # part_gamma: [Id, Stat, Pt, Eta, Phi] + # l1PhaseIITree/L1PhaseIITree: + # tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID, TrkIsoPV] + # EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] + # MinBias: + # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_1252_crb_v29_Snap3/230413_214525/*/*.root + # trees_branches: + # l1PhaseIITree/L1PhaseIITree: + # puppiMET: "all" + # phase1PuppiJet: "all" + # phase1PuppiMHT: "all" + # phase1PuppiHT: "all" + # seededConePuppiJet: [Pt, Et, Eta, Phi] + # seededConeExtendedPuppiJet: [Pt, Et, Eta, Phi, BJetNN] + # seededConePuppiHT: "all" + # seededConePuppiMHT: "all" + # tkElectron: [Pt, Et, Eta, Phi, Chg, Bx, TrkIso, PfIso, PuppiIso, zVtx, HwQual, HGC, PassesEleID, PassesPhoID] + # EG: [Pt, Et, Eta, Phi, Bx, Iso, HwQual, HGC, PassesEleID, PassesSaID] + # gmtTkMuon: [Pt, Eta, Phi, Z0, D0, IPt, IEta, IPhi, IZ0, ID0, Chg, Iso, Qual, Beta, NStubs, Bx] + # nnTau: [Et, Eta, Pt, Phi, FullIso, Z0, PassTightNN, Chg, DXY, PassLooseNN] + # tkPhoton: [Pt, Et, Eta, Phi, Bx, TrkIso, HwQual, HGC, PassesEleID, PassesPhoID, TrkIsoPV] + # z0L1TkPV: "all" + # caloTau: [Et, Eta, Pt, Phi, Iso, HwQual, Bx] + diff --git a/configs/V32/object_performance/bJetEff.yaml b/configs/V32/object_performance/bJetEff.yaml new file mode 100644 index 00000000..eff40260 --- /dev/null +++ b/configs/V32/object_performance/bJetEff.yaml @@ -0,0 +1,30 @@ +BJetEff_Pt: + files: + JetMatching_Pt_Pt30ToInf_genBJets_-999_V32: + object: seededConeExtendedPuppiJet + dir: outputs/V32/turnons/ + label: "Signal: Matched b-jets" + JetMatching_Pt_Pt30ToInf_genNotBJets_-999_V32: + object: seededConeExtendedPuppiJet + dir: outputs/V32/turnons/ + label: "Background: Unmatched b-jets" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + watermark: "BJet_Pt" + save_dir: "outputs/V32/BJet/turnons" + + +BJetEff_Eta: + files: + JetMatching_Eta_Pt30ToInf_genBJets_-999_V32: + object: seededConeExtendedPuppiJet + dir: outputs/V32/turnons/ + label: "Signal: Matched b-jets" + JetMatching_Eta_Pt30ToInf_genNotBJets_-999_V32: + object: seededConeExtendedPuppiJet + dir: outputs/V32/turnons/ + label: "Background: Unmatched b-jets" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency" + watermark: "BJet_Eta" + save_dir: "outputs/V32/BJet/turnons" diff --git a/configs/V22/object_performance/electron_iso.yaml b/configs/V32/object_performance/electron_iso.yaml similarity index 62% rename from configs/V22/object_performance/electron_iso.yaml rename to configs/V32/object_performance/electron_iso.yaml index 1814c1c4..225fc3ff 100644 --- a/configs/V22/object_performance/electron_iso.yaml +++ b/configs/V32/object_performance/electron_iso.yaml @@ -1,10 +1,11 @@ ElectronsIsolation_Barrel: - sample: DY - default_version: V22 + sample: DYLL_M50 + version: V32 + match_test_to_ref: True iso_vs_efficiency: True reference_object: object: "part_e" - suffix: "Pt" + x_arg: "Pt" label: "Gen Electrons" cuts: event: @@ -13,13 +14,7 @@ ElectronsIsolation_Barrel: object: - "abs({eta}) < 1.479" test_objects: - tkElectron: - suffix: "trkiso" - label: "TkElectron" - match_dR: 0.15 - quality_id: "QUAL_BarrelNoneEndcap3" - cuts: - - "abs({eta}) < 2.4" + tkElectron:NoIso: "trkiso" xlabel: "Isolation" ylabel: "Efficiency (Barrel)" binning: @@ -28,12 +23,13 @@ ElectronsIsolation_Barrel: step: 0.005 ElectronsIsolation_Endcap: - sample: DY - default_version: V22 + sample: DYLL_M50 + version: V32 + match_test_to_ref: True iso_vs_efficiency: True reference_object: object: "part_e" - suffix: "Pt" + x_arg: "Pt" label: "Gen Electrons" cuts: event: @@ -42,13 +38,7 @@ ElectronsIsolation_Endcap: object: - "abs({eta}) < 2.4" test_objects: - tkElectron: - suffix: "trkiso" - label: "TkElectron" - match_dR: 0.15 - quality_id: "QUAL_BarrelNoneEndcap3" - cuts: - - "abs({eta}) < 2.4" + tkElectron:NoIsoForIso: "trkiso" xlabel: "Isolation" ylabel: "Efficiency (Endcap)" binning: diff --git a/configs/V32/object_performance/electron_matching.yaml b/configs/V32/object_performance/electron_matching.yaml new file mode 100644 index 00000000..b906d149 --- /dev/null +++ b/configs/V32/object_performance/electron_matching.yaml @@ -0,0 +1,49 @@ +ElectronsMatchingBarrel: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default: "Pt" + tkElectron:NoIso: "Pt" + tkElectron:Iso: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +ElectronsMatchingEndcap: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default: "Pt" + tkElectron:NoIso: "Pt" + tkElectron:Iso: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V32/object_performance/electron_matching_eta.yaml b/configs/V32/object_performance/electron_matching_eta.yaml new file mode 100644 index 00000000..bc1d34ca --- /dev/null +++ b/configs/V32/object_performance/electron_matching_eta.yaml @@ -0,0 +1,50 @@ +ElectronsMatching_Eta_Pt10to25: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Eta" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + EG:default: "Eta" + tkElectron:NoIso: "Eta" + tkElectron:Iso: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +ElectronsMatching_Eta_Pt25toInf: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Eta" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} > 25" + object: + - "abs({eta}) < 3.0" + test_objects: + EG:default: "Eta" + tkElectron:NoIso: "Eta" + tkElectron:Iso: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V32/object_performance/electron_trigger.yaml b/configs/V32/object_performance/electron_trigger.yaml new file mode 100644 index 00000000..03e13307 --- /dev/null +++ b/configs/V32/object_performance/electron_trigger.yaml @@ -0,0 +1,57 @@ +ElectronsTriggerBarrel: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + EG:default:barrel: "Pt" + tkElectron:NoIso:barrel: "Pt" + tkElectron:Iso:barrel: "Pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +ElectronsTriggerEndcap: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_e" + x_arg: "Pt" + label: "Gen Electrons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + EG:default:endcap: "Pt" + tkElectron:NoIso:endcap: "Pt" + tkElectron:Iso:endcap: "Pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V32/object_performance/jets_matching.yaml b/configs/V32/object_performance/jets_matching.yaml new file mode 100644 index 00000000..edcda553 --- /dev/null +++ b/configs/V32/object_performance/jets_matching.yaml @@ -0,0 +1,73 @@ +JetMatchingBarrel: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "GenJet" # HACK -> using the nano GenJet parquet file here until fixing the menu ntuples + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" + caloJet:default: "Pt" + # trackerJet:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcap: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "GenJet" # HACK -> using the nano GenJet parquet file here until fixing the menu ntuples + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" + caloJet:default: "Pt" + # trackerJet:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingForward: + version: V32 + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" # HACK -> using the nano GenJet parquet file here until fixing the menu ntuples + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + phase1PuppiJet:default: "Pt" + seededConePuppiJet:default: "Pt" + caloJet:default: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V32/object_performance/jets_matching_eta.yaml b/configs/V32/object_performance/jets_matching_eta.yaml new file mode 100644 index 00000000..0b457ca8 --- /dev/null +++ b/configs/V32/object_performance/jets_matching_eta.yaml @@ -0,0 +1,73 @@ +JetMatching_Eta_Pt40To100: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "GenJet" # HACK -> using the nano GenJet parquet file here until fixing the menu ntuples + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + phase1PuppiJet:default: "Eta" + seededConePuppiJet:default: "Eta" + caloJet:default: "Eta" + caloJet:PtGr30: "Eta" + # trackerJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "GenJet" # HACK -> using the nano GenJet parquet file here until fixing the menu ntuples + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + phase1PuppiJet:default: "Eta" + seededConePuppiJet:default: "Eta" + caloJet:default: "Eta" + # trackerJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "GenJet" # HACK -> using the nano GenJet parquet file here until fixing the menu ntuples + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + caloJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5.5 + max: 5.5 + step: 0.25 diff --git a/configs/V32/object_performance/jets_matching_wBTag.yaml b/configs/V32/object_performance/jets_matching_wBTag.yaml new file mode 100644 index 00000000..1155301a --- /dev/null +++ b/configs/V32/object_performance/jets_matching_wBTag.yaml @@ -0,0 +1,136 @@ +JetMatching_Eta_Pt40To100_ExtendedVsRegular: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + seededConePuppiJet:default: "Eta" + seededConeExtendedPuppiJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + seededConePuppiJet:default: "Eta" + seededConeExtendedPuppiJet:default: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genBJets: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonflavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + seededConeExtendedPuppiJet:bjetnn: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genNotBJets: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonflavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + seededConeExtendedPuppiJet:bjetnn: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Pt_Pt30ToInf_genBJets: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonflavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + seededConeExtendedPuppiJet:bjetnn: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 + +JetMatching_Pt_Pt30ToInf_genNotBJets: + sample: TT + version: V32 + match_test_to_ref: True + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonflavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + seededConeExtendedPuppiJet:bjetnn: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 diff --git a/configs/V32/object_performance/jets_trigger.yaml b/configs/V32/object_performance/jets_trigger.yaml new file mode 100644 index 00000000..d6b0cff5 --- /dev/null +++ b/configs/V32/object_performance/jets_trigger.yaml @@ -0,0 +1,85 @@ +JetTurnonBarrel: + version: V32 + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" # HACK -> using the nano GenJet parquet file here until fixing the menu ntuples + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + phase1PuppiJet:default:barrel: "Pt" + seededConePuppiJet:default:barrel: "Pt" + caloJet:default:barrel: "Pt" + # trackerJet:default:barrel: "Pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcap: + version: V32 + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" # HACK -> using the nano GenJet parquet file here until fixing the menu ntuples + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + phase1PuppiJet:default:endcap: "Pt" + seededConePuppiJet:default:endcap: "Pt" + caloJet:default:endcap: "Pt" + # trackerJet:default:endcap: "Pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForward: + version: V32 + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" # HACK -> using the nano GenJet parquet file here until fixing the menu ntuples + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + phase1PuppiJet:default:forward: "Pt" + seededConePuppiJet:default:forward: "Pt" + caloJet:default:forward: "Pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V32/object_performance/met_ht_mht.yaml b/configs/V32/object_performance/met_ht_mht.yaml new file mode 100644 index 00000000..0cd78364 --- /dev/null +++ b/configs/V32/object_performance/met_ht_mht.yaml @@ -0,0 +1,149 @@ +HT_90perc: + sample: TT + version: V32 + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + trackerHT:default: "" + phase1PuppiHT:default: "" + seededConePuppiHT:default: "" + thresholds: [350] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +# HT_50perc: +# sample: TT +# version: V32 +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen HT" +# trafo: "HT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# test_objects: +# # trackerHT:default: "" +# # phase1PuppiHT:default: "" +# seededConePuppiHT:default: "" +# thresholds: [350] +# scalings: +# method: "naive" +# threshold: 0.50 +# xlabel: "Gen. HT (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 750 +# step: 20 + +MHT_50perc: + sample: TT + version: V32 + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + trackerMHT:default: "" + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +# MHT_90perc: +# sample: TT +# version: V32 +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen MHT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# trafo: "MHT" +# test_objects: +# # trackerMHT:default: "" +# # phase1PuppiMHT:default: "et" +# seededConePuppiMHT:default: "et" +# thresholds: [70, 150] +# scalings: +# method: "naive" +# threshold: 0.90 +# xlabel: "Gen. MHT30 (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 500 +# step: 20 + +# MET_90perc: +# sample: TT +# version: V32 +# reference_object: +# object: "genMetTrue" +# x_arg: "" +# label: "Gen MET" +# test_objects: +# trackerMET:default: "" +# puppiMET:default: "et" +# thresholds: [150] +# xlabel: "Gen. MET (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# scalings: +# method: "naive" +# threshold: 0.90 +# binning: +# min: 0 +# max: 500 +# step: 20 + +# MET_50perc: +# sample: TT +# version: V32 +# reference_object: +# object: "genMetTrue" +# x_arg: "" +# label: "Gen MET" +# test_objects: +# # trackerMET:default: "" +# puppiMET:default: "et" +# thresholds: [150] +# xlabel: "Gen. MET (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# scalings: +# method: "naive" +# threshold: 0.50 +# binning: +# min: 0 +# max: 500 +# step: 20 diff --git a/configs/V32/object_performance/mht.yaml b/configs/V32/object_performance/mht.yaml new file mode 100644 index 00000000..894b0e50 --- /dev/null +++ b/configs/V32/object_performance/mht.yaml @@ -0,0 +1,52 @@ +MHT30_90perc: + sample: TT + version: V32 + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MHT30_50perc: + sample: TT + version: V32 + reference_object: + object: "jet" + x_arg: "Pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + phase1PuppiMHT:default: "et" + seededConePuppiMHT:default: "et" + trackerMHT:default: "" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 diff --git a/configs/V32/object_performance/muon_matching.yaml b/configs/V32/object_performance/muon_matching.yaml new file mode 100644 index 00000000..6385e986 --- /dev/null +++ b/configs/V32/object_performance/muon_matching.yaml @@ -0,0 +1,70 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 0.83" + test_objects: + gmtMuon:default:barrel: "Pt" + gmtTkMuon:default:barrel: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + gmtMuon:default:overlap: "Pt" + gmtTkMuon:default:overlap: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + gmtMuon:default:endcap: "Pt" + gmtTkMuon:default:endcap: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V27/object_performance/muon_matching_eta.yaml b/configs/V32/object_performance/muon_matching_eta.yaml similarity index 64% rename from configs/V27/object_performance/muon_matching_eta.yaml rename to configs/V32/object_performance/muon_matching_eta.yaml index 911d057e..c374f939 100644 --- a/configs/V27/object_performance/muon_matching_eta.yaml +++ b/configs/V32/object_performance/muon_matching_eta.yaml @@ -1,9 +1,10 @@ MuonsMatching_Eta_Pt2to5: sample: DYLL_M50 - default_version: V27 + version: V32 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Eta" + x_arg: "Eta" label: "Gen Muons" cuts: event: @@ -13,14 +14,8 @@ MuonsMatching_Eta_Pt2to5: object: - "abs({eta}) < 2.4" test_objects: - gmtMuon: - suffix: "Eta" - label: "GMT Muon" - match_dR: 0.3 - gmtTkMuon: - suffix: "Eta" - label: "GMT TkMuon" - match_dR: 0.1 + gmtMuon:default: "Eta" + gmtTkMuon:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (2-5 GeV)" binning: @@ -30,10 +25,11 @@ MuonsMatching_Eta_Pt2to5: MuonsMatching_Eta_Pt15toInf: sample: DYLL_M50 - default_version: V27 + version: V32 + match_test_to_ref: True reference_object: object: "part_mu" - suffix: "Eta" + x_arg: "Eta" label: "Gen Muons" cuts: event: @@ -42,14 +38,8 @@ MuonsMatching_Eta_Pt15toInf: object: - "abs({eta}) < 2.4" test_objects: - gmtMuon: - suffix: "Eta" - label: "GMT Muon" - match_dR: 0.3 - gmtTkMuon: - suffix: "Eta" - label: "GMT TkMuon" - match_dR: 0.1 + gmtMuon:default: "Eta" + gmtTkMuon:default: "Eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>15 GeV)" binning: diff --git a/configs/V32/object_performance/muon_trigger.yaml b/configs/V32/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..4cda46a4 --- /dev/null +++ b/configs/V32/object_performance/muon_trigger.yaml @@ -0,0 +1,81 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 0.83" + test_objects: + gmtMuon:default:barrel: "Pt" + gmtTkMuon:default:barrel: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + gmtMuon:default:overlap: "Pt" + gmtTkMuon:default:overlap: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V32 + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "Pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) > 1.24" + test_objects: + gmtMuon:default:endcap: "Pt" + gmtTkMuon:default:endcap: "Pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V22/object_performance/photon_iso.yaml b/configs/V32/object_performance/photon_iso.yaml similarity index 61% rename from configs/V22/object_performance/photon_iso.yaml rename to configs/V32/object_performance/photon_iso.yaml index fdd1d2ef..94f5d881 100644 --- a/configs/V22/object_performance/photon_iso.yaml +++ b/configs/V32/object_performance/photon_iso.yaml @@ -1,10 +1,11 @@ PhotonIsolation_Barrel: - sample: GluGluToGG - default_version: V22 + sample: Hgg + version: V32 iso_vs_efficiency: True + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Pt" + x_arg: "Pt" label: "Gen Photons" cuts: event: @@ -13,13 +14,7 @@ PhotonIsolation_Barrel: object: - "abs({eta}) < 1.479" test_objects: - tkPhoton: - suffix: "trkiso" - label: "TkPhoton" - match_dR: 0.15 - quality_id: "QUAL_123x_tkPhoID" - cuts: - - "abs({eta}) < 1.479" + tkPhoton:NoIso:barrel: "trkiso" xlabel: "Isolation" ylabel: "Efficiency (Barrel)" binning: @@ -28,12 +23,13 @@ PhotonIsolation_Barrel: step: 0.005 PhotonIsolation_Endcap: - sample: GluGluToGG - default_version: V22 + sample: Hgg + version: V32 iso_vs_efficiency: True + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Pt" + x_arg: "Pt" label: "Gen Photons" cuts: event: @@ -43,14 +39,7 @@ PhotonIsolation_Endcap: object: - "abs({eta}) > 1.479" test_objects: - tkPhoton: - suffix: "trkiso" - label: "TkPhoton" - match_dR: 0.15 - quality_id: "QUAL_123x_tkPhoID" - cuts: - - "abs({eta}) > 1.479" - - "abs({eta}) < 2.4" + tkPhoton:NoIso:endcap: "trkiso" xlabel: "Isolation" ylabel: "Efficiency (Endcap)" binning: diff --git a/configs/V32/object_performance/photons_matching.yaml b/configs/V32/object_performance/photons_matching.yaml new file mode 100644 index 00000000..1152eb66 --- /dev/null +++ b/configs/V32/object_performance/photons_matching.yaml @@ -0,0 +1,49 @@ +PhotonsMatching_Barrel: + sample: Hgg + version: V32 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default: "Pt" + tkPhoton:NoIso: "Pt" + tkPhoton:Iso: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap: + sample: Hgg + version: V32 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default: "Pt" + tkPhoton:NoIso: "Pt" + tkPhoton:Iso: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V32/object_performance/photons_matching_eta.yaml b/configs/V32/object_performance/photons_matching_eta.yaml new file mode 100644 index 00000000..56347d17 --- /dev/null +++ b/configs/V32/object_performance/photons_matching_eta.yaml @@ -0,0 +1,50 @@ +PhotonsMatching_Eta_Pt10to25: + sample: Hgg + version: V32 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Eta" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + EG:default: "Eta" + tkPhoton:NoIso: "Eta" + tkPhoton:Iso: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +PhotonsMatching_Eta_Pt25toInf: + sample: Hgg + version: V32 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Eta" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} >= 25" + object: + - "abs({eta}) < 3.0" + test_objects: + EG:default: "Eta" + tkPhoton:NoIso: "Eta" + tkPhoton:Iso: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V32/object_performance/photons_trigger.yaml b/configs/V32/object_performance/photons_trigger.yaml new file mode 100644 index 00000000..d92c50ec --- /dev/null +++ b/configs/V32/object_performance/photons_trigger.yaml @@ -0,0 +1,57 @@ +PhotonsTrigger_Barrel: + sample: Hgg + version: V32 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default:barrel: "Pt" + tkPhoton:NoIso:barrel: "Pt" + tkPhoton:Iso:barrel: "Pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Endcap: + sample: Hgg + version: V32 + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default:endcap: "Pt" + tkPhoton:NoIso:endcap: "Pt" + tkPhoton:Iso:endcap: "Pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V22/object_performance/tau_matching_GG_VBF.yaml b/configs/V32/object_performance/tau_matching.yaml similarity index 53% rename from configs/V22/object_performance/tau_matching_GG_VBF.yaml rename to configs/V32/object_performance/tau_matching.yaml index 146c767d..5b94bce9 100644 --- a/configs/V22/object_performance/tau_matching_GG_VBF.yaml +++ b/configs/V32/object_performance/tau_matching.yaml @@ -1,9 +1,10 @@ -TausMatchingBarrel_HH: - sample: GluGluToHHTo2B2Tau - default_version: V22 +TausMatchingBarrel: + sample: VBFHToTauTau + version: V32 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -12,13 +13,9 @@ TausMatchingBarrel_HH: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau (HH)" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 + nnTau:default: "Pt" + caloTau:default: "Pt" + caloTau:PtGe20: "Pt" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" binning: @@ -26,29 +23,26 @@ TausMatchingBarrel_HH: max: 150 step: 6 -TausMatchingBarrel_H: +TausMatchingEndcap: sample: VBFHToTauTau - default_version: V22 + version: V32 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" + - "abs({eta}) > 1.5" object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau (H)" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 + nnTau:default: "Pt" + caloTau:default: "Pt" + caloTau:PtGe20: "Pt" xlabel: "Gen. $p_T$ (GeV)" - ylabel: "Matching Efficiency (Barrel)" + ylabel: "Matching Efficiency (Endcap)" binning: min: 0 max: 150 diff --git a/configs/V32/object_performance/tau_matching_wHH.yaml b/configs/V32/object_performance/tau_matching_wHH.yaml new file mode 100644 index 00000000..15800567 --- /dev/null +++ b/configs/V32/object_performance/tau_matching_wHH.yaml @@ -0,0 +1,47 @@ +# HHTausMatchingBarrel: +# sample: HHToTauTau +# version: V32 +# match_test_to_ref: True +# reference_object: +# object: "part_tau" +# x_arg: "Pt" +# label: "Gen Taus" +# cuts: +# event: +# - "{dr_0.3} < 0.15" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# nnTau:default: "Pt" +# caloTau:default: "Pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 150 +# step: 6 + +# HHTausMatchingEndcap: +# sample: HHToTauTau +# version: V32 +# match_test_to_ref: True +# reference_object: +# object: "part_tau" +# x_arg: "Pt" +# label: "Gen Taus" +# cuts: +# event: +# - "{dr_0.3} < 0.15" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# nnTau:default: "Pt" +# caloTau:default: "Pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 150 +# step: 6 diff --git a/configs/V27/object_performance/tau_trigger.yaml b/configs/V32/object_performance/tau_trigger.yaml similarity index 61% rename from configs/V27/object_performance/tau_trigger.yaml rename to configs/V32/object_performance/tau_trigger.yaml index 16634a8f..0c598819 100644 --- a/configs/V27/object_performance/tau_trigger.yaml +++ b/configs/V32/object_performance/tau_trigger.yaml @@ -1,9 +1,10 @@ TauTriggerBarrel_90perc: sample: VBFHToTauTau - default_version: V27 + version: V32 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -12,19 +13,8 @@ TauTriggerBarrel_90perc: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default:barrel: "Pt" + caloTau:default:barrel: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" thresholds: [20, 30] @@ -38,10 +28,11 @@ TauTriggerBarrel_90perc: TauTriggerEndcap_90perc: sample: VBFHToTauTau - default_version: V27 + version: V32 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -50,19 +41,8 @@ TauTriggerEndcap_90perc: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default:endcap: "Pt" + caloTau:default:endcap: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" thresholds: [20, 30] @@ -76,10 +56,11 @@ TauTriggerEndcap_90perc: TauTriggerBarrel_50perc: sample: VBFHToTauTau - default_version: V27 + version: V32 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -88,19 +69,8 @@ TauTriggerBarrel_50perc: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default:barrel: "Pt" + caloTau:default:barrel: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" thresholds: [20, 30] @@ -114,10 +84,11 @@ TauTriggerBarrel_50perc: TauTriggerEndcap_50perc: sample: VBFHToTauTau - default_version: V27 + version: V32 + match_test_to_ref: True reference_object: object: "part_tau" - suffix: "Pt" + x_arg: "Pt" label: "Gen Taus" cuts: event: @@ -126,19 +97,8 @@ TauTriggerEndcap_50perc: object: - "abs({eta}) < 2.4" test_objects: - nnTau: - suffix: "Pt" - label: "NN Tau" - cuts: - - "abs({eta}) < 2.4" - - "{passloosenn}==1" - match_dR: 0.1 - caloTau: - suffix: "Pt" - label: "Calo Tau" - cuts: - - "abs({eta}) < 2.4" - match_dR: 0.3 + nnTau:default:endcap: "Pt" + caloTau:default:endcap: "Pt" xlabel: "Gen. pT (GeV)" ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" thresholds: [20, 30] diff --git a/configs/V28/object_performance/version_comparison.yaml b/configs/V32/object_performance/version_comparison.yaml similarity index 60% rename from configs/V28/object_performance/version_comparison.yaml rename to configs/V32/object_performance/version_comparison.yaml index 9ad12bd4..b13021f3 100644 --- a/configs/V28/object_performance/version_comparison.yaml +++ b/configs/V32/object_performance/version_comparison.yaml @@ -1,44 +1,44 @@ -V22_V28_GMTMuonsBarrel_Comparison: +V22_V32_GMTMuonsBarrel_Comparison: files: MuonsTrigger_20_V22: object: gmtMuon dir: outputs/V22/turnons/ label: "GMT Muon (V22)" - MuonsTrigger_20_V28: + MuonsTrigger_20_V32: object: gmtMuon - dir: outputs/V28/turnons/ - label: "GMT Muon (V28)" + dir: outputs/V32/turnons/ + label: "GMT Muon (V32)" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_V28_gmtMuonBarrel_Comp" + watermark: "V22_V32_gmtMuonBarrel_Comp" save_dir: "outputs/V22vs27/turnons" -V22_V28_ElectronsBarrel_Comparison: +V22_V32_ElectronsBarrel_Comparison: files: ElectronsTriggerBarrel_30_V22: object: tkElectron dir: outputs/V22/turnons/ label: "tkElectron (V22)" - ElectronsTriggerBarrel_30_V28: + ElectronsTriggerBarrel_30_V32: object: tkElectron - dir: outputs/V28/turnons/ - label: "tkElectron (V28)" + dir: outputs/V32/turnons/ + label: "tkElectron (V32)" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_V28_EGBarrel_Comp" + watermark: "V22_V32_EGBarrel_Comp" save_dir: "outputs/V22vs27/turnons" -V22_V28_GMTtkMuonsBarrel_Comparison: +V22_V32_GMTtkMuonsBarrel_Comparison: files: MuonsTrigger_20_V22: object: gmtMuon dir: outputs/V22/turnons/ label: "GMT tkMuon (V22)" - MuonsTrigger_20_V28: + MuonsTrigger_20_V32: object: gmtMuon - dir: outputs/V28/turnons/ - label: "GMT tkMuon (V28)" + dir: outputs/V32/turnons/ + label: "GMT tkMuon (V32)" xlabel: "Gen. $p_T$ (GeV)" ylabel: "Matching Efficiency (Barrel)" - watermark: "V22_V28_gmtTkMuonBarrel_Comp" + watermark: "V22_V32_gmtTkMuonBarrel_Comp" save_dir: "outputs/V22vs27/turnons" diff --git a/configs/V32/objects/electrons.yaml b/configs/V32/objects/electrons.yaml new file mode 100644 index 00000000..98709089 --- /dev/null +++ b/configs/V32/objects/electrons.yaml @@ -0,0 +1,70 @@ +part_e: + label: "Gen Electron" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "{dr_0.3} < 0.15" + +tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "({passeseleid} == 1) | ({pt} < 25)" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron id in barrel" + cuts: + inclusive: + - "abs({eta}) < 2.7" + endcap: + - "({passeseleid} == 1) | ({pt} < 25)" + barrel: + - "{passeseleid} == 1" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({trkiso}) < 0.13" + endcap: + - "abs({trkiso}) < 0.28" + IsoNoIDinEE: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({trkiso}) < 0.13" + - "({passeseleid} == 1) | ({pt} < 25)" + endcap: + - "abs({trkiso}) < 0.28" + +EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{passeseleid} == 1" + endcap: + - "{passessaid} == 1" diff --git a/configs/V32/objects/jets.yaml b/configs/V32/objects/jets.yaml new file mode 100644 index 00000000..cdcbb2de --- /dev/null +++ b/configs/V32/objects/jets.yaml @@ -0,0 +1,82 @@ +caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + PtGr30: + label: "CaloJet, pt > 30" + cuts: + inclusive: + - "abs({eta}) < 7" + - "{pt} > 30" + +seededConeExtendedPuppiJet: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + bjetnn: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{bjetnn} > 0.71" + +phase1PuppiJet: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +seededConePuppiJet: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +trackerJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" diff --git a/configs/V32/objects/met_ht_mht.yaml b/configs/V32/objects/met_ht_mht.yaml new file mode 100644 index 00000000..8e0a6e45 --- /dev/null +++ b/configs/V32/objects/met_ht_mht.yaml @@ -0,0 +1,39 @@ +phase1PuppiHT: + label: "Histogrammed Puppi HT" + ids: + default: {} + +phase1PuppiMHT: + label: "Phase1 Puppi MHT" + ids: + default: {} + +puppiMET: + label: "Puppi MET" + ids: + default: {} + +seededConePuppiHT: + label: "SeededCone HT" + ids: + default: {} + +seededConePuppiMHT: + label: "SeededCone MHT" + ids: + default: {} + +trackerHT: + label: "Tracker HT" + ids: + default: {} + +trackerMET: + label: "Tracker MET" + ids: + default: {} + +trackerMHT: + label: "Tracker MHT" + ids: + default: {} diff --git a/configs/V32/objects/muons.yaml b/configs/V32/objects/muons.yaml new file mode 100644 index 00000000..06a6bc43 --- /dev/null +++ b/configs/V32/objects/muons.yaml @@ -0,0 +1,24 @@ +gmtMuon: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + inclusive: + - "({quality} > 0) | ({pt} > 8)" # quality criterion only to be appied for p_T < 8 GeV diff --git a/configs/V32/objects/photons.yaml b/configs/V32/objects/photons.yaml new file mode 100644 index 00000000..234d5bc2 --- /dev/null +++ b/configs/V32/objects/photons.yaml @@ -0,0 +1,27 @@ +tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "{passeseleid} == 1" + endcap: + - "{passesphoid} == 1" + Iso: + label: "tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({trkiso}) < 0.25" + - "{passeseleid} == 1" + endcap: + - "abs({trkiso}) < 0.205" + - "{passesphoid} == 1" diff --git a/configs/V32/objects/taus.yaml b/configs/V32/objects/taus.yaml new file mode 100644 index 00000000..e448794b --- /dev/null +++ b/configs/V32/objects/taus.yaml @@ -0,0 +1,35 @@ +nnTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + cuts: + inclusive: + - "{passloosenn}==1" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{passloosenn}==1" + +caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" diff --git a/configs/V32/rate_plots/all_rate_plots.yaml b/configs/V32/rate_plots/all_rate_plots.yaml new file mode 100644 index 00000000..0a56d0c9 --- /dev/null +++ b/configs/V32/rate_plots/all_rate_plots.yaml @@ -0,0 +1,59 @@ +HTRates: + sample: MinBias + version: V32 + test_objects: + - phase1PuppiHT:default + - seededConePuppiHT:default + # - trackerJet:default + binning: + min: 40 + max: 420 + step: 20 + +JetDefaultRates: + sample: MinBias + version: V32 + test_objects: + - phase1PuppiJet:default + - seededConePuppiJet:default + # - trackerJet:default + binning: + min: 40 + max: 420 + step: 20 + +ElectronDefaultRates: + sample: MinBias + version: V32 + test_objects: + - EG:default + - tkElectron:NoIso + - tkElectron:Iso + - tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 + +MuonRates: + sample: MinBias + version: V32 + test_objects: + - gmtMuon:default + # - gmtMuon:oldRateID + - gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 + +TauRates: + sample: MinBias + version: V32 + test_objects: + - nnTau:default + - caloTau:default + binning: + min: 10 + max: 155 + step: 5 diff --git a/configs/V32nano/caching.yaml b/configs/V32nano/caching.yaml new file mode 100644 index 00000000..c0892fe3 --- /dev/null +++ b/configs/V32nano/caching.yaml @@ -0,0 +1,60 @@ +V32nano: + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v32_reL1only/DYToLL_M-50_TuneCP5_14TeV-pythia8/DY_M50_131_200PU_v32_reL1only/240205_120621/0000/l1nano_*.root + trees_branches: + Events: + GenPart: "all" + prunedGenPart: "all" + # GenVisTau: "all" + # L1scJet: [pt, eta, phi] + # L1scExtJet: [pt, eta, phi, btagScore] + L1gmtTkMuon: "all" + L1StaMu: "all" # aka gmtMuon + L1tkElectron: "all" + # L1nnTau: "all" + ## merge below with python3.11 menu_tools/caching/merge_arrays.py + L1EGbarrel: "all" + L1EGendcap: "all" + TT: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v32_reL1only/TT_TuneCP5_14TeV-powheg-pythia8/TT_131_200PU_v32_reL1only/240206_115846/0000/l1nano_*.root + trees_branches: + Events: + # gen + GenJet: [pt, eta, phi] + GenJetAK8: [pt, eta, phi] + GenMET: "all" + # sums + L1puppiMET: [pt, phi] + L1puppiMLMET: "all" + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + VBFHToTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v32_reL1only/VBFHToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/VBFHToTauTau_131_200PU_v32_reL1only/240206_115854/0000/l1nano_*.root + trees_branches: + Events: + GenVisTau: "all" + L1nnTau: "all" + L1GTnnTau: "all" + # L1hpsTau: "all" + L1caloTau: "all" + # L1nnCaloTau: "all" + MinBias: + ntuple_path: + trees_branches: + Events: + L1puppiMET: "all" + L1puppiMLMET: "all" + L1nnTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] diff --git a/configs/V32nano/object_performance/bJetEff.yaml b/configs/V32nano/object_performance/bJetEff.yaml new file mode 100644 index 00000000..850c889d --- /dev/null +++ b/configs/V32nano/object_performance/bJetEff.yaml @@ -0,0 +1,30 @@ +BJetEff_pt: + files: + JetMatching_pt_pt30ToInf_genBJets_-999_V32nano: + object: L1puppiExtJetSC4:bjetnn:inclusive + dir: outputs/object_performance/V32nano/turnons/ + label: "Signal: Matched b-jets" + JetMatching_pt_pt30ToInf_genNotBJets_-999_V32nano: + object: L1puppiExtJetSC4:bjetnn:inclusive + dir: outputs/object_performance/V32nano/turnons/ + label: "Background: Unmatched b-jets" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + watermark: "BJet_pt" + save_dir: "outputs/object_performance/V32nano/turnons/" + + +BJetEff_Eta: + files: + JetMatching_Eta_pt30ToInf_genBJets_-999_V32nano: + object: L1puppiExtJetSC4:bjetnn:inclusive + dir: outputs/object_performance/V32nano/turnons/ + label: "Signal: Matched b-jets" + JetMatching_Eta_pt30ToInf_genNotBJets_-999_V32nano: + object: L1puppiExtJetSC4:bjetnn:inclusive + dir: outputs/object_performance/V32nano/turnons/ + label: "Background: Unmatched b-jets" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency" + watermark: "BJet_Eta" + save_dir: "outputs/object_performance/V32nano/turnons/" diff --git a/configs/V32nano/object_performance/electron_iso.yaml b/configs/V32nano/object_performance/electron_iso.yaml new file mode 100644 index 00000000..ad547602 --- /dev/null +++ b/configs/V32nano/object_performance/electron_iso.yaml @@ -0,0 +1,50 @@ +ElectronsIsolation_Barrel: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "prunedGenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkElectron:NoIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +ElectronsIsolation_Endcap: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "prunedGenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.479" + object: + - "abs({eta}) < 2.4" + test_objects: + L1tkElectron:NoIsoForIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V32nano/object_performance/electron_matching.yaml b/configs/V32nano/object_performance/electron_matching.yaml new file mode 100644 index 00000000..cc0dff23 --- /dev/null +++ b/configs/V32nano/object_performance/electron_matching.yaml @@ -0,0 +1,103 @@ +ElectronsMatchingBarrel: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V32nano +# match_test_to_ref: True +# reference_object: +# object: "prunedGenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 100 +# step: 3 + +ElectronsMatchingEndcap: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V32nano +# match_test_to_ref: True +# reference_object: +# object: "prunedGenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 100 +# step: 3 diff --git a/configs/V32nano/object_performance/electron_matching_eta.yaml b/configs/V32nano/object_performance/electron_matching_eta.yaml new file mode 100644 index 00000000..bc2ae201 --- /dev/null +++ b/configs/V32nano/object_performance/electron_matching_eta.yaml @@ -0,0 +1,52 @@ +ElectronsMatching_Eta_Pt10to25: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +ElectronsMatching_Eta_Pt25toInf: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} > 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V32nano/object_performance/electron_trigger.yaml b/configs/V32nano/object_performance/electron_trigger.yaml new file mode 100644 index 00000000..460124f4 --- /dev/null +++ b/configs/V32nano/object_performance/electron_trigger.yaml @@ -0,0 +1,119 @@ +ElectronsTriggerBarrel: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:barrel: "pt" + L1tkElectron:NoIso:barrel: "pt" + L1tkElectron:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +ElectronsTriggerEndcap: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:endcap: "pt" + L1tkElectron:NoIso:endcap: "pt" + L1tkElectron:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +# ElectronsTriggerBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V32nano +# match_test_to_ref: True +# reference_object: +# object: "prunedGenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: +# L1EG:default:barrel: "pt" +# L1tkElectron:NoIso:barrel: "pt" +# L1tkElectron:Iso:barrel: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 + +# ElectronsTriggerEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V32nano +# match_test_to_ref: True +# reference_object: +# object: "prunedGenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: +# # L1EG:default:endcap: "pt" +# L1tkElectron:NoIso:endcap: "pt" +# L1tkElectron:Iso:endcap: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 diff --git a/configs/V32nano/object_performance/jets_matching.yaml b/configs/V32nano/object_performance/jets_matching.yaml new file mode 100644 index 00000000..e86b78e5 --- /dev/null +++ b/configs/V32nano/object_performance/jets_matching.yaml @@ -0,0 +1,117 @@ +JetMatchingBarrel: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + # trackerJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcap: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + # trackerJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingForward: + version: V32nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (forward)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingBarrelSC8: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcapSC8: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 500 + step: 10 \ No newline at end of file diff --git a/configs/V32nano/object_performance/jets_matching_eta.yaml b/configs/V32nano/object_performance/jets_matching_eta.yaml new file mode 100644 index 00000000..de12dd97 --- /dev/null +++ b/configs/V32nano/object_performance/jets_matching_eta.yaml @@ -0,0 +1,94 @@ +JetMatching_Eta_Pt40To100: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + # trackerJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + # trackerJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + L1caloJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5.5 + max: 5.5 + step: 0.25 + +JetMatching_Eta_SC8_Pt100ToInf: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 \ No newline at end of file diff --git a/configs/V32nano/object_performance/jets_matching_wBTag.yaml b/configs/V32nano/object_performance/jets_matching_wBTag.yaml new file mode 100644 index 00000000..0178153c --- /dev/null +++ b/configs/V32nano/object_performance/jets_matching_wBTag.yaml @@ -0,0 +1,136 @@ +JetMatching_Eta_Pt40To100_ExtendedVsRegular: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genBJets: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genNotBJets: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Pt_Pt30ToInf_genBJets: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 + +JetMatching_Pt_Pt30ToInf_genNotBJets: + sample: TT + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 diff --git a/configs/V32nano/object_performance/jets_trigger.yaml b/configs/V32nano/object_performance/jets_trigger.yaml new file mode 100644 index 00000000..b097d7ca --- /dev/null +++ b/configs/V32nano/object_performance/jets_trigger.yaml @@ -0,0 +1,163 @@ +JetTurnonBarrel: + version: V32nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:barrel: "pt" + L1puppiJetSC4:default:barrel: "pt" + L1caloJet:default: "pt" + # trackerJet:default:barrel: "pt" + thresholds: [50, 100] + # scalings: + # method: "naive" + # threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcap: + version: V32nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:endcap: "pt" + L1puppiJetSC4:default:endcap: "pt" + L1caloJet:default: "pt" + # trackerJet:default:endcap: "pt" + thresholds: [50, 100] + # scalings: + # method: "naive" + # threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForward: + version: V32nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default:forward: "pt" + L1puppiJetSC4:default:forward: "pt" + L1caloJet:default: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonBarrelSC8: + version: V32nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcapSC8: + version: V32nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForwardSC8: + version: V32nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default:forward: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V32nano/object_performance/met_ht_mht.yaml b/configs/V32nano/object_performance/met_ht_mht.yaml new file mode 100644 index 00000000..16c1b3bf --- /dev/null +++ b/configs/V32nano/object_performance/met_ht_mht.yaml @@ -0,0 +1,73 @@ +HT_90perc: + sample: TT + version: V32nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + # trackerHT:default: "" + # phase1PuppiHT:default: "" + # seededConePuppiHT:default: "" + L1puppiJetSC4sums:HT: "pt" + thresholds: [350] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +MHT_50perc: + sample: TT + version: V32nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + L1puppiJetSC4sums:MHT: "pt" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MET_90perc: + sample: TT + version: V32nano + reference_object: + object: "GenMET" + x_arg: "pt" + label: "Gen MET" + test_objects: + # trackerMET:default: "" + L1puppiMET:default: "pt" + thresholds: [150] + xlabel: "Gen. MET (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 500 + step: 20 diff --git a/configs/V32nano/object_performance/mht.yaml b/configs/V32nano/object_performance/mht.yaml new file mode 100644 index 00000000..2af16291 --- /dev/null +++ b/configs/V32nano/object_performance/mht.yaml @@ -0,0 +1,72 @@ +MHT_debug_METrefGenMHT: + sample: TT + version: V32nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + L1puppiMET:default: "pt" + #thresholds: [-1, 0, 70, 150, 500] + thresholds: [150] + # scalings: + # method: "naive" + # threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MHT_debug: + sample: TT + version: V32nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + L1puppiJetSC4sums:MHT: "pt" + #thresholds: [-1, 0, 70, 150, 500] + thresholds: [150] + # scalings: + # method: "naive" + # threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MHT_debug_refL1MET: + sample: TT + version: V32nano + reference_object: + object: "L1puppiMET" + x_arg: "pt" + label: "Gen MHT" + test_objects: + L1puppiJetSC4sums:MHT: "pt" + # thresholds: [-1, 0, 70, 150, 500] + thresholds: [150] + # scalings: + # method: "naive" + # threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 \ No newline at end of file diff --git a/configs/V32nano/object_performance/muon_matching.yaml b/configs/V32nano/object_performance/muon_matching.yaml new file mode 100644 index 00000000..f39c2a07 --- /dev/null +++ b/configs/V32nano/object_performance/muon_matching.yaml @@ -0,0 +1,73 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1StaMu:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1StaMu:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1StaMu:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V28/object_performance/muon_matching_eta.yaml b/configs/V32nano/object_performance/muon_matching_eta.yaml similarity index 56% rename from configs/V28/object_performance/muon_matching_eta.yaml rename to configs/V32nano/object_performance/muon_matching_eta.yaml index 7f2f2b38..8b155842 100644 --- a/configs/V28/object_performance/muon_matching_eta.yaml +++ b/configs/V32nano/object_performance/muon_matching_eta.yaml @@ -1,26 +1,22 @@ MuonsMatching_Eta_Pt2to5: sample: DYLL_M50 - default_version: V28 + version: V32nano + match_test_to_ref: True reference_object: - object: "part_mu" - suffix: "Eta" + object: "GenPart" + x_arg: "eta" label: "Gen Muons" cuts: event: - - "{dr_0.3} < 0.15" + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" - "{pt} > 2" - "{pt} < 5" object: - "abs({eta}) < 2.4" test_objects: - gmtMuon: - suffix: "Eta" - label: "GMT Muon" - match_dR: 0.3 - gmtTkMuon: - suffix: "Eta" - label: "GMT TkMuon" - match_dR: 0.1 + L1StaMu:default: "eta" + L1gmtTkMuon:default: "eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (2-5 GeV)" binning: @@ -30,26 +26,22 @@ MuonsMatching_Eta_Pt2to5: MuonsMatching_Eta_Pt15toInf: sample: DYLL_M50 - default_version: V28 + version: V32nano + match_test_to_ref: True reference_object: - object: "part_mu" - suffix: "Eta" + object: "GenPart" + x_arg: "eta" label: "Gen Muons" cuts: event: - - "{dr_0.3} < 0.15" + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" - "{pt} > 15" object: - "abs({eta}) < 2.4" test_objects: - gmtMuon: - suffix: "Eta" - label: "GMT Muon" - match_dR: 0.3 - gmtTkMuon: - suffix: "Eta" - label: "GMT TkMuon" - match_dR: 0.1 + L1StaMu:default: "eta" + L1gmtTkMuon:default: "eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>15 GeV)" binning: diff --git a/configs/V32nano/object_performance/muon_trigger.yaml b/configs/V32nano/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..6ef5156a --- /dev/null +++ b/configs/V32nano/object_performance/muon_trigger.yaml @@ -0,0 +1,81 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) < 0.83" + test_objects: + gmtMuon:default:barrel: "pt" + gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + gmtMuon:default:overlap: "pt" + gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_mu" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "{dr_0.3} < 0.15" + object: + - "abs({eta}) > 1.24" + test_objects: + gmtMuon:default:endcap: "pt" + gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V26/object_performance/photon_iso.yaml b/configs/V32nano/object_performance/photon_iso.yaml similarity index 51% rename from configs/V26/object_performance/photon_iso.yaml rename to configs/V32nano/object_performance/photon_iso.yaml index da1f8aab..eb9b7cf0 100644 --- a/configs/V26/object_performance/photon_iso.yaml +++ b/configs/V32nano/object_performance/photon_iso.yaml @@ -1,27 +1,22 @@ PhotonIsolation_Barrel: sample: Hgg - default_version: V26 + version: V32nano iso_vs_efficiency: True + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Pt" + x_arg: "pt" label: "Gen Photons" cuts: event: - "{dr_0.3} < 0.15" - - "abs({eta}) < 1.5" + - "abs({eta}) < 1.479" object: - - "abs({eta}) < 1.5" + - "abs({eta}) < 1.479" test_objects: - tkPhoton: - suffix: "trkiso" - label: "TkPhoton" - match_dR: 0.15 - cuts: - - "abs({eta}) < 1.5" - - "{passesphoid} == 1" + L1tkPhoton:NoIso:barrel: "relIso" xlabel: "Isolation" - ylabel: "Efficiency" + ylabel: "Efficiency (Barrel)" binning: min: 0 max: 0.5 @@ -29,28 +24,24 @@ PhotonIsolation_Barrel: PhotonIsolation_Endcap: sample: Hgg - default_version: V26 + version: V32nano iso_vs_efficiency: True + match_test_to_ref: True reference_object: object: "part_gamma" - suffix: "Pt" + x_arg: "pt" label: "Gen Photons" cuts: event: - "{dr_0.3} < 0.15" - - "abs({eta}) > 1.5" + - "abs({eta}) > 1.479" + - "abs({eta}) < 2.4" object: - - "abs({eta}) > 1.5" + - "abs({eta}) > 1.479" test_objects: - tkPhoton: - suffix: "trkiso" - label: "TkPhoton" - match_dR: 0.15 - cuts: - - "abs({eta}) > 1.5" - - "{passesphoid} == 1" + L1tkPhoton:NoIso:endcap: "relIso" xlabel: "Isolation" - ylabel: "Efficiency" + ylabel: "Efficiency (Endcap)" binning: min: 0 max: 0.5 diff --git a/configs/V32nano/object_performance/photons_matching.yaml b/configs/V32nano/object_performance/photons_matching.yaml new file mode 100644 index 00000000..5d26fd29 --- /dev/null +++ b/configs/V32nano/object_performance/photons_matching.yaml @@ -0,0 +1,49 @@ +PhotonsMatching_Barrel: + sample: Hgg + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap: + sample: Hgg + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V32nano/object_performance/photons_matching_eta.yaml b/configs/V32nano/object_performance/photons_matching_eta.yaml new file mode 100644 index 00000000..6798168e --- /dev/null +++ b/configs/V32nano/object_performance/photons_matching_eta.yaml @@ -0,0 +1,50 @@ +PhotonsMatching_Eta_pt10to25: + sample: Hgg + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Eta" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + EG:default: "Eta" + L1tkPhoton:NoIso: "Eta" + L1tkPhoton:Iso: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +PhotonsMatching_Eta_pt25toInf: + sample: Hgg + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "Eta" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "{pt} >= 25" + object: + - "abs({eta}) < 3.0" + test_objects: + EG:default: "Eta" + L1tkPhoton:NoIso: "Eta" + L1tkPhoton:Iso: "Eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V32nano/object_performance/photons_trigger.yaml b/configs/V32nano/object_performance/photons_trigger.yaml new file mode 100644 index 00000000..90fe8ae0 --- /dev/null +++ b/configs/V32nano/object_performance/photons_trigger.yaml @@ -0,0 +1,57 @@ +PhotonsTrigger_Barrel: + sample: Hgg + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default:barrel: "pt" + L1tkPhoton:NoIso:barrel: "pt" + L1tkPhoton:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Endcap: + sample: Hgg + version: V32nano + match_test_to_ref: True + reference_object: + object: "part_gamma" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + EG:default:endcap: "pt" + L1tkPhoton:NoIso:endcap: "pt" + L1tkPhoton:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V32nano/object_performance/tau_matching.yaml b/configs/V32nano/object_performance/tau_matching.yaml new file mode 100644 index 00000000..d118268e --- /dev/null +++ b/configs/V32nano/object_performance/tau_matching.yaml @@ -0,0 +1,53 @@ +TausMatchingBarrel: + sample: VBFHToTauTau + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnTau:default: "pt" + # L1hpsTau:default: "pt" + L1caloTau:default: "pt" + # L1nnCaloTau:default: "pt" + # L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 150 + step: 6 + +TausMatchingEndcap: + sample: VBFHToTauTau + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnTau:default: "pt" + # L1hpsTau:default: "pt" + L1caloTau:default: "pt" + # L1nnCaloTau:default: "pt" + # L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V32nano/object_performance/tau_matching_eta.yaml b/configs/V32nano/object_performance/tau_matching_eta.yaml new file mode 100644 index 00000000..ddb84274 --- /dev/null +++ b/configs/V32nano/object_performance/tau_matching_eta.yaml @@ -0,0 +1,50 @@ +TauMatching_Eta_Pt40To100: + sample: VBFHToTauTau + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -3.0 + max: 3.0 + step: 0.2 + +TauMatching_Eta_Pt100ToInf: + sample: VBFHToTauTau + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1nnTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V32nano/object_performance/tau_matching_wHH.yaml b/configs/V32nano/object_performance/tau_matching_wHH.yaml new file mode 100644 index 00000000..ce72201f --- /dev/null +++ b/configs/V32nano/object_performance/tau_matching_wHH.yaml @@ -0,0 +1,47 @@ +# HHTausMatchingBarrel: +# sample: HHToTauTau +# version: V32nano +# match_test_to_ref: True +# reference_object: +# object: "part_tau" +# x_arg: "pt" +# label: "Gen Taus" +# cuts: +# event: +# - "{dr_0.3} < 0.15" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# nnTau:default: "pt" +# caloTau:default: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 150 +# step: 6 + +# HHTausMatchingEndcap: +# sample: HHToTauTau +# version: V32nano +# match_test_to_ref: True +# reference_object: +# object: "part_tau" +# x_arg: "pt" +# label: "Gen Taus" +# cuts: +# event: +# - "{dr_0.3} < 0.15" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# nnTau:default: "pt" +# caloTau:default: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 150 +# step: 6 diff --git a/configs/V32nano/object_performance/tau_trigger.yaml b/configs/V32nano/object_performance/tau_trigger.yaml new file mode 100644 index 00000000..86115859 --- /dev/null +++ b/configs/V32nano/object_performance/tau_trigger.yaml @@ -0,0 +1,119 @@ +TauTriggerBarrel_90perc: + sample: VBFHToTauTau + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_90perc: + sample: VBFHToTauTau + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerBarrel_50perc: + sample: VBFHToTauTau + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.50 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_50perc: + sample: VBFHToTauTau + version: V32nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.50 + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V32nano/objects/electrons.yaml b/configs/V32nano/objects/electrons.yaml new file mode 100644 index 00000000..cfacf196 --- /dev/null +++ b/configs/V32nano/objects/electrons.yaml @@ -0,0 +1,49 @@ +L1tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + endcap: + - "({eleId} == 1) | ({pt} < 25)" + barrel: + - "{eleId} == 1" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron, no ID" + cuts: + inclusive: + - "abs({eta}) < 2.4" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + endcap: + - "abs({relIso}) < 0.28" + +L1EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{eleId} == 1" + endcap: + - "{saId} == 1" diff --git a/configs/V32nano/objects/jets.yaml b/configs/V32nano/objects/jets.yaml new file mode 100644 index 00000000..b16315f7 --- /dev/null +++ b/configs/V32nano/objects/jets.yaml @@ -0,0 +1,71 @@ +L1caloJet: + match_dR: 0.35 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiExtJetSC4: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + bjetnn: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{btagScore} > 0.71" + +L1puppiJetHisto: + match_dR: 0.35 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC4: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC8: + match_dR: 0.35 + label: "Seeded Cone PuppiJet 8" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" \ No newline at end of file diff --git a/configs/V32nano/objects/met_ht_mht.yaml b/configs/V32nano/objects/met_ht_mht.yaml new file mode 100644 index 00000000..24c8e6d3 --- /dev/null +++ b/configs/V32nano/objects/met_ht_mht.yaml @@ -0,0 +1,35 @@ +L1puppiMET: + label: "Puppi MET" + ids: + default: {} + +L1puppiMLMET: + label: "Puppi MLMET" + ids: + default: {} + +L1puppiJetSC4sums: + ids: + HT: + label: "SeededCone HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "SeededCone MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1puppiHistoJetSums: + ids: + HT: + label: "Histogrammed Puppi HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "Histogrammed Puppi MHT" + cuts: + inclusive: + - "{sumType} == 1" diff --git a/configs/V32nano/objects/muons.yaml b/configs/V32nano/objects/muons.yaml new file mode 100644 index 00000000..fb0d86ea --- /dev/null +++ b/configs/V32nano/objects/muons.yaml @@ -0,0 +1,35 @@ +GenPart: + label: "Gen Muon" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "(({statusFlags}>>7)&1) == 1" + + +L1StaMu: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + inclusive: + - "({hwQual} > 0) | ({pt} > 8)" # quality criterion only to be appied for p_T < 8 GeV diff --git a/configs/V32nano/objects/photons.yaml b/configs/V32nano/objects/photons.yaml new file mode 100644 index 00000000..12d51f0c --- /dev/null +++ b/configs/V32nano/objects/photons.yaml @@ -0,0 +1,29 @@ +L1tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "L1tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "{eleId} == 1" + endcap: + - "{phoId} == 1" + Iso: + label: "L1tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "abs({relIso}) < 0.25" + - "{eleId} == 1" + endcap: + - "abs({relIso}) < 0.205" + - "{phoId} == 1" diff --git a/configs/V32nano/objects/taus.yaml b/configs/V32nano/objects/taus.yaml new file mode 100644 index 00000000..80927659 --- /dev/null +++ b/configs/V32nano/objects/taus.yaml @@ -0,0 +1,61 @@ +L1nnTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + # - "{passLooseNN}==1" + # Current IB (22 Feb recipe) does not have updated WP, so cut on NN score rather than checking passLooseNN + - "{chargedIso} > 0.22" + +L1hpsTau: + label: "HPS Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + +L1caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" + +L1nnCaloTau: + label: "NN Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{hwQual}==3" diff --git a/configs/V32nano/rate_plots/all_rate_plots.yaml b/configs/V32nano/rate_plots/all_rate_plots.yaml new file mode 100644 index 00000000..7f64c894 --- /dev/null +++ b/configs/V32nano/rate_plots/all_rate_plots.yaml @@ -0,0 +1,46 @@ +TauRates: + sample: MinBias + version: V32nano + test_objects: + - L1nnTau:default + - L1hpsTau:default + - L1caloTau:default + - L1nnCaloTau:default + binning: + min: 10 + max: 155 + step: 5 + +JetDefaultRates: + sample: MinBias + version: V32nano + test_objects: + - L1puppiJetHisto:default + - L1puppiJetSC4:default + - L1caloJet:default + binning: + min: 40 + max: 420 + step: 20 + +JetSC8Rates: + sample: MinBias + version: V32nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + binning: + min: 40 + max: 420 + step: 20 + +METRates: + sample: MinBias + version: V32nano + test_objects: + - L1puppiMET:default + - L1puppiMLMET:default + binning: + min: 50 + max: 300 + step: 10 diff --git a/configs/V33nano/README.md b/configs/V33nano/README.md new file mode 100644 index 00000000..d82151a1 --- /dev/null +++ b/configs/V33nano/README.md @@ -0,0 +1,4 @@ +# V33 version + +Based on https://github.com/cms-l1-dpg/Phase2-L1Nano/tree/v33_1400pre3v1 + diff --git a/configs/V33nano/caching.yaml b/configs/V33nano/caching.yaml new file mode 100644 index 00000000..e6af4c77 --- /dev/null +++ b/configs/V33nano/caching.yaml @@ -0,0 +1,85 @@ +V33nano: + Hgg: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v33/GluGluHToGG_M-125_TuneCP5_14TeV-powheg-pythia8/GluGluHToGG_131_200PU_IB1400pre3V1/240221_221354/0000/test_*.root + trees_branches: + Events: + GenPart: [pt, eta, phi, pdgId, statusFlags] + L1tkPhoton: "all" + # L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v33_fromEmyr/dyToLL.root + trees_branches: + Events: + GenPart: "all" + L1gmtTkMuon: "all" + L1gmtMuon: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + TT: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v33_fromEmyr/ttbar.root + trees_branches: + Events: + # gen + GenJet: [pt, eta, phi, partonFlavour] + GenJetAK8: [pt, eta, phi] + GenMET: "all" + # sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + VBFHToTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v33_fromEmyr/vbfHTauTau.root + trees_branches: + Events: + GenVisTau: "all" + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + MinBias: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v33_fromEmyr/minbias.root + trees_branches: + Events: + ## PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + ## TAUS + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] \ No newline at end of file diff --git a/configs/V33nano/object_performance/electron_iso.yaml b/configs/V33nano/object_performance/electron_iso.yaml new file mode 100644 index 00000000..b3ebd0a8 --- /dev/null +++ b/configs/V33nano/object_performance/electron_iso.yaml @@ -0,0 +1,50 @@ +ElectronsIsolation_Barrel: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkElectron:NoIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +ElectronsIsolation_Endcap: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.479" + object: + - "abs({eta}) < 2.4" + test_objects: + L1tkElectron:NoIsoForIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V33nano/object_performance/electron_matching.yaml b/configs/V33nano/object_performance/electron_matching.yaml new file mode 100644 index 00000000..fc9537cf --- /dev/null +++ b/configs/V33nano/object_performance/electron_matching.yaml @@ -0,0 +1,103 @@ +ElectronsMatchingBarrel: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V33nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 100 +# step: 3 + +ElectronsMatchingEndcap: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V33nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 100 +# step: 3 diff --git a/configs/V33nano/object_performance/electron_matching_eta.yaml b/configs/V33nano/object_performance/electron_matching_eta.yaml new file mode 100644 index 00000000..1b53eb95 --- /dev/null +++ b/configs/V33nano/object_performance/electron_matching_eta.yaml @@ -0,0 +1,52 @@ +ElectronsMatching_Eta_Pt10to25: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +ElectronsMatching_Eta_Pt25toInf: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} > 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V33nano/object_performance/electron_trigger.yaml b/configs/V33nano/object_performance/electron_trigger.yaml new file mode 100644 index 00000000..1b514982 --- /dev/null +++ b/configs/V33nano/object_performance/electron_trigger.yaml @@ -0,0 +1,119 @@ +ElectronsTriggerBarrel: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:barrel: "pt" + L1tkElectron:NoIso:barrel: "pt" + L1tkElectron:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +ElectronsTriggerEndcap: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:endcap: "pt" + L1tkElectron:NoIso:endcap: "pt" + L1tkElectron:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +# ElectronsTriggerBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V33nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: + # L1EG:default:barrel: "pt" +# L1tkElectron:NoIso:barrel: "pt" +# L1tkElectron:Iso:barrel: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 + +# ElectronsTriggerEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V33nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: +# # L1EG:default:endcap: "pt" +# L1tkElectron:NoIso:endcap: "pt" +# L1tkElectron:Iso:endcap: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 diff --git a/configs/V33nano/object_performance/jets_matching.yaml b/configs/V33nano/object_performance/jets_matching.yaml new file mode 100644 index 00000000..e0a76f62 --- /dev/null +++ b/configs/V33nano/object_performance/jets_matching.yaml @@ -0,0 +1,118 @@ +JetMatchingBarrel: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcap: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingForward: + version: V33nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (forward)" + binning: + min: 0 + max: 500 + step: 10 + + +JetMatchingBarrelSC8: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcapSC8: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 500 + step: 10 \ No newline at end of file diff --git a/configs/V33nano/object_performance/jets_matching_eta.yaml b/configs/V33nano/object_performance/jets_matching_eta.yaml new file mode 100644 index 00000000..88e2a3a5 --- /dev/null +++ b/configs/V33nano/object_performance/jets_matching_eta.yaml @@ -0,0 +1,94 @@ +JetMatching_Eta_Pt40To100: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + L1caloJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5.5 + max: 5.5 + step: 0.25 + +JetMatching_Eta_SC8_Pt100ToInf: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 \ No newline at end of file diff --git a/configs/V33nano/object_performance/jets_matching_wBTag.yaml b/configs/V33nano/object_performance/jets_matching_wBTag.yaml new file mode 100644 index 00000000..6c9d52f2 --- /dev/null +++ b/configs/V33nano/object_performance/jets_matching_wBTag.yaml @@ -0,0 +1,136 @@ +JetMatching_Eta_Pt40To100_ExtendedVsRegular: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genBJets: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genNotBJets: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Pt_Pt30ToInf_genBJets: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 + +JetMatching_Pt_Pt30ToInf_genNotBJets: + sample: TT + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 diff --git a/configs/V33nano/object_performance/jets_sc8_trigger.yaml b/configs/V33nano/object_performance/jets_sc8_trigger.yaml new file mode 100644 index 00000000..abbdf822 --- /dev/null +++ b/configs/V33nano/object_performance/jets_sc8_trigger.yaml @@ -0,0 +1,77 @@ +JetTurnonBarrelSC8: + version: V33nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcapSC8: + version: V33nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForwardSC8: + version: V33nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default:forward: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V33nano/object_performance/jets_trigger.yaml b/configs/V33nano/object_performance/jets_trigger.yaml new file mode 100644 index 00000000..44665ff1 --- /dev/null +++ b/configs/V33nano/object_performance/jets_trigger.yaml @@ -0,0 +1,85 @@ +JetTurnonBarrel: + version: V33nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:barrel: "pt" + L1puppiJetSC4:default:barrel: "pt" + L1caloJet:default:barrel: "pt" + L1TrackJet:default:barrel: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcap: + version: V33nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:endcap: "pt" + L1puppiJetSC4:default:endcap: "pt" + L1caloJet:default:endcap: "pt" + L1TrackJet:default:endcap: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForward: + version: V33nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default:forward: "pt" + L1puppiJetSC4:default:forward: "pt" + L1caloJet:default:forward: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V33nano/object_performance/met_ht_mht.yaml b/configs/V33nano/object_performance/met_ht_mht.yaml new file mode 100644 index 00000000..70112288 --- /dev/null +++ b/configs/V33nano/object_performance/met_ht_mht.yaml @@ -0,0 +1,75 @@ +HT_90perc: + sample: TT + version: V33nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + L1puppiHistoJetSums:HT: "pt" + L1puppiJetSC4sums:HT: "pt" + L1TrackHT:HT: "ht" + thresholds: [350] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +MHT_50perc: + sample: TT + version: V33nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + L1puppiHistoJetSums:MHT: "pt" + L1puppiJetSC4sums:MHT: "pt" + L1TrackHT:MHT: "mht" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MET_90perc: + sample: TT + version: V33nano + reference_object: + object: "GenMET" + x_arg: "pt" + label: "Gen MET" + test_objects: + L1puppiMET:default: "pt" + L1puppiMLMET:default: "pt" + L1TrackMET:default: "pt" + thresholds: [150] + xlabel: "Gen. MET (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 500 + step: 20 diff --git a/configs/V33nano/object_performance/muon_matching.yaml b/configs/V33nano/object_performance/muon_matching.yaml new file mode 100644 index 00000000..214e26e7 --- /dev/null +++ b/configs/V33nano/object_performance/muon_matching.yaml @@ -0,0 +1,73 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V22/object_performance/muon_matching_eta.yaml b/configs/V33nano/object_performance/muon_matching_eta.yaml similarity index 53% rename from configs/V22/object_performance/muon_matching_eta.yaml rename to configs/V33nano/object_performance/muon_matching_eta.yaml index 29637b1d..8aea34d3 100644 --- a/configs/V22/object_performance/muon_matching_eta.yaml +++ b/configs/V33nano/object_performance/muon_matching_eta.yaml @@ -1,26 +1,22 @@ MuonsMatching_Eta_Pt2to5: - sample: DY - default_version: V22 + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True reference_object: - object: "part_mu" - suffix: "Eta" + object: "GenPart" + x_arg: "eta" label: "Gen Muons" cuts: event: - - "{dr_0.3} < 0.15" + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" - "{pt} > 2" - "{pt} < 5" object: - "abs({eta}) < 2.4" test_objects: - gmtMuon: - suffix: "Eta" - label: "GMT Muon" - match_dR: 0.3 - gmtTkMuon: - suffix: "Eta" - label: "GMT TkMuon" - match_dR: 0.1 + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (2-5 GeV)" binning: @@ -29,27 +25,23 @@ MuonsMatching_Eta_Pt2to5: step: 0.2 MuonsMatching_Eta_Pt15toInf: - sample: DY - default_version: V22 + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True reference_object: - object: "part_mu" - suffix: "Eta" + object: "GenPart" + x_arg: "eta" label: "Gen Muons" cuts: event: - - "{dr_0.3} < 0.15" + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" - "{pt} > 15" object: - "abs({eta}) < 2.4" test_objects: - gmtMuon: - suffix: "Eta" - label: "GMT Muon" - match_dR: 0.3 - gmtTkMuon: - suffix: "Eta" - label: "GMT TkMuon" - match_dR: 0.1 + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" xlabel: "Gen. $\\eta$" ylabel: "Matching Efficiency (>15 GeV)" binning: diff --git a/configs/V33nano/object_performance/muon_trigger.yaml b/configs/V33nano/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..9453fdb8 --- /dev/null +++ b/configs/V33nano/object_performance/muon_trigger.yaml @@ -0,0 +1,84 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V33nano/object_performance/photon_iso.yaml b/configs/V33nano/object_performance/photon_iso.yaml new file mode 100644 index 00000000..2c34db04 --- /dev/null +++ b/configs/V33nano/object_performance/photon_iso.yaml @@ -0,0 +1,51 @@ +PhotonIsolation_Barrel: + sample: Hgg + version: V33nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkPhoton:NoIso:barrel: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +PhotonIsolation_Endcap: + sample: Hgg + version: V33nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.479" + - "abs({eta}) < 2.4" + object: + - "abs({eta}) > 1.479" + test_objects: + L1tkPhoton:NoIso:endcap: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V33nano/object_performance/photons_matching.yaml b/configs/V33nano/object_performance/photons_matching.yaml new file mode 100644 index 00000000..eb99814c --- /dev/null +++ b/configs/V33nano/object_performance/photons_matching.yaml @@ -0,0 +1,103 @@ +PhotonsMatching_Barrel: + sample: Hgg + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap: + sample: Hgg + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Barrel_wPrunedGenParts: + sample: Hgg + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap_wPrunedGenParts: + sample: Hgg + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V33nano/object_performance/photons_matching_eta.yaml b/configs/V33nano/object_performance/photons_matching_eta.yaml new file mode 100644 index 00000000..a716ec10 --- /dev/null +++ b/configs/V33nano/object_performance/photons_matching_eta.yaml @@ -0,0 +1,52 @@ +PhotonsMatching_Eta_Pt10to25: + sample: Hgg + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +PhotonsMatching_Eta_Pt25toInf: + sample: Hgg + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} >= 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V33nano/object_performance/photons_trigger.yaml b/configs/V33nano/object_performance/photons_trigger.yaml new file mode 100644 index 00000000..1b757a1f --- /dev/null +++ b/configs/V33nano/object_performance/photons_trigger.yaml @@ -0,0 +1,59 @@ +PhotonsTrigger_Barrel: + sample: Hgg + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:barrel: "pt" + L1tkPhoton:NoIso:barrel: "pt" + L1tkPhoton:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Endcap: + sample: Hgg + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:endcap: "pt" + L1tkPhoton:NoIso:endcap: "pt" + L1tkPhoton:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V33nano/object_performance/tau_matching.yaml b/configs/V33nano/object_performance/tau_matching.yaml new file mode 100644 index 00000000..fd0ff154 --- /dev/null +++ b/configs/V33nano/object_performance/tau_matching.yaml @@ -0,0 +1,53 @@ +TausMatchingBarrel: + sample: VBFHToTauTau + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 150 + step: 6 + +TausMatchingEndcap: + sample: VBFHToTauTau + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V33nano/object_performance/tau_matching_eta.yaml b/configs/V33nano/object_performance/tau_matching_eta.yaml new file mode 100644 index 00000000..cc342b62 --- /dev/null +++ b/configs/V33nano/object_performance/tau_matching_eta.yaml @@ -0,0 +1,50 @@ +TauMatching_Eta_Pt40To100: + sample: VBFHToTauTau + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -3.0 + max: 3.0 + step: 0.2 + +TauMatching_Eta_Pt100ToInf: + sample: VBFHToTauTau + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V33nano/object_performance/tau_trigger.yaml b/configs/V33nano/object_performance/tau_trigger.yaml new file mode 100644 index 00000000..5c988399 --- /dev/null +++ b/configs/V33nano/object_performance/tau_trigger.yaml @@ -0,0 +1,59 @@ +TauTriggerBarrel_90perc: + sample: VBFHToTauTau + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:barrel: "pt" + L1hpsTau:default:barrel: "pt" + L1caloTau:default:barrel: "pt" + L1nnCaloTau:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_90perc: + sample: VBFHToTauTau + version: V33nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:endcap: "pt" + L1hpsTau:default:endcap: "pt" + L1caloTau:default:endcap: "pt" + L1nnCaloTau:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V33nano/objects/electrons.yaml b/configs/V33nano/objects/electrons.yaml new file mode 100644 index 00000000..cfacf196 --- /dev/null +++ b/configs/V33nano/objects/electrons.yaml @@ -0,0 +1,49 @@ +L1tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + endcap: + - "({eleId} == 1) | ({pt} < 25)" + barrel: + - "{eleId} == 1" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron, no ID" + cuts: + inclusive: + - "abs({eta}) < 2.4" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + endcap: + - "abs({relIso}) < 0.28" + +L1EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{eleId} == 1" + endcap: + - "{saId} == 1" diff --git a/configs/V33nano/objects/jets.yaml b/configs/V33nano/objects/jets.yaml new file mode 100644 index 00000000..d7bb0010 --- /dev/null +++ b/configs/V33nano/objects/jets.yaml @@ -0,0 +1,92 @@ +L1caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiExtJetSC4: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + bjetnn: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{btagScore} > 0.71" + +L1puppiJetHisto: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC4: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC8: + match_dR: 0.35 + label: "Seeded Cone PuppiJet 8" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1TrackJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + + diff --git a/configs/V33nano/objects/met_ht_mht.yaml b/configs/V33nano/objects/met_ht_mht.yaml new file mode 100644 index 00000000..bb7611bd --- /dev/null +++ b/configs/V33nano/objects/met_ht_mht.yaml @@ -0,0 +1,57 @@ +# phase1PuppiHT: +# label: "Histogrammed Puppi HT" +# ids: +# default: {} + +# phase1PuppiMHT: +# label: "Phase1 Puppi MHT" +# ids: +# default: {} + +L1puppiMET: + label: "Puppi MET" + ids: + default: {} + +L1puppiMLMET: + label: "Puppi MLMET" + ids: + default: {} + +L1puppiJetSC4sums: + ids: + HT: + label: "SeededCone HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "SeededCone MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1puppiHistoJetSums: + ids: + HT: + label: "Histogrammed Puppi HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "Histogrammed Puppi MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1TrackHT: + ids: + HT: + label: "Tracker HT" + MHT: + label: "Tracker MHT" + +L1TrackMET: + label: "Tracker MET" + ids: + default: {} \ No newline at end of file diff --git a/configs/V33nano/objects/muons.yaml b/configs/V33nano/objects/muons.yaml new file mode 100644 index 00000000..08bd371a --- /dev/null +++ b/configs/V33nano/objects/muons.yaml @@ -0,0 +1,35 @@ +GenPart: + label: "Gen Muon" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "(({statusFlags}>>7)&1) == 1" + + +L1gmtMuon: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + inclusive: + - "({hwQual} > 0) | ({pt} > 8)" # quality criterion only to be appied for p_T < 8 GeV diff --git a/configs/V33nano/objects/photons.yaml b/configs/V33nano/objects/photons.yaml new file mode 100644 index 00000000..12d51f0c --- /dev/null +++ b/configs/V33nano/objects/photons.yaml @@ -0,0 +1,29 @@ +L1tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "L1tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "{eleId} == 1" + endcap: + - "{phoId} == 1" + Iso: + label: "L1tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "abs({relIso}) < 0.25" + - "{eleId} == 1" + endcap: + - "abs({relIso}) < 0.205" + - "{phoId} == 1" diff --git a/configs/V33nano/objects/taus.yaml b/configs/V33nano/objects/taus.yaml new file mode 100644 index 00000000..11e49a74 --- /dev/null +++ b/configs/V33nano/objects/taus.yaml @@ -0,0 +1,61 @@ +L1nnPuppiTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + # - "{passLooseNN}==1" + # Current IB (22 Feb recipe) does not have updated WP, so cut on NN score rather than checking passLooseNN + - "{chargedIso} > 0.22" + +L1hpsTau: + label: "HPS Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + +L1caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" + +L1nnCaloTau: + label: "NN Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{hwQual}==3" diff --git a/configs/V33nano/rate_plots/.backups/.test.yml~ b/configs/V33nano/rate_plots/.backups/.test.yml~ new file mode 100644 index 00000000..9e724bbd --- /dev/null +++ b/configs/V33nano/rate_plots/.backups/.test.yml~ @@ -0,0 +1,12 @@ +JetSC8Rates_byRegion: + sample: MinBias + version: V33nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:barrel + - L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V33nano/rate_plots/eg.yaml b/configs/V33nano/rate_plots/eg.yaml new file mode 100644 index 00000000..12f54577 --- /dev/null +++ b/configs/V33nano/rate_plots/eg.yaml @@ -0,0 +1,12 @@ +EGRates: + sample: MinBias + version: V33nano + test_objects: + - L1EG:default + - L1tkElectron:NoIso + - L1tkElectron:Iso + - L1tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 diff --git a/configs/V33nano/rate_plots/ht.yaml b/configs/V33nano/rate_plots/ht.yaml new file mode 100644 index 00000000..ac15d4c3 --- /dev/null +++ b/configs/V33nano/rate_plots/ht.yaml @@ -0,0 +1,23 @@ +HTRates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + binning: + min: 50 + max: 975 + step: 25 + +MHTRates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiHistoJetSums:MHT + - L1puppiJetSC4sums:MHT + - L1TrackHT:MHT + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V33nano/rate_plots/jets.yaml b/configs/V33nano/rate_plots/jets.yaml new file mode 100644 index 00000000..1bd24ab1 --- /dev/null +++ b/configs/V33nano/rate_plots/jets.yaml @@ -0,0 +1,70 @@ +JetDefaultRates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiJetHisto:default + - L1puppiJetSC4:default + - L1caloJet:default + - L1TrackJet:default + binning: + min: 40 + max: 420 + step: 20 + +JetsByRegion: + sample: MinBias + version: V33nano + test_objects: + - L1puppiJetSC4:default:barrel + - L1puppiJetSC4:default:endcap + - L1puppiJetSC4:default:forward + - L1caloJet:default:barrel + - L1caloJet:default:endcap + - L1caloJet:default:forward + - L1TrackJet:default:barrel + - L1TrackJet:default:endcap + binning: + min: 40 + max: 420 + step: 20 + +JetExtendedRates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiJetSC4:default:barrel + - L1puppiJetSC4:default:endcap + - L1puppiJetSC4:default:forward + - L1puppiExtJetSC4:default:barrel + - L1puppiExtJetSC4:default:endcap + - L1puppiExtJetSC4:default:forward + + binning: + min: 40 + max: 420 + step: 20 +JetSC8Rates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiJetSC4:default + - L1puppiJetSC8:default + binning: + min: 40 + max: 420 + step: 20 + + +JetSC8Rates_byRegion: + sample: MinBias + version: V33nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:barrel + - L1puppiJetSC8:default:endcap + - L1puppiJetSC8:default:forward + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V33nano/rate_plots/met.yaml b/configs/V33nano/rate_plots/met.yaml new file mode 100644 index 00000000..c0a58061 --- /dev/null +++ b/configs/V33nano/rate_plots/met.yaml @@ -0,0 +1,11 @@ +METRates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiMET:default + - L1puppiMLMET:default + - L1TrackMET:default + binning: + min: 50 + max: 500 + step: 25 diff --git a/configs/V33nano/rate_plots/muons.yaml b/configs/V33nano/rate_plots/muons.yaml new file mode 100644 index 00000000..7573ef0f --- /dev/null +++ b/configs/V33nano/rate_plots/muons.yaml @@ -0,0 +1,34 @@ +gmtMuonByRegion: + sample: MinBias + version: V33nano + test_objects: + - L1gmtMuon:default:barrel + - L1gmtMuon:default:overlap + - L1gmtMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByRegion: + sample: MinBias + version: V33nano + test_objects: + - L1gmtTkMuon:default:barrel + - L1gmtTkMuon:default:overlap + - L1gmtTkMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +MuonRates: + sample: MinBias + version: V33nano + test_objects: + - L1gmtMuon:default + - L1gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 diff --git a/configs/V33nano/rate_plots/taus.yaml b/configs/V33nano/rate_plots/taus.yaml new file mode 100644 index 00000000..1bb5775d --- /dev/null +++ b/configs/V33nano/rate_plots/taus.yaml @@ -0,0 +1,25 @@ +TauRates: + sample: MinBias + version: V33nano + test_objects: + - L1nnPuppiTau:default + - L1hpsTau:default + - L1caloTau:default + - L1nnCaloTau:default + binning: + min: 10 + max: 155 + step: 5 + +TauRatesByRegion: + sample: MinBias + version: V33nano + test_objects: + - L1caloTau:default:barrel + - L1caloTau:default:endcap + - L1nnPuppiTau:default:barrel + - L1nnPuppiTau:default:endcap + binning: + min: 10 + max: 155 + step: 5 diff --git a/configs/V33nano/rate_plots/test.yml b/configs/V33nano/rate_plots/test.yml new file mode 100644 index 00000000..f66faf7e --- /dev/null +++ b/configs/V33nano/rate_plots/test.yml @@ -0,0 +1,13 @@ +JetSC8Rates_byRegion2: + sample: MinBias + version: V33nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:inclusive + - L1puppiJetSC8:default:barrel + #- L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V34nano/.backups/.caching.yaml~ b/configs/V34nano/.backups/.caching.yaml~ new file mode 100644 index 00000000..2e74d89d --- /dev/null +++ b/configs/V34nano/.backups/.caching.yaml~ @@ -0,0 +1,11 @@ +V34nano: + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v34/DYToLL_M-50_TuneCP5_14TeV-pythia8/DY_M50_131_200PU_IB1400pre3V5_rerunL1wTT/240312_125645/*1/*_3-12*.root + trees_branches: + Events: + GenPart: "all" + L1gmtTkMuon: "all" + L1gmtMuon: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" diff --git a/configs/V34nano/README.md b/configs/V34nano/README.md new file mode 100644 index 00000000..d82151a1 --- /dev/null +++ b/configs/V34nano/README.md @@ -0,0 +1,4 @@ +# V33 version + +Based on https://github.com/cms-l1-dpg/Phase2-L1Nano/tree/v33_1400pre3v1 + diff --git a/configs/V34nano/caching.yaml b/configs/V34nano/caching.yaml new file mode 100644 index 00000000..b657ea6a --- /dev/null +++ b/configs/V34nano/caching.yaml @@ -0,0 +1,47 @@ +V34nano: + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v34/DYToLL_M-50_TuneCP5_14TeV-pythia8/DY_M50_131_200PU_IB1400pre3V5_rerunL1wTT/240312_125645/*1/*.root + trees_branches: + Events: + GenPart: "all" + L1gmtTkMuon: "all" + L1gmtMuon: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + MinBias: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v34/fromEmyr/minBias.root + trees_branches: + Events: + ## PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + L1gmtDispMuon: "all" # aka gmtMuon + ## TAUS + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + L1ExtTrackJet: "all" \ No newline at end of file diff --git a/configs/V34nano/object_performance/electron_iso.yaml b/configs/V34nano/object_performance/electron_iso.yaml new file mode 100644 index 00000000..330a19fa --- /dev/null +++ b/configs/V34nano/object_performance/electron_iso.yaml @@ -0,0 +1,50 @@ +ElectronsIsolation_Barrel: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkElectron:NoIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +ElectronsIsolation_Endcap: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.479" + object: + - "abs({eta}) < 2.4" + test_objects: + L1tkElectron:NoIsoForIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V34nano/object_performance/electron_matching.yaml b/configs/V34nano/object_performance/electron_matching.yaml new file mode 100644 index 00000000..81e3e0b7 --- /dev/null +++ b/configs/V34nano/object_performance/electron_matching.yaml @@ -0,0 +1,103 @@ +ElectronsMatchingBarrel: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V34nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 100 +# step: 3 + +ElectronsMatchingEndcap: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V34nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 100 +# step: 3 diff --git a/configs/V34nano/object_performance/electron_matching_eta.yaml b/configs/V34nano/object_performance/electron_matching_eta.yaml new file mode 100644 index 00000000..38c6eeef --- /dev/null +++ b/configs/V34nano/object_performance/electron_matching_eta.yaml @@ -0,0 +1,52 @@ +ElectronsMatching_Eta_Pt10to25: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +ElectronsMatching_Eta_Pt25toInf: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} > 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V34nano/object_performance/electron_trigger.yaml b/configs/V34nano/object_performance/electron_trigger.yaml new file mode 100644 index 00000000..86ec1e72 --- /dev/null +++ b/configs/V34nano/object_performance/electron_trigger.yaml @@ -0,0 +1,119 @@ +ElectronsTriggerBarrel: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:barrel: "pt" + L1tkElectron:NoIso:barrel: "pt" + L1tkElectron:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +ElectronsTriggerEndcap: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:endcap: "pt" + L1tkElectron:NoIso:endcap: "pt" + L1tkElectron:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +# ElectronsTriggerBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V34nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: + # L1EG:default:barrel: "pt" +# L1tkElectron:NoIso:barrel: "pt" +# L1tkElectron:Iso:barrel: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 + +# ElectronsTriggerEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V34nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: +# # L1EG:default:endcap: "pt" +# L1tkElectron:NoIso:endcap: "pt" +# L1tkElectron:Iso:endcap: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 diff --git a/configs/V34nano/object_performance/jets_matching.yaml b/configs/V34nano/object_performance/jets_matching.yaml new file mode 100644 index 00000000..0cf3b11e --- /dev/null +++ b/configs/V34nano/object_performance/jets_matching.yaml @@ -0,0 +1,118 @@ +JetMatchingBarrel: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcap: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingForward: + version: V34nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (forward)" + binning: + min: 0 + max: 500 + step: 10 + + +JetMatchingBarrelSC8: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcapSC8: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 500 + step: 10 \ No newline at end of file diff --git a/configs/V34nano/object_performance/jets_matching_eta.yaml b/configs/V34nano/object_performance/jets_matching_eta.yaml new file mode 100644 index 00000000..50c4580d --- /dev/null +++ b/configs/V34nano/object_performance/jets_matching_eta.yaml @@ -0,0 +1,94 @@ +JetMatching_Eta_Pt40To100: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + L1caloJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5.5 + max: 5.5 + step: 0.25 + +JetMatching_Eta_SC8_Pt100ToInf: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 \ No newline at end of file diff --git a/configs/V34nano/object_performance/jets_matching_wBTag.yaml b/configs/V34nano/object_performance/jets_matching_wBTag.yaml new file mode 100644 index 00000000..3dc0940a --- /dev/null +++ b/configs/V34nano/object_performance/jets_matching_wBTag.yaml @@ -0,0 +1,136 @@ +JetMatching_Eta_Pt40To100_ExtendedVsRegular: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genBJets: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genNotBJets: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Pt_Pt30ToInf_genBJets: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 + +JetMatching_Pt_Pt30ToInf_genNotBJets: + sample: TT + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 diff --git a/configs/V34nano/object_performance/jets_sc8_trigger.yaml b/configs/V34nano/object_performance/jets_sc8_trigger.yaml new file mode 100644 index 00000000..1efecf4a --- /dev/null +++ b/configs/V34nano/object_performance/jets_sc8_trigger.yaml @@ -0,0 +1,77 @@ +JetTurnonBarrelSC8: + version: V34nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcapSC8: + version: V34nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForwardSC8: + version: V34nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default:forward: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V34nano/object_performance/jets_trigger.yaml b/configs/V34nano/object_performance/jets_trigger.yaml new file mode 100644 index 00000000..16ceacb3 --- /dev/null +++ b/configs/V34nano/object_performance/jets_trigger.yaml @@ -0,0 +1,85 @@ +JetTurnonBarrel: + version: V34nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:barrel: "pt" + L1puppiJetSC4:default:barrel: "pt" + L1caloJet:default:barrel: "pt" + L1TrackJet:default:barrel: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcap: + version: V34nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:endcap: "pt" + L1puppiJetSC4:default:endcap: "pt" + L1caloJet:default:endcap: "pt" + L1TrackJet:default:endcap: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForward: + version: V34nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default:forward: "pt" + L1puppiJetSC4:default:forward: "pt" + L1caloJet:default:forward: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V34nano/object_performance/met_ht_mht.yaml b/configs/V34nano/object_performance/met_ht_mht.yaml new file mode 100644 index 00000000..a7e7a0da --- /dev/null +++ b/configs/V34nano/object_performance/met_ht_mht.yaml @@ -0,0 +1,75 @@ +HT_90perc: + sample: TT + version: V34nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + L1puppiHistoJetSums:HT: "pt" + L1puppiJetSC4sums:HT: "pt" + L1TrackHT:HT: "ht" + thresholds: [350] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +MHT_50perc: + sample: TT + version: V34nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + L1puppiHistoJetSums:MHT: "pt" + L1puppiJetSC4sums:MHT: "pt" + L1TrackHT:MHT: "mht" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MET_90perc: + sample: TT + version: V34nano + reference_object: + object: "GenMET" + x_arg: "pt" + label: "Gen MET" + test_objects: + L1puppiMET:default: "pt" + L1puppiMLMET:default: "pt" + L1TrackMET:default: "pt" + thresholds: [150] + xlabel: "Gen. MET (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 500 + step: 20 diff --git a/configs/V34nano/object_performance/muon_matching.yaml b/configs/V34nano/object_performance/muon_matching.yaml new file mode 100644 index 00000000..c583ae8b --- /dev/null +++ b/configs/V34nano/object_performance/muon_matching.yaml @@ -0,0 +1,76 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + L1gmtTkMuon:LooseID:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + L1gmtTkMuon:LooseID:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + L1gmtTkMuon:LooseID:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V34nano/object_performance/muon_matching_eta.yaml b/configs/V34nano/object_performance/muon_matching_eta.yaml new file mode 100644 index 00000000..2a1534fb --- /dev/null +++ b/configs/V34nano/object_performance/muon_matching_eta.yaml @@ -0,0 +1,52 @@ +MuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + L1gmtTkMuon:LooseID: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + L1gmtTkMuon:LooseID: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V34nano/object_performance/muon_trigger.yaml b/configs/V34nano/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..808098c9 --- /dev/null +++ b/configs/V34nano/object_performance/muon_trigger.yaml @@ -0,0 +1,84 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V34nano/object_performance/photon_iso.yaml b/configs/V34nano/object_performance/photon_iso.yaml new file mode 100644 index 00000000..cd54e071 --- /dev/null +++ b/configs/V34nano/object_performance/photon_iso.yaml @@ -0,0 +1,51 @@ +PhotonIsolation_Barrel: + sample: Hgg + version: V34nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkPhoton:NoIso:barrel: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +PhotonIsolation_Endcap: + sample: Hgg + version: V34nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.479" + - "abs({eta}) < 2.4" + object: + - "abs({eta}) > 1.479" + test_objects: + L1tkPhoton:NoIso:endcap: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V34nano/object_performance/photons_matching.yaml b/configs/V34nano/object_performance/photons_matching.yaml new file mode 100644 index 00000000..84682139 --- /dev/null +++ b/configs/V34nano/object_performance/photons_matching.yaml @@ -0,0 +1,103 @@ +PhotonsMatching_Barrel: + sample: Hgg + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap: + sample: Hgg + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Barrel_wPrunedGenParts: + sample: Hgg + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap_wPrunedGenParts: + sample: Hgg + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V34nano/object_performance/photons_matching_eta.yaml b/configs/V34nano/object_performance/photons_matching_eta.yaml new file mode 100644 index 00000000..f02aa939 --- /dev/null +++ b/configs/V34nano/object_performance/photons_matching_eta.yaml @@ -0,0 +1,52 @@ +PhotonsMatching_Eta_Pt10to25: + sample: Hgg + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +PhotonsMatching_Eta_Pt25toInf: + sample: Hgg + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} >= 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V34nano/object_performance/photons_trigger.yaml b/configs/V34nano/object_performance/photons_trigger.yaml new file mode 100644 index 00000000..3321f821 --- /dev/null +++ b/configs/V34nano/object_performance/photons_trigger.yaml @@ -0,0 +1,59 @@ +PhotonsTrigger_Barrel: + sample: Hgg + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:barrel: "pt" + L1tkPhoton:NoIso:barrel: "pt" + L1tkPhoton:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Endcap: + sample: Hgg + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:endcap: "pt" + L1tkPhoton:NoIso:endcap: "pt" + L1tkPhoton:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V34nano/object_performance/tau_matching.yaml b/configs/V34nano/object_performance/tau_matching.yaml new file mode 100644 index 00000000..4fe82ec1 --- /dev/null +++ b/configs/V34nano/object_performance/tau_matching.yaml @@ -0,0 +1,53 @@ +TausMatchingBarrel: + sample: VBFHToTauTau + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 150 + step: 6 + +TausMatchingEndcap: + sample: VBFHToTauTau + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V34nano/object_performance/tau_matching_eta.yaml b/configs/V34nano/object_performance/tau_matching_eta.yaml new file mode 100644 index 00000000..be0cf1c0 --- /dev/null +++ b/configs/V34nano/object_performance/tau_matching_eta.yaml @@ -0,0 +1,50 @@ +TauMatching_Eta_Pt40To100: + sample: VBFHToTauTau + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -3.0 + max: 3.0 + step: 0.2 + +TauMatching_Eta_Pt100ToInf: + sample: VBFHToTauTau + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V34nano/object_performance/tau_trigger.yaml b/configs/V34nano/object_performance/tau_trigger.yaml new file mode 100644 index 00000000..bf68d9a6 --- /dev/null +++ b/configs/V34nano/object_performance/tau_trigger.yaml @@ -0,0 +1,59 @@ +TauTriggerBarrel_90perc: + sample: VBFHToTauTau + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:barrel: "pt" + L1hpsTau:default:barrel: "pt" + L1caloTau:default:barrel: "pt" + L1nnCaloTau:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_90perc: + sample: VBFHToTauTau + version: V34nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:endcap: "pt" + L1hpsTau:default:endcap: "pt" + L1caloTau:default:endcap: "pt" + L1nnCaloTau:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V34nano/objects/electrons.yaml b/configs/V34nano/objects/electrons.yaml new file mode 100644 index 00000000..cfacf196 --- /dev/null +++ b/configs/V34nano/objects/electrons.yaml @@ -0,0 +1,49 @@ +L1tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + endcap: + - "({eleId} == 1) | ({pt} < 25)" + barrel: + - "{eleId} == 1" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron, no ID" + cuts: + inclusive: + - "abs({eta}) < 2.4" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + endcap: + - "abs({relIso}) < 0.28" + +L1EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{eleId} == 1" + endcap: + - "{saId} == 1" diff --git a/configs/V34nano/objects/jets.yaml b/configs/V34nano/objects/jets.yaml new file mode 100644 index 00000000..087e1c87 --- /dev/null +++ b/configs/V34nano/objects/jets.yaml @@ -0,0 +1,87 @@ +L1caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiExtJetSC4: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + bjetnn: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{btagScore} > 0.71" + +L1puppiJetHisto: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC4: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC8: + match_dR: 0.35 + label: "Seeded Cone PuppiJet 8" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1TrackJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default diff --git a/configs/V34nano/objects/met_ht_mht.yaml b/configs/V34nano/objects/met_ht_mht.yaml new file mode 100644 index 00000000..bb7611bd --- /dev/null +++ b/configs/V34nano/objects/met_ht_mht.yaml @@ -0,0 +1,57 @@ +# phase1PuppiHT: +# label: "Histogrammed Puppi HT" +# ids: +# default: {} + +# phase1PuppiMHT: +# label: "Phase1 Puppi MHT" +# ids: +# default: {} + +L1puppiMET: + label: "Puppi MET" + ids: + default: {} + +L1puppiMLMET: + label: "Puppi MLMET" + ids: + default: {} + +L1puppiJetSC4sums: + ids: + HT: + label: "SeededCone HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "SeededCone MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1puppiHistoJetSums: + ids: + HT: + label: "Histogrammed Puppi HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "Histogrammed Puppi MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1TrackHT: + ids: + HT: + label: "Tracker HT" + MHT: + label: "Tracker MHT" + +L1TrackMET: + label: "Tracker MET" + ids: + default: {} \ No newline at end of file diff --git a/configs/V34nano/objects/muons.yaml b/configs/V34nano/objects/muons.yaml new file mode 100644 index 00000000..d5d75f9f --- /dev/null +++ b/configs/V34nano/objects/muons.yaml @@ -0,0 +1,39 @@ +GenPart: + label: "Gen Muon" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "(({statusFlags}>>7)&1) == 1" + + +L1gmtMuon: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: {} + LooseID: + label: "GMT TkMuon, Qual>0" + cuts: + inclusive: + - "({hwQual} > 0)" + \ No newline at end of file diff --git a/configs/V34nano/objects/photons.yaml b/configs/V34nano/objects/photons.yaml new file mode 100644 index 00000000..12d51f0c --- /dev/null +++ b/configs/V34nano/objects/photons.yaml @@ -0,0 +1,29 @@ +L1tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "L1tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "{eleId} == 1" + endcap: + - "{phoId} == 1" + Iso: + label: "L1tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "abs({relIso}) < 0.25" + - "{eleId} == 1" + endcap: + - "abs({relIso}) < 0.205" + - "{phoId} == 1" diff --git a/configs/V34nano/objects/taus.yaml b/configs/V34nano/objects/taus.yaml new file mode 100644 index 00000000..11e49a74 --- /dev/null +++ b/configs/V34nano/objects/taus.yaml @@ -0,0 +1,61 @@ +L1nnPuppiTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + # - "{passLooseNN}==1" + # Current IB (22 Feb recipe) does not have updated WP, so cut on NN score rather than checking passLooseNN + - "{chargedIso} > 0.22" + +L1hpsTau: + label: "HPS Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + +L1caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" + +L1nnCaloTau: + label: "NN Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{hwQual}==3" diff --git a/configs/V34nano/rate_plots/.backups/.test.yml~ b/configs/V34nano/rate_plots/.backups/.test.yml~ new file mode 100644 index 00000000..9e724bbd --- /dev/null +++ b/configs/V34nano/rate_plots/.backups/.test.yml~ @@ -0,0 +1,12 @@ +JetSC8Rates_byRegion: + sample: MinBias + version: V33nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:barrel + - L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V34nano/rate_plots/eg.yaml b/configs/V34nano/rate_plots/eg.yaml new file mode 100644 index 00000000..12f54577 --- /dev/null +++ b/configs/V34nano/rate_plots/eg.yaml @@ -0,0 +1,12 @@ +EGRates: + sample: MinBias + version: V33nano + test_objects: + - L1EG:default + - L1tkElectron:NoIso + - L1tkElectron:Iso + - L1tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 diff --git a/configs/V34nano/rate_plots/ht.yaml b/configs/V34nano/rate_plots/ht.yaml new file mode 100644 index 00000000..ac15d4c3 --- /dev/null +++ b/configs/V34nano/rate_plots/ht.yaml @@ -0,0 +1,23 @@ +HTRates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + binning: + min: 50 + max: 975 + step: 25 + +MHTRates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiHistoJetSums:MHT + - L1puppiJetSC4sums:MHT + - L1TrackHT:MHT + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V34nano/rate_plots/jets.yaml b/configs/V34nano/rate_plots/jets.yaml new file mode 100644 index 00000000..1d6880fc --- /dev/null +++ b/configs/V34nano/rate_plots/jets.yaml @@ -0,0 +1,52 @@ +JetDefaultRates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiJetHisto:default + - L1puppiJetSC4:default + - L1caloJet:default + - L1TrackJet:default + binning: + min: 40 + max: 420 + step: 20 + +JetsByRegion: + sample: MinBias + version: V33nano + test_objects: + - L1puppiJetSC4:default:barrel + - L1puppiJetSC4:default:endcap + - L1caloJet:default:barrel + - L1caloJet:default:endcap + - L1TrackJet:default:barrel + - L1TrackJet:default:endcap + binning: + min: 40 + max: 420 + step: 20 + +JetSC8Rates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiJetSC4:default + - L1puppiJetSC8:default + binning: + min: 40 + max: 420 + step: 20 + + +JetSC8Rates_byRegion: + sample: MinBias + version: V33nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:barrel + - L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 \ No newline at end of file diff --git a/configs/V34nano/rate_plots/met.yaml b/configs/V34nano/rate_plots/met.yaml new file mode 100644 index 00000000..c0a58061 --- /dev/null +++ b/configs/V34nano/rate_plots/met.yaml @@ -0,0 +1,11 @@ +METRates: + sample: MinBias + version: V33nano + test_objects: + - L1puppiMET:default + - L1puppiMLMET:default + - L1TrackMET:default + binning: + min: 50 + max: 500 + step: 25 diff --git a/configs/V34nano/rate_plots/muons.yaml b/configs/V34nano/rate_plots/muons.yaml new file mode 100644 index 00000000..7573ef0f --- /dev/null +++ b/configs/V34nano/rate_plots/muons.yaml @@ -0,0 +1,34 @@ +gmtMuonByRegion: + sample: MinBias + version: V33nano + test_objects: + - L1gmtMuon:default:barrel + - L1gmtMuon:default:overlap + - L1gmtMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByRegion: + sample: MinBias + version: V33nano + test_objects: + - L1gmtTkMuon:default:barrel + - L1gmtTkMuon:default:overlap + - L1gmtTkMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +MuonRates: + sample: MinBias + version: V33nano + test_objects: + - L1gmtMuon:default + - L1gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 diff --git a/configs/V34nano/rate_plots/taus.yaml b/configs/V34nano/rate_plots/taus.yaml new file mode 100644 index 00000000..1bb5775d --- /dev/null +++ b/configs/V34nano/rate_plots/taus.yaml @@ -0,0 +1,25 @@ +TauRates: + sample: MinBias + version: V33nano + test_objects: + - L1nnPuppiTau:default + - L1hpsTau:default + - L1caloTau:default + - L1nnCaloTau:default + binning: + min: 10 + max: 155 + step: 5 + +TauRatesByRegion: + sample: MinBias + version: V33nano + test_objects: + - L1caloTau:default:barrel + - L1caloTau:default:endcap + - L1nnPuppiTau:default:barrel + - L1nnPuppiTau:default:endcap + binning: + min: 10 + max: 155 + step: 5 diff --git a/configs/V34nano/rate_plots/test.yml b/configs/V34nano/rate_plots/test.yml new file mode 100644 index 00000000..f66faf7e --- /dev/null +++ b/configs/V34nano/rate_plots/test.yml @@ -0,0 +1,13 @@ +JetSC8Rates_byRegion2: + sample: MinBias + version: V33nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:inclusive + - L1puppiJetSC8:default:barrel + #- L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V35nano_ModTT/caching.yaml b/configs/V35nano_ModTT/caching.yaml new file mode 100644 index 00000000..3fbc3661 --- /dev/null +++ b/configs/V35nano_ModTT/caching.yaml @@ -0,0 +1,103 @@ +V35nano_ModTT: + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/emyr/2024Reviews/TTFix_25Mar/dy_TTfix.root + trees_branches: + Events: + GenPart: "all" + L1gmtTkMuon: "all" + L1gmtMuon: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + H2LLP4MuCTau900: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/emyr/2024Reviews/TTFix_25Mar/h2llp4mu_ctau900_TTfix.root + trees_branches: + Events: + GenPart: "all" + L1gmtTkMuon: "all" + L1gmtMuon: "all" + L1gmtDispMuon: "all" + H2LLP4MuCTau10000: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/emyr/2024Reviews/TTFix_25Mar/h2llp4mu_ctau10000_TTfix.root + trees_branches: + Events: + GenPart: "all" + L1gmtTkMuon: "all" + L1gmtMuon: "all" + L1gmtDispMuon: "all" + Hgg: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/emyr/2024Reviews/TTFix_25Mar/hgg_TTfix.root + trees_branches: + Events: + GenPart: [pt, eta, phi, pdgId, statusFlags] + L1tkPhoton: "all" + # L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + VBFHToTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/emyr/2024Reviews/TTFix_25Mar/vbfHTauTau_TTfix.root + trees_branches: + Events: + GenVisTau: "all" + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + TT: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/emyr/2024Reviews/TTFix_25Mar/ttbar_TTfix.root + trees_branches: + Events: + # gen + GenJet: [pt, eta, phi, partonFlavour] + GenJetAK8: [pt, eta, phi] + GenMET: "all" + # sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + MinBias: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/emyr/2024Reviews/TTFix_25Mar/minbias_TTfix.root + trees_branches: + Events: + ## PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + L1gmtDispMuon: "all" # aka gmtMuon + ## TAUS + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + L1ExtTrackJet: "all" \ No newline at end of file diff --git a/configs/V35nano_ModTT/object_performance/electron_iso.yaml b/configs/V35nano_ModTT/object_performance/electron_iso.yaml new file mode 100644 index 00000000..ba484881 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/electron_iso.yaml @@ -0,0 +1,50 @@ +ElectronsIsolation_Barrel: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkElectron:NoIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +ElectronsIsolation_Endcap: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.479" + object: + - "abs({eta}) < 2.4" + test_objects: + L1tkElectron:NoIsoForIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V35nano_ModTT/object_performance/electron_matching.yaml b/configs/V35nano_ModTT/object_performance/electron_matching.yaml new file mode 100644 index 00000000..be94a5a1 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/electron_matching.yaml @@ -0,0 +1,103 @@ +ElectronsMatchingBarrel: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V35nano_ModTT +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 100 +# step: 3 + +ElectronsMatchingEndcap: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V35nano_ModTT +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 100 +# step: 3 diff --git a/configs/V35nano_ModTT/object_performance/electron_matching_eta.yaml b/configs/V35nano_ModTT/object_performance/electron_matching_eta.yaml new file mode 100644 index 00000000..36bc94d6 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/electron_matching_eta.yaml @@ -0,0 +1,52 @@ +ElectronsMatching_Eta_Pt10to25: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +ElectronsMatching_Eta_Pt25toInf: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} > 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V35nano_ModTT/object_performance/electron_trigger.yaml b/configs/V35nano_ModTT/object_performance/electron_trigger.yaml new file mode 100644 index 00000000..82f860dc --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/electron_trigger.yaml @@ -0,0 +1,119 @@ +ElectronsTriggerBarrel: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:barrel: "pt" + L1tkElectron:NoIso:barrel: "pt" + L1tkElectron:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +ElectronsTriggerEndcap: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:endcap: "pt" + L1tkElectron:NoIso:endcap: "pt" + L1tkElectron:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +# ElectronsTriggerBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V35nano_ModTT +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: + # L1EG:default:barrel: "pt" +# L1tkElectron:NoIso:barrel: "pt" +# L1tkElectron:Iso:barrel: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 + +# ElectronsTriggerEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V35nano_ModTT +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: +# # L1EG:default:endcap: "pt" +# L1tkElectron:NoIso:endcap: "pt" +# L1tkElectron:Iso:endcap: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 diff --git a/configs/V35nano_ModTT/object_performance/jets_matching.yaml b/configs/V35nano_ModTT/object_performance/jets_matching.yaml new file mode 100644 index 00000000..55f45822 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/jets_matching.yaml @@ -0,0 +1,118 @@ +JetMatchingBarrel: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcap: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingForward: + version: V35nano_ModTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (forward)" + binning: + min: 0 + max: 500 + step: 10 + + +JetMatchingBarrelSC8: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcapSC8: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 500 + step: 10 \ No newline at end of file diff --git a/configs/V35nano_ModTT/object_performance/jets_matching_eta.yaml b/configs/V35nano_ModTT/object_performance/jets_matching_eta.yaml new file mode 100644 index 00000000..5c2d2a24 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/jets_matching_eta.yaml @@ -0,0 +1,94 @@ +JetMatching_Eta_Pt40To100: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + L1caloJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5.5 + max: 5.5 + step: 0.25 + +JetMatching_Eta_SC8_Pt100ToInf: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 \ No newline at end of file diff --git a/configs/V35nano_ModTT/object_performance/jets_matching_wBTag.yaml b/configs/V35nano_ModTT/object_performance/jets_matching_wBTag.yaml new file mode 100644 index 00000000..2fdd5c0d --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/jets_matching_wBTag.yaml @@ -0,0 +1,136 @@ +JetMatching_Eta_Pt40To100_ExtendedVsRegular: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genBJets: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genNotBJets: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Pt_Pt30ToInf_genBJets: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 + +JetMatching_Pt_Pt30ToInf_genNotBJets: + sample: TT + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 diff --git a/configs/V35nano_ModTT/object_performance/jets_sc8_trigger.yaml b/configs/V35nano_ModTT/object_performance/jets_sc8_trigger.yaml new file mode 100644 index 00000000..0a748ed2 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/jets_sc8_trigger.yaml @@ -0,0 +1,77 @@ +JetTurnonBarrelSC8: + version: V35nano_ModTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcapSC8: + version: V35nano_ModTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForwardSC8: + version: V35nano_ModTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default:forward: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V35nano_ModTT/object_performance/jets_trigger.yaml b/configs/V35nano_ModTT/object_performance/jets_trigger.yaml new file mode 100644 index 00000000..f4e8fc8e --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/jets_trigger.yaml @@ -0,0 +1,85 @@ +JetTurnonBarrel: + version: V35nano_ModTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:barrel: "pt" + L1puppiJetSC4:default:barrel: "pt" + L1caloJet:default:barrel: "pt" + L1TrackJet:default:barrel: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcap: + version: V35nano_ModTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:endcap: "pt" + L1puppiJetSC4:default:endcap: "pt" + L1caloJet:default:endcap: "pt" + L1TrackJet:default:endcap: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForward: + version: V35nano_ModTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default:forward: "pt" + L1puppiJetSC4:default:forward: "pt" + L1caloJet:default:forward: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V35nano_ModTT/object_performance/met_ht_mht.yaml b/configs/V35nano_ModTT/object_performance/met_ht_mht.yaml new file mode 100644 index 00000000..fb440689 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/met_ht_mht.yaml @@ -0,0 +1,75 @@ +HT_90perc: + sample: TT + version: V35nano_ModTT + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + L1puppiHistoJetSums:HT: "pt" + L1puppiJetSC4sums:HT: "pt" + L1TrackHT:HT: "ht" + thresholds: [350] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +MHT_50perc: + sample: TT + version: V35nano_ModTT + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + L1puppiHistoJetSums:MHT: "pt" + L1puppiJetSC4sums:MHT: "pt" + L1TrackHT:MHT: "mht" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MET_90perc: + sample: TT + version: V35nano_ModTT + reference_object: + object: "GenMET" + x_arg: "pt" + label: "Gen MET" + test_objects: + L1puppiMET:default: "pt" + L1puppiMLMET:default: "pt" + L1TrackMET:default: "pt" + thresholds: [150] + xlabel: "Gen. MET (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 500 + step: 20 diff --git a/configs/V35nano_ModTT/object_performance/muon_matching.yaml b/configs/V35nano_ModTT/object_performance/muon_matching.yaml new file mode 100644 index 00000000..673b9ee4 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/muon_matching.yaml @@ -0,0 +1,73 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V35nano_ModTT/object_performance/muon_matching_disp.yaml b/configs/V35nano_ModTT/object_performance/muon_matching_disp.yaml new file mode 100644 index 00000000..4d3a7834 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/muon_matching_disp.yaml @@ -0,0 +1,50 @@ +MuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V35nano_ModTT/object_performance/muon_matching_eta.yaml b/configs/V35nano_ModTT/object_performance/muon_matching_eta.yaml new file mode 100644 index 00000000..4d3a7834 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/muon_matching_eta.yaml @@ -0,0 +1,50 @@ +MuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V35nano_ModTT/object_performance/muon_trigger.yaml b/configs/V35nano_ModTT/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..e7a7fc8c --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/muon_trigger.yaml @@ -0,0 +1,84 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V35nano_ModTT/object_performance/photon_iso.yaml b/configs/V35nano_ModTT/object_performance/photon_iso.yaml new file mode 100644 index 00000000..f4e6d084 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/photon_iso.yaml @@ -0,0 +1,51 @@ +PhotonIsolation_Barrel: + sample: Hgg + version: V35nano_ModTT + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkPhoton:NoIso:barrel: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +PhotonIsolation_Endcap: + sample: Hgg + version: V35nano_ModTT + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.479" + - "abs({eta}) < 2.4" + object: + - "abs({eta}) > 1.479" + test_objects: + L1tkPhoton:NoIso:endcap: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V35nano_ModTT/object_performance/photons_matching.yaml b/configs/V35nano_ModTT/object_performance/photons_matching.yaml new file mode 100644 index 00000000..5fccfb99 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/photons_matching.yaml @@ -0,0 +1,103 @@ +PhotonsMatching_Barrel: + sample: Hgg + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap: + sample: Hgg + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Barrel_wPrunedGenParts: + sample: Hgg + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap_wPrunedGenParts: + sample: Hgg + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V35nano_ModTT/object_performance/photons_matching_eta.yaml b/configs/V35nano_ModTT/object_performance/photons_matching_eta.yaml new file mode 100644 index 00000000..238fc9f0 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/photons_matching_eta.yaml @@ -0,0 +1,52 @@ +PhotonsMatching_Eta_Pt10to25: + sample: Hgg + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +PhotonsMatching_Eta_Pt25toInf: + sample: Hgg + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} >= 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V35nano_ModTT/object_performance/photons_trigger.yaml b/configs/V35nano_ModTT/object_performance/photons_trigger.yaml new file mode 100644 index 00000000..d7fad1b7 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/photons_trigger.yaml @@ -0,0 +1,59 @@ +PhotonsTrigger_Barrel: + sample: Hgg + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:barrel: "pt" + L1tkPhoton:NoIso:barrel: "pt" + L1tkPhoton:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Endcap: + sample: Hgg + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:endcap: "pt" + L1tkPhoton:NoIso:endcap: "pt" + L1tkPhoton:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V35nano_ModTT/object_performance/tau_matching.yaml b/configs/V35nano_ModTT/object_performance/tau_matching.yaml new file mode 100644 index 00000000..5a03ea7e --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/tau_matching.yaml @@ -0,0 +1,53 @@ +TausMatchingBarrel: + sample: VBFHToTauTau + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 150 + step: 6 + +TausMatchingEndcap: + sample: VBFHToTauTau + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V35nano_ModTT/object_performance/tau_matching_eta.yaml b/configs/V35nano_ModTT/object_performance/tau_matching_eta.yaml new file mode 100644 index 00000000..bd870078 --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/tau_matching_eta.yaml @@ -0,0 +1,50 @@ +TauMatching_Eta_Pt40To100: + sample: VBFHToTauTau + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -3.0 + max: 3.0 + step: 0.2 + +TauMatching_Eta_Pt100ToInf: + sample: VBFHToTauTau + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V35nano_ModTT/object_performance/tau_trigger.yaml b/configs/V35nano_ModTT/object_performance/tau_trigger.yaml new file mode 100644 index 00000000..7983e48c --- /dev/null +++ b/configs/V35nano_ModTT/object_performance/tau_trigger.yaml @@ -0,0 +1,59 @@ +TauTriggerBarrel_90perc: + sample: VBFHToTauTau + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:barrel: "pt" + L1hpsTau:default:barrel: "pt" + L1caloTau:default:barrel: "pt" + L1nnCaloTau:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_90perc: + sample: VBFHToTauTau + version: V35nano_ModTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:endcap: "pt" + L1hpsTau:default:endcap: "pt" + L1caloTau:default:endcap: "pt" + L1nnCaloTau:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V35nano_ModTT/objects/electrons.yaml b/configs/V35nano_ModTT/objects/electrons.yaml new file mode 100644 index 00000000..cfacf196 --- /dev/null +++ b/configs/V35nano_ModTT/objects/electrons.yaml @@ -0,0 +1,49 @@ +L1tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + endcap: + - "({eleId} == 1) | ({pt} < 25)" + barrel: + - "{eleId} == 1" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron, no ID" + cuts: + inclusive: + - "abs({eta}) < 2.4" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + endcap: + - "abs({relIso}) < 0.28" + +L1EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{eleId} == 1" + endcap: + - "{saId} == 1" diff --git a/configs/V35nano_ModTT/objects/jets.yaml b/configs/V35nano_ModTT/objects/jets.yaml new file mode 100644 index 00000000..d7bb0010 --- /dev/null +++ b/configs/V35nano_ModTT/objects/jets.yaml @@ -0,0 +1,92 @@ +L1caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiExtJetSC4: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + bjetnn: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{btagScore} > 0.71" + +L1puppiJetHisto: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC4: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC8: + match_dR: 0.35 + label: "Seeded Cone PuppiJet 8" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1TrackJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + + diff --git a/configs/V35nano_ModTT/objects/met_ht_mht.yaml b/configs/V35nano_ModTT/objects/met_ht_mht.yaml new file mode 100644 index 00000000..bb7611bd --- /dev/null +++ b/configs/V35nano_ModTT/objects/met_ht_mht.yaml @@ -0,0 +1,57 @@ +# phase1PuppiHT: +# label: "Histogrammed Puppi HT" +# ids: +# default: {} + +# phase1PuppiMHT: +# label: "Phase1 Puppi MHT" +# ids: +# default: {} + +L1puppiMET: + label: "Puppi MET" + ids: + default: {} + +L1puppiMLMET: + label: "Puppi MLMET" + ids: + default: {} + +L1puppiJetSC4sums: + ids: + HT: + label: "SeededCone HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "SeededCone MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1puppiHistoJetSums: + ids: + HT: + label: "Histogrammed Puppi HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "Histogrammed Puppi MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1TrackHT: + ids: + HT: + label: "Tracker HT" + MHT: + label: "Tracker MHT" + +L1TrackMET: + label: "Tracker MET" + ids: + default: {} \ No newline at end of file diff --git a/configs/V35nano_ModTT/objects/muons.yaml b/configs/V35nano_ModTT/objects/muons.yaml new file mode 100644 index 00000000..08bd371a --- /dev/null +++ b/configs/V35nano_ModTT/objects/muons.yaml @@ -0,0 +1,35 @@ +GenPart: + label: "Gen Muon" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "(({statusFlags}>>7)&1) == 1" + + +L1gmtMuon: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + inclusive: + - "({hwQual} > 0) | ({pt} > 8)" # quality criterion only to be appied for p_T < 8 GeV diff --git a/configs/V35nano_ModTT/objects/photons.yaml b/configs/V35nano_ModTT/objects/photons.yaml new file mode 100644 index 00000000..12d51f0c --- /dev/null +++ b/configs/V35nano_ModTT/objects/photons.yaml @@ -0,0 +1,29 @@ +L1tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "L1tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "{eleId} == 1" + endcap: + - "{phoId} == 1" + Iso: + label: "L1tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "abs({relIso}) < 0.25" + - "{eleId} == 1" + endcap: + - "abs({relIso}) < 0.205" + - "{phoId} == 1" diff --git a/configs/V35nano_ModTT/objects/taus.yaml b/configs/V35nano_ModTT/objects/taus.yaml new file mode 100644 index 00000000..11e49a74 --- /dev/null +++ b/configs/V35nano_ModTT/objects/taus.yaml @@ -0,0 +1,61 @@ +L1nnPuppiTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + # - "{passLooseNN}==1" + # Current IB (22 Feb recipe) does not have updated WP, so cut on NN score rather than checking passLooseNN + - "{chargedIso} > 0.22" + +L1hpsTau: + label: "HPS Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + +L1caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" + +L1nnCaloTau: + label: "NN Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{hwQual}==3" diff --git a/configs/V35nano_ModTT/rate_plots/.backups/.test.yml~ b/configs/V35nano_ModTT/rate_plots/.backups/.test.yml~ new file mode 100644 index 00000000..9e724bbd --- /dev/null +++ b/configs/V35nano_ModTT/rate_plots/.backups/.test.yml~ @@ -0,0 +1,12 @@ +JetSC8Rates_byRegion: + sample: MinBias + version: V33nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:barrel + - L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V35nano_ModTT/rate_plots/eg.yaml b/configs/V35nano_ModTT/rate_plots/eg.yaml new file mode 100644 index 00000000..b5cfdf60 --- /dev/null +++ b/configs/V35nano_ModTT/rate_plots/eg.yaml @@ -0,0 +1,12 @@ +EGRates: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1EG:default + - L1tkElectron:NoIso + - L1tkElectron:Iso + - L1tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 diff --git a/configs/V35nano_ModTT/rate_plots/ht.yaml b/configs/V35nano_ModTT/rate_plots/ht.yaml new file mode 100644 index 00000000..5f344e34 --- /dev/null +++ b/configs/V35nano_ModTT/rate_plots/ht.yaml @@ -0,0 +1,23 @@ +HTRates: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + binning: + min: 50 + max: 975 + step: 25 + +MHTRates: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1puppiHistoJetSums:MHT + - L1puppiJetSC4sums:MHT + - L1TrackHT:MHT + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V35nano_ModTT/rate_plots/jets.yaml b/configs/V35nano_ModTT/rate_plots/jets.yaml new file mode 100644 index 00000000..f22e9a38 --- /dev/null +++ b/configs/V35nano_ModTT/rate_plots/jets.yaml @@ -0,0 +1,70 @@ +# JetDefaultRates: +# sample: MinBias +# version: V35nano_ModTT +# test_objects: +# - L1puppiJetHisto:default +# - L1puppiJetSC4:default +# - L1caloJet:default +# - L1TrackJet:default +# binning: +# min: 40 +# max: 420 +# step: 20 + +# JetsByRegion: +# sample: MinBias +# version: V35nano_ModTT +# test_objects: +# - L1puppiJetSC4:default:barrel +# - L1puppiJetSC4:default:endcap +# - L1puppiJetSC4:default:forward +# - L1caloJet:default:barrel +# - L1caloJet:default:endcap +# - L1caloJet:default:forward +# - L1TrackJet:default:barrel +# - L1TrackJet:default:endcap +# binning: +# min: 40 +# max: 420 +# step: 20 + +JetExtendedRates: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1puppiJetSC4:default:barrel + - L1puppiJetSC4:default:endcap + - L1puppiJetSC4:default:forward + - L1puppiExtJetSC4:default:barrel + - L1puppiExtJetSC4:default:endcap + - L1puppiExtJetSC4:default:forward + + binning: + min: 40 + max: 420 + step: 20 +JetSC8Rates: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1puppiJetSC4:default + - L1puppiJetSC8:default + binning: + min: 40 + max: 420 + step: 20 + + +JetSC8Rates_byRegion: + sample: MinBias + version: V35nano_ModTT + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:barrel + - L1puppiJetSC8:default:endcap + - L1puppiJetSC8:default:forward + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V35nano_ModTT/rate_plots/met.yaml b/configs/V35nano_ModTT/rate_plots/met.yaml new file mode 100644 index 00000000..28892d25 --- /dev/null +++ b/configs/V35nano_ModTT/rate_plots/met.yaml @@ -0,0 +1,11 @@ +METRates: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1puppiMET:default + - L1puppiMLMET:default + - L1TrackMET:default + binning: + min: 50 + max: 500 + step: 25 diff --git a/configs/V35nano_ModTT/rate_plots/muons.yaml b/configs/V35nano_ModTT/rate_plots/muons.yaml new file mode 100644 index 00000000..50f5a46a --- /dev/null +++ b/configs/V35nano_ModTT/rate_plots/muons.yaml @@ -0,0 +1,34 @@ +gmtMuonByRegion: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1gmtMuon:default:barrel + - L1gmtMuon:default:overlap + - L1gmtMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByRegion: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1gmtTkMuon:default:barrel + - L1gmtTkMuon:default:overlap + - L1gmtTkMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +MuonRates: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1gmtMuon:default + - L1gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 diff --git a/configs/V35nano_ModTT/rate_plots/taus.yaml b/configs/V35nano_ModTT/rate_plots/taus.yaml new file mode 100644 index 00000000..2ac8c64a --- /dev/null +++ b/configs/V35nano_ModTT/rate_plots/taus.yaml @@ -0,0 +1,25 @@ +TauRates: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1nnPuppiTau:default + - L1hpsTau:default + - L1caloTau:default + - L1nnCaloTau:default + binning: + min: 10 + max: 155 + step: 5 + +TauRatesByRegion: + sample: MinBias + version: V35nano_ModTT + test_objects: + - L1caloTau:default:barrel + - L1caloTau:default:endcap + - L1nnPuppiTau:default:barrel + - L1nnPuppiTau:default:endcap + binning: + min: 10 + max: 155 + step: 5 diff --git a/configs/V35nano_ModTT/rate_plots/test.yml b/configs/V35nano_ModTT/rate_plots/test.yml new file mode 100644 index 00000000..3f9ae150 --- /dev/null +++ b/configs/V35nano_ModTT/rate_plots/test.yml @@ -0,0 +1,13 @@ +JetSC8Rates_byRegion2: + sample: MinBias + version: V35nano_ModTT + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:inclusive + - L1puppiJetSC8:default:barrel + #- L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V36nano_noTT/README.md b/configs/V36nano_noTT/README.md new file mode 100644 index 00000000..d82151a1 --- /dev/null +++ b/configs/V36nano_noTT/README.md @@ -0,0 +1,4 @@ +# V33 version + +Based on https://github.com/cms-l1-dpg/Phase2-L1Nano/tree/v33_1400pre3v1 + diff --git a/configs/V36nano_noTT/caching.yaml b/configs/V36nano_noTT/caching.yaml new file mode 100644 index 00000000..d4a4fbab --- /dev/null +++ b/configs/V36nano_noTT/caching.yaml @@ -0,0 +1,111 @@ +V36nano_noTT: + Hgg: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/GluGluHToGG_M-125_TuneCP5_14TeV-powheg-pythia8/GluGluHToGG_131_200PU_myIBv6_noTkTrg/240403_211847/0000/L1Nano_*.root + trees_branches: + Events: + GenPart: [pt, eta, phi, pdgId, statusFlags] + L1tkPhoton: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/DYToLL_M-50_TuneCP5_14TeV-pythia8/DY_M50_131_200PU_myIBv6_noTkTrg_resub/240403_214206/0000/L1Nano_*.root + trees_branches: + Events: + GenPart: "all" + ## EG + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## Muons + L1gmtTkMuon: "all" + L1gmtMuon: "all" + L1gmtDispMuon: "all" + ## TF Muons + L1MuonKMTF: "all" + L1MuonOMTF: "all" + L1MuonEMTF: "all" + L1DispMuonKMTF: "all" + L1DispMuonOMTF: "all" + L1DispMuonEMTF: "all" + TT: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/TT_TuneCP5_14TeV-powheg-pythia8/TT_131_200PU_myIBv6_noTkTrg/240403_211802/0000/L1Nano_*.root + trees_branches: + Events: + # gen + GenJet: [pt, eta, phi, partonFlavour] + GenJetAK8: [pt, eta, phi] + GenMET: "all" + # sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + VBFHToTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/VBFHToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/VBFHToTauTau_131_200PU_myIBv6_noTkTrg_resub/240403_214225/0000/L1Nano_*.root + trees_branches: + Events: + GenVisTau: "all" + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + MinBias: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/MinBias_TuneCP5_14TeV-pythia8/MinBias_131_L1Fix_myIBv6_noTkTrg_reSub2/240404_202321/000*/* + trees_branches: + Events: + ## PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + ## TAUS + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + #### LLP + HtoLLPto4mu_Ctau900mm: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/HTo2LongLivedTo4mu_MH-125_MFF-12_CTau-900mm_TuneCP5_14TeV-pythia8/HtoLLPto4mu_Ctau90cm_131_L1Fix_myIBv6_noTkTrg_resub/240403_222836/0000/L1Nano_*.root + trees_branches: + Events: + GenPart: "all" + ## Muons + L1gmtTkMuon: "all" + L1gmtMuon: "all" + L1gmtDispMuon: "all" + ## TF Muons + L1MuonKMTF: "all" + L1MuonOMTF: "all" + L1MuonEMTF: "all" + L1DispMuonKMTF: "all" + L1DispMuonOMTF: "all" + L1DispMuonEMTF: "all" \ No newline at end of file diff --git a/configs/V36nano_noTT/object_performance/electron_iso.yaml b/configs/V36nano_noTT/object_performance/electron_iso.yaml new file mode 100644 index 00000000..d1374936 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/electron_iso.yaml @@ -0,0 +1,50 @@ +ElectronsIsolation_Barrel: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkElectron:NoIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +ElectronsIsolation_Endcap: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.479" + object: + - "abs({eta}) < 2.4" + test_objects: + L1tkElectron:NoIsoForIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V36nano_noTT/object_performance/electron_matching.yaml b/configs/V36nano_noTT/object_performance/electron_matching.yaml new file mode 100644 index 00000000..94c5644d --- /dev/null +++ b/configs/V36nano_noTT/object_performance/electron_matching.yaml @@ -0,0 +1,103 @@ +ElectronsMatchingBarrel: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V36nano_noTT +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 100 +# step: 3 + +ElectronsMatchingEndcap: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V36nano_noTT +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 100 +# step: 3 diff --git a/configs/V36nano_noTT/object_performance/electron_matching_eta.yaml b/configs/V36nano_noTT/object_performance/electron_matching_eta.yaml new file mode 100644 index 00000000..84016021 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/electron_matching_eta.yaml @@ -0,0 +1,52 @@ +ElectronsMatching_Eta_Pt10to25: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +ElectronsMatching_Eta_Pt25toInf: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} > 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V36nano_noTT/object_performance/electron_trigger.yaml b/configs/V36nano_noTT/object_performance/electron_trigger.yaml new file mode 100644 index 00000000..2f0e3768 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/electron_trigger.yaml @@ -0,0 +1,119 @@ +ElectronsTriggerBarrel: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:barrel: "pt" + L1tkElectron:NoIso:barrel: "pt" + L1tkElectron:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +ElectronsTriggerEndcap: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:endcap: "pt" + L1tkElectron:NoIso:endcap: "pt" + L1tkElectron:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +# ElectronsTriggerBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V36nano_noTT +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: + # L1EG:default:barrel: "pt" +# L1tkElectron:NoIso:barrel: "pt" +# L1tkElectron:Iso:barrel: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 + +# ElectronsTriggerEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V36nano_noTT +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: +# # L1EG:default:endcap: "pt" +# L1tkElectron:NoIso:endcap: "pt" +# L1tkElectron:Iso:endcap: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 diff --git a/configs/V36nano_noTT/object_performance/jets_matching.yaml b/configs/V36nano_noTT/object_performance/jets_matching.yaml new file mode 100644 index 00000000..a364dbb4 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/jets_matching.yaml @@ -0,0 +1,118 @@ +JetMatchingBarrel: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcap: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingForward: + version: V36nano_noTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 + + +JetMatchingBarrelSC8: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcapSC8: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 \ No newline at end of file diff --git a/configs/V36nano_noTT/object_performance/jets_matching_eta.yaml b/configs/V36nano_noTT/object_performance/jets_matching_eta.yaml new file mode 100644 index 00000000..acd8a4d0 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/jets_matching_eta.yaml @@ -0,0 +1,94 @@ +JetMatching_Eta_Pt40To100: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + L1caloJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5.5 + max: 5.5 + step: 0.25 + +JetMatching_Eta_SC8_Pt100ToInf: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 \ No newline at end of file diff --git a/configs/V36nano_noTT/object_performance/jets_matching_wBTag.yaml b/configs/V36nano_noTT/object_performance/jets_matching_wBTag.yaml new file mode 100644 index 00000000..0a89a902 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/jets_matching_wBTag.yaml @@ -0,0 +1,136 @@ +JetMatching_Eta_Pt40To100_ExtendedVsRegular: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genBJets: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genNotBJets: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Pt_Pt30ToInf_genBJets: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 + +JetMatching_Pt_Pt30ToInf_genNotBJets: + sample: TT + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 diff --git a/configs/V36nano_noTT/object_performance/jets_sc8_trigger.yaml b/configs/V36nano_noTT/object_performance/jets_sc8_trigger.yaml new file mode 100644 index 00000000..e7103ff2 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/jets_sc8_trigger.yaml @@ -0,0 +1,77 @@ +JetTurnonBarrelSC8: + version: V36nano_noTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcapSC8: + version: V36nano_noTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForwardSC8: + version: V36nano_noTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default:forward: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V36nano_noTT/object_performance/jets_trigger.yaml b/configs/V36nano_noTT/object_performance/jets_trigger.yaml new file mode 100644 index 00000000..6e3ca8d0 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/jets_trigger.yaml @@ -0,0 +1,85 @@ +JetTurnonBarrel: + version: V36nano_noTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:barrel: "pt" + L1puppiJetSC4:default:barrel: "pt" + L1caloJet:default:barrel: "pt" + L1TrackJet:default:barrel: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcap: + version: V36nano_noTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:endcap: "pt" + L1puppiJetSC4:default:endcap: "pt" + L1caloJet:default:endcap: "pt" + L1TrackJet:default:endcap: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForward: + version: V36nano_noTT + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default:forward: "pt" + L1puppiJetSC4:default:forward: "pt" + L1caloJet:default:forward: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V36nano_noTT/object_performance/met_ht_mht.yaml b/configs/V36nano_noTT/object_performance/met_ht_mht.yaml new file mode 100644 index 00000000..64ac51dd --- /dev/null +++ b/configs/V36nano_noTT/object_performance/met_ht_mht.yaml @@ -0,0 +1,97 @@ +# HT_90perc: +# sample: TT +# version: V36nano_noTT +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen HT" +# trafo: "HT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# test_objects: +# L1puppiHistoJetSums:HT: "pt" +# L1puppiJetSC4sums:HT: "pt" +# L1TrackHT:HT: "ht" +# thresholds: [350] +# scalings: +# method: "naive" +# threshold: 0.90 +# xlabel: "Gen. HT (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 750 +# step: 20 + +# MHT_50perc: +# sample: TT +# version: V36nano_noTT +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen MHT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# trafo: "MHT" +# test_objects: +# L1puppiHistoJetSums:MHT: "pt" +# L1puppiJetSC4sums:MHT: "pt" +# L1TrackHT:MHT: "mht" +# thresholds: [70, 150] +# scalings: +# method: "naive" +# threshold: 0.50 +# xlabel: "Gen. MHT30 (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 500 +# step: 20 + +# MET_90perc: +# sample: TT +# version: V36nano_noTT +# reference_object: +# object: "GenMET" +# x_arg: "pt" +# label: "Gen MET" +# test_objects: +# L1puppiMET:default: "pt" +# L1puppiMLMET:default: "pt" +# L1TrackMET:default: "pt" +# thresholds: [125, 150, 175, 200] +# xlabel: "Gen. MET (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# scalings: +# method: "naive" +# threshold: 0.90 +# binning: +# min: 0 +# max: 500 +# step: 20 + +MET_90perc_scTanh: + sample: TT + version: V36nano_noTT + reference_object: + object: "GenMET" + x_arg: "pt" + label: "Gen MET" + test_objects: + L1puppiMET:default: "pt" + L1puppiMLMET:default: "pt" + L1TrackMET:default: "pt" + thresholds: [125, 150, 175] + xlabel: "Gen. MET (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + scalings: + method: "errf" + threshold: 0.90 + binning: + min: 0 + max: 500 + step: 20 \ No newline at end of file diff --git a/configs/V36nano_noTT/object_performance/muonTF_matching.yaml b/configs/V36nano_noTT/object_performance/muonTF_matching.yaml new file mode 100644 index 00000000..ae636524 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/muonTF_matching.yaml @@ -0,0 +1,82 @@ +MuonTFsMatchingBarrel: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1MuonKMTF:default:barrel: "pt" + L1MuonOMTF:default:barrel: "pt" + L1MuonEMTF:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonTFsMatchingOverlap: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1MuonKMTF:default:overlap: "pt" + L1MuonOMTF:default:overlap: "pt" + L1MuonEMTF:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonTFsMatchingEndcap: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1MuonKMTF:default:endcap: "pt" + L1MuonOMTF:default:endcap: "pt" + L1MuonEMTF:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V36nano_noTT/object_performance/muonTF_matching_eta.yaml b/configs/V36nano_noTT/object_performance/muonTF_matching_eta.yaml new file mode 100644 index 00000000..98356cd1 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/muonTF_matching_eta.yaml @@ -0,0 +1,56 @@ +MuonTFsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1MuonKMTF:default: "eta" + L1MuonOMTF:default: "eta" + L1MuonEMTF:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonTFsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1MuonKMTF:default: "eta" + L1MuonOMTF:default: "eta" + L1MuonEMTF:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V36nano_noTT/object_performance/muon_matching.yaml b/configs/V36nano_noTT/object_performance/muon_matching.yaml new file mode 100644 index 00000000..2dfb8fdb --- /dev/null +++ b/configs/V36nano_noTT/object_performance/muon_matching.yaml @@ -0,0 +1,73 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V36nano_noTT/object_performance/muon_matching_eta.yaml b/configs/V36nano_noTT/object_performance/muon_matching_eta.yaml new file mode 100644 index 00000000..f1020c5f --- /dev/null +++ b/configs/V36nano_noTT/object_performance/muon_matching_eta.yaml @@ -0,0 +1,50 @@ +MuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V36nano_noTT/object_performance/muon_trigger.yaml b/configs/V36nano_noTT/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..27492fb4 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/muon_trigger.yaml @@ -0,0 +1,84 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V36nano_noTT/object_performance/photon_iso.yaml b/configs/V36nano_noTT/object_performance/photon_iso.yaml new file mode 100644 index 00000000..be1e5cc7 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/photon_iso.yaml @@ -0,0 +1,51 @@ +PhotonIsolation_Barrel: + sample: Hgg + version: V36nano_noTT + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkPhoton:NoIso:barrel: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +PhotonIsolation_Endcap: + sample: Hgg + version: V36nano_noTT + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.479" + - "abs({eta}) < 2.4" + object: + - "abs({eta}) > 1.479" + test_objects: + L1tkPhoton:NoIso:endcap: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V36nano_noTT/object_performance/photons_matching.yaml b/configs/V36nano_noTT/object_performance/photons_matching.yaml new file mode 100644 index 00000000..258b3450 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/photons_matching.yaml @@ -0,0 +1,103 @@ +PhotonsMatching_Barrel: + sample: Hgg + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap: + sample: Hgg + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Barrel_wPrunedGenParts: + sample: Hgg + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap_wPrunedGenParts: + sample: Hgg + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V36nano_noTT/object_performance/photons_matching_eta.yaml b/configs/V36nano_noTT/object_performance/photons_matching_eta.yaml new file mode 100644 index 00000000..c54d833d --- /dev/null +++ b/configs/V36nano_noTT/object_performance/photons_matching_eta.yaml @@ -0,0 +1,52 @@ +PhotonsMatching_Eta_Pt10to25: + sample: Hgg + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +PhotonsMatching_Eta_Pt25toInf: + sample: Hgg + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} >= 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V36nano_noTT/object_performance/photons_trigger.yaml b/configs/V36nano_noTT/object_performance/photons_trigger.yaml new file mode 100644 index 00000000..a2ece8b6 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/photons_trigger.yaml @@ -0,0 +1,59 @@ +PhotonsTrigger_Barrel: + sample: Hgg + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:barrel: "pt" + L1tkPhoton:NoIso:barrel: "pt" + L1tkPhoton:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Endcap: + sample: Hgg + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:endcap: "pt" + L1tkPhoton:NoIso:endcap: "pt" + L1tkPhoton:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V36nano_noTT/object_performance/tau_matching.yaml b/configs/V36nano_noTT/object_performance/tau_matching.yaml new file mode 100644 index 00000000..182a4a7a --- /dev/null +++ b/configs/V36nano_noTT/object_performance/tau_matching.yaml @@ -0,0 +1,53 @@ +TausMatchingBarrel: + sample: VBFHToTauTau + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 150 + step: 6 + +TausMatchingEndcap: + sample: VBFHToTauTau + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V36nano_noTT/object_performance/tau_matching_eta.yaml b/configs/V36nano_noTT/object_performance/tau_matching_eta.yaml new file mode 100644 index 00000000..f3b00077 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/tau_matching_eta.yaml @@ -0,0 +1,50 @@ +TauMatching_Eta_Pt40To100: + sample: VBFHToTauTau + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -3.0 + max: 3.0 + step: 0.2 + +TauMatching_Eta_Pt100ToInf: + sample: VBFHToTauTau + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V36nano_noTT/object_performance/tau_trigger.yaml b/configs/V36nano_noTT/object_performance/tau_trigger.yaml new file mode 100644 index 00000000..728d9338 --- /dev/null +++ b/configs/V36nano_noTT/object_performance/tau_trigger.yaml @@ -0,0 +1,59 @@ +TauTriggerBarrel_90perc: + sample: VBFHToTauTau + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:barrel: "pt" + L1hpsTau:default:barrel: "pt" + L1caloTau:default:barrel: "pt" + L1nnCaloTau:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_90perc: + sample: VBFHToTauTau + version: V36nano_noTT + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:endcap: "pt" + L1hpsTau:default:endcap: "pt" + L1caloTau:default:endcap: "pt" + L1nnCaloTau:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V36nano_noTT/objects/electrons.yaml b/configs/V36nano_noTT/objects/electrons.yaml new file mode 100644 index 00000000..cfacf196 --- /dev/null +++ b/configs/V36nano_noTT/objects/electrons.yaml @@ -0,0 +1,49 @@ +L1tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + endcap: + - "({eleId} == 1) | ({pt} < 25)" + barrel: + - "{eleId} == 1" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron, no ID" + cuts: + inclusive: + - "abs({eta}) < 2.4" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + endcap: + - "abs({relIso}) < 0.28" + +L1EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{eleId} == 1" + endcap: + - "{saId} == 1" diff --git a/configs/V36nano_noTT/objects/jets.yaml b/configs/V36nano_noTT/objects/jets.yaml new file mode 100644 index 00000000..d7bb0010 --- /dev/null +++ b/configs/V36nano_noTT/objects/jets.yaml @@ -0,0 +1,92 @@ +L1caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiExtJetSC4: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + bjetnn: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{btagScore} > 0.71" + +L1puppiJetHisto: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC4: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC8: + match_dR: 0.35 + label: "Seeded Cone PuppiJet 8" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1TrackJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + + diff --git a/configs/V36nano_noTT/objects/met_ht_mht.yaml b/configs/V36nano_noTT/objects/met_ht_mht.yaml new file mode 100644 index 00000000..bb7611bd --- /dev/null +++ b/configs/V36nano_noTT/objects/met_ht_mht.yaml @@ -0,0 +1,57 @@ +# phase1PuppiHT: +# label: "Histogrammed Puppi HT" +# ids: +# default: {} + +# phase1PuppiMHT: +# label: "Phase1 Puppi MHT" +# ids: +# default: {} + +L1puppiMET: + label: "Puppi MET" + ids: + default: {} + +L1puppiMLMET: + label: "Puppi MLMET" + ids: + default: {} + +L1puppiJetSC4sums: + ids: + HT: + label: "SeededCone HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "SeededCone MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1puppiHistoJetSums: + ids: + HT: + label: "Histogrammed Puppi HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "Histogrammed Puppi MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1TrackHT: + ids: + HT: + label: "Tracker HT" + MHT: + label: "Tracker MHT" + +L1TrackMET: + label: "Tracker MET" + ids: + default: {} \ No newline at end of file diff --git a/configs/V36nano_noTT/objects/muons.yaml b/configs/V36nano_noTT/objects/muons.yaml new file mode 100644 index 00000000..642808fc --- /dev/null +++ b/configs/V36nano_noTT/objects/muons.yaml @@ -0,0 +1,69 @@ +GenPart: + label: "Gen Muon" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "(({statusFlags}>>7)&1) == 1" + +L1gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + inclusive: + - "({hwQual} > 0) | ({pt} > 8)" # quality criterion only to be appied for p_T < 8 GeV + + +L1gmtMuon: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonKMTF: + label: "KMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonOMTF: + label: "OMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonEMTF: + label: "EMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + \ No newline at end of file diff --git a/configs/V36nano_noTT/objects/photons.yaml b/configs/V36nano_noTT/objects/photons.yaml new file mode 100644 index 00000000..12d51f0c --- /dev/null +++ b/configs/V36nano_noTT/objects/photons.yaml @@ -0,0 +1,29 @@ +L1tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "L1tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "{eleId} == 1" + endcap: + - "{phoId} == 1" + Iso: + label: "L1tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "abs({relIso}) < 0.25" + - "{eleId} == 1" + endcap: + - "abs({relIso}) < 0.205" + - "{phoId} == 1" diff --git a/configs/V36nano_noTT/objects/taus.yaml b/configs/V36nano_noTT/objects/taus.yaml new file mode 100644 index 00000000..11e49a74 --- /dev/null +++ b/configs/V36nano_noTT/objects/taus.yaml @@ -0,0 +1,61 @@ +L1nnPuppiTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + # - "{passLooseNN}==1" + # Current IB (22 Feb recipe) does not have updated WP, so cut on NN score rather than checking passLooseNN + - "{chargedIso} > 0.22" + +L1hpsTau: + label: "HPS Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + +L1caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" + +L1nnCaloTau: + label: "NN Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{hwQual}==3" diff --git a/configs/V36nano_noTT/rate_plots/.backups/.test.yml~ b/configs/V36nano_noTT/rate_plots/.backups/.test.yml~ new file mode 100644 index 00000000..9e724bbd --- /dev/null +++ b/configs/V36nano_noTT/rate_plots/.backups/.test.yml~ @@ -0,0 +1,12 @@ +JetSC8Rates_byRegion: + sample: MinBias + version: V33nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:barrel + - L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V36nano_noTT/rate_plots/eg.yaml b/configs/V36nano_noTT/rate_plots/eg.yaml new file mode 100644 index 00000000..498a02bb --- /dev/null +++ b/configs/V36nano_noTT/rate_plots/eg.yaml @@ -0,0 +1,12 @@ +EGRates: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1EG:default + - L1tkElectron:NoIso + - L1tkElectron:Iso + - L1tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 diff --git a/configs/V36nano_noTT/rate_plots/ht.yaml b/configs/V36nano_noTT/rate_plots/ht.yaml new file mode 100644 index 00000000..82c36d50 --- /dev/null +++ b/configs/V36nano_noTT/rate_plots/ht.yaml @@ -0,0 +1,23 @@ +HTRates: + sample: MinBias + version: V36nano_noTT + test_objects: + # - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + # - L1TrackHT:HT + binning: + min: 50 + max: 975 + step: 25 + +MHTRates: + sample: MinBias + version: V36nano_noTT + test_objects: + # - L1puppiHistoJetSums:MHT + - L1puppiJetSC4sums:MHT + # - L1TrackHT:MHT + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V36nano_noTT/rate_plots/jets.yaml b/configs/V36nano_noTT/rate_plots/jets.yaml new file mode 100644 index 00000000..e5584b8e --- /dev/null +++ b/configs/V36nano_noTT/rate_plots/jets.yaml @@ -0,0 +1,84 @@ +# JetDefaultRates: +# sample: MinBias +# version: V36nano_noTT +# test_objects: +# - L1puppiJetHisto:default +# - L1puppiJetSC4:default +# - L1caloJet:default +# # - L1TrackJet:default +# binning: +# min: 40 +# max: 420 +# step: 20 + +# JetsByRegion: +# sample: MinBias +# version: V36nano_noTT +# test_objects: +# - L1puppiJetSC4:default:barrel +# - L1puppiJetSC4:default:endcap +# - L1puppiJetSC4:default:forward +# - L1caloJet:default:barrel +# - L1caloJet:default:endcap +# - L1caloJet:default:forward +# # - L1TrackJet:default:barrel +# # - L1TrackJet:default:endcap +# binning: +# min: 40 +# max: 420 +# step: 20 + +JetExtendedRates: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1puppiJetSC4:default:inclusive + - L1puppiExtJetSC4:default:inclusive + # - L1puppiExtJetSC4:default:barrel + # - L1puppiExtJetSC4:default:endcap + # - L1puppiExtJetSC4:default:forward + binning: + min: 40 + max: 420 + step: 20 + +JetExtendedRatesByRegion: + sample: MinBias + version: V36nano_noTT + test_objects: + # - L1puppiJetSC4:default:barrel + # - L1puppiJetSC4:default:endcap + # - L1puppiJetSC4:default:forward + - L1puppiExtJetSC4:default:barrel + - L1puppiExtJetSC4:default:endcap + - L1puppiExtJetSC4:default:forward + binning: + min: 40 + max: 420 + step: 20 + +# JetSC8Rates: +# sample: MinBias +# version: V36nano_noTT +# test_objects: +# - L1puppiJetSC4:default +# - L1puppiJetSC8:default +# binning: +# min: 40 +# max: 420 +# step: 20 + + +# JetSC8Rates_byRegion: +# sample: MinBias +# version: V36nano_noTT +# test_objects: +# # - L1puppiJetSC4:default +# - L1puppiJetSC8:default +# - L1puppiJetSC8:default:barrel +# - L1puppiJetSC8:default:endcap +# - L1puppiJetSC8:default:forward +# binning: +# min: 40 +# max: 420 +# step: 20 diff --git a/configs/V36nano_noTT/rate_plots/met.yaml b/configs/V36nano_noTT/rate_plots/met.yaml new file mode 100644 index 00000000..aab80675 --- /dev/null +++ b/configs/V36nano_noTT/rate_plots/met.yaml @@ -0,0 +1,11 @@ +METRates: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1puppiMET:default + - L1puppiMLMET:default + # - L1TrackMET:default + binning: + min: 50 + max: 500 + step: 25 diff --git a/configs/V36nano_noTT/rate_plots/muons.yaml b/configs/V36nano_noTT/rate_plots/muons.yaml new file mode 100644 index 00000000..7e0d5039 --- /dev/null +++ b/configs/V36nano_noTT/rate_plots/muons.yaml @@ -0,0 +1,34 @@ +gmtMuonByRegion: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1gmtMuon:default:barrel + - L1gmtMuon:default:overlap + - L1gmtMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByRegion: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1gmtTkMuon:default:barrel + - L1gmtTkMuon:default:overlap + - L1gmtTkMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +MuonRates: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1gmtMuon:default + - L1gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 diff --git a/configs/V36nano_noTT/rate_plots/taus.yaml b/configs/V36nano_noTT/rate_plots/taus.yaml new file mode 100644 index 00000000..abb54140 --- /dev/null +++ b/configs/V36nano_noTT/rate_plots/taus.yaml @@ -0,0 +1,25 @@ +TauRates: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1nnPuppiTau:default + - L1hpsTau:default + - L1caloTau:default + - L1nnCaloTau:default + binning: + min: 10 + max: 155 + step: 5 + +TauRatesByRegion: + sample: MinBias + version: V36nano_noTT + test_objects: + - L1caloTau:default:barrel + - L1caloTau:default:endcap + - L1nnPuppiTau:default:barrel + - L1nnPuppiTau:default:endcap + binning: + min: 10 + max: 155 + step: 5 diff --git a/configs/V36nano_noTT/rate_plots/test.yml b/configs/V36nano_noTT/rate_plots/test.yml new file mode 100644 index 00000000..3e7eed76 --- /dev/null +++ b/configs/V36nano_noTT/rate_plots/test.yml @@ -0,0 +1,13 @@ +JetSC8Rates_byRegion2: + sample: MinBias + version: V36nano_noTT + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:inclusive + - L1puppiJetSC8:default:barrel + #- L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V37nano/README.md b/configs/V37nano/README.md new file mode 100644 index 00000000..d82151a1 --- /dev/null +++ b/configs/V37nano/README.md @@ -0,0 +1,4 @@ +# V33 version + +Based on https://github.com/cms-l1-dpg/Phase2-L1Nano/tree/v33_1400pre3v1 + diff --git a/configs/V37nano/caching.yaml b/configs/V37nano/caching.yaml new file mode 100644 index 00000000..f67dcd89 --- /dev/null +++ b/configs/V37nano/caching.yaml @@ -0,0 +1,128 @@ +V37nano: + Hgg: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v37/GluGluHToGG_M-125_TuneCP5_14TeV-powheg-pythia8/*/*/*/*.root + trees_branches: + Events: + GenPart: [pt, eta, phi, pdgId, statusFlags] + L1tkPhoton: "all" + L1EGbarrel: "all" + L1EGendcap: "all" +# DYLL_M50: +# ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/DYToLL_M-50_TuneCP5_14TeV-pythia8/DY_M50_131_200PU_myIBv6_noTkTrg_resub/240403_214206/0000/L1Nano_*.root +# trees_branches: +# Events: +# GenPart: "all" +# ## EG +# L1tkElectron: "all" +# L1EGbarrel: "all" +# L1EGendcap: "all" +# ## Muons +# L1gmtTkMuon: "all" +# L1gmtMuon: "all" +# L1gmtDispMuon: "all" +# ## TF Muons +# L1MuonKMTF: "all" +# L1MuonOMTF: "all" +# L1MuonEMTF: "all" +# L1DispMuonKMTF: "all" +# L1DispMuonOMTF: "all" +# L1DispMuonEMTF: "all" + TT: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v37/TT_TuneCP5_14TeV-powheg-pythia8/TT_131_200PU_IBv8_wTT/240411_081520/tmp_links/test_* + trees_branches: + Events: + # gen + GenJet: [pt, eta, phi, partonFlavour] + GenJetAK8: [pt, eta, phi] + GenMET: "all" + # # sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + VBFHToTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v37/VBFHToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/*/*/*/*.root + trees_branches: + Events: + GenVisTau: "all" + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + MinBias: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v37/MinBias_TuneCP5_14TeV-pythia8/MinBias_131_L1Fix_IBv8_wTT/240411_081840/tmp_links/*.root + trees_branches: + Events: + # PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + ## TAUS + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + L1TrackTripletWord: [pt] +# #### LLP +# HtoLLPto4mu_Ctau900mm: +# ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/HTo2LongLivedTo4mu_MH-125_MFF-12_CTau-900mm_TuneCP5_14TeV-pythia8/HtoLLPto4mu_Ctau90cm_131_L1Fix_myIBv6_noTkTrg_resub/240403_222836/0000/L1Nano_*.root +# trees_branches: +# Events: +# GenPart: "all" +# ## Muons +# L1gmtTkMuon: "all" +# L1gmtMuon: "all" +# L1gmtDispMuon: "all" +# ## TF Muons +# L1MuonKMTF: "all" +# L1MuonOMTF: "all" +# L1MuonEMTF: "all" +# L1DispMuonKMTF: "all" +# L1DispMuonOMTF: "all" +# L1DispMuonEMTF: "all" + HtoLLPto4b_M125_Phi60_ctau100: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v37/HiddenGluGluH_mH-125_Phi-60_ctau-100_bbbb_TuneCP5_14TeV-pythia8/HiddenHto4b_M125_Phi60_ctau100_IBv8_wTT/240411_082132/0000/*.root + trees_branches: + Events: + GenJet: "all" + # # jets + L1puppiJetSC4sums: [pt, phi] + # L1puppiJetSC4: [pt, eta, phi] + # L1puppiJetSC8: [pt, eta, phi] + # L1puppiExtJetSC4: [pt, eta, phi, btagScore] + # L1caloJet: [pt, eta, phi] + ## track-only + # L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1ExtTrackHT: [ht, mht] + # L1TrackJet: [pt, eta, phi] diff --git a/configs/V37nano/object_performance/disp_ht.yaml b/configs/V37nano/object_performance/disp_ht.yaml new file mode 100644 index 00000000..ecd55a4a --- /dev/null +++ b/configs/V37nano/object_performance/disp_ht.yaml @@ -0,0 +1,53 @@ +HtoLLPto4b_M125_Phi60_ctau100_promptHT: + sample: HtoLLPto4b_M125_Phi60_ctau100 + version: V37nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + L1puppiJetSC4sums:HT: "pt" + L1TrackHT:HT: "ht" + L1ExtTrackHT:HT: "ht" + thresholds: [50, 100] + # scalings: + # method: "naive" + # threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +# HtoLLPto4b_M125_Phi60_ctau100_dispHT: +# sample: HtoLLPto4b_M125_Phi60_ctau100 +# version: V37nano +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen HT" +# trafo: "HT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# test_objects: +# L1puppiJetSC4sums:HT: "pt" +# L1TrackHT:HT: "ht" +# L1ExtTrackHT:HT: "ht" +# thresholds: [350] +# scalings: +# method: "naive" +# threshold: 0.90 +# xlabel: "Gen. HT (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 750 +# step: 20 diff --git a/configs/V37nano/object_performance/electron_iso.yaml b/configs/V37nano/object_performance/electron_iso.yaml new file mode 100644 index 00000000..955eb08d --- /dev/null +++ b/configs/V37nano/object_performance/electron_iso.yaml @@ -0,0 +1,50 @@ +ElectronsIsolation_Barrel: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkElectron:NoIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +ElectronsIsolation_Endcap: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.479" + object: + - "abs({eta}) < 2.4" + test_objects: + L1tkElectron:NoIsoForIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V37nano/object_performance/electron_matching.yaml b/configs/V37nano/object_performance/electron_matching.yaml new file mode 100644 index 00000000..dfb6091f --- /dev/null +++ b/configs/V37nano/object_performance/electron_matching.yaml @@ -0,0 +1,103 @@ +ElectronsMatchingBarrel: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V37nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 100 +# step: 3 + +ElectronsMatchingEndcap: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V37nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 100 +# step: 3 diff --git a/configs/V37nano/object_performance/electron_matching_eta.yaml b/configs/V37nano/object_performance/electron_matching_eta.yaml new file mode 100644 index 00000000..0a070190 --- /dev/null +++ b/configs/V37nano/object_performance/electron_matching_eta.yaml @@ -0,0 +1,52 @@ +ElectronsMatching_Eta_Pt10to25: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +ElectronsMatching_Eta_Pt25toInf: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} > 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V37nano/object_performance/electron_trigger.yaml b/configs/V37nano/object_performance/electron_trigger.yaml new file mode 100644 index 00000000..f669054b --- /dev/null +++ b/configs/V37nano/object_performance/electron_trigger.yaml @@ -0,0 +1,119 @@ +ElectronsTriggerBarrel: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:barrel: "pt" + L1tkElectron:NoIso:barrel: "pt" + L1tkElectron:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +ElectronsTriggerEndcap: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:endcap: "pt" + L1tkElectron:NoIso:endcap: "pt" + L1tkElectron:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +# ElectronsTriggerBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V37nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: + # L1EG:default:barrel: "pt" +# L1tkElectron:NoIso:barrel: "pt" +# L1tkElectron:Iso:barrel: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 + +# ElectronsTriggerEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V37nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: +# # L1EG:default:endcap: "pt" +# L1tkElectron:NoIso:endcap: "pt" +# L1tkElectron:Iso:endcap: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 diff --git a/configs/V37nano/object_performance/jets_matching.yaml b/configs/V37nano/object_performance/jets_matching.yaml new file mode 100644 index 00000000..15a18a8b --- /dev/null +++ b/configs/V37nano/object_performance/jets_matching.yaml @@ -0,0 +1,118 @@ +JetMatchingBarrel: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcap: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingForward: + version: V37nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 + + +JetMatchingBarrelSC8: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcapSC8: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 \ No newline at end of file diff --git a/configs/V37nano/object_performance/jets_matching_eta.yaml b/configs/V37nano/object_performance/jets_matching_eta.yaml new file mode 100644 index 00000000..29345cc5 --- /dev/null +++ b/configs/V37nano/object_performance/jets_matching_eta.yaml @@ -0,0 +1,94 @@ +JetMatching_Eta_Pt40To100: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + L1caloJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5.5 + max: 5.5 + step: 0.25 + +JetMatching_Eta_SC8_Pt100ToInf: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 \ No newline at end of file diff --git a/configs/V37nano/object_performance/jets_matching_wBTag.yaml b/configs/V37nano/object_performance/jets_matching_wBTag.yaml new file mode 100644 index 00000000..87a5daa2 --- /dev/null +++ b/configs/V37nano/object_performance/jets_matching_wBTag.yaml @@ -0,0 +1,136 @@ +JetMatching_Eta_Pt40To100_ExtendedVsRegular: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genBJets: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genNotBJets: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Pt_Pt30ToInf_genBJets: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 + +JetMatching_Pt_Pt30ToInf_genNotBJets: + sample: TT + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 diff --git a/configs/V37nano/object_performance/jets_sc8_trigger.yaml b/configs/V37nano/object_performance/jets_sc8_trigger.yaml new file mode 100644 index 00000000..ae9d174e --- /dev/null +++ b/configs/V37nano/object_performance/jets_sc8_trigger.yaml @@ -0,0 +1,77 @@ +JetTurnonBarrelSC8: + version: V37nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcapSC8: + version: V37nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForwardSC8: + version: V37nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default:forward: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V37nano/object_performance/jets_trigger.yaml b/configs/V37nano/object_performance/jets_trigger.yaml new file mode 100644 index 00000000..8b6708ec --- /dev/null +++ b/configs/V37nano/object_performance/jets_trigger.yaml @@ -0,0 +1,85 @@ +JetTurnonBarrel: + version: V37nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:barrel: "pt" + L1puppiJetSC4:default:barrel: "pt" + L1caloJet:default:barrel: "pt" + L1TrackJet:default:barrel: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcap: + version: V37nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default:endcap: "pt" + L1puppiJetSC4:default:endcap: "pt" + L1caloJet:default:endcap: "pt" + L1TrackJet:default:endcap: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForward: + version: V37nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default:forward: "pt" + L1puppiJetSC4:default:forward: "pt" + L1caloJet:default:forward: "pt" + thresholds: [50, 100] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V37nano/object_performance/met_ht_mht.yaml b/configs/V37nano/object_performance/met_ht_mht.yaml new file mode 100644 index 00000000..bd3b3c89 --- /dev/null +++ b/configs/V37nano/object_performance/met_ht_mht.yaml @@ -0,0 +1,97 @@ +HT_90perc: + sample: TT + version: V37nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + L1puppiHistoJetSums:HT: "pt" + L1puppiJetSC4sums:HT: "pt" + L1TrackHT:HT: "ht" + thresholds: [350] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +MHT_50perc: + sample: TT + version: V37nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen MHT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + trafo: "MHT" + test_objects: + L1puppiHistoJetSums:MHT: "pt" + L1puppiJetSC4sums:MHT: "pt" + L1TrackHT:MHT: "mht" + thresholds: [70, 150] + scalings: + method: "naive" + threshold: 0.50 + xlabel: "Gen. MHT30 (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 500 + step: 20 + +MET_90perc: + sample: TT + version: V37nano + reference_object: + object: "GenMET" + x_arg: "pt" + label: "Gen MET" + test_objects: + L1puppiMET:default: "pt" + L1puppiMLMET:default: "pt" + L1TrackMET:default: "pt" + thresholds: [125, 150, 175, 200] + xlabel: "Gen. MET (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 500 + step: 20 + +# MET_90perc_scTanh: +# sample: TT +# version: V37nano +# reference_object: +# object: "GenMET" +# x_arg: "pt" +# label: "Gen MET" +# test_objects: +# L1puppiMET:default: "pt" +# L1puppiMLMET:default: "pt" +# L1TrackMET:default: "pt" +# thresholds: [125, 150, 175] +# xlabel: "Gen. MET (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# scalings: +# method: "errf" +# threshold: 0.90 +# binning: +# min: 0 +# max: 500 +# step: 20 \ No newline at end of file diff --git a/configs/V37nano/object_performance/muonTF_matching.yaml b/configs/V37nano/object_performance/muonTF_matching.yaml new file mode 100644 index 00000000..4324bdc6 --- /dev/null +++ b/configs/V37nano/object_performance/muonTF_matching.yaml @@ -0,0 +1,82 @@ +MuonTFsMatchingBarrel: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1MuonKMTF:default:barrel: "pt" + L1MuonOMTF:default:barrel: "pt" + L1MuonEMTF:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonTFsMatchingOverlap: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1MuonKMTF:default:overlap: "pt" + L1MuonOMTF:default:overlap: "pt" + L1MuonEMTF:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonTFsMatchingEndcap: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1MuonKMTF:default:endcap: "pt" + L1MuonOMTF:default:endcap: "pt" + L1MuonEMTF:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V37nano/object_performance/muonTF_matching_eta.yaml b/configs/V37nano/object_performance/muonTF_matching_eta.yaml new file mode 100644 index 00000000..b20d14dc --- /dev/null +++ b/configs/V37nano/object_performance/muonTF_matching_eta.yaml @@ -0,0 +1,56 @@ +MuonTFsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1MuonKMTF:default: "eta" + L1MuonOMTF:default: "eta" + L1MuonEMTF:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonTFsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1MuonKMTF:default: "eta" + L1MuonOMTF:default: "eta" + L1MuonEMTF:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V37nano/object_performance/muon_matching.yaml b/configs/V37nano/object_performance/muon_matching.yaml new file mode 100644 index 00000000..da64722d --- /dev/null +++ b/configs/V37nano/object_performance/muon_matching.yaml @@ -0,0 +1,73 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V37nano/object_performance/muon_matching_eta.yaml b/configs/V37nano/object_performance/muon_matching_eta.yaml new file mode 100644 index 00000000..55f739c1 --- /dev/null +++ b/configs/V37nano/object_performance/muon_matching_eta.yaml @@ -0,0 +1,50 @@ +MuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V37nano/object_performance/muon_trigger.yaml b/configs/V37nano/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..0d2a35c1 --- /dev/null +++ b/configs/V37nano/object_performance/muon_trigger.yaml @@ -0,0 +1,84 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V37nano/object_performance/photon_iso.yaml b/configs/V37nano/object_performance/photon_iso.yaml new file mode 100644 index 00000000..5a996f87 --- /dev/null +++ b/configs/V37nano/object_performance/photon_iso.yaml @@ -0,0 +1,51 @@ +PhotonIsolation_Barrel: + sample: Hgg + version: V37nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkPhoton:NoIso:barrel: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +PhotonIsolation_Endcap: + sample: Hgg + version: V37nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.479" + - "abs({eta}) < 2.4" + object: + - "abs({eta}) > 1.479" + test_objects: + L1tkPhoton:NoIso:endcap: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V37nano/object_performance/photons_matching.yaml b/configs/V37nano/object_performance/photons_matching.yaml new file mode 100644 index 00000000..abfedb77 --- /dev/null +++ b/configs/V37nano/object_performance/photons_matching.yaml @@ -0,0 +1,103 @@ +PhotonsMatching_Barrel: + sample: Hgg + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap: + sample: Hgg + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Barrel_wPrunedGenParts: + sample: Hgg + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap_wPrunedGenParts: + sample: Hgg + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V37nano/object_performance/photons_matching_eta.yaml b/configs/V37nano/object_performance/photons_matching_eta.yaml new file mode 100644 index 00000000..fbc501ec --- /dev/null +++ b/configs/V37nano/object_performance/photons_matching_eta.yaml @@ -0,0 +1,52 @@ +PhotonsMatching_Eta_Pt10to25: + sample: Hgg + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +PhotonsMatching_Eta_Pt25toInf: + sample: Hgg + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} >= 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V37nano/object_performance/photons_trigger.yaml b/configs/V37nano/object_performance/photons_trigger.yaml new file mode 100644 index 00000000..98937d21 --- /dev/null +++ b/configs/V37nano/object_performance/photons_trigger.yaml @@ -0,0 +1,59 @@ +PhotonsTrigger_Barrel: + sample: Hgg + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:barrel: "pt" + L1tkPhoton:NoIso:barrel: "pt" + L1tkPhoton:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Endcap: + sample: Hgg + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:endcap: "pt" + L1tkPhoton:NoIso:endcap: "pt" + L1tkPhoton:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V37nano/object_performance/tau_matching.yaml b/configs/V37nano/object_performance/tau_matching.yaml new file mode 100644 index 00000000..47bef708 --- /dev/null +++ b/configs/V37nano/object_performance/tau_matching.yaml @@ -0,0 +1,53 @@ +TausMatchingBarrel: + sample: VBFHToTauTau + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 150 + step: 6 + +TausMatchingEndcap: + sample: VBFHToTauTau + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V37nano/object_performance/tau_matching_eta.yaml b/configs/V37nano/object_performance/tau_matching_eta.yaml new file mode 100644 index 00000000..d8bd91b5 --- /dev/null +++ b/configs/V37nano/object_performance/tau_matching_eta.yaml @@ -0,0 +1,50 @@ +TauMatching_Eta_Pt40To100: + sample: VBFHToTauTau + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -3.0 + max: 3.0 + step: 0.2 + +TauMatching_Eta_Pt100ToInf: + sample: VBFHToTauTau + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V37nano/object_performance/tau_trigger.yaml b/configs/V37nano/object_performance/tau_trigger.yaml new file mode 100644 index 00000000..636fbe00 --- /dev/null +++ b/configs/V37nano/object_performance/tau_trigger.yaml @@ -0,0 +1,59 @@ +TauTriggerBarrel_90perc: + sample: VBFHToTauTau + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:barrel: "pt" + L1hpsTau:default:barrel: "pt" + L1caloTau:default:barrel: "pt" + L1nnCaloTau:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_90perc: + sample: VBFHToTauTau + version: V37nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:endcap: "pt" + L1hpsTau:default:endcap: "pt" + L1caloTau:default:endcap: "pt" + L1nnCaloTau:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V37nano/objects/electrons.yaml b/configs/V37nano/objects/electrons.yaml new file mode 100644 index 00000000..cfacf196 --- /dev/null +++ b/configs/V37nano/objects/electrons.yaml @@ -0,0 +1,49 @@ +L1tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + endcap: + - "({eleId} == 1) | ({pt} < 25)" + barrel: + - "{eleId} == 1" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron, no ID" + cuts: + inclusive: + - "abs({eta}) < 2.4" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + endcap: + - "abs({relIso}) < 0.28" + +L1EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{eleId} == 1" + endcap: + - "{saId} == 1" diff --git a/configs/V37nano/objects/jets.yaml b/configs/V37nano/objects/jets.yaml new file mode 100644 index 00000000..d7bb0010 --- /dev/null +++ b/configs/V37nano/objects/jets.yaml @@ -0,0 +1,92 @@ +L1caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiExtJetSC4: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + bjetnn: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{btagScore} > 0.71" + +L1puppiJetHisto: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC4: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC8: + match_dR: 0.35 + label: "Seeded Cone PuppiJet 8" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1TrackJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + + diff --git a/configs/V37nano/objects/met_ht_mht.yaml b/configs/V37nano/objects/met_ht_mht.yaml new file mode 100644 index 00000000..48461081 --- /dev/null +++ b/configs/V37nano/objects/met_ht_mht.yaml @@ -0,0 +1,59 @@ +L1puppiMET: + label: "Puppi MET" + ids: + default: {} + +L1puppiMLMET: + label: "Puppi MLMET" + ids: + default: {} + +L1puppiJetSC4sums: + ids: + HT: + label: "SeededCone HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "SeededCone MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1puppiHistoJetSums: + ids: + HT: + label: "Histogrammed Puppi HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "Histogrammed Puppi MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1TrackHT: + ids: + HT: + label: "Tracker HT" + MHT: + label: "Tracker MHT" + +L1ExtTrackHT: + ids: + HT: + label: "ext. Tracker HT" + MHT: + label: "ext. Tracker MHT" + +L1TrackMET: + label: "Tracker MET" + ids: + default: {} + +L1TrackTripletWord: + label: "Track Triplet for W3Pi" + ids: + default: {} \ No newline at end of file diff --git a/configs/V37nano/objects/muons.yaml b/configs/V37nano/objects/muons.yaml new file mode 100644 index 00000000..642808fc --- /dev/null +++ b/configs/V37nano/objects/muons.yaml @@ -0,0 +1,69 @@ +GenPart: + label: "Gen Muon" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "(({statusFlags}>>7)&1) == 1" + +L1gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + inclusive: + - "({hwQual} > 0) | ({pt} > 8)" # quality criterion only to be appied for p_T < 8 GeV + + +L1gmtMuon: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonKMTF: + label: "KMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonOMTF: + label: "OMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonEMTF: + label: "EMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + \ No newline at end of file diff --git a/configs/V37nano/objects/photons.yaml b/configs/V37nano/objects/photons.yaml new file mode 100644 index 00000000..12d51f0c --- /dev/null +++ b/configs/V37nano/objects/photons.yaml @@ -0,0 +1,29 @@ +L1tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "L1tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "{eleId} == 1" + endcap: + - "{phoId} == 1" + Iso: + label: "L1tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "abs({relIso}) < 0.25" + - "{eleId} == 1" + endcap: + - "abs({relIso}) < 0.205" + - "{phoId} == 1" diff --git a/configs/V37nano/objects/taus.yaml b/configs/V37nano/objects/taus.yaml new file mode 100644 index 00000000..11e49a74 --- /dev/null +++ b/configs/V37nano/objects/taus.yaml @@ -0,0 +1,61 @@ +L1nnPuppiTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + # - "{passLooseNN}==1" + # Current IB (22 Feb recipe) does not have updated WP, so cut on NN score rather than checking passLooseNN + - "{chargedIso} > 0.22" + +L1hpsTau: + label: "HPS Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + +L1caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" + +L1nnCaloTau: + label: "NN Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{hwQual}==3" diff --git a/configs/V37nano/rate_plots/.backups/.test.yml~ b/configs/V37nano/rate_plots/.backups/.test.yml~ new file mode 100644 index 00000000..9e724bbd --- /dev/null +++ b/configs/V37nano/rate_plots/.backups/.test.yml~ @@ -0,0 +1,12 @@ +JetSC8Rates_byRegion: + sample: MinBias + version: V33nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:barrel + - L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V37nano/rate_plots/eg.yaml b/configs/V37nano/rate_plots/eg.yaml new file mode 100644 index 00000000..fb00088e --- /dev/null +++ b/configs/V37nano/rate_plots/eg.yaml @@ -0,0 +1,12 @@ +EGRates: + sample: MinBias + version: V37nano + test_objects: + - L1EG:default + - L1tkElectron:NoIso + - L1tkElectron:Iso + - L1tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 diff --git a/configs/V37nano/rate_plots/ht.yaml b/configs/V37nano/rate_plots/ht.yaml new file mode 100644 index 00000000..192f4313 --- /dev/null +++ b/configs/V37nano/rate_plots/ht.yaml @@ -0,0 +1,23 @@ +HTRates: + sample: MinBias + version: V37nano + test_objects: + # - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + # - L1TrackHT:HT + binning: + min: 50 + max: 975 + step: 25 + +MHTRates: + sample: MinBias + version: V37nano + test_objects: + # - L1puppiHistoJetSums:MHT + - L1puppiJetSC4sums:MHT + # - L1TrackHT:MHT + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V37nano/rate_plots/jets.yaml b/configs/V37nano/rate_plots/jets.yaml new file mode 100644 index 00000000..23f89cc9 --- /dev/null +++ b/configs/V37nano/rate_plots/jets.yaml @@ -0,0 +1,84 @@ +JetDefaultRates: + sample: MinBias + version: V37nano + test_objects: + - L1puppiJetHisto:default + - L1puppiJetSC4:default + - L1caloJet:default + # - L1TrackJet:default + binning: + min: 40 + max: 420 + step: 20 + +# JetsByRegion: +# sample: MinBias +# version: V37nano +# test_objects: +# - L1puppiJetSC4:default:barrel +# - L1puppiJetSC4:default:endcap +# - L1puppiJetSC4:default:forward +# - L1caloJet:default:barrel +# - L1caloJet:default:endcap +# - L1caloJet:default:forward +# # - L1TrackJet:default:barrel +# # - L1TrackJet:default:endcap +# binning: +# min: 40 +# max: 420 +# step: 20 + +JetExtendedRates: + sample: MinBias + version: V37nano + test_objects: + - L1puppiJetSC4:default:inclusive + - L1puppiExtJetSC4:default:inclusive + # - L1puppiExtJetSC4:default:barrel + # - L1puppiExtJetSC4:default:endcap + # - L1puppiExtJetSC4:default:forward + binning: + min: 40 + max: 420 + step: 20 + +JetExtendedRatesByRegion: + sample: MinBias + version: V37nano + test_objects: + # - L1puppiJetSC4:default:barrel + # - L1puppiJetSC4:default:endcap + # - L1puppiJetSC4:default:forward + - L1puppiExtJetSC4:default:barrel + - L1puppiExtJetSC4:default:endcap + - L1puppiExtJetSC4:default:forward + binning: + min: 40 + max: 420 + step: 20 + +# JetSC8Rates: +# sample: MinBias +# version: V37nano +# test_objects: +# - L1puppiJetSC4:default +# - L1puppiJetSC8:default +# binning: +# min: 40 +# max: 420 +# step: 20 + + +# JetSC8Rates_byRegion: +# sample: MinBias +# version: V37nano +# test_objects: +# # - L1puppiJetSC4:default +# - L1puppiJetSC8:default +# - L1puppiJetSC8:default:barrel +# - L1puppiJetSC8:default:endcap +# - L1puppiJetSC8:default:forward +# binning: +# min: 40 +# max: 420 +# step: 20 diff --git a/configs/V37nano/rate_plots/met.yaml b/configs/V37nano/rate_plots/met.yaml new file mode 100644 index 00000000..007a03b0 --- /dev/null +++ b/configs/V37nano/rate_plots/met.yaml @@ -0,0 +1,11 @@ +METRates: + sample: MinBias + version: V37nano + test_objects: + - L1puppiMET:default + - L1puppiMLMET:default + # - L1TrackMET:default + binning: + min: 50 + max: 500 + step: 25 diff --git a/configs/V37nano/rate_plots/muons.yaml b/configs/V37nano/rate_plots/muons.yaml new file mode 100644 index 00000000..0833b2bd --- /dev/null +++ b/configs/V37nano/rate_plots/muons.yaml @@ -0,0 +1,34 @@ +gmtMuonByRegion: + sample: MinBias + version: V37nano + test_objects: + - L1gmtMuon:default:barrel + - L1gmtMuon:default:overlap + - L1gmtMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByRegion: + sample: MinBias + version: V37nano + test_objects: + - L1gmtTkMuon:default:barrel + - L1gmtTkMuon:default:overlap + - L1gmtTkMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +MuonRates: + sample: MinBias + version: V37nano + test_objects: + - L1gmtMuon:default + - L1gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 diff --git a/configs/V37nano/rate_plots/taus.yaml b/configs/V37nano/rate_plots/taus.yaml new file mode 100644 index 00000000..9a53cc98 --- /dev/null +++ b/configs/V37nano/rate_plots/taus.yaml @@ -0,0 +1,25 @@ +TauRates: + sample: MinBias + version: V37nano + test_objects: + - L1nnPuppiTau:default + - L1hpsTau:default + - L1caloTau:default + - L1nnCaloTau:default + binning: + min: 10 + max: 155 + step: 5 + +TauRatesByRegion: + sample: MinBias + version: V37nano + test_objects: + - L1caloTau:default:barrel + - L1caloTau:default:endcap + - L1nnPuppiTau:default:barrel + - L1nnPuppiTau:default:endcap + binning: + min: 10 + max: 155 + step: 5 diff --git a/configs/V37nano/rate_plots/test.yml b/configs/V37nano/rate_plots/test.yml new file mode 100644 index 00000000..ef7e210e --- /dev/null +++ b/configs/V37nano/rate_plots/test.yml @@ -0,0 +1,13 @@ +JetSC8Rates_byRegion2: + sample: MinBias + version: V37nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:inclusive + - L1puppiJetSC8:default:barrel + #- L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V38nano/README.md b/configs/V38nano/README.md new file mode 100644 index 00000000..755a3791 --- /dev/null +++ b/configs/V38nano/README.md @@ -0,0 +1,5 @@ +# V38 DT12x version + +Based on https://github.com/cms-l1-dpg/Phase2-L1Nano/tree/v38_1400pre3v9 + +Uses the Annual Review branch 1400pre3v9 and includes rerunning the TrackTrigger. \ No newline at end of file diff --git a/configs/V38nano/caching.yaml b/configs/V38nano/caching.yaml new file mode 100644 index 00000000..71867337 --- /dev/null +++ b/configs/V38nano/caching.yaml @@ -0,0 +1,97 @@ +V38nano: + Hgg: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/GluGluHToGG_M-125_TuneCP5_14TeV-powheg-pythia8/GluGluHToGG_131_200PU_IBv9_wTT/240412_210813/0000/*.root + trees_branches: + Events: + GenPart: [pt, eta, phi, pdgId, statusFlags] + L1tkPhoton: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/DYToLL_M-50_TuneCP5_14TeV-pythia8/*/*/*/*.root + trees_branches: + Events: + GenPart: "all" + ## EG + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## Muons + L1gmtTkMuon: "all" + L1gmtMuon: "all" + L1gmtDispMuon: "all" + ## TF Muons + L1MuonKMTF: "all" + L1MuonOMTF: "all" + L1MuonEMTF: "all" + L1DispMuonKMTF: "all" + L1DispMuonOMTF: "all" + L1DispMuonEMTF: "all" + TT: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/TT_TuneCP5_14TeV-powheg-pythia8/TT_131_200PU_IBv9_wTT/240412_210547/0000/*.root + trees_branches: + Events: + # gen + GenJet: [pt, eta, phi, partonFlavour] + GenJetAK8: [pt, eta, phi] + GenMET: "all" + # # sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + VBFHToTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/VBFHToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/VBFHToTauTau_131_200PU_IBv9_wTT/240412_210701/0000/*.root + trees_branches: + Events: + GenVisTau: "all" + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + MinBias: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/MinBias_TuneCP5_14TeV-pythia8/MinBias_131_L1Fix_IBv9_wTT/240412_211203/0000/*.root + trees_branches: + Events: + # PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + L1gmtDispMuon: "all" + ## TAUS + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + L1TrackTripletWord: [pt] + L1ExtTrackHT: [ht] \ No newline at end of file diff --git a/configs/V38nano/caching_signal.yaml b/configs/V38nano/caching_signal.yaml new file mode 100644 index 00000000..b1ed26e9 --- /dev/null +++ b/configs/V38nano/caching_signal.yaml @@ -0,0 +1,109 @@ +V38nano: + HHToBBTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/GluGluToHHTo2B2Tau_node_SM_TuneCP5_14TeV-madgraph-pythia8/HHTo2B2Tau_131_200PU_IBv9_wTT/240412_210926/0000/*.root + trees_branches: + Events: + # PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + L1gmtDispMuon: "all" + ## TAUS + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + L1TrackTripletWord: [pt] + L1ExtTrackHT: [ht] + + HtoLLPto4B_M125_Phi60_ctau100: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/HiddenGluGluH_mH-125_Phi-60_ctau-100_bbbb_TuneCP5_14TeV-pythia8/*/*/*/*.root + trees_branches: + Events: + # PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + L1gmtDispMuon: "all" + ## TAUS + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + L1TrackTripletWord: [pt] + L1ExtTrackHT: [ht] +# # #### LLP +# # HtoLLPto4mu_Ctau900mm: +# # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v36/HTo2LongLivedTo4mu_MH-125_MFF-12_CTau-900mm_TuneCP5_14TeV-pythia8/HtoLLPto4mu_Ctau90cm_131_L1Fix_myIBv6_noTkTrg_resub/240403_222836/0000/L1Nano_*.root +# # trees_branches: +# # Events: +# # GenPart: "all" +# # ## Muons +# # L1gmtTkMuon: "all" +# # L1gmtMuon: "all" +# # L1gmtDispMuon: "all" +# # ## TF Muons +# # L1MuonKMTF: "all" +# # L1MuonOMTF: "all" +# # L1MuonEMTF: "all" +# # L1DispMuonKMTF: "all" +# # L1DispMuonOMTF: "all" +# # L1DispMuonEMTF: "all" +# HtoLLPto4b_M125_Phi60_ctau100: +# ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v37/HiddenGluGluH_mH-125_Phi-60_ctau-100_bbbb_TuneCP5_14TeV-pythia8/HiddenHto4b_M125_Phi60_ctau100_IBv8_wTT/240411_082132/0000/*.root +# trees_branches: +# Events: +# GenJet: "all" +# # # jets +# L1puppiJetSC4sums: [pt, phi] +# # L1puppiJetSC4: [pt, eta, phi] +# # L1puppiJetSC8: [pt, eta, phi] +# # L1puppiExtJetSC4: [pt, eta, phi, btagScore] +# # L1caloJet: [pt, eta, phi] +# ## track-only +# # L1TrackMET: [pt] +# L1TrackHT: [ht, mht] +# L1ExtTrackHT: [ht, mht] +# # L1TrackJet: [pt, eta, phi] diff --git a/configs/V38nano/object_performance/disp_ht.yaml b/configs/V38nano/object_performance/disp_ht.yaml new file mode 100644 index 00000000..8b5a10e2 --- /dev/null +++ b/configs/V38nano/object_performance/disp_ht.yaml @@ -0,0 +1,53 @@ +HtoLLPto4b_M125_Phi60_ctau100_promptHT: + sample: HtoLLPto4b_M125_Phi60_ctau100 + version: V38nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + L1puppiJetSC4sums:HT: "pt" + L1TrackHT:HT: "ht" + L1ExtTrackHT:HT: "ht" + thresholds: [50, 100] + # scalings: + # method: "naive" + # threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +# HtoLLPto4b_M125_Phi60_ctau100_dispHT: +# sample: HtoLLPto4b_M125_Phi60_ctau100 +# version: V38nano +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen HT" +# trafo: "HT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# test_objects: +# L1puppiJetSC4sums:HT: "pt" +# L1TrackHT:HT: "ht" +# L1ExtTrackHT:HT: "ht" +# thresholds: [350] +# scalings: +# method: "naive" +# threshold: 0.90 +# xlabel: "Gen. HT (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 750 +# step: 20 diff --git a/configs/V38nano/object_performance/electron_iso.yaml b/configs/V38nano/object_performance/electron_iso.yaml new file mode 100644 index 00000000..ae00f6aa --- /dev/null +++ b/configs/V38nano/object_performance/electron_iso.yaml @@ -0,0 +1,50 @@ +ElectronsIsolation_Barrel: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkElectron:NoIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +ElectronsIsolation_Endcap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.479" + object: + - "abs({eta}) < 2.4" + test_objects: + L1tkElectron:NoIsoForIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V38nano/object_performance/electron_matching.yaml b/configs/V38nano/object_performance/electron_matching.yaml new file mode 100644 index 00000000..ca1a7155 --- /dev/null +++ b/configs/V38nano/object_performance/electron_matching.yaml @@ -0,0 +1,103 @@ +ElectronsMatchingBarrel: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V38nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 100 +# step: 3 + +ElectronsMatchingEndcap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V38nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 100 +# step: 3 diff --git a/configs/V38nano/object_performance/electron_matching_eta.yaml b/configs/V38nano/object_performance/electron_matching_eta.yaml new file mode 100644 index 00000000..8d4d5094 --- /dev/null +++ b/configs/V38nano/object_performance/electron_matching_eta.yaml @@ -0,0 +1,52 @@ +ElectronsMatching_Eta_Pt10to25: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +ElectronsMatching_Eta_Pt25toInf: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} > 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V38nano/object_performance/electron_trigger.yaml b/configs/V38nano/object_performance/electron_trigger.yaml new file mode 100644 index 00000000..fa83c998 --- /dev/null +++ b/configs/V38nano/object_performance/electron_trigger.yaml @@ -0,0 +1,119 @@ +ElectronsTriggerBarrel: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:barrel: "pt" + L1tkElectron:NoIso:barrel: "pt" + L1tkElectron:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +ElectronsTriggerEndcap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:endcap: "pt" + L1tkElectron:NoIso:endcap: "pt" + L1tkElectron:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +# ElectronsTriggerBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V38nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: + # L1EG:default:barrel: "pt" +# L1tkElectron:NoIso:barrel: "pt" +# L1tkElectron:Iso:barrel: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 + +# ElectronsTriggerEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V38nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.8" +# test_objects: +# # L1EG:default:endcap: "pt" +# L1tkElectron:NoIso:endcap: "pt" +# L1tkElectron:Iso:endcap: "pt" +# thresholds: [10, 20, 30, 40] +# scalings: +# method: "naive" +# threshold: 0.95 +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" +# binning: +# min: 0 +# max: 100 +# step: 1.5 diff --git a/configs/V38nano/object_performance/jets_matching.yaml b/configs/V38nano/object_performance/jets_matching.yaml new file mode 100644 index 00000000..b650416a --- /dev/null +++ b/configs/V38nano/object_performance/jets_matching.yaml @@ -0,0 +1,118 @@ +JetMatchingBarrel: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcap: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingForward: + version: V38nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 + + +JetMatchingBarrelSC8: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcapSC8: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 \ No newline at end of file diff --git a/configs/V38nano/object_performance/jets_matching_eta.yaml b/configs/V38nano/object_performance/jets_matching_eta.yaml new file mode 100644 index 00000000..80a622dd --- /dev/null +++ b/configs/V38nano/object_performance/jets_matching_eta.yaml @@ -0,0 +1,94 @@ +JetMatching_Eta_Pt40To100: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + L1caloJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5.5 + max: 5.5 + step: 0.25 + +JetMatching_Eta_SC8_Pt100ToInf: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 \ No newline at end of file diff --git a/configs/V38nano/object_performance/jets_matching_wBTag.yaml b/configs/V38nano/object_performance/jets_matching_wBTag.yaml new file mode 100644 index 00000000..492ab89e --- /dev/null +++ b/configs/V38nano/object_performance/jets_matching_wBTag.yaml @@ -0,0 +1,136 @@ +JetMatching_Eta_Pt40To100_ExtendedVsRegular: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genBJets: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genNotBJets: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Pt_Pt30ToInf_genBJets: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 + +JetMatching_Pt_Pt30ToInf_genNotBJets: + sample: TT + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 diff --git a/configs/V38nano/object_performance/jets_sc8_trigger.yaml b/configs/V38nano/object_performance/jets_sc8_trigger.yaml new file mode 100644 index 00000000..3fb48dfb --- /dev/null +++ b/configs/V38nano/object_performance/jets_sc8_trigger.yaml @@ -0,0 +1,77 @@ +JetTurnonBarrelSC8: + version: V38nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcapSC8: + version: V38nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForwardSC8: + version: V38nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default:forward: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V38nano/object_performance/jets_trigger.yaml b/configs/V38nano/object_performance/jets_trigger.yaml new file mode 100644 index 00000000..b49f5cc5 --- /dev/null +++ b/configs/V38nano/object_performance/jets_trigger.yaml @@ -0,0 +1,85 @@ +JetTurnonBarrel: + version: V38nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + # L1puppiJetHisto:default:barrel: "pt" + L1puppiJetSC4:default:barrel: "pt" + L1caloJet:default:barrel: "pt" + L1TrackJet:default:barrel: "pt" + thresholds: [50, 100] + # scalings: + # method: "naive" + # threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcap: + version: V38nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + # L1puppiJetHisto:default:endcap: "pt" + L1puppiJetSC4:default:endcap: "pt" + L1caloJet:default:endcap: "pt" + L1TrackJet:default:endcap: "pt" + thresholds: [50, 100] + # scalings: + # method: "naive" + # threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForward: + version: V38nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + # L1puppiJetHisto:default:forward: "pt" + L1puppiJetSC4:default:forward: "pt" + L1caloJet:default:forward: "pt" + thresholds: [50, 100] + # scalings: + # method: "naive" + # threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V38nano/object_performance/met_ht_mht.yaml b/configs/V38nano/object_performance/met_ht_mht.yaml new file mode 100644 index 00000000..bd1eacf3 --- /dev/null +++ b/configs/V38nano/object_performance/met_ht_mht.yaml @@ -0,0 +1,124 @@ +# HT_90perc: +# sample: TT +# version: V38nano +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen HT" +# trafo: "HT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# test_objects: +# # L1puppiHistoJetSums:HT: "pt" +# L1puppiJetSC4sums:HT: "pt" +# L1TrackHT:HT: "ht" +# thresholds: [350] +# scalings: +# method: "naive" +# threshold: 0.90 +# xlabel: "Gen. HT (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 750 +# step: 20 + +TkHT_90perc: + sample: TT + version: V38nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + # L1puppiHistoJetSums:HT: "pt" + L1puppiJetSC4sums:HT: "pt" + L1TrackHT:HT: "ht" + thresholds: [150, 350] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +# MHT_50perc: +# sample: TT +# version: V38nano +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen MHT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# trafo: "MHT" +# test_objects: +# L1puppiHistoJetSums:MHT: "pt" +# L1puppiJetSC4sums:MHT: "pt" +# L1TrackHT:MHT: "mht" +# thresholds: [70, 150] +# scalings: +# method: "naive" +# threshold: 0.50 +# xlabel: "Gen. MHT30 (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 500 +# step: 20 + +# MET_90perc: +# sample: TT +# version: V38nano +# reference_object: +# object: "GenMET" +# x_arg: "pt" +# label: "Gen MET" +# test_objects: +# L1puppiMET:default: "pt" +# L1puppiMLMET:default: "pt" +# L1TrackMET:default: "pt" +# thresholds: [125, 150, 175, 200] +# xlabel: "Gen. MET (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# scalings: +# method: "naive" +# threshold: 0.90 +# binning: +# min: 0 +# max: 500 +# step: 20 + +# MET_90perc_scTanh: +# sample: TT +# version: V38nano +# reference_object: +# object: "GenMET" +# x_arg: "pt" +# label: "Gen MET" +# test_objects: +# L1puppiMET:default: "pt" +# L1puppiMLMET:default: "pt" +# L1TrackMET:default: "pt" +# thresholds: [125, 150, 175] +# xlabel: "Gen. MET (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# scalings: +# method: "errf" +# threshold: 0.90 +# binning: +# min: 0 +# max: 500 +# step: 20 \ No newline at end of file diff --git a/configs/V38nano/object_performance/muonTF_matching.yaml b/configs/V38nano/object_performance/muonTF_matching.yaml new file mode 100644 index 00000000..1dcb1443 --- /dev/null +++ b/configs/V38nano/object_performance/muonTF_matching.yaml @@ -0,0 +1,82 @@ +MuonTFsMatchingBarrel: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1MuonKMTF:default:barrel: "pt" + L1MuonOMTF:default:barrel: "pt" + L1MuonEMTF:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonTFsMatchingOverlap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1MuonKMTF:default:overlap: "pt" + L1MuonOMTF:default:overlap: "pt" + L1MuonEMTF:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonTFsMatchingEndcap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1MuonKMTF:default:endcap: "pt" + L1MuonOMTF:default:endcap: "pt" + L1MuonEMTF:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V38nano/object_performance/muonTF_matching_eta.yaml b/configs/V38nano/object_performance/muonTF_matching_eta.yaml new file mode 100644 index 00000000..2a697205 --- /dev/null +++ b/configs/V38nano/object_performance/muonTF_matching_eta.yaml @@ -0,0 +1,56 @@ +MuonTFsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1MuonKMTF:default: "eta" + L1MuonOMTF:default: "eta" + L1MuonEMTF:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonTFsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1MuonKMTF:default: "eta" + L1MuonOMTF:default: "eta" + L1MuonEMTF:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V38nano/object_performance/muonTF_trigger.yaml b/configs/V38nano/object_performance/muonTF_trigger.yaml new file mode 100644 index 00000000..4a1cc020 --- /dev/null +++ b/configs/V38nano/object_performance/muonTF_trigger.yaml @@ -0,0 +1,93 @@ +MuonTFsTrigger_Barrel: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1MuonKMTF:default:barrel: "pt" + L1MuonOMTF:default:barrel: "pt" + L1MuonEMTF:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + # scalings: + # method: "naive" + # threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +# MuonTFsTrigger_Overlap: +# sample: DYLL_M50 +# version: V38nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "eta" +# label: "Gen Muons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 13" +# object: +# - "abs({eta}) > 0.83" +# - "abs({eta}) < 1.24" +# test_objects: +# L1gmtMuon:default:overlap: "pt" +# L1MuonKMTF:default:overlap: "pt" +# L1MuonOMTF:default:overlap: "pt" +# L1MuonEMTF:default:overlap: "pt" +# L1gmtTkMuon:default:overlap: "pt" +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" +# thresholds: [20, 25] +# # scalings: +# # method: "naive" +# # threshold: 0.95 +# binning: +# min: 0 +# max: 50 +# step: 1.5 + +# MuonTFsTrigger_Endcap: +# sample: DYLL_M50 +# version: V38nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "eta" +# label: "Gen Muons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 13" +# object: +# - "abs({eta}) > 1.24" +# test_objects: +# L1gmtMuon:default:endcap: "pt" +# L1MuonKMTF:default:endcap: "pt" +# L1MuonOMTF:default:endcap: "pt" +# L1MuonEMTF:default:endcap: "pt" +# L1gmtTkMuon:default:endcap: "pt" +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" +# thresholds: [20, 25] +# # scalings: +# # method: "naive" +# # threshold: 0.95 +# binning: +# min: 0 +# max: 50 +# step: 1.5 diff --git a/configs/V38nano/object_performance/muon_matching.yaml b/configs/V38nano/object_performance/muon_matching.yaml new file mode 100644 index 00000000..ff078085 --- /dev/null +++ b/configs/V38nano/object_performance/muon_matching.yaml @@ -0,0 +1,73 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V38nano/object_performance/muon_matching_eta.yaml b/configs/V38nano/object_performance/muon_matching_eta.yaml new file mode 100644 index 00000000..bd247676 --- /dev/null +++ b/configs/V38nano/object_performance/muon_matching_eta.yaml @@ -0,0 +1,51 @@ +MuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtMuon:dR0p6: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V38nano/object_performance/muon_matching_v2.yaml b/configs/V38nano/object_performance/muon_matching_v2.yaml new file mode 100644 index 00000000..d3902da4 --- /dev/null +++ b/configs/V38nano/object_performance/muon_matching_v2.yaml @@ -0,0 +1,77 @@ +MuonsMatchingBarrel_Alt: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtMuon:dR0p6:barrel: "pt" + L1gmtTkMuon:VLoose:barrel: "pt" + # L1gmtTkMuon:VLooseDr0p6:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap_Alt: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtMuon:dR0p6:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap_Alt: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtMuon:dR0p6:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V38nano/object_performance/muon_trigger.yaml b/configs/V38nano/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..e3644d7e --- /dev/null +++ b/configs/V38nano/object_performance/muon_trigger.yaml @@ -0,0 +1,84 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V38nano/object_performance/photon_iso.yaml b/configs/V38nano/object_performance/photon_iso.yaml new file mode 100644 index 00000000..9f410346 --- /dev/null +++ b/configs/V38nano/object_performance/photon_iso.yaml @@ -0,0 +1,51 @@ +PhotonIsolation_Barrel: + sample: Hgg + version: V38nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkPhoton:NoIso:barrel: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +PhotonIsolation_Endcap: + sample: Hgg + version: V38nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.479" + - "abs({eta}) < 2.4" + object: + - "abs({eta}) > 1.479" + test_objects: + L1tkPhoton:NoIso:endcap: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V38nano/object_performance/photons_matching.yaml b/configs/V38nano/object_performance/photons_matching.yaml new file mode 100644 index 00000000..8814dc00 --- /dev/null +++ b/configs/V38nano/object_performance/photons_matching.yaml @@ -0,0 +1,103 @@ +PhotonsMatching_Barrel: + sample: Hgg + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap: + sample: Hgg + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Barrel_wPrunedGenParts: + sample: Hgg + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap_wPrunedGenParts: + sample: Hgg + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V38nano/object_performance/photons_matching_eta.yaml b/configs/V38nano/object_performance/photons_matching_eta.yaml new file mode 100644 index 00000000..9806dc40 --- /dev/null +++ b/configs/V38nano/object_performance/photons_matching_eta.yaml @@ -0,0 +1,52 @@ +PhotonsMatching_Eta_Pt10to25: + sample: Hgg + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +PhotonsMatching_Eta_Pt25toInf: + sample: Hgg + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} >= 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V38nano/object_performance/photons_trigger.yaml b/configs/V38nano/object_performance/photons_trigger.yaml new file mode 100644 index 00000000..7981c9f5 --- /dev/null +++ b/configs/V38nano/object_performance/photons_trigger.yaml @@ -0,0 +1,59 @@ +PhotonsTrigger_Barrel: + sample: Hgg + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:barrel: "pt" + L1tkPhoton:NoIso:barrel: "pt" + L1tkPhoton:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Endcap: + sample: Hgg + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:endcap: "pt" + L1tkPhoton:NoIso:endcap: "pt" + L1tkPhoton:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V38nano/object_performance/tau_matching.yaml b/configs/V38nano/object_performance/tau_matching.yaml new file mode 100644 index 00000000..d3326cdc --- /dev/null +++ b/configs/V38nano/object_performance/tau_matching.yaml @@ -0,0 +1,53 @@ +TausMatchingBarrel: + sample: VBFHToTauTau + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 150 + step: 6 + +TausMatchingEndcap: + sample: VBFHToTauTau + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V38nano/object_performance/tau_matching_eta.yaml b/configs/V38nano/object_performance/tau_matching_eta.yaml new file mode 100644 index 00000000..2f0438e3 --- /dev/null +++ b/configs/V38nano/object_performance/tau_matching_eta.yaml @@ -0,0 +1,50 @@ +TauMatching_Eta_Pt40To100: + sample: VBFHToTauTau + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -3.0 + max: 3.0 + step: 0.2 + +TauMatching_Eta_Pt100ToInf: + sample: VBFHToTauTau + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V38nano/object_performance/tau_trigger.yaml b/configs/V38nano/object_performance/tau_trigger.yaml new file mode 100644 index 00000000..f1f5061a --- /dev/null +++ b/configs/V38nano/object_performance/tau_trigger.yaml @@ -0,0 +1,59 @@ +TauTriggerBarrel_90perc: + sample: VBFHToTauTau + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:barrel: "pt" + L1hpsTau:default:barrel: "pt" + L1caloTau:default:barrel: "pt" + L1nnCaloTau:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_90perc: + sample: VBFHToTauTau + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:endcap: "pt" + L1hpsTau:default:endcap: "pt" + L1caloTau:default:endcap: "pt" + L1nnCaloTau:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V38nano/object_performance/tkmuon_matching.yaml b/configs/V38nano/object_performance/tkmuon_matching.yaml new file mode 100644 index 00000000..5b5e79cd --- /dev/null +++ b/configs/V38nano/object_performance/tkmuon_matching.yaml @@ -0,0 +1,85 @@ +TkMuonsMatchingBarrel: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + # L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + L1gmtTkMuon:VLoose:barrel: "pt" + L1gmtTkMuon:Loose:barrel: "pt" + L1gmtTkMuon:Medium:barrel: "pt" + L1gmtTkMuon:Tight:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +TkMuonsMatchingOverlap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + # L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + L1gmtTkMuon:VLoose:overlap: "pt" + L1gmtTkMuon:Loose:overlap: "pt" + L1gmtTkMuon:Medium:overlap: "pt" + L1gmtTkMuon:Tight:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +TkMuonsMatchingEndcap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + # L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + L1gmtTkMuon:VLoose:endcap: "pt" + L1gmtTkMuon:Loose:endcap: "pt" + L1gmtTkMuon:Medium:endcap: "pt" + L1gmtTkMuon:Tight:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V38nano/object_performance/tkmuon_matching_eta.yaml b/configs/V38nano/object_performance/tkmuon_matching_eta.yaml new file mode 100644 index 00000000..d44c9d18 --- /dev/null +++ b/configs/V38nano/object_performance/tkmuon_matching_eta.yaml @@ -0,0 +1,58 @@ +TkMuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + # L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + L1gmtTkMuon:VLoose: "eta" + L1gmtTkMuon:Loose: "eta" + L1gmtTkMuon:Medium: "eta" + L1gmtTkMuon:Tight: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +TkMuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + # L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + L1gmtTkMuon:VLoose: "eta" + L1gmtTkMuon:Loose: "eta" + L1gmtTkMuon:Medium: "eta" + L1gmtTkMuon:Tight: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V38nano/object_performance/tkmuon_trigger.yaml b/configs/V38nano/object_performance/tkmuon_trigger.yaml new file mode 100644 index 00000000..3384324b --- /dev/null +++ b/configs/V38nano/object_performance/tkmuon_trigger.yaml @@ -0,0 +1,96 @@ +TkMuonsTrigger_Barrel: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + # L1gmtMuon:default:barrel: "pt" + # L1gmtTkMuon:default:barrel: "pt" + L1gmtTkMuon:VLoose:barrel: "pt" + L1gmtTkMuon:Loose:barrel: "pt" + L1gmtTkMuon:Medium:barrel: "pt" + L1gmtTkMuon:Tight:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +TkMuonsTrigger_Overlap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + # L1gmtMuon:default:overlap: "pt" + # L1gmtTkMuon:default:overlap: "pt" + L1gmtTkMuon:VLoose:overlap: "pt" + L1gmtTkMuon:Loose:overlap: "pt" + L1gmtTkMuon:Medium:overlap: "pt" + L1gmtTkMuon:Tight:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +TkMuonsTrigger_Endcap: + sample: DYLL_M50 + version: V38nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + # L1gmtMuon:default:endcap: "pt" + # L1gmtTkMuon:default:endcap: "pt" + L1gmtTkMuon:VLoose:endcap: "pt" + L1gmtTkMuon:Loose:endcap: "pt" + L1gmtTkMuon:Medium:endcap: "pt" + L1gmtTkMuon:Tight:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V38nano/objects/electrons.yaml b/configs/V38nano/objects/electrons.yaml new file mode 100644 index 00000000..cfacf196 --- /dev/null +++ b/configs/V38nano/objects/electrons.yaml @@ -0,0 +1,49 @@ +L1tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + endcap: + - "({eleId} == 1) | ({pt} < 25)" + barrel: + - "{eleId} == 1" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron, no ID" + cuts: + inclusive: + - "abs({eta}) < 2.4" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + endcap: + - "abs({relIso}) < 0.28" + +L1EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{eleId} == 1" + endcap: + - "{saId} == 1" diff --git a/configs/V38nano/objects/jets.yaml b/configs/V38nano/objects/jets.yaml new file mode 100644 index 00000000..481cccda --- /dev/null +++ b/configs/V38nano/objects/jets.yaml @@ -0,0 +1,103 @@ +L1caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiExtJetSC4: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + PtGe25: + cuts: + inclusive: + - "abs({eta}) < 7" + - "abs({pt}) >= 25" + bjetnn: + label: "SC Extended PuppiJet, BtagScore > 0.71" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{btagScore} > 0.71" + +L1puppiJetHisto: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC4: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + PtGe25: + cuts: + inclusive: + - "abs({eta}) < 7" + - "abs({pt}) >= 25" + +L1puppiJetSC8: + match_dR: 0.35 + label: "Seeded Cone PuppiJet 8" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1TrackJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + + diff --git a/configs/V38nano/objects/met_ht_mht.yaml b/configs/V38nano/objects/met_ht_mht.yaml new file mode 100644 index 00000000..8dbdb2fd --- /dev/null +++ b/configs/V38nano/objects/met_ht_mht.yaml @@ -0,0 +1,69 @@ +# phase1PuppiHT: +# label: "Histogrammed Puppi HT" +# ids: +# default: {} + +# phase1PuppiMHT: +# label: "Phase1 Puppi MHT" +# ids: +# default: {} + +L1puppiMET: + label: "Puppi MET" + ids: + default: {} + +L1puppiMLMET: + label: "Puppi MLMET" + ids: + default: {} + +L1puppiJetSC4sums: + ids: + HT: + label: "SeededCone HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "SeededCone MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1puppiHistoJetSums: + ids: + HT: + label: "Histogrammed Puppi HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "Histogrammed Puppi MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1TrackHT: + ids: + HT: + label: "Tracker HT" + MHT: + label: "Tracker MHT" + +L1ExtTrackHT: + ids: + HT: + label: "ext. Tracker HT" + MHT: + label: "ext. Tracker MHT" + +L1TrackMET: + label: "Tracker MET" + ids: + default: {} + +L1TrackTripletWord: + label: "Track Triplet for W3Pi" + ids: + default: {} \ No newline at end of file diff --git a/configs/V38nano/objects/muons.yaml b/configs/V38nano/objects/muons.yaml new file mode 100644 index 00000000..96b2e80d --- /dev/null +++ b/configs/V38nano/objects/muons.yaml @@ -0,0 +1,137 @@ +GenPart: + label: "Gen Muon" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "(({statusFlags}>>7)&1) == 1" + +L1gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + label: "GMT TkMuon, Loose ID" + cuts: + inclusive: + - "{hwQual} >= 3" + VLoose: # x.numberOfMatches() > 0 + label: "GMT TkMuon, VLoose ID" + cuts: + inclusive: + - "{hwQual} >= 1" + Loose: # x.numberOfMatches() >1 + label: "GMT TkMuon, Loose ID" + cuts: + inclusive: + - "{hwQual} >= 3" + Medium: # x.stubs().size()>1 + label: "GMT TkMuon, Medium ID" + cuts: + inclusive: + - "{hwQual} >= 7" + Tight: # x.numberOfMatches()>2 + label: "GMT TkMuon, Tight ID" + cuts: + inclusive: + - "{hwQual} >= 15" + +L1gmtMuon: + label: "GMT Muon" + match_dR: 0.6 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + overlap: + - "{hwQual} >= 12" + endcap: + - "{hwQual} >= 14" + dR0p6: + label: "GMT Muon, match dR < 0.6" + match_dR: 0.6 + cuts: + overlap: + - "{hwQual} >= 12" + endcap: + - "{hwQual} >= 14" + +L1gmtDispMuon: + label: "GMT Displaced Muon" + match_dR: 0.6 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + dXYge8: + label: "Disp. Muon, dXY>8" + cuts: + endcap: + - "{d0} >= 8" + dXYge8Qual15: + label: "Disp. Muon, dXY>8, qual>=15" + cuts: + inclusive: + - "abs({eta}) < 2.4" + endcap: + - "{hwQual} >= 15" + - "{d0} >= 8" + qual15: + label: "Disp. Muon, qual>=15" + cuts: + endcap: + - "{hwQual} >= 15" + qual15_Eta2p0: + label: "Disp. Muon, eta < 2, qual>=15" + cuts: + inclusive: + - "abs({eta}) < 2" + endcap: + - "{hwQual} >= 15" + +L1MuonKMTF: + label: "KMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonOMTF: + label: "OMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonEMTF: + label: "EMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} diff --git a/configs/V38nano/objects/photons.yaml b/configs/V38nano/objects/photons.yaml new file mode 100644 index 00000000..12d51f0c --- /dev/null +++ b/configs/V38nano/objects/photons.yaml @@ -0,0 +1,29 @@ +L1tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "L1tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "{eleId} == 1" + endcap: + - "{phoId} == 1" + Iso: + label: "L1tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "abs({relIso}) < 0.25" + - "{eleId} == 1" + endcap: + - "abs({relIso}) < 0.205" + - "{phoId} == 1" diff --git a/configs/V38nano/objects/pv.yaml b/configs/V38nano/objects/pv.yaml new file mode 100644 index 00000000..25fea9c0 --- /dev/null +++ b/configs/V38nano/objects/pv.yaml @@ -0,0 +1,4 @@ +L1PV: + label: "Primary Vertex" + ids: + default: {} diff --git a/configs/V38nano/objects/taus.yaml b/configs/V38nano/objects/taus.yaml new file mode 100644 index 00000000..11e49a74 --- /dev/null +++ b/configs/V38nano/objects/taus.yaml @@ -0,0 +1,61 @@ +L1nnPuppiTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + # - "{passLooseNN}==1" + # Current IB (22 Feb recipe) does not have updated WP, so cut on NN score rather than checking passLooseNN + - "{chargedIso} > 0.22" + +L1hpsTau: + label: "HPS Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + +L1caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" + +L1nnCaloTau: + label: "NN Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{hwQual}==3" diff --git a/configs/V38nano/rate_plots/bjet.yaml b/configs/V38nano/rate_plots/bjet.yaml new file mode 100644 index 00000000..218ba660 --- /dev/null +++ b/configs/V38nano/rate_plots/bjet.yaml @@ -0,0 +1,10 @@ +BJetRates: + sample: MinBias + version: V38nano + test_objects: + - L1puppiExtJetSC4:default + - L1puppiExtJetSC4:bjetnn + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V38nano/rate_plots/disp_ht_sig.yaml b/configs/V38nano/rate_plots/disp_ht_sig.yaml new file mode 100644 index 00000000..acba1b3e --- /dev/null +++ b/configs/V38nano/rate_plots/disp_ht_sig.yaml @@ -0,0 +1,13 @@ + +DispHTRates_Signal: + sample: HtoLLPto4B_M125_Phi60_ctau100 + version: V38nano + test_objects: + # - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + - L1ExtTrackHT:HT + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V38nano/rate_plots/disp_muons.yaml b/configs/V38nano/rate_plots/disp_muons.yaml new file mode 100644 index 00000000..06469d1e --- /dev/null +++ b/configs/V38nano/rate_plots/disp_muons.yaml @@ -0,0 +1,24 @@ +gmtDispMuon: + sample: MinBias + version: V38nano + test_objects: + - L1gmtMuon:default + - L1gmtDispMuon:default + binning: + min: 0 + max: 75 + step: 3 + +gmtDispMuonByRegion: + sample: MinBias + version: V38nano + test_objects: + # - L1gmtMuon:default + # - L1gmtDispMuon:default + - L1gmtDispMuon:default:barrel + - L1gmtDispMuon:default:overlap + - L1gmtDispMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 \ No newline at end of file diff --git a/configs/V38nano/rate_plots/eg.yaml b/configs/V38nano/rate_plots/eg.yaml new file mode 100644 index 00000000..44d6cb62 --- /dev/null +++ b/configs/V38nano/rate_plots/eg.yaml @@ -0,0 +1,12 @@ +EGRates: + sample: MinBias + version: V38nano + test_objects: + - L1EG:default + - L1tkElectron:NoIso + - L1tkElectron:Iso + - L1tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 diff --git a/configs/V38nano/rate_plots/ht.yaml b/configs/V38nano/rate_plots/ht.yaml new file mode 100644 index 00000000..e3efeba0 --- /dev/null +++ b/configs/V38nano/rate_plots/ht.yaml @@ -0,0 +1,60 @@ +HTRates: + sample: MinBias + version: V38nano + test_objects: + # - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + binning: + min: 50 + max: 975 + step: 25 + +MHTRates: + sample: MinBias + version: V38nano + test_objects: + # - L1puppiHistoJetSums:MHT + - L1puppiJetSC4sums:MHT + # - L1TrackHT:MHT + binning: + min: 50 + max: 975 + step: 25 + +DispHTRates: + sample: MinBias + version: V38nano + test_objects: + # - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + - L1ExtTrackHT:HT + binning: + min: 50 + max: 975 + step: 25 +# MHTRates: +# sample: MinBias +# version: V38nano +# test_objects: +# # - L1puppiHistoJetSums:MHT +# - L1puppiJetSC4sums:MHT +# - L1TrackHT:MHT +# binning: +# min: 50 +# max: 975 +# step: 25 + +# DispHTRates: +# sample: MinBias +# version: V38nano +# test_objects: +# # - L1puppiHistoJetSums:HT +# - L1puppiJetSC4sums:HT +# - L1TrackHT:HT +# - L1ExtTrackHT:HT +# binning: +# min: 50 +# max: 975 +# step: 25 diff --git a/configs/V38nano/rate_plots/jets.yaml b/configs/V38nano/rate_plots/jets.yaml new file mode 100644 index 00000000..d20998dd --- /dev/null +++ b/configs/V38nano/rate_plots/jets.yaml @@ -0,0 +1,84 @@ +JetDefaultRates: + sample: MinBias + version: V38nano + test_objects: + # - L1puppiJetHisto:default + - L1puppiJetSC4:default + # - L1caloJet:default + # - L1TrackJet:default + binning: + min: 40 + max: 420 + step: 20 + +# JetsByRegion: +# sample: MinBias +# version: V38nano +# test_objects: +# - L1puppiJetSC4:default:barrel +# - L1puppiJetSC4:default:endcap +# - L1puppiJetSC4:default:forward +# - L1caloJet:default:barrel +# - L1caloJet:default:endcap +# - L1caloJet:default:forward +# # - L1TrackJet:default:barrel +# # - L1TrackJet:default:endcap +# binning: +# min: 40 +# max: 420 +# step: 20 + +JetExtendedRates: + sample: MinBias + version: V38nano + test_objects: + - L1puppiJetSC4:default:inclusive + - L1puppiExtJetSC4:default:inclusive + # - L1puppiExtJetSC4:default:barrel + # - L1puppiExtJetSC4:default:endcap + # - L1puppiExtJetSC4:default:forward + binning: + min: 40 + max: 420 + step: 20 + +JetExtendedRatesByRegion: + sample: MinBias + version: V38nano + test_objects: + # - L1puppiJetSC4:default:barrel + # - L1puppiJetSC4:default:endcap + # - L1puppiJetSC4:default:forward + - L1puppiExtJetSC4:default:barrel + - L1puppiExtJetSC4:default:endcap + - L1puppiExtJetSC4:default:forward + binning: + min: 40 + max: 420 + step: 20 + +# JetSC8Rates: +# sample: MinBias +# version: V38nano +# test_objects: +# - L1puppiJetSC4:default +# - L1puppiJetSC8:default +# binning: +# min: 40 +# max: 420 +# step: 20 + + +# JetSC8Rates_byRegion: +# sample: MinBias +# version: V38nano +# test_objects: +# # - L1puppiJetSC4:default +# - L1puppiJetSC8:default +# - L1puppiJetSC8:default:barrel +# - L1puppiJetSC8:default:endcap +# - L1puppiJetSC8:default:forward +# binning: +# min: 40 +# max: 420 +# step: 20 diff --git a/configs/V38nano/rate_plots/met.yaml b/configs/V38nano/rate_plots/met.yaml new file mode 100644 index 00000000..bc1c63b8 --- /dev/null +++ b/configs/V38nano/rate_plots/met.yaml @@ -0,0 +1,11 @@ +METRates: + sample: MinBias + version: V38nano + test_objects: + - L1puppiMET:default + - L1puppiMLMET:default + # - L1TrackMET:default + binning: + min: 50 + max: 500 + step: 25 diff --git a/configs/V38nano/rate_plots/muons.yaml b/configs/V38nano/rate_plots/muons.yaml new file mode 100644 index 00000000..2dc3fbc5 --- /dev/null +++ b/configs/V38nano/rate_plots/muons.yaml @@ -0,0 +1,34 @@ +gmtMuonByRegion: + sample: MinBias + version: V38nano + test_objects: + - L1gmtMuon:default:barrel + - L1gmtMuon:default:overlap + - L1gmtMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByRegion: + sample: MinBias + version: V38nano + test_objects: + - L1gmtTkMuon:default:barrel + - L1gmtTkMuon:default:overlap + - L1gmtTkMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +MuonRates: + sample: MinBias + version: V38nano + test_objects: + - L1gmtMuon:default + - L1gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 diff --git a/configs/V38nano/rate_plots/taus.yaml b/configs/V38nano/rate_plots/taus.yaml new file mode 100644 index 00000000..56d6c853 --- /dev/null +++ b/configs/V38nano/rate_plots/taus.yaml @@ -0,0 +1,25 @@ +TauRates: + sample: MinBias + version: V38nano + test_objects: + - L1nnPuppiTau:default + - L1hpsTau:default + - L1caloTau:default + - L1nnCaloTau:default + binning: + min: 10 + max: 155 + step: 5 + +TauRatesByRegion: + sample: MinBias + version: V38nano + test_objects: + - L1caloTau:default:barrel + - L1caloTau:default:endcap + - L1nnPuppiTau:default:barrel + - L1nnPuppiTau:default:endcap + binning: + min: 10 + max: 155 + step: 5 diff --git a/configs/V38nano/rate_plots/test.yml b/configs/V38nano/rate_plots/test.yml new file mode 100644 index 00000000..d24c2a80 --- /dev/null +++ b/configs/V38nano/rate_plots/test.yml @@ -0,0 +1,13 @@ +JetSC8Rates_byRegion2: + sample: MinBias + version: V38nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:inclusive + - L1puppiJetSC8:default:barrel + #- L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V38nano/rate_plots/tkmuons.yaml b/configs/V38nano/rate_plots/tkmuons.yaml new file mode 100644 index 00000000..4766ae33 --- /dev/null +++ b/configs/V38nano/rate_plots/tkmuons.yaml @@ -0,0 +1,51 @@ +gmtTkMuonByID: + sample: MinBias + version: V38nano + test_objects: + - L1gmtTkMuon:VLoose + - L1gmtTkMuon:Loose + - L1gmtTkMuon:Medium + - L1gmtTkMuon:Tight + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByID_barrel: + sample: MinBias + version: V38nano + test_objects: + - L1gmtTkMuon:VLoose:barrel + - L1gmtTkMuon:Loose:barrel + - L1gmtTkMuon:Medium:barrel + - L1gmtTkMuon:Tight:barrel + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByID_overlap: + sample: MinBias + version: V38nano + test_objects: + - L1gmtTkMuon:VLoose:overlap + - L1gmtTkMuon:Loose:overlap + - L1gmtTkMuon:Medium:overlap + - L1gmtTkMuon:Tight:overlap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByID_endcap: + sample: MinBias + version: V38nano + test_objects: + - L1gmtTkMuon:VLoose:endcap + - L1gmtTkMuon:Loose:endcap + - L1gmtTkMuon:Medium:endcap + - L1gmtTkMuon:Tight:endcap + binning: + min: 0 + max: 75 + step: 3 \ No newline at end of file diff --git a/configs/V38nano/rate_table/v38_Step1And2_cfg.yml b/configs/V38nano/rate_table/v38_Step1And2_cfg.yml new file mode 100644 index 00000000..41f66822 --- /dev/null +++ b/configs/V38nano/rate_table/v38_Step1And2_cfg.yml @@ -0,0 +1,4 @@ +version: "V38nano" +sample: "MinBias" +menu_config: "configs/V38nano/rate_table/v38_menu_Step1and2.yml" +table_fname: "rates_Step1and2" diff --git a/configs/V38nano/rate_table/v38_Step2_cfg.yml b/configs/V38nano/rate_table/v38_Step2_cfg.yml new file mode 100644 index 00000000..2df411d0 --- /dev/null +++ b/configs/V38nano/rate_table/v38_Step2_cfg.yml @@ -0,0 +1,4 @@ +version: "V38nano" +sample: "MinBias" +menu_config: "configs/V38nano/rate_table/v38_menu_Step2.yml" +table_fname: "rates_Step2" diff --git a/configs/V38nano/rate_table/v38_TkMuonLooseID_cfg.yml b/configs/V38nano/rate_table/v38_TkMuonLooseID_cfg.yml new file mode 100644 index 00000000..dadd5701 --- /dev/null +++ b/configs/V38nano/rate_table/v38_TkMuonLooseID_cfg.yml @@ -0,0 +1,4 @@ +version: "V38nano" +sample: "MinBias" +menu_config: "configs/V38nano/rate_table/v38_menu_TkMuonLooseID_cfg.yml" +table_fname: "rates_full_TkMuonLooseID" diff --git a/configs/V38nano/rate_table/v38_TkMuonMediumID_JetPt25_cfg.yml b/configs/V38nano/rate_table/v38_TkMuonMediumID_JetPt25_cfg.yml new file mode 100644 index 00000000..208bd127 --- /dev/null +++ b/configs/V38nano/rate_table/v38_TkMuonMediumID_JetPt25_cfg.yml @@ -0,0 +1,4 @@ +version: "V38nano" +sample: "MinBias" +menu_config: "configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml" +table_fname: "rates_full_TkMuonMediumID_JetPt25" diff --git a/configs/V38nano/rate_table/v38_TkMuonMediumID_cfg.yml b/configs/V38nano/rate_table/v38_TkMuonMediumID_cfg.yml new file mode 100644 index 00000000..422fe8ea --- /dev/null +++ b/configs/V38nano/rate_table/v38_TkMuonMediumID_cfg.yml @@ -0,0 +1,4 @@ +version: "V38nano" +sample: "MinBias" +menu_config: "configs/V38nano/rate_table/v38_menu_TkMuonMediumID_cfg.yml" +table_fname: "rates_full_TkMuonMediumID" diff --git a/configs/V38nano/rate_table/v38_cfg.yml b/configs/V38nano/rate_table/v38_cfg.yml new file mode 100644 index 00000000..7289a1ac --- /dev/null +++ b/configs/V38nano/rate_table/v38_cfg.yml @@ -0,0 +1,4 @@ +version: "V38nano" +sample: "MinBias" +menu_config: "configs/V38nano/rate_table/v38_menu_cfg.yml" +table_fname: "rates_full_Final_test" \ No newline at end of file diff --git a/configs/V38nano/rate_table/v38_menu_Step1and2.yml b/configs/V38nano/rate_table/v38_menu_Step1and2.yml new file mode 100644 index 00000000..1b6764bb --- /dev/null +++ b/configs/V38nano/rate_table/v38_menu_Step1and2.yml @@ -0,0 +1,532 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:PtGe25 +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:Medium +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:Medium +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:Medium +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:PtGe25 + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:Medium +################################# +########## STEP 2 +################################# +### SC8 wide cone jet seeds +L1_SinglePfJet8: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC8:default +L1_DoublePFJet8_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 200.0 + obj: L1puppiJetSC8:default + leg2: + threshold_cut: leg2.offline_pt >= 200.0 + obj: L1puppiJetSC8:default +### Bjet seed +L1_PFHTT_QuadJet_BTagNNScore: + cross_masks: + - (leg2.btagScore + leg3.btagScore + leg4.btagScore + leg5.btagScore) > 2.20 + leg1: + threshold_cut: offline_pt >= 299.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg3: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg4: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg5: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default +############################## +### Displaced Muons +############################## +L1_SingleDispMu: + cross_masks: [] + leg1: + threshold_cut: pt >= 22.0 + obj: L1gmtDispMuon:qual15_Eta2p0 +# L1_SingleDispMu_BMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:barrel +# L1_SingleDispMu_OMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:overlap +# # L1_SingleDispMu_EMTF: +# # cross_masks: [] +# # leg1: +# # threshold_cut: pt >= 22.0 +# # obj: L1gmtDispMuon:default:endcap +# L1_SingleDispMu_EMTF_SQ_eta2p0: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:qual15_Eta2p0:endcap +L1_DoubleDispMu: + cross_masks: [] + # - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 15.0 + obj: L1gmtDispMuon:default + leg2: + threshold_cut: pt > 7 + obj: L1gmtDispMuon:default +# ############################## +# ### GTT +# ############################## +L1_W3pi_GTT: + cross_masks: [] + leg1: + threshold_cut: pt > -99 + obj: L1TrackTripletWord:default +# L1_TkDispHT: +# cross_masks: [] +# leg1: +# threshold_cut: ht >= 200 +# obj: L1ExtTrackHT:HT \ No newline at end of file diff --git a/configs/V38nano/rate_table/v38_menu_Step2.yml b/configs/V38nano/rate_table/v38_menu_Step2.yml new file mode 100644 index 00000000..1399f49d --- /dev/null +++ b/configs/V38nano/rate_table/v38_menu_Step2.yml @@ -0,0 +1,125 @@ +### SC8 wide cone jet seeds +L1_SinglePfJet8: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC8:default +L1_DoublePFJet8_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 200.0 + obj: L1puppiJetSC8:default + leg2: + threshold_cut: leg2.offline_pt >= 200.0 + obj: L1puppiJetSC8:default +### Bjet seed +L1_PFHTT_QuadJet_BTagNNScore: + cross_masks: + - (leg2.btagScore + leg3.btagScore + leg4.btagScore + leg5.btagScore) > 2.20 + leg1: + threshold_cut: offline_pt >= 299.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg3: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg4: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg5: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default +# ############################## +# ### Displaced Muons +# ############################## +L1_SingleDispMu: + cross_masks: [] + leg1: + threshold_cut: pt >= 22.0 + obj: L1gmtDispMuon:qual15_Eta2p0 +# L1_SingleDispMu_BMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:barrel +# L1_SingleDispMu_OMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:overlap +# # L1_SingleDispMu_EMTF: +# # cross_masks: [] +# # leg1: +# # threshold_cut: pt >= 22.0 +# # obj: L1gmtDispMuon:default:endcap +# L1_SingleDispMu_EMTF_SQ_eta2p0: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:qual15_Eta2p0:endcap +L1_DoubleDispMu: + cross_masks: [] + leg1: + threshold_cut: pt > 15.0 + obj: L1gmtDispMuon:default + leg2: + threshold_cut: pt > 7 + obj: L1gmtDispMuon:default +# # ############################## +# # ### GTT +# # ############################## +L1_W3pi_GTT: + cross_masks: [] + leg1: + threshold_cut: pt > -99 + obj: L1TrackTripletWord:default +# L1_TkDispHT: +# cross_masks: [] +# leg1: +# threshold_cut: ht >= 200 +# obj: L1ExtTrackHT:HT + + +# #### FOR DEBUG +# #### STEP1 muons +# L1_SingleTkMu: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 22.0 +# obj: L1gmtTkMuon:Medium +# L1_TripleTkMu: +# cross_masks: +# - abs(leg2.z0-leg1.z0) < 1 +# - abs(leg3.z0-leg1.z0) < 1 +# leg1: +# threshold_cut: pt > 5 +# obj: L1gmtTkMuon:Medium +# leg2: +# threshold_cut: pt > 3 +# obj: L1gmtTkMuon:Medium +# leg3: +# threshold_cut: pt > 3 +# obj: L1gmtTkMuon:Medium +# L1_DoubleTkMu: +# cross_masks: +# - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) +# leg1: +# threshold_cut: offline_pt > 15.0 +# obj: L1gmtTkMuon:Medium +# leg2: +# threshold_cut: pt > 7 +# obj: L1gmtTkMuon:Medium +# L1_DoubleTkMu4_SQ_OS_dR_Max1p2: +# cross_masks: +# - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) +# - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) +# - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) +# leg1: +# threshold_cut: pt > 4 +# obj: L1gmtTkMuon:Medium +# leg2: +# threshold_cut: pt > 4 +# obj: L1gmtTkMuon:Medium \ No newline at end of file diff --git a/configs/V38nano/rate_table/v38_menu_TkMuonLooseID_cfg.yml b/configs/V38nano/rate_table/v38_menu_TkMuonLooseID_cfg.yml new file mode 100644 index 00000000..5a412a41 --- /dev/null +++ b/configs/V38nano/rate_table/v38_menu_TkMuonLooseID_cfg.yml @@ -0,0 +1,445 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Loose +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Loose +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:default +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:Loose +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:Loose +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Loose +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:Loose +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:default +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:default +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Loose +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Loose +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:default + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:Loose diff --git a/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml b/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml new file mode 100644 index 00000000..b8690d7f --- /dev/null +++ b/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml @@ -0,0 +1,480 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:PtGe25 +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:Medium +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:Medium +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:Medium +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:PtGe25 + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:Medium +################################# +########## STEP 2 +################################# +L1_PFHTT_QuadJet_BTagNNScore: + cross_masks: + - (leg2.btagScore + leg3.btagScore + leg4.btagScore + leg5.btagScore) > 2.20 + leg1: + threshold_cut: offline_pt >= 299.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 0.0 + obj: L1puppiExtJetSC4:PtGe25 + leg3: + threshold_cut: offline_pt >= 0.0 + obj: L1puppiExtJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 0.0 + obj: L1puppiExtJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 0.0 + obj: L1puppiExtJetSC4:PtGe25 +L1_SinglePfJet8: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC8:default +L1_DoublePFJet8_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 200.0 + obj: L1puppiJetSC8:default + leg2: + threshold_cut: leg2.offline_pt >= 200.0 + obj: L1puppiJetSC8:default \ No newline at end of file diff --git a/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_cfg.yml b/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_cfg.yml new file mode 100644 index 00000000..30871bf5 --- /dev/null +++ b/configs/V38nano/rate_table/v38_menu_TkMuonMediumID_cfg.yml @@ -0,0 +1,445 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:default +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:Medium +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:Medium +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:Medium +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:default +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:default +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:default + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:Medium diff --git a/configs/V38nano/rate_table/v38_menu_cfg.yml b/configs/V38nano/rate_table/v38_menu_cfg.yml new file mode 100644 index 00000000..c3428fe7 --- /dev/null +++ b/configs/V38nano/rate_table/v38_menu_cfg.yml @@ -0,0 +1,445 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:default +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:default +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:default +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:default +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:default +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:default +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:default +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:default +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:default +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:default + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:default diff --git a/configs/V38nano_DT12x/README.md b/configs/V38nano_DT12x/README.md new file mode 100644 index 00000000..5f545258 --- /dev/null +++ b/configs/V38nano_DT12x/README.md @@ -0,0 +1,6 @@ +# V38 DT12x version + +Based on https://github.com/cms-l1-dpg/Phase2-L1Nano/tree/v38_1400pre3v9 + +Uses the Annual Review branch 1400pre3v9 with modified DT (Drift Tube) TPs corresponding to the 125x release. +Included rerunning the TrackTrigger, and thus is similar to pure V38. \ No newline at end of file diff --git a/configs/V38nano_DT12x/caching.yaml b/configs/V38nano_DT12x/caching.yaml new file mode 100644 index 00000000..1201c37b --- /dev/null +++ b/configs/V38nano_DT12x/caching.yaml @@ -0,0 +1,58 @@ +V38nano_DT12x: + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/IBv9_muons/IBv9_Combined/12DT_wTT/ForArthurPartial/DYToLL_IBv9_12DT.root + trees_branches: + Events: + GenPart: "all" + ## EG + # L1tkElectron: "all" + # L1EGbarrel: "all" + # L1EGendcap: "all" + ## Muons + L1gmtTkMuon: "all" + L1gmtMuon: "all" + # L1gmtDispMuon: "all" + ## TF Muons + L1MuonKMTF: "all" + L1MuonOMTF: "all" + L1MuonEMTF: "all" + # L1DispMuonKMTF: "all" + # L1DispMuonOMTF: "all" + # L1DispMuonEMTF: "all" + MinBias: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/IBv9_muons/IBv9_Combined/12DT_wTT/ForArthurPartial/Minbias.root + trees_branches: + Events: + # PV + L1PV: [z0] + ## EG + L1tkPhoton: "all" + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## MUONS + L1gmtTkMuon: "all" + L1gmtMuon: "all" # aka gmtMuon + L1gmtDispMuon: "all" + ## TAUS + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + ## MET/Sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + ## track-only + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + L1TrackTripletWord: [pt] + L1ExtTrackHT: [ht] \ No newline at end of file diff --git a/configs/V38nano_DT12x/object_performance/muonTF_matching.yaml b/configs/V38nano_DT12x/object_performance/muonTF_matching.yaml new file mode 100644 index 00000000..d232595c --- /dev/null +++ b/configs/V38nano_DT12x/object_performance/muonTF_matching.yaml @@ -0,0 +1,82 @@ +MuonTFsMatchingBarrel: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1MuonKMTF:default:barrel: "pt" + L1MuonOMTF:default:barrel: "pt" + L1MuonEMTF:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonTFsMatchingOverlap: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1MuonKMTF:default:overlap: "pt" + L1MuonOMTF:default:overlap: "pt" + L1MuonEMTF:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonTFsMatchingEndcap: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1MuonKMTF:default:endcap: "pt" + L1MuonOMTF:default:endcap: "pt" + L1MuonEMTF:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V38nano_DT12x/object_performance/muonTF_matching_eta.yaml b/configs/V38nano_DT12x/object_performance/muonTF_matching_eta.yaml new file mode 100644 index 00000000..6786473f --- /dev/null +++ b/configs/V38nano_DT12x/object_performance/muonTF_matching_eta.yaml @@ -0,0 +1,56 @@ +MuonTFsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1MuonKMTF:default: "eta" + L1MuonOMTF:default: "eta" + L1MuonEMTF:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonTFsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1MuonKMTF:default: "eta" + L1MuonOMTF:default: "eta" + L1MuonEMTF:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V38nano_DT12x/object_performance/muonTF_trigger.yaml b/configs/V38nano_DT12x/object_performance/muonTF_trigger.yaml new file mode 100644 index 00000000..c65961be --- /dev/null +++ b/configs/V38nano_DT12x/object_performance/muonTF_trigger.yaml @@ -0,0 +1,93 @@ +MuonTFsTrigger_Barrel: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1MuonKMTF:default:barrel: "pt" + L1MuonOMTF:default:barrel: "pt" + L1MuonEMTF:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + # scalings: + # method: "naive" + # threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonTFsTrigger_Overlap: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1MuonKMTF:default:overlap: "pt" + L1MuonOMTF:default:overlap: "pt" + L1MuonEMTF:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + # scalings: + # method: "naive" + # threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonTFsTrigger_Endcap: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1MuonKMTF:default:endcap: "pt" + L1MuonOMTF:default:endcap: "pt" + L1MuonEMTF:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + # scalings: + # method: "naive" + # threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V38nano_DT12x/object_performance/muon_matching.yaml b/configs/V38nano_DT12x/object_performance/muon_matching.yaml new file mode 100644 index 00000000..d60ff9db --- /dev/null +++ b/configs/V38nano_DT12x/object_performance/muon_matching.yaml @@ -0,0 +1,73 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V38nano_DT12x/object_performance/muon_matching_eta.yaml b/configs/V38nano_DT12x/object_performance/muon_matching_eta.yaml new file mode 100644 index 00000000..14e5c798 --- /dev/null +++ b/configs/V38nano_DT12x/object_performance/muon_matching_eta.yaml @@ -0,0 +1,78 @@ +# MuonsMatching_Eta_Pt2to5: +# sample: DYLL_M50 +# version: V38nano_DT12x +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "eta" +# label: "Gen Muons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 13" +# - "{pt} > 2" +# - "{pt} < 5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1gmtMuon:default: "eta" +# L1gmtMuon:dR0p6: "eta" +# L1gmtTkMuon:default: "eta" +# xlabel: "Gen. $\\eta$" +# ylabel: "Matching Efficiency (2-5 GeV)" +# binning: +# min: -3 +# max: 3 +# step: 0.2 + +# MuonsMatching_Eta_Pt15toInf: +# sample: DYLL_M50 +# version: V38nano_DT12x +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "eta" +# label: "Gen Muons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 13" +# - "{pt} > 15" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1gmtMuon:default: "eta" +# L1gmtTkMuon:default: "eta" +# xlabel: "Gen. $\\eta$" +# ylabel: "Matching Efficiency (>15 GeV)" +# binning: +# min: -3 +# max: 3 +# step: 0.2 + +MuonsMatching_Eta_Pt2to5_status1: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "{status} == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtMuon:dR0p6: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 \ No newline at end of file diff --git a/configs/V38nano_DT12x/object_performance/muon_matching_v2.yaml b/configs/V38nano_DT12x/object_performance/muon_matching_v2.yaml new file mode 100644 index 00000000..0d8e6e52 --- /dev/null +++ b/configs/V38nano_DT12x/object_performance/muon_matching_v2.yaml @@ -0,0 +1,77 @@ +MuonsMatchingBarrel_Alt: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtMuon:dR0p6:barrel: "pt" + L1gmtTkMuon:VLoose:barrel: "pt" + # L1gmtTkMuon:VLooseDr0p6:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap_Alt: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtMuon:dR0p6:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap_Alt: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtMuon:dR0p6:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V38nano_DT12x/object_performance/muon_trigger.yaml b/configs/V38nano_DT12x/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..0ff812ac --- /dev/null +++ b/configs/V38nano_DT12x/object_performance/muon_trigger.yaml @@ -0,0 +1,84 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V38nano_DT12x/object_performance/tkmuon_matching.yaml b/configs/V38nano_DT12x/object_performance/tkmuon_matching.yaml new file mode 100644 index 00000000..3c4fe5ea --- /dev/null +++ b/configs/V38nano_DT12x/object_performance/tkmuon_matching.yaml @@ -0,0 +1,85 @@ +TkMuonsMatchingBarrel: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + # L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + L1gmtTkMuon:VLoose:barrel: "pt" + L1gmtTkMuon:Loose:barrel: "pt" + L1gmtTkMuon:Medium:barrel: "pt" + L1gmtTkMuon:Tight:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +TkMuonsMatchingOverlap: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + # L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + L1gmtTkMuon:VLoose:overlap: "pt" + L1gmtTkMuon:Loose:overlap: "pt" + L1gmtTkMuon:Medium:overlap: "pt" + L1gmtTkMuon:Tight:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +TkMuonsMatchingEndcap: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + # L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + L1gmtTkMuon:VLoose:endcap: "pt" + L1gmtTkMuon:Loose:endcap: "pt" + L1gmtTkMuon:Medium:endcap: "pt" + L1gmtTkMuon:Tight:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V38nano_DT12x/object_performance/tkmuon_matching_eta.yaml b/configs/V38nano_DT12x/object_performance/tkmuon_matching_eta.yaml new file mode 100644 index 00000000..18a90e1b --- /dev/null +++ b/configs/V38nano_DT12x/object_performance/tkmuon_matching_eta.yaml @@ -0,0 +1,58 @@ +TkMuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + # L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + L1gmtTkMuon:VLoose: "eta" + L1gmtTkMuon:Loose: "eta" + L1gmtTkMuon:Medium: "eta" + L1gmtTkMuon:Tight: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +TkMuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + # L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + L1gmtTkMuon:VLoose: "eta" + L1gmtTkMuon:Loose: "eta" + L1gmtTkMuon:Medium: "eta" + L1gmtTkMuon:Tight: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V38nano_DT12x/object_performance/tkmuon_trigger.yaml b/configs/V38nano_DT12x/object_performance/tkmuon_trigger.yaml new file mode 100644 index 00000000..0935cf6e --- /dev/null +++ b/configs/V38nano_DT12x/object_performance/tkmuon_trigger.yaml @@ -0,0 +1,96 @@ +TkMuonsTrigger_Barrel: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + # L1gmtMuon:default:barrel: "pt" + # L1gmtTkMuon:default:barrel: "pt" + L1gmtTkMuon:VLoose:barrel: "pt" + L1gmtTkMuon:Loose:barrel: "pt" + L1gmtTkMuon:Medium:barrel: "pt" + L1gmtTkMuon:Tight:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +TkMuonsTrigger_Overlap: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + # L1gmtMuon:default:overlap: "pt" + # L1gmtTkMuon:default:overlap: "pt" + L1gmtTkMuon:VLoose:overlap: "pt" + L1gmtTkMuon:Loose:overlap: "pt" + L1gmtTkMuon:Medium:overlap: "pt" + L1gmtTkMuon:Tight:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +TkMuonsTrigger_Endcap: + sample: DYLL_M50 + version: V38nano_DT12x + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + # L1gmtMuon:default:endcap: "pt" + # L1gmtTkMuon:default:endcap: "pt" + L1gmtTkMuon:VLoose:endcap: "pt" + L1gmtTkMuon:Loose:endcap: "pt" + L1gmtTkMuon:Medium:endcap: "pt" + L1gmtTkMuon:Tight:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V38nano_DT12x/objects/electrons.yaml b/configs/V38nano_DT12x/objects/electrons.yaml new file mode 100644 index 00000000..cfacf196 --- /dev/null +++ b/configs/V38nano_DT12x/objects/electrons.yaml @@ -0,0 +1,49 @@ +L1tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + endcap: + - "({eleId} == 1) | ({pt} < 25)" + barrel: + - "{eleId} == 1" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron, no ID" + cuts: + inclusive: + - "abs({eta}) < 2.4" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + endcap: + - "abs({relIso}) < 0.28" + +L1EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{eleId} == 1" + endcap: + - "{saId} == 1" diff --git a/configs/V38nano_DT12x/objects/jets.yaml b/configs/V38nano_DT12x/objects/jets.yaml new file mode 100644 index 00000000..481cccda --- /dev/null +++ b/configs/V38nano_DT12x/objects/jets.yaml @@ -0,0 +1,103 @@ +L1caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiExtJetSC4: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + PtGe25: + cuts: + inclusive: + - "abs({eta}) < 7" + - "abs({pt}) >= 25" + bjetnn: + label: "SC Extended PuppiJet, BtagScore > 0.71" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{btagScore} > 0.71" + +L1puppiJetHisto: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC4: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + PtGe25: + cuts: + inclusive: + - "abs({eta}) < 7" + - "abs({pt}) >= 25" + +L1puppiJetSC8: + match_dR: 0.35 + label: "Seeded Cone PuppiJet 8" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1TrackJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + + diff --git a/configs/V38nano_DT12x/objects/met_ht_mht.yaml b/configs/V38nano_DT12x/objects/met_ht_mht.yaml new file mode 100644 index 00000000..8dbdb2fd --- /dev/null +++ b/configs/V38nano_DT12x/objects/met_ht_mht.yaml @@ -0,0 +1,69 @@ +# phase1PuppiHT: +# label: "Histogrammed Puppi HT" +# ids: +# default: {} + +# phase1PuppiMHT: +# label: "Phase1 Puppi MHT" +# ids: +# default: {} + +L1puppiMET: + label: "Puppi MET" + ids: + default: {} + +L1puppiMLMET: + label: "Puppi MLMET" + ids: + default: {} + +L1puppiJetSC4sums: + ids: + HT: + label: "SeededCone HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "SeededCone MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1puppiHistoJetSums: + ids: + HT: + label: "Histogrammed Puppi HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "Histogrammed Puppi MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1TrackHT: + ids: + HT: + label: "Tracker HT" + MHT: + label: "Tracker MHT" + +L1ExtTrackHT: + ids: + HT: + label: "ext. Tracker HT" + MHT: + label: "ext. Tracker MHT" + +L1TrackMET: + label: "Tracker MET" + ids: + default: {} + +L1TrackTripletWord: + label: "Track Triplet for W3Pi" + ids: + default: {} \ No newline at end of file diff --git a/configs/V38nano_DT12x/objects/muons.yaml b/configs/V38nano_DT12x/objects/muons.yaml new file mode 100644 index 00000000..290ea88e --- /dev/null +++ b/configs/V38nano_DT12x/objects/muons.yaml @@ -0,0 +1,133 @@ +GenPart: + label: "Gen Muon" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "({statusFlags}>>7)&1 == 1" + +L1gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + label: "GMT TkMuon" + cuts: + inclusive: + - "(({hwQual}>>1)&1 == 1) | (({pt} > 8) & (({hwQual}>>0)&1 == 1))" # Loose (bit 2) for pt < 8 VLoose (bit 1) for pt > 8 + VLoose: # x.numberOfMatches() > 0 + label: "GMT TkMuon, VLoose ID" + cuts: + inclusive: + - "({hwQual}>>0)&1 == 1" + Loose: # x.numberOfMatches() >1 + label: "GMT TkMuon, Loose ID" + cuts: + inclusive: + - "({hwQual}>>1)&1 == 1" + Medium: # x.stubs().size()>1 + label: "GMT TkMuon, Medium ID" + cuts: + inclusive: + - "({hwQual}>>2)&1 == 1" + Tight: # x.numberOfMatches()>2 + label: "GMT TkMuon, Tight ID" + cuts: + inclusive: + - "({hwQual}>>3)&1 == 1" + +L1gmtMuon: + label: "GMT Muon" + match_dR: 0.6 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + overlap: + - "{hwQual} >= 12" + endcap: + - "{hwQual} >= 14" + dR0p6: + label: "GMT Muon, match dR < 0.6" + match_dR: 0.6 + cuts: {} + +L1gmtDispMuon: + label: "GMT Displaced Muon" + match_dR: 0.6 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + dXYge8: + label: "Disp. Muon, dXY>8" + cuts: + endcap: + - "{d0} >= 8" + dXYge8Qual15: + label: "Disp. Muon, dXY>8, qual>=15" + cuts: + endcap: + - "{hwQual} >= 15" + - "{d0} >= 8" + qual15: + label: "Disp. Muon, qual>=15" + cuts: + endcap: + - "{hwQual} >= 15" + qual15_Eta2p0: + label: "Disp. Muon, eta < 2, qual>=15" + cuts: + inclusive: + - "abs({eta}) < 2" + endcap: + - "{hwQual} >= 15" + +L1MuonKMTF: + label: "KMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonOMTF: + label: "OMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonEMTF: + label: "EMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + + \ No newline at end of file diff --git a/configs/V38nano_DT12x/objects/photons.yaml b/configs/V38nano_DT12x/objects/photons.yaml new file mode 100644 index 00000000..12d51f0c --- /dev/null +++ b/configs/V38nano_DT12x/objects/photons.yaml @@ -0,0 +1,29 @@ +L1tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "L1tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "{eleId} == 1" + endcap: + - "{phoId} == 1" + Iso: + label: "L1tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "abs({relIso}) < 0.25" + - "{eleId} == 1" + endcap: + - "abs({relIso}) < 0.205" + - "{phoId} == 1" diff --git a/configs/V38nano_DT12x/objects/pv.yaml b/configs/V38nano_DT12x/objects/pv.yaml new file mode 100644 index 00000000..25fea9c0 --- /dev/null +++ b/configs/V38nano_DT12x/objects/pv.yaml @@ -0,0 +1,4 @@ +L1PV: + label: "Primary Vertex" + ids: + default: {} diff --git a/configs/V38nano_DT12x/objects/taus.yaml b/configs/V38nano_DT12x/objects/taus.yaml new file mode 100644 index 00000000..11e49a74 --- /dev/null +++ b/configs/V38nano_DT12x/objects/taus.yaml @@ -0,0 +1,61 @@ +L1nnPuppiTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + # - "{passLooseNN}==1" + # Current IB (22 Feb recipe) does not have updated WP, so cut on NN score rather than checking passLooseNN + - "{chargedIso} > 0.22" + +L1hpsTau: + label: "HPS Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + +L1caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" + +L1nnCaloTau: + label: "NN Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{hwQual}==3" diff --git a/configs/V38nano_DT12x/rate_plots/bjet.yaml b/configs/V38nano_DT12x/rate_plots/bjet.yaml new file mode 100644 index 00000000..92af29fa --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/bjet.yaml @@ -0,0 +1,10 @@ +BJetRates: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1puppiExtJetSC4:default + - L1puppiExtJetSC4:bjetnn + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V38nano_DT12x/rate_plots/disp_ht_sig.yaml b/configs/V38nano_DT12x/rate_plots/disp_ht_sig.yaml new file mode 100644 index 00000000..72a23ce6 --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/disp_ht_sig.yaml @@ -0,0 +1,13 @@ + +DispHTRates_Signal: + sample: HtoLLPto4B_M125_Phi60_ctau100 + version: V38nano_DT12x + test_objects: + # - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + - L1ExtTrackHT:HT + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V38nano_DT12x/rate_plots/disp_muons.yaml b/configs/V38nano_DT12x/rate_plots/disp_muons.yaml new file mode 100644 index 00000000..550b7132 --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/disp_muons.yaml @@ -0,0 +1,40 @@ +gmtDispMuon: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1gmtMuon:default + - L1gmtDispMuon:default + binning: + min: 0 + max: 75 + step: 3 + +gmtDispMuonByRegion: + sample: MinBias + version: V38nano_DT12x + test_objects: + # - L1gmtMuon:default + # - L1gmtDispMuon:default + - L1gmtDispMuon:default:barrel + - L1gmtDispMuon:default:overlap + - L1gmtDispMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +gmtDispMuonEndcap: + sample: MinBias + version: V38nano_DT12x + test_objects: + # - L1gmtDispMuon:default:barrel + # - L1gmtDispMuon:default:overlap + - L1gmtDispMuon:default:endcap + - L1gmtDispMuon:dXYge8:endcap + - L1gmtDispMuon:dXYge8Qual15:endcap + - L1gmtDispMuon:qual15:endcap + - L1gmtDispMuon:qual15_Eta2p0:endcap + binning: + min: 0 + max: 75 + step: 3 \ No newline at end of file diff --git a/configs/V38nano_DT12x/rate_plots/eg.yaml b/configs/V38nano_DT12x/rate_plots/eg.yaml new file mode 100644 index 00000000..becfac42 --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/eg.yaml @@ -0,0 +1,12 @@ +EGRates: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1EG:default + - L1tkElectron:NoIso + - L1tkElectron:Iso + - L1tkPhoton:Iso + binning: + min: 10 + max: 97 + step: 3 diff --git a/configs/V38nano_DT12x/rate_plots/ht.yaml b/configs/V38nano_DT12x/rate_plots/ht.yaml new file mode 100644 index 00000000..8354d76a --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/ht.yaml @@ -0,0 +1,36 @@ +HTRates: + sample: MinBias + version: V38nano_DT12x + test_objects: + # - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + binning: + min: 50 + max: 975 + step: 25 + +# MHTRates: +# sample: MinBias +# version: V38nano_DT12x +# test_objects: +# # - L1puppiHistoJetSums:MHT +# - L1puppiJetSC4sums:MHT +# - L1TrackHT:MHT +# binning: +# min: 50 +# max: 975 +# step: 25 + +# DispHTRates: +# sample: MinBias +# version: V38nano_DT12x +# test_objects: +# # - L1puppiHistoJetSums:HT +# - L1puppiJetSC4sums:HT +# - L1TrackHT:HT +# - L1ExtTrackHT:HT +# binning: +# min: 50 +# max: 975 +# step: 25 diff --git a/configs/V38nano_DT12x/rate_plots/jets.yaml b/configs/V38nano_DT12x/rate_plots/jets.yaml new file mode 100644 index 00000000..5f6a9c1d --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/jets.yaml @@ -0,0 +1,84 @@ +JetDefaultRates: + sample: MinBias + version: V38nano_DT12x + test_objects: + # - L1puppiJetHisto:default + - L1puppiJetSC4:default + # - L1caloJet:default + # - L1TrackJet:default + binning: + min: 40 + max: 420 + step: 20 + +# JetsByRegion: +# sample: MinBias +# version: V38nano_DT12x +# test_objects: +# - L1puppiJetSC4:default:barrel +# - L1puppiJetSC4:default:endcap +# - L1puppiJetSC4:default:forward +# - L1caloJet:default:barrel +# - L1caloJet:default:endcap +# - L1caloJet:default:forward +# # - L1TrackJet:default:barrel +# # - L1TrackJet:default:endcap +# binning: +# min: 40 +# max: 420 +# step: 20 + +JetExtendedRates: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1puppiJetSC4:default:inclusive + - L1puppiExtJetSC4:default:inclusive + # - L1puppiExtJetSC4:default:barrel + # - L1puppiExtJetSC4:default:endcap + # - L1puppiExtJetSC4:default:forward + binning: + min: 40 + max: 420 + step: 20 + +JetExtendedRatesByRegion: + sample: MinBias + version: V38nano_DT12x + test_objects: + # - L1puppiJetSC4:default:barrel + # - L1puppiJetSC4:default:endcap + # - L1puppiJetSC4:default:forward + - L1puppiExtJetSC4:default:barrel + - L1puppiExtJetSC4:default:endcap + - L1puppiExtJetSC4:default:forward + binning: + min: 40 + max: 420 + step: 20 + +# JetSC8Rates: +# sample: MinBias +# version: V38nano_DT12x +# test_objects: +# - L1puppiJetSC4:default +# - L1puppiJetSC8:default +# binning: +# min: 40 +# max: 420 +# step: 20 + + +# JetSC8Rates_byRegion: +# sample: MinBias +# version: V38nano_DT12x +# test_objects: +# # - L1puppiJetSC4:default +# - L1puppiJetSC8:default +# - L1puppiJetSC8:default:barrel +# - L1puppiJetSC8:default:endcap +# - L1puppiJetSC8:default:forward +# binning: +# min: 40 +# max: 420 +# step: 20 diff --git a/configs/V38nano_DT12x/rate_plots/met.yaml b/configs/V38nano_DT12x/rate_plots/met.yaml new file mode 100644 index 00000000..79619963 --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/met.yaml @@ -0,0 +1,11 @@ +METRates: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1puppiMET:default + - L1puppiMLMET:default + # - L1TrackMET:default + binning: + min: 50 + max: 500 + step: 25 diff --git a/configs/V38nano_DT12x/rate_plots/muons.yaml b/configs/V38nano_DT12x/rate_plots/muons.yaml new file mode 100644 index 00000000..b6251b83 --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/muons.yaml @@ -0,0 +1,34 @@ +gmtMuonByRegion: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1gmtMuon:default:barrel + - L1gmtMuon:default:overlap + - L1gmtMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByRegion: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1gmtTkMuon:default:barrel + - L1gmtTkMuon:default:overlap + - L1gmtTkMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +MuonRates: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1gmtMuon:default + - L1gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 diff --git a/configs/V38nano_DT12x/rate_plots/taus.yaml b/configs/V38nano_DT12x/rate_plots/taus.yaml new file mode 100644 index 00000000..911de0ed --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/taus.yaml @@ -0,0 +1,25 @@ +TauRates: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1nnPuppiTau:default + - L1hpsTau:default + - L1caloTau:default + - L1nnCaloTau:default + binning: + min: 10 + max: 155 + step: 5 + +TauRatesByRegion: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1caloTau:default:barrel + - L1caloTau:default:endcap + - L1nnPuppiTau:default:barrel + - L1nnPuppiTau:default:endcap + binning: + min: 10 + max: 155 + step: 5 diff --git a/configs/V38nano_DT12x/rate_plots/test.yml b/configs/V38nano_DT12x/rate_plots/test.yml new file mode 100644 index 00000000..92658714 --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/test.yml @@ -0,0 +1,13 @@ +JetSC8Rates_byRegion2: + sample: MinBias + version: V38nano_DT12x + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:inclusive + - L1puppiJetSC8:default:barrel + #- L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V38nano_DT12x/rate_plots/tkmuons.yaml b/configs/V38nano_DT12x/rate_plots/tkmuons.yaml new file mode 100644 index 00000000..06f87f26 --- /dev/null +++ b/configs/V38nano_DT12x/rate_plots/tkmuons.yaml @@ -0,0 +1,51 @@ +gmtTkMuonByID: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1gmtTkMuon:VLoose + - L1gmtTkMuon:Loose + - L1gmtTkMuon:Medium + - L1gmtTkMuon:Tight + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByID_barrel: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1gmtTkMuon:VLoose:barrel + - L1gmtTkMuon:Loose:barrel + - L1gmtTkMuon:Medium:barrel + - L1gmtTkMuon:Tight:barrel + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByID_overlap: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1gmtTkMuon:VLoose:overlap + - L1gmtTkMuon:Loose:overlap + - L1gmtTkMuon:Medium:overlap + - L1gmtTkMuon:Tight:overlap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByID_endcap: + sample: MinBias + version: V38nano_DT12x + test_objects: + - L1gmtTkMuon:VLoose:endcap + - L1gmtTkMuon:Loose:endcap + - L1gmtTkMuon:Medium:endcap + - L1gmtTkMuon:Tight:endcap + binning: + min: 0 + max: 75 + step: 3 \ No newline at end of file diff --git a/configs/V38nano_DT12x/rate_table/v38_Step1And2_cfg.yml b/configs/V38nano_DT12x/rate_table/v38_Step1And2_cfg.yml new file mode 100644 index 00000000..bf9a7881 --- /dev/null +++ b/configs/V38nano_DT12x/rate_table/v38_Step1And2_cfg.yml @@ -0,0 +1,4 @@ +version: "V38nano_DT12x" +sample: "MinBias" +menu_config: "configs/V38nano_DT12x/rate_table/v38_menu_Step1and2.yml" +table_fname: "rates_Step1and2" diff --git a/configs/V38nano_DT12x/rate_table/v38_Step1_cfg.yml b/configs/V38nano_DT12x/rate_table/v38_Step1_cfg.yml new file mode 100644 index 00000000..96cbd69e --- /dev/null +++ b/configs/V38nano_DT12x/rate_table/v38_Step1_cfg.yml @@ -0,0 +1,4 @@ +version: "V38nano_DT12x" +sample: "MinBias" +menu_config: "configs/V38nano_DT12x/rate_table/v38_menu_Step1.yml" +table_fname: "menu_Step1" diff --git a/configs/V38nano_DT12x/rate_table/v38_Step2_cfg.yml b/configs/V38nano_DT12x/rate_table/v38_Step2_cfg.yml new file mode 100644 index 00000000..4f45a47a --- /dev/null +++ b/configs/V38nano_DT12x/rate_table/v38_Step2_cfg.yml @@ -0,0 +1,4 @@ +version: "V38nano_DT12x" +sample: "MinBias" +menu_config: "configs/V38nano_DT12x/rate_table/v38_menu_Step2.yml" +table_fname: "rates_Step2" diff --git a/configs/V38nano_DT12x/rate_table/v38_menu_Step1.yml b/configs/V38nano_DT12x/rate_table/v38_menu_Step1.yml new file mode 100644 index 00000000..99e74e38 --- /dev/null +++ b/configs/V38nano_DT12x/rate_table/v38_menu_Step1.yml @@ -0,0 +1,447 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:VLoose + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:PtGe25 +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:VLoose +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:VLoose +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:VLoose + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:VLoose + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:VLoose + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:VLoose + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:VLoose + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:VLoose + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:VLoose +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:VLoose + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:VLoose + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:VLoose + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:VLoose + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:VLoose + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:VLoose + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:PtGe25 + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:VLoose +######################## +###### BPH SEEDS ####### +######################## +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:default +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:default +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:default \ No newline at end of file diff --git a/configs/V38nano_DT12x/rate_table/v38_menu_Step1and2.yml b/configs/V38nano_DT12x/rate_table/v38_menu_Step1and2.yml new file mode 100644 index 00000000..58573404 --- /dev/null +++ b/configs/V38nano_DT12x/rate_table/v38_menu_Step1and2.yml @@ -0,0 +1,537 @@ +################################# +########## STEP 1 +################################# +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:VLoose + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:PtGe25 +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:VLoose +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:VLoose +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:VLoose + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:VLoose + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:VLoose + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:VLoose + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:VLoose + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:VLoose + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:VLoose +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:VLoose + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:VLoose + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:VLoose + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:VLoose + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:VLoose + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:VLoose + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:PtGe25 + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:VLoose +######################## +###### BPH SEEDS ####### +######################## +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:default +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:default +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:default +################################# +########## STEP 2 +################################# +### SC8 wide cone jet seeds +L1_SinglePfJet8: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC8:default +L1_DoublePFJet8_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 200.0 + obj: L1puppiJetSC8:default + leg2: + threshold_cut: leg2.offline_pt >= 200.0 + obj: L1puppiJetSC8:default +### Bjet seed +L1_PFHTT_QuadJet_BTagNNScore: + cross_masks: + - (leg2.btagScore + leg3.btagScore + leg4.btagScore + leg5.btagScore) > 2.20 + leg1: + threshold_cut: offline_pt >= 299.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg3: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg4: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg5: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default +############################## +### Displaced Muons +############################## +L1_SingleDispMu: + cross_masks: [] + leg1: + threshold_cut: pt >= 22.0 + obj: L1gmtDispMuon:qual15_Eta2p0 +# L1_SingleDispMu_BMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:barrel +# L1_SingleDispMu_OMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:overlap +# # L1_SingleDispMu_EMTF: +# # cross_masks: [] +# # leg1: +# # threshold_cut: pt >= 22.0 +# # obj: L1gmtDispMuon:default:endcap +# L1_SingleDispMu_EMTF_SQ_eta2p0: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:qual15_Eta2p0:endcap +L1_DoubleDispMu: + cross_masks: [] + # - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 15.0 + obj: L1gmtDispMuon:default + leg2: + threshold_cut: pt > 7 + obj: L1gmtDispMuon:default +# ############################## +# ### GTT +# ############################## +L1_W3pi_GTT: + cross_masks: [] + leg1: + threshold_cut: pt > -99 + obj: L1TrackTripletWord:default +# L1_TkDispHT: +# cross_masks: [] +# leg1: +# threshold_cut: ht >= 200 +# obj: L1ExtTrackHT:HT \ No newline at end of file diff --git a/configs/V38nano_DT12x/rate_table/v38_menu_Step2.yml b/configs/V38nano_DT12x/rate_table/v38_menu_Step2.yml new file mode 100644 index 00000000..1399f49d --- /dev/null +++ b/configs/V38nano_DT12x/rate_table/v38_menu_Step2.yml @@ -0,0 +1,125 @@ +### SC8 wide cone jet seeds +L1_SinglePfJet8: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC8:default +L1_DoublePFJet8_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 200.0 + obj: L1puppiJetSC8:default + leg2: + threshold_cut: leg2.offline_pt >= 200.0 + obj: L1puppiJetSC8:default +### Bjet seed +L1_PFHTT_QuadJet_BTagNNScore: + cross_masks: + - (leg2.btagScore + leg3.btagScore + leg4.btagScore + leg5.btagScore) > 2.20 + leg1: + threshold_cut: offline_pt >= 299.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg3: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg4: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg5: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default +# ############################## +# ### Displaced Muons +# ############################## +L1_SingleDispMu: + cross_masks: [] + leg1: + threshold_cut: pt >= 22.0 + obj: L1gmtDispMuon:qual15_Eta2p0 +# L1_SingleDispMu_BMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:barrel +# L1_SingleDispMu_OMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:overlap +# # L1_SingleDispMu_EMTF: +# # cross_masks: [] +# # leg1: +# # threshold_cut: pt >= 22.0 +# # obj: L1gmtDispMuon:default:endcap +# L1_SingleDispMu_EMTF_SQ_eta2p0: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:qual15_Eta2p0:endcap +L1_DoubleDispMu: + cross_masks: [] + leg1: + threshold_cut: pt > 15.0 + obj: L1gmtDispMuon:default + leg2: + threshold_cut: pt > 7 + obj: L1gmtDispMuon:default +# # ############################## +# # ### GTT +# # ############################## +L1_W3pi_GTT: + cross_masks: [] + leg1: + threshold_cut: pt > -99 + obj: L1TrackTripletWord:default +# L1_TkDispHT: +# cross_masks: [] +# leg1: +# threshold_cut: ht >= 200 +# obj: L1ExtTrackHT:HT + + +# #### FOR DEBUG +# #### STEP1 muons +# L1_SingleTkMu: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 22.0 +# obj: L1gmtTkMuon:Medium +# L1_TripleTkMu: +# cross_masks: +# - abs(leg2.z0-leg1.z0) < 1 +# - abs(leg3.z0-leg1.z0) < 1 +# leg1: +# threshold_cut: pt > 5 +# obj: L1gmtTkMuon:Medium +# leg2: +# threshold_cut: pt > 3 +# obj: L1gmtTkMuon:Medium +# leg3: +# threshold_cut: pt > 3 +# obj: L1gmtTkMuon:Medium +# L1_DoubleTkMu: +# cross_masks: +# - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) +# leg1: +# threshold_cut: offline_pt > 15.0 +# obj: L1gmtTkMuon:Medium +# leg2: +# threshold_cut: pt > 7 +# obj: L1gmtTkMuon:Medium +# L1_DoubleTkMu4_SQ_OS_dR_Max1p2: +# cross_masks: +# - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) +# - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) +# - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) +# leg1: +# threshold_cut: pt > 4 +# obj: L1gmtTkMuon:Medium +# leg2: +# threshold_cut: pt > 4 +# obj: L1gmtTkMuon:Medium \ No newline at end of file diff --git a/configs/V43nano/README.md b/configs/V43nano/README.md new file mode 100644 index 00000000..47af0093 --- /dev/null +++ b/configs/V43nano/README.md @@ -0,0 +1,5 @@ +# V43 DT12x version + +Based on https://github.com/cms-l1-dpg/Phase2-L1Nano/tree/v38_1400pre3v9 + +Uses the Annual Review branch 1400pre3v9 and includes rerunning the TrackTrigger. \ No newline at end of file diff --git a/configs/V43nano/caching.yaml b/configs/V43nano/caching.yaml new file mode 100644 index 00000000..e496d7bb --- /dev/null +++ b/configs/V43nano/caching.yaml @@ -0,0 +1,98 @@ +V43nano: + Hgg: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/Spring24/141pre7/v43/GluGluHToGG_M-125_TuneCP5_14TeV-powheg-pythia8/Hto2gg_Spring24_200PU_V43_reL1wTT/240926_121547/0000/*.root + trees_branches: + Events: + GenPart: [pt, eta, phi, pdgId, statusFlags] + L1tkPhoton: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + DYLL_M50: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/Spring24/141pre7/v43/DYToLL_M-50_TuneCP5_14TeV-pythia8/DY_M50_Spring24_200PU_V43_reL1wTT/240926_121524/0000/*.root + trees_branches: + Events: + GenPart: "all" + ## EG + L1tkElectron: "all" + L1EGbarrel: "all" + L1EGendcap: "all" + ## Muons + L1gmtTkMuon: "all" + L1gmtMuon: "all" + L1gmtDispMuon: "all" + ## TF Muons + L1MuonKMTF: "all" + L1MuonOMTF: "all" + L1MuonEMTF: "all" + L1DispMuonKMTF: "all" + L1DispMuonOMTF: "all" + L1DispMuonEMTF: "all" + TT: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/Spring24/141pre7/v43/TT_TuneCP5_14TeV-powheg-pythia8/TT_Spring24_200PU_V43_reL1wTT/240926_121512/0000/*.root + trees_branches: + Events: + # gen + GenJet: [pt, eta, phi, partonFlavour] + GenJetAK8: [pt, eta, phi] + GenMET: "all" + # # sums + L1puppiMET: [pt, phi] + L1puppiMLMET: [pt] + L1puppiJetSC4sums: [pt, phi] + L1puppiHistoJetSums: [pt, phi] + # # jets + L1puppiJetSC4: [pt, eta, phi] + L1puppiJetSC8: [pt, eta, phi] + L1puppiExtJetSC4: [pt, eta, phi, btagScore] + L1puppiJetHisto: [pt, eta, phi] + L1caloJet: [pt, eta, phi] + L1TrackMET: [pt] + L1TrackHT: [ht, mht] + L1TrackJet: [pt, eta, phi] + VBFHToTauTau: + ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/Spring24/141pre7/v43/VBF_HToTauTau_M-125_TuneCP5_14TeV-powheg-pythia8/VBFHtoTaus_Spring24_200PU_V43_reL1wTT/240926_121535/0000/*.root + trees_branches: + Events: + GenPart: [pt, eta, phi, pdgId, statusFlags] + GenVisTau: "all" + L1nnPuppiTau: "all" + L1hpsTau: "all" + L1caloTau: "all" + L1nnCaloTau: "all" + # MinBias: + # ntuple_path: /eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/14X/v38/MinBias_TuneCP5_14TeV-pythia8/MinBias_131_L1Fix_IBv9_wTT/240412_211203/0000/*.root + # trees_branches: + # Events: + # # PV + # L1PV: [z0] + # ## EG + # L1tkPhoton: "all" + # L1tkElectron: "all" + # L1EGbarrel: "all" + # L1EGendcap: "all" + # ## MUONS + # L1gmtTkMuon: "all" + # L1gmtMuon: "all" # aka gmtMuon + # L1gmtDispMuon: "all" + # ## TAUS + # L1nnPuppiTau: "all" + # L1hpsTau: "all" + # L1caloTau: "all" + # L1nnCaloTau: "all" + # ## MET/Sums + # L1puppiMET: [pt, phi] + # L1puppiMLMET: [pt] + # L1puppiJetSC4sums: [pt, phi] + # L1puppiHistoJetSums: [pt, phi] + # # # jets + # L1puppiJetSC4: [pt, eta, phi] + # L1puppiJetSC8: [pt, eta, phi] + # L1puppiExtJetSC4: [pt, eta, phi, btagScore] + # L1puppiJetHisto: [pt, eta, phi] + # L1caloJet: [pt, eta, phi] + # ## track-only + # L1TrackMET: [pt] + # L1TrackHT: [ht, mht] + # L1TrackJet: [pt, eta, phi] + # L1TrackTripletWord: [pt] + # L1ExtTrackHT: [ht] \ No newline at end of file diff --git a/configs/V43nano/object_performance/disp_ht.yaml b/configs/V43nano/object_performance/disp_ht.yaml new file mode 100644 index 00000000..a8238d1f --- /dev/null +++ b/configs/V43nano/object_performance/disp_ht.yaml @@ -0,0 +1,53 @@ +HtoLLPto4b_M125_Phi60_ctau100_promptHT: + sample: HtoLLPto4b_M125_Phi60_ctau100 + version: V43nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + L1puppiJetSC4sums:HT: "pt" + L1TrackHT:HT: "ht" + L1ExtTrackHT:HT: "ht" + thresholds: [50, 100] + # scalings: + # method: "naive" + # threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +# HtoLLPto4b_M125_Phi60_ctau100_dispHT: +# sample: HtoLLPto4b_M125_Phi60_ctau100 +# version: V43nano +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen HT" +# trafo: "HT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# test_objects: +# L1puppiJetSC4sums:HT: "pt" +# L1TrackHT:HT: "ht" +# L1ExtTrackHT:HT: "ht" +# thresholds: [350] +# scalings: +# method: "naive" +# threshold: 0.90 +# xlabel: "Gen. HT (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 750 +# step: 20 diff --git a/configs/V43nano/object_performance/electron_iso.yaml b/configs/V43nano/object_performance/electron_iso.yaml new file mode 100644 index 00000000..c9c0fb6b --- /dev/null +++ b/configs/V43nano/object_performance/electron_iso.yaml @@ -0,0 +1,50 @@ +ElectronsIsolation_Barrel: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkElectron:NoIsoForIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +ElectronsIsolation_Endcap: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + iso_vs_efficiency: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.479" + object: + - "abs({eta}) < 2.4" + test_objects: + L1tkElectron:NoIsoForIso: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V43nano/object_performance/electron_matching.yaml b/configs/V43nano/object_performance/electron_matching.yaml new file mode 100644 index 00000000..b761ac3f --- /dev/null +++ b/configs/V43nano/object_performance/electron_matching.yaml @@ -0,0 +1,105 @@ +ElectronsMatchingBarrel: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + # L1tkElectron:NoIsoNoLowPtID: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingBarrel_wPrunedGenPart: +# sample: DYLL_M50 +# version: V43nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 100 +# step: 3 + +ElectronsMatchingEndcap: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkElectron:NoIso: "pt" + # L1tkElectron:NoIsoNoLowPtID: "pt" + L1tkElectron:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +# ElectronsMatchingEndcap_wPrunedGenPart: +# sample: DYLL_M50 +# version: V43nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Electrons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 11" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkElectron:NoIso: "pt" +# L1tkElectron:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 100 +# step: 3 diff --git a/configs/V43nano/object_performance/electron_matching_eta.yaml b/configs/V43nano/object_performance/electron_matching_eta.yaml new file mode 100644 index 00000000..65cbbfd8 --- /dev/null +++ b/configs/V43nano/object_performance/electron_matching_eta.yaml @@ -0,0 +1,54 @@ +ElectronsMatching_Eta_Pt10to25: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + # L1tkElectron:NoIsoNoLowPtID: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +ElectronsMatching_Eta_Pt25toInf: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "{pt} > 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkElectron:NoIso: "eta" + # L1tkElectron:NoIsoNoLowPtID: "eta" + L1tkElectron:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V43nano/object_performance/electron_purity.yaml b/configs/V43nano/object_performance/electron_purity.yaml new file mode 100644 index 00000000..65b40cbd --- /dev/null +++ b/configs/V43nano/object_performance/electron_purity.yaml @@ -0,0 +1,26 @@ +Purity_ElectronsBarrel: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "L1tkElectron" + x_arg: "pt" + label: "L1tkElectron" + cuts: + event: + - "{eleId} == 1" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + GenPart:Electron: "pt" + # L1EG:default: "pt" + # L1tkElectron:NoIso: "pt" + # L1tkElectron:NoIsoNoLowPtID: "pt" + # L1tkElectron:Iso: "pt" + xlabel: "L1 TkEle. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V43nano/object_performance/electron_trigger.yaml b/configs/V43nano/object_performance/electron_trigger.yaml new file mode 100644 index 00000000..6a299b72 --- /dev/null +++ b/configs/V43nano/object_performance/electron_trigger.yaml @@ -0,0 +1,61 @@ +ElectronsTriggerBarrel: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:barrel: "pt" + L1tkElectron:NoIso:barrel: "pt" + # L1tkElectron:NoIsoNoLowPtID:barrel: "pt" + L1tkElectron:Iso:barrel: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +ElectronsTriggerEndcap: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Electrons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 11" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.8" + test_objects: + L1EG:default:endcap: "pt" + L1tkElectron:NoIso:endcap: "pt" + # L1tkElectron:NoIsoNoLowPtID:endcap: "pt" + L1tkElectron:Iso:endcap: "pt" + thresholds: [10, 20, 30, 40] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V43nano/object_performance/jets_matching.yaml b/configs/V43nano/object_performance/jets_matching.yaml new file mode 100644 index 00000000..e37fb051 --- /dev/null +++ b/configs/V43nano/object_performance/jets_matching.yaml @@ -0,0 +1,118 @@ +JetMatchingBarrel: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcap: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + L1TrackJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingForward: + version: V43nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "pt" + L1puppiJetSC4:default: "pt" + L1caloJet:default: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 + + +JetMatchingBarrelSC8: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetMatchingEndcapSC8: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen AK8 Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 \ No newline at end of file diff --git a/configs/V43nano/object_performance/jets_matching_eta.yaml b/configs/V43nano/object_performance/jets_matching_eta.yaml new file mode 100644 index 00000000..0352b6af --- /dev/null +++ b/configs/V43nano/object_performance/jets_matching_eta.yaml @@ -0,0 +1,94 @@ +JetMatching_Eta_Pt40To100: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetHisto:default: "eta" + L1puppiJetSC4:default: "eta" + L1caloJet:default: "eta" + L1TrackJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_extEta: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 7" + test_objects: + L1caloJet:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5.5 + max: 5.5 + step: 0.25 + +JetMatching_Eta_SC8_Pt100ToInf: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 \ No newline at end of file diff --git a/configs/V43nano/object_performance/jets_matching_wBTag.yaml b/configs/V43nano/object_performance/jets_matching_wBTag.yaml new file mode 100644 index 00000000..c53b3ff6 --- /dev/null +++ b/configs/V43nano/object_performance/jets_matching_wBTag.yaml @@ -0,0 +1,136 @@ +JetMatching_Eta_Pt40To100_ExtendedVsRegular: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt100ToInf_ExtendedVsRegular: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC4:default: "eta" + L1puppiExtJetSC4:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -5 + max: 5 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genBJets: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Eta_Pt30ToInf_genNotBJets: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "eta" + label: "Gen Jets" + cuts: + event: + - "{pt} > 30" + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>30 GeV)" + binning: + min: -2.4 + max: 2.4 + step: 0.25 + +JetMatching_Pt_Pt30ToInf_genBJets: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) == 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 + +JetMatching_Pt_Pt30ToInf_genNotBJets: + sample: TT + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({partonFlavour}) != 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiExtJetSC4:bjetnn: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency" + binning: + min: 30 + max: 200 + step: 10 diff --git a/configs/V43nano/object_performance/jets_sc8_trigger.yaml b/configs/V43nano/object_performance/jets_sc8_trigger.yaml new file mode 100644 index 00000000..5eed937b --- /dev/null +++ b/configs/V43nano/object_performance/jets_sc8_trigger.yaml @@ -0,0 +1,77 @@ +JetTurnonBarrelSC8: + version: V43nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:barrel: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcapSC8: + version: V43nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1puppiJetSC8:default:endcap: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForwardSC8: + version: V43nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJetAK8" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + L1puppiJetSC8:default:forward: "pt" + thresholds: [150] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V43nano/object_performance/jets_trigger.yaml b/configs/V43nano/object_performance/jets_trigger.yaml new file mode 100644 index 00000000..bb7fb9e7 --- /dev/null +++ b/configs/V43nano/object_performance/jets_trigger.yaml @@ -0,0 +1,85 @@ +JetTurnonBarrel: + version: V43nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + # L1puppiJetHisto:default:barrel: "pt" + L1puppiJetSC4:default:barrel: "pt" + L1caloJet:default:barrel: "pt" + L1TrackJet:default:barrel: "pt" + thresholds: [50, 100] + # scalings: + # method: "naive" + # threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, barrel)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonEndcap: + version: V43nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + # L1puppiJetHisto:default:endcap: "pt" + L1puppiJetSC4:default:endcap: "pt" + L1caloJet:default:endcap: "pt" + L1TrackJet:default:endcap: "pt" + thresholds: [50, 100] + # scalings: + # method: "naive" + # threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, endcap)" + binning: + min: 0 + max: 500 + step: 10 + +JetTurnonForward: + version: V43nano + sample: TT + match_test_to_ref: True + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen Jets" + cuts: + event: + - "abs({eta}) > 2.4" + object: + - "abs({eta}) < 5" + test_objects: + # L1puppiJetHisto:default:forward: "pt" + L1puppiJetSC4:default:forward: "pt" + L1caloJet:default:forward: "pt" + thresholds: [50, 100] + # scalings: + # method: "naive" + # threshold: 0.95 + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Trigger Efficiency ( GeV, forward)" + binning: + min: 0 + max: 500 + step: 10 diff --git a/configs/V43nano/object_performance/met_ht_mht.yaml b/configs/V43nano/object_performance/met_ht_mht.yaml new file mode 100644 index 00000000..0ed335aa --- /dev/null +++ b/configs/V43nano/object_performance/met_ht_mht.yaml @@ -0,0 +1,124 @@ +# HT_90perc: +# sample: TT +# version: V43nano +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen HT" +# trafo: "HT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# test_objects: +# # L1puppiHistoJetSums:HT: "pt" +# L1puppiJetSC4sums:HT: "pt" +# L1TrackHT:HT: "ht" +# thresholds: [350] +# scalings: +# method: "naive" +# threshold: 0.90 +# xlabel: "Gen. HT (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 750 +# step: 20 + +TkHT_90perc: + sample: TT + version: V43nano + reference_object: + object: "GenJet" + x_arg: "pt" + label: "Gen HT" + trafo: "HT" + cuts: + object: + - "abs({eta}) < 2.4" + - "{pt} > 30" + test_objects: + # L1puppiHistoJetSums:HT: "pt" + L1puppiJetSC4sums:HT: "pt" + L1TrackHT:HT: "ht" + thresholds: [150, 350] + scalings: + method: "naive" + threshold: 0.90 + xlabel: "Gen. HT (GeV)" + ylabel: "Trigger Efficiency ( GeV)" + binning: + min: 0 + max: 750 + step: 20 + +# MHT_50perc: +# sample: TT +# version: V43nano +# reference_object: +# object: "GenJet" +# x_arg: "pt" +# label: "Gen MHT" +# cuts: +# object: +# - "abs({eta}) < 2.4" +# - "{pt} > 30" +# trafo: "MHT" +# test_objects: +# L1puppiHistoJetSums:MHT: "pt" +# L1puppiJetSC4sums:MHT: "pt" +# L1TrackHT:MHT: "mht" +# thresholds: [70, 150] +# scalings: +# method: "naive" +# threshold: 0.50 +# xlabel: "Gen. MHT30 (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# binning: +# min: 0 +# max: 500 +# step: 20 + +# MET_90perc: +# sample: TT +# version: V43nano +# reference_object: +# object: "GenMET" +# x_arg: "pt" +# label: "Gen MET" +# test_objects: +# L1puppiMET:default: "pt" +# L1puppiMLMET:default: "pt" +# L1TrackMET:default: "pt" +# thresholds: [125, 150, 175, 200] +# xlabel: "Gen. MET (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# scalings: +# method: "naive" +# threshold: 0.90 +# binning: +# min: 0 +# max: 500 +# step: 20 + +# MET_90perc_scTanh: +# sample: TT +# version: V43nano +# reference_object: +# object: "GenMET" +# x_arg: "pt" +# label: "Gen MET" +# test_objects: +# L1puppiMET:default: "pt" +# L1puppiMLMET:default: "pt" +# L1TrackMET:default: "pt" +# thresholds: [125, 150, 175] +# xlabel: "Gen. MET (GeV)" +# ylabel: "Trigger Efficiency ( GeV)" +# scalings: +# method: "errf" +# threshold: 0.90 +# binning: +# min: 0 +# max: 500 +# step: 20 \ No newline at end of file diff --git a/configs/V43nano/object_performance/muonTF_matching.yaml b/configs/V43nano/object_performance/muonTF_matching.yaml new file mode 100644 index 00000000..3414a4a7 --- /dev/null +++ b/configs/V43nano/object_performance/muonTF_matching.yaml @@ -0,0 +1,82 @@ +MuonTFsMatchingBarrel: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1MuonKMTF:default:barrel: "pt" + L1MuonOMTF:default:barrel: "pt" + L1MuonEMTF:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonTFsMatchingOverlap: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1MuonKMTF:default:overlap: "pt" + L1MuonOMTF:default:overlap: "pt" + L1MuonEMTF:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonTFsMatchingEndcap: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1MuonKMTF:default:endcap: "pt" + L1MuonOMTF:default:endcap: "pt" + L1MuonEMTF:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V43nano/object_performance/muonTF_matching_eta.yaml b/configs/V43nano/object_performance/muonTF_matching_eta.yaml new file mode 100644 index 00000000..2baafbb5 --- /dev/null +++ b/configs/V43nano/object_performance/muonTF_matching_eta.yaml @@ -0,0 +1,56 @@ +MuonTFsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1MuonKMTF:default: "eta" + L1MuonOMTF:default: "eta" + L1MuonEMTF:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonTFsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1MuonKMTF:default: "eta" + L1MuonOMTF:default: "eta" + L1MuonEMTF:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V43nano/object_performance/muonTF_trigger.yaml b/configs/V43nano/object_performance/muonTF_trigger.yaml new file mode 100644 index 00000000..4dda0f45 --- /dev/null +++ b/configs/V43nano/object_performance/muonTF_trigger.yaml @@ -0,0 +1,93 @@ +MuonTFsTrigger_Barrel: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1MuonKMTF:default:barrel: "pt" + L1MuonOMTF:default:barrel: "pt" + L1MuonEMTF:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + # scalings: + # method: "naive" + # threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +# MuonTFsTrigger_Overlap: +# sample: DYLL_M50 +# version: V43nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "eta" +# label: "Gen Muons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 13" +# object: +# - "abs({eta}) > 0.83" +# - "abs({eta}) < 1.24" +# test_objects: +# L1gmtMuon:default:overlap: "pt" +# L1MuonKMTF:default:overlap: "pt" +# L1MuonOMTF:default:overlap: "pt" +# L1MuonEMTF:default:overlap: "pt" +# L1gmtTkMuon:default:overlap: "pt" +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" +# thresholds: [20, 25] +# # scalings: +# # method: "naive" +# # threshold: 0.95 +# binning: +# min: 0 +# max: 50 +# step: 1.5 + +# MuonTFsTrigger_Endcap: +# sample: DYLL_M50 +# version: V43nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "eta" +# label: "Gen Muons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 13" +# object: +# - "abs({eta}) > 1.24" +# test_objects: +# L1gmtMuon:default:endcap: "pt" +# L1MuonKMTF:default:endcap: "pt" +# L1MuonOMTF:default:endcap: "pt" +# L1MuonEMTF:default:endcap: "pt" +# L1gmtTkMuon:default:endcap: "pt" +# xlabel: "Gen. pT (GeV)" +# ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" +# thresholds: [20, 25] +# # scalings: +# # method: "naive" +# # threshold: 0.95 +# binning: +# min: 0 +# max: 50 +# step: 1.5 diff --git a/configs/V43nano/object_performance/muon_matching.yaml b/configs/V43nano/object_performance/muon_matching.yaml new file mode 100644 index 00000000..7f380d08 --- /dev/null +++ b/configs/V43nano/object_performance/muon_matching.yaml @@ -0,0 +1,73 @@ +MuonsMatchingBarrel: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (barrel)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingOverlap: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (overlap)" + binning: + min: 0 + max: 100 + step: 3 + +MuonsMatchingEndcap: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (endcap)" + binning: + min: 0 + max: 100 + step: 3 diff --git a/configs/V43nano/object_performance/muon_matching_eta.yaml b/configs/V43nano/object_performance/muon_matching_eta.yaml new file mode 100644 index 00000000..30f0ae50 --- /dev/null +++ b/configs/V43nano/object_performance/muon_matching_eta.yaml @@ -0,0 +1,51 @@ +MuonsMatching_Eta_Pt2to5: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 2" + - "{pt} < 5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtMuon:dR0p6: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (2-5 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +MuonsMatching_Eta_Pt15toInf: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + - "{pt} > 15" + object: + - "abs({eta}) < 2.4" + test_objects: + L1gmtMuon:default: "eta" + L1gmtTkMuon:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>15 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V43nano/object_performance/muon_trigger.yaml b/configs/V43nano/object_performance/muon_trigger.yaml new file mode 100644 index 00000000..c335b98f --- /dev/null +++ b/configs/V43nano/object_performance/muon_trigger.yaml @@ -0,0 +1,84 @@ +MuonsTrigger_Barrel: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) < 0.83" + test_objects: + L1gmtMuon:default:barrel: "pt" + L1gmtTkMuon:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Overlap: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 0.83" + - "abs({eta}) < 1.24" + test_objects: + L1gmtMuon:default:overlap: "pt" + L1gmtTkMuon:default:overlap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (overlap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 + +MuonsTrigger_Endcap: + sample: DYLL_M50 + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Muons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 13" + object: + - "abs({eta}) > 1.24" + test_objects: + L1gmtMuon:default:endcap: "pt" + L1gmtTkMuon:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > 20$ GeV)" + thresholds: [20, 25] + scalings: + method: "naive" + threshold: 0.95 + binning: + min: 0 + max: 50 + step: 1.5 diff --git a/configs/V43nano/object_performance/photon_iso.yaml b/configs/V43nano/object_performance/photon_iso.yaml new file mode 100644 index 00000000..8dc4eebc --- /dev/null +++ b/configs/V43nano/object_performance/photon_iso.yaml @@ -0,0 +1,51 @@ +PhotonIsolation_Barrel: + sample: Hgg + version: V43nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.479" + object: + - "abs({eta}) < 1.479" + test_objects: + L1tkPhoton:NoIso:barrel: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Barrel)" + binning: + min: 0 + max: 0.5 + step: 0.005 + +PhotonIsolation_Endcap: + sample: Hgg + version: V43nano + iso_vs_efficiency: True + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.479" + - "abs({eta}) < 2.4" + object: + - "abs({eta}) > 1.479" + test_objects: + L1tkPhoton:NoIso:endcap: "relIso" + xlabel: "Isolation" + ylabel: "Efficiency (Endcap)" + binning: + min: 0 + max: 0.5 + step: 0.005 + diff --git a/configs/V43nano/object_performance/photons_matching.yaml b/configs/V43nano/object_performance/photons_matching.yaml new file mode 100644 index 00000000..1be533b4 --- /dev/null +++ b/configs/V43nano/object_performance/photons_matching.yaml @@ -0,0 +1,159 @@ +PhotonsMatching_Barrel: + sample: Hgg + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 100 + step: 3 + +PhotonsMatching_Endcap: + sample: Hgg + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default: "pt" + L1tkPhoton:NoIso: "pt" + L1tkPhoton:Iso: "pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 100 + step: 3 + +# PhotonsMatching_Barrel_wPrunedGenParts: +# sample: Hgg +# version: V43nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Photons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 22" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkPhoton:NoIso: "pt" +# L1tkPhoton:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 100 +# step: 3 + +# PhotonsMatching_Endcap_wPrunedGenParts: +# sample: Hgg +# version: V43nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Photons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 22" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkPhoton:NoIso: "pt" +# L1tkPhoton:Iso: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 100 +# step: 3 + +# PhotonsMatching_Barrel_Pt30: +# sample: Hgg +# version: V43nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Photons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 22" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkPhoton:NoIso: "pt" +# L1tkPhoton:Iso: "pt" +# L1tkPhoton:NoIsoPt30: "pt" +# L1tkPhoton:IsoPt30: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 150 +# step: 3 + +# PhotonsMatching_Endcap_Pt30: +# sample: Hgg +# version: V43nano +# match_test_to_ref: True +# reference_object: +# object: "GenPart" +# x_arg: "pt" +# label: "Gen Photons" +# cuts: +# event: +# - "(({statusFlags}>>7)&1) == 1" +# - "abs({pdgId}) == 22" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1EG:default: "pt" +# L1tkPhoton:NoIso: "pt" +# L1tkPhoton:Iso: "pt" +# L1tkPhoton:NoIsoPt30: "pt" +# L1tkPhoton:IsoPt30: "pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 150 +# step: 3 diff --git a/configs/V43nano/object_performance/photons_matching_eta.yaml b/configs/V43nano/object_performance/photons_matching_eta.yaml new file mode 100644 index 00000000..94acf3c8 --- /dev/null +++ b/configs/V43nano/object_performance/photons_matching_eta.yaml @@ -0,0 +1,52 @@ +PhotonsMatching_Eta_Pt10to25: + sample: Hgg + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} < 25" + - "{pt} > 10" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($10 < p_T < 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 + +PhotonsMatching_Eta_Pt25toInf: + sample: Hgg + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "eta" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "{pt} >= 25" + object: + - "abs({eta}) < 3.0" + test_objects: + L1EG:default: "eta" + L1tkPhoton:NoIso: "eta" + L1tkPhoton:Iso: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency ($p_T > 25$ GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V43nano/object_performance/photons_trigger.yaml b/configs/V43nano/object_performance/photons_trigger.yaml new file mode 100644 index 00000000..7f938711 --- /dev/null +++ b/configs/V43nano/object_performance/photons_trigger.yaml @@ -0,0 +1,59 @@ +PhotonsTrigger_Barrel: + sample: Hgg + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:barrel: "pt" + L1tkPhoton:NoIso:barrel: "pt" + L1tkPhoton:Iso:barrel: "pt" + thresholds: [8] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 + +PhotonsTrigger_Endcap: + sample: Hgg + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenPart" + x_arg: "pt" + label: "Gen Photons" + cuts: + event: + - "(({statusFlags}>>7)&1) == 1" + - "abs({pdgId}) == 22" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1EG:default:endcap: "pt" + L1tkPhoton:NoIso:endcap: "pt" + L1tkPhoton:Iso:endcap: "pt" + thresholds: [8] + scalings: + method: "naive" + threshold: 0.95 + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + binning: + min: 0 + max: 100 + step: 1.5 diff --git a/configs/V43nano/object_performance/tau_matching.yaml b/configs/V43nano/object_performance/tau_matching.yaml new file mode 100644 index 00000000..7e2cf1d8 --- /dev/null +++ b/configs/V43nano/object_performance/tau_matching.yaml @@ -0,0 +1,53 @@ +TausMatchingBarrel: + sample: VBFHToTauTau + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Barrel)" + binning: + min: 0 + max: 150 + step: 6 + +TausMatchingEndcap: + sample: VBFHToTauTau + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "pt" + L1hpsTau:default: "pt" + L1caloTau:default: "pt" + L1nnCaloTau:default: "pt" +# L1caloTau:PtGe20: "Pt" + xlabel: "Gen. $p_T$ (GeV)" + ylabel: "Matching Efficiency (Endcap)" + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V43nano/object_performance/tau_matching_eta.yaml b/configs/V43nano/object_performance/tau_matching_eta.yaml new file mode 100644 index 00000000..773aa9da --- /dev/null +++ b/configs/V43nano/object_performance/tau_matching_eta.yaml @@ -0,0 +1,50 @@ +TauMatching_Eta_Pt40To100: + sample: VBFHToTauTau + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 40" + - "{pt} < 100" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (40-100 GeV)" + binning: + min: -3.0 + max: 3.0 + step: 0.2 + +TauMatching_Eta_Pt100ToInf: + sample: VBFHToTauTau + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "eta" + label: "Gen Taus" + cuts: + event: + - "{pt} > 100" + object: + - "abs({eta}) < 5" + test_objects: + L1nnPuppiTau:default: "eta" + L1hpsTau:default: "eta" + L1caloTau:default: "eta" + L1nnCaloTau:default: "eta" + xlabel: "Gen. $\\eta$" + ylabel: "Matching Efficiency (>100 GeV)" + binning: + min: -3 + max: 3 + step: 0.2 diff --git a/configs/V43nano/object_performance/tau_matching_highPt.yaml b/configs/V43nano/object_performance/tau_matching_highPt.yaml new file mode 100644 index 00000000..0278a36c --- /dev/null +++ b/configs/V43nano/object_performance/tau_matching_highPt.yaml @@ -0,0 +1,113 @@ +# TausMatchingBarrel_highPt: +# sample: VBFHToTauTau +# version: V43nano +# match_test_to_ref: True +# reference_object: +# object: "GenVisTau" +# x_arg: "pt" +# label: "Gen Taus" +# cuts: +# event: +# # - "{dr_0.3} < 0.15" +# - "abs({eta}) < 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1nnPuppiTau:default: "pt" +# L1hpsTau:default: "pt" +# L1caloTau:default: "pt" +# L1nnCaloTau:default: "pt" +# # L1caloTau:PtGe20: "Pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Barrel)" +# binning: +# min: 0 +# max: 400 +# step: 20 + +# TausMatchingEndcap_highPt: +# sample: VBFHToTauTau +# version: V43nano +# match_test_to_ref: True +# reference_object: +# object: "GenVisTau" +# x_arg: "pt" +# label: "Gen Taus" +# cuts: +# event: +# # - "{dr_0.3} < 0.15" +# - "abs({eta}) > 1.5" +# object: +# - "abs({eta}) < 2.4" +# test_objects: +# L1nnPuppiTau:default: "pt" +# L1hpsTau:default: "pt" +# L1caloTau:default: "pt" +# L1nnCaloTau:default: "pt" +# # L1caloTau:PtGe20: "Pt" +# xlabel: "Gen. $p_T$ (GeV)" +# ylabel: "Matching Efficiency (Endcap)" +# binning: +# min: 0 +# max: 400 +# step: 20 + +TauTriggerBarrel_90perc_highPt: + sample: VBFHToTauTau + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:barrel: "pt" + L1hpsTau:default:barrel: "pt" + L1caloTau:default:barrel: "pt" + L1nnCaloTau:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [30, 50] + # scalings: + # method: "naive" + # threshold: 0.90 + binning: + min: 0 + max: 400 + step: 10 + +TauTriggerEndcap_90perc_highPt: + sample: VBFHToTauTau + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:endcap: "pt" + L1hpsTau:default:endcap: "pt" + L1caloTau:default:endcap: "pt" + L1nnCaloTau:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [30, 50] + # scalings: + # method: "naive" + # threshold: 0.90 + binning: + min: 0 + max: 400 + step: 10 diff --git a/configs/V43nano/object_performance/tau_trigger.yaml b/configs/V43nano/object_performance/tau_trigger.yaml new file mode 100644 index 00000000..3daf7cc1 --- /dev/null +++ b/configs/V43nano/object_performance/tau_trigger.yaml @@ -0,0 +1,59 @@ +TauTriggerBarrel_90perc: + sample: VBFHToTauTau + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) < 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:barrel: "pt" + L1hpsTau:default:barrel: "pt" + L1caloTau:default:barrel: "pt" + L1nnCaloTau:default:barrel: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (barrel, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 + +TauTriggerEndcap_90perc: + sample: VBFHToTauTau + version: V43nano + match_test_to_ref: True + reference_object: + object: "GenVisTau" + x_arg: "pt" + label: "Gen Taus" + cuts: + event: + # - "{dr_0.3} < 0.15" + - "abs({eta}) > 1.5" + object: + - "abs({eta}) < 2.4" + test_objects: + L1nnPuppiTau:default:endcap: "pt" + L1hpsTau:default:endcap: "pt" + L1caloTau:default:endcap: "pt" + L1nnCaloTau:default:endcap: "pt" + xlabel: "Gen. pT (GeV)" + ylabel: "Trigger Efficiency (endcap, L1 $p_T > $ GeV)" + thresholds: [20, 30] + scalings: + method: "naive" + threshold: 0.90 + binning: + min: 0 + max: 150 + step: 6 diff --git a/configs/V43nano/objects/electrons.yaml b/configs/V43nano/objects/electrons.yaml new file mode 100644 index 00000000..cfacf196 --- /dev/null +++ b/configs/V43nano/objects/electrons.yaml @@ -0,0 +1,49 @@ +L1tkElectron: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 5] + ids: + NoIso: + label: "TkElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + endcap: + - "({eleId} == 1) | ({pt} < 25)" + barrel: + - "{eleId} == 1" + NoIsoForIso: + # This id is exclusively used for the + # isoloation wp derivation + label: "TkElectron, no ID" + cuts: + inclusive: + - "abs({eta}) < 2.4" + Iso: + label: "TkIsoElectron" + cuts: + inclusive: + - "abs({eta}) < 2.4" + barrel: + - "abs({relIso}) < 0.13" + endcap: + - "abs({relIso}) < 0.28" + +L1EG: + match_dR: 0.2 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.479] + endcap: [1.479, 3.0] + label: "EG" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 3.0" + barrel: + - "{eleId} == 1" + endcap: + - "{saId} == 1" diff --git a/configs/V43nano/objects/jets.yaml b/configs/V43nano/objects/jets.yaml new file mode 100644 index 00000000..481cccda --- /dev/null +++ b/configs/V43nano/objects/jets.yaml @@ -0,0 +1,103 @@ +L1caloJet: + match_dR: 0.3 + label: "Calo Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + cuts: + inclusive: + - "abs({eta}) < 7" + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiExtJetSC4: + match_dR: 0.35 + label: "Seeded Cone Extended PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 5" + PtGe25: + cuts: + inclusive: + - "abs({eta}) < 7" + - "abs({pt}) >= 25" + bjetnn: + label: "SC Extended PuppiJet, BtagScore > 0.71" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{btagScore} > 0.71" + +L1puppiJetHisto: + match_dR: 0.3 + label: "Histogrammed PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1puppiJetSC4: + match_dR: 0.35 + label: "Seeded Cone PuppiJet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + PtGe25: + cuts: + inclusive: + - "abs({eta}) < 7" + - "abs({pt}) >= 25" + +L1puppiJetSC8: + match_dR: 0.35 + label: "Seeded Cone PuppiJet 8" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + forward: [2.4, 5] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + +L1TrackJet: + match_dR: 0.4 + label: "Tracker Jet" + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 7" + + diff --git a/configs/V43nano/objects/met_ht_mht.yaml b/configs/V43nano/objects/met_ht_mht.yaml new file mode 100644 index 00000000..8dbdb2fd --- /dev/null +++ b/configs/V43nano/objects/met_ht_mht.yaml @@ -0,0 +1,69 @@ +# phase1PuppiHT: +# label: "Histogrammed Puppi HT" +# ids: +# default: {} + +# phase1PuppiMHT: +# label: "Phase1 Puppi MHT" +# ids: +# default: {} + +L1puppiMET: + label: "Puppi MET" + ids: + default: {} + +L1puppiMLMET: + label: "Puppi MLMET" + ids: + default: {} + +L1puppiJetSC4sums: + ids: + HT: + label: "SeededCone HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "SeededCone MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1puppiHistoJetSums: + ids: + HT: + label: "Histogrammed Puppi HT" + cuts: + inclusive: + - "{sumType} == 0" + MHT: + label: "Histogrammed Puppi MHT" + cuts: + inclusive: + - "{sumType} == 1" + +L1TrackHT: + ids: + HT: + label: "Tracker HT" + MHT: + label: "Tracker MHT" + +L1ExtTrackHT: + ids: + HT: + label: "ext. Tracker HT" + MHT: + label: "ext. Tracker MHT" + +L1TrackMET: + label: "Tracker MET" + ids: + default: {} + +L1TrackTripletWord: + label: "Track Triplet for W3Pi" + ids: + default: {} \ No newline at end of file diff --git a/configs/V43nano/objects/muons.yaml b/configs/V43nano/objects/muons.yaml new file mode 100644 index 00000000..96b2e80d --- /dev/null +++ b/configs/V43nano/objects/muons.yaml @@ -0,0 +1,137 @@ +GenPart: + label: "Gen Muon" + eta_ranges: + inclusive: [0, 7] + ids: + gen_electron_default: + cuts: + inclusive: + - "(({statusFlags}>>7)&1) == 1" + +L1gmtTkMuon: + label: "GMT TkMuon" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + label: "GMT TkMuon, Loose ID" + cuts: + inclusive: + - "{hwQual} >= 3" + VLoose: # x.numberOfMatches() > 0 + label: "GMT TkMuon, VLoose ID" + cuts: + inclusive: + - "{hwQual} >= 1" + Loose: # x.numberOfMatches() >1 + label: "GMT TkMuon, Loose ID" + cuts: + inclusive: + - "{hwQual} >= 3" + Medium: # x.stubs().size()>1 + label: "GMT TkMuon, Medium ID" + cuts: + inclusive: + - "{hwQual} >= 7" + Tight: # x.numberOfMatches()>2 + label: "GMT TkMuon, Tight ID" + cuts: + inclusive: + - "{hwQual} >= 15" + +L1gmtMuon: + label: "GMT Muon" + match_dR: 0.6 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: + cuts: + overlap: + - "{hwQual} >= 12" + endcap: + - "{hwQual} >= 14" + dR0p6: + label: "GMT Muon, match dR < 0.6" + match_dR: 0.6 + cuts: + overlap: + - "{hwQual} >= 12" + endcap: + - "{hwQual} >= 14" + +L1gmtDispMuon: + label: "GMT Displaced Muon" + match_dR: 0.6 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + dXYge8: + label: "Disp. Muon, dXY>8" + cuts: + endcap: + - "{d0} >= 8" + dXYge8Qual15: + label: "Disp. Muon, dXY>8, qual>=15" + cuts: + inclusive: + - "abs({eta}) < 2.4" + endcap: + - "{hwQual} >= 15" + - "{d0} >= 8" + qual15: + label: "Disp. Muon, qual>=15" + cuts: + endcap: + - "{hwQual} >= 15" + qual15_Eta2p0: + label: "Disp. Muon, eta < 2, qual>=15" + cuts: + inclusive: + - "abs({eta}) < 2" + endcap: + - "{hwQual} >= 15" + +L1MuonKMTF: + label: "KMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonOMTF: + label: "OMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + +L1MuonEMTF: + label: "EMTF Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} diff --git a/configs/V43nano/objects/photons.yaml b/configs/V43nano/objects/photons.yaml new file mode 100644 index 00000000..2565e821 --- /dev/null +++ b/configs/V43nano/objects/photons.yaml @@ -0,0 +1,51 @@ +L1tkPhoton: + match_dR: 0.15 + eta_ranges: + inclusive: [0, 5] + barrel: [0, 1.479] + endcap: [1.479, 2.4] + ids: + NoIso: + label: "L1tkPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "{eleId} == 1" + endcap: + - "{phoId} == 1" + NoIsoPt30: + label: "L1tkPhoton, pt>30" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 30" + barrel: + - "{eleId} == 1" + endcap: + - "{phoId} == 1" + Iso: + label: "L1tkIsoPhoton" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 5" + barrel: + - "abs({relIso}) < 0.25" + - "{eleId} == 1" + endcap: + - "abs({relIso}) < 0.205" + - "{phoId} == 1" + IsoPt30: + label: "L1tkIsoPhoton, Pt>30" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 30" + barrel: + - "abs({relIso}) < 0.25" + - "{eleId} == 1" + endcap: + - "abs({relIso}) < 0.205" + - "{phoId} == 1" diff --git a/configs/V43nano/objects/pv.yaml b/configs/V43nano/objects/pv.yaml new file mode 100644 index 00000000..25fea9c0 --- /dev/null +++ b/configs/V43nano/objects/pv.yaml @@ -0,0 +1,4 @@ +L1PV: + label: "Primary Vertex" + ids: + default: {} diff --git a/configs/V43nano/objects/taus.yaml b/configs/V43nano/objects/taus.yaml new file mode 100644 index 00000000..11e49a74 --- /dev/null +++ b/configs/V43nano/objects/taus.yaml @@ -0,0 +1,61 @@ +L1nnPuppiTau: + label: "NN Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + # - "{passLooseNN}==1" + # Current IB (22 Feb recipe) does not have updated WP, so cut on NN score rather than checking passLooseNN + - "{chargedIso} > 0.22" + +L1hpsTau: + label: "HPS Tau" + match_dR: 0.1 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + +L1caloTau: + label: "Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + PtGe20: + label: "Calo Tau, pt > 20" + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{pt} > 20" + +L1nnCaloTau: + label: "NN Calo Tau" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 1.5] + endcap: [1.5, 2.4] + ids: + default: + cuts: + inclusive: + - "abs({eta}) < 2.4" + - "{hwQual}==3" diff --git a/configs/V43nano/rate_plots/bjet.yaml b/configs/V43nano/rate_plots/bjet.yaml new file mode 100644 index 00000000..aa0ab2ec --- /dev/null +++ b/configs/V43nano/rate_plots/bjet.yaml @@ -0,0 +1,10 @@ +BJetRates: + sample: MinBias + version: V43nano + test_objects: + - L1puppiExtJetSC4:default + - L1puppiExtJetSC4:bjetnn + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V43nano/rate_plots/disp_ht_sig.yaml b/configs/V43nano/rate_plots/disp_ht_sig.yaml new file mode 100644 index 00000000..0a64781c --- /dev/null +++ b/configs/V43nano/rate_plots/disp_ht_sig.yaml @@ -0,0 +1,13 @@ + +DispHTRates_Signal: + sample: HtoLLPto4B_M125_Phi60_ctau100 + version: V43nano + test_objects: + # - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + - L1ExtTrackHT:HT + binning: + min: 50 + max: 975 + step: 25 diff --git a/configs/V43nano/rate_plots/disp_muons.yaml b/configs/V43nano/rate_plots/disp_muons.yaml new file mode 100644 index 00000000..76c1c7c5 --- /dev/null +++ b/configs/V43nano/rate_plots/disp_muons.yaml @@ -0,0 +1,24 @@ +gmtDispMuon: + sample: MinBias + version: V43nano + test_objects: + - L1gmtMuon:default + - L1gmtDispMuon:default + binning: + min: 0 + max: 75 + step: 3 + +gmtDispMuonByRegion: + sample: MinBias + version: V43nano + test_objects: + # - L1gmtMuon:default + # - L1gmtDispMuon:default + - L1gmtDispMuon:default:barrel + - L1gmtDispMuon:default:overlap + - L1gmtDispMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 \ No newline at end of file diff --git a/configs/V43nano/rate_plots/eg.yaml b/configs/V43nano/rate_plots/eg.yaml new file mode 100644 index 00000000..58d77deb --- /dev/null +++ b/configs/V43nano/rate_plots/eg.yaml @@ -0,0 +1,13 @@ +EGRates: + sample: MinBias + version: V43nano + test_objects: + - L1EG:default + - L1tkElectron:NoIso + - L1tkElectron:Iso + - L1tkPhoton:Iso + - L1tkElectron:NoIsoNoLowPtID + binning: + min: 10 + max: 97 + step: 3 diff --git a/configs/V43nano/rate_plots/ht.yaml b/configs/V43nano/rate_plots/ht.yaml new file mode 100644 index 00000000..84d966cd --- /dev/null +++ b/configs/V43nano/rate_plots/ht.yaml @@ -0,0 +1,60 @@ +HTRates: + sample: MinBias + version: V43nano + test_objects: + # - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + binning: + min: 50 + max: 975 + step: 25 + +MHTRates: + sample: MinBias + version: V43nano + test_objects: + # - L1puppiHistoJetSums:MHT + - L1puppiJetSC4sums:MHT + # - L1TrackHT:MHT + binning: + min: 50 + max: 975 + step: 25 + +DispHTRates: + sample: MinBias + version: V43nano + test_objects: + # - L1puppiHistoJetSums:HT + - L1puppiJetSC4sums:HT + - L1TrackHT:HT + - L1ExtTrackHT:HT + binning: + min: 50 + max: 975 + step: 25 +# MHTRates: +# sample: MinBias +# version: V43nano +# test_objects: +# # - L1puppiHistoJetSums:MHT +# - L1puppiJetSC4sums:MHT +# - L1TrackHT:MHT +# binning: +# min: 50 +# max: 975 +# step: 25 + +# DispHTRates: +# sample: MinBias +# version: V43nano +# test_objects: +# # - L1puppiHistoJetSums:HT +# - L1puppiJetSC4sums:HT +# - L1TrackHT:HT +# - L1ExtTrackHT:HT +# binning: +# min: 50 +# max: 975 +# step: 25 diff --git a/configs/V43nano/rate_plots/jets.yaml b/configs/V43nano/rate_plots/jets.yaml new file mode 100644 index 00000000..ea5cdb1f --- /dev/null +++ b/configs/V43nano/rate_plots/jets.yaml @@ -0,0 +1,84 @@ +JetDefaultRates: + sample: MinBias + version: V43nano + test_objects: + # - L1puppiJetHisto:default + - L1puppiJetSC4:default + # - L1caloJet:default + # - L1TrackJet:default + binning: + min: 40 + max: 420 + step: 20 + +# JetsByRegion: +# sample: MinBias +# version: V43nano +# test_objects: +# - L1puppiJetSC4:default:barrel +# - L1puppiJetSC4:default:endcap +# - L1puppiJetSC4:default:forward +# - L1caloJet:default:barrel +# - L1caloJet:default:endcap +# - L1caloJet:default:forward +# # - L1TrackJet:default:barrel +# # - L1TrackJet:default:endcap +# binning: +# min: 40 +# max: 420 +# step: 20 + +JetExtendedRates: + sample: MinBias + version: V43nano + test_objects: + - L1puppiJetSC4:default:inclusive + - L1puppiExtJetSC4:default:inclusive + # - L1puppiExtJetSC4:default:barrel + # - L1puppiExtJetSC4:default:endcap + # - L1puppiExtJetSC4:default:forward + binning: + min: 40 + max: 420 + step: 20 + +JetExtendedRatesByRegion: + sample: MinBias + version: V43nano + test_objects: + # - L1puppiJetSC4:default:barrel + # - L1puppiJetSC4:default:endcap + # - L1puppiJetSC4:default:forward + - L1puppiExtJetSC4:default:barrel + - L1puppiExtJetSC4:default:endcap + - L1puppiExtJetSC4:default:forward + binning: + min: 40 + max: 420 + step: 20 + +# JetSC8Rates: +# sample: MinBias +# version: V43nano +# test_objects: +# - L1puppiJetSC4:default +# - L1puppiJetSC8:default +# binning: +# min: 40 +# max: 420 +# step: 20 + + +# JetSC8Rates_byRegion: +# sample: MinBias +# version: V43nano +# test_objects: +# # - L1puppiJetSC4:default +# - L1puppiJetSC8:default +# - L1puppiJetSC8:default:barrel +# - L1puppiJetSC8:default:endcap +# - L1puppiJetSC8:default:forward +# binning: +# min: 40 +# max: 420 +# step: 20 diff --git a/configs/V43nano/rate_plots/met.yaml b/configs/V43nano/rate_plots/met.yaml new file mode 100644 index 00000000..5f04dfe5 --- /dev/null +++ b/configs/V43nano/rate_plots/met.yaml @@ -0,0 +1,11 @@ +METRates: + sample: MinBias + version: V43nano + test_objects: + - L1puppiMET:default + - L1puppiMLMET:default + # - L1TrackMET:default + binning: + min: 50 + max: 500 + step: 25 diff --git a/configs/V43nano/rate_plots/muons.yaml b/configs/V43nano/rate_plots/muons.yaml new file mode 100644 index 00000000..9ecdec1d --- /dev/null +++ b/configs/V43nano/rate_plots/muons.yaml @@ -0,0 +1,34 @@ +gmtMuonByRegion: + sample: MinBias + version: V43nano + test_objects: + - L1gmtMuon:default:barrel + - L1gmtMuon:default:overlap + - L1gmtMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByRegion: + sample: MinBias + version: V43nano + test_objects: + - L1gmtTkMuon:default:barrel + - L1gmtTkMuon:default:overlap + - L1gmtTkMuon:default:endcap + binning: + min: 0 + max: 75 + step: 3 + +MuonRates: + sample: MinBias + version: V43nano + test_objects: + - L1gmtMuon:default + - L1gmtTkMuon:default + binning: + min: 0 + max: 75 + step: 3 diff --git a/configs/V43nano/rate_plots/taus.yaml b/configs/V43nano/rate_plots/taus.yaml new file mode 100644 index 00000000..0866ad8c --- /dev/null +++ b/configs/V43nano/rate_plots/taus.yaml @@ -0,0 +1,25 @@ +TauRates: + sample: MinBias + version: V43nano + test_objects: + - L1nnPuppiTau:default + - L1hpsTau:default + - L1caloTau:default + - L1nnCaloTau:default + binning: + min: 10 + max: 155 + step: 5 + +TauRatesByRegion: + sample: MinBias + version: V43nano + test_objects: + - L1caloTau:default:barrel + - L1caloTau:default:endcap + - L1nnPuppiTau:default:barrel + - L1nnPuppiTau:default:endcap + binning: + min: 10 + max: 155 + step: 5 diff --git a/configs/V43nano/rate_plots/test.yml b/configs/V43nano/rate_plots/test.yml new file mode 100644 index 00000000..50190bfd --- /dev/null +++ b/configs/V43nano/rate_plots/test.yml @@ -0,0 +1,13 @@ +JetSC8Rates_byRegion2: + sample: MinBias + version: V43nano + test_objects: + # - L1puppiJetSC4:default + - L1puppiJetSC8:default + - L1puppiJetSC8:default:inclusive + - L1puppiJetSC8:default:barrel + #- L1puppiJetSC8:default:endcap + binning: + min: 40 + max: 420 + step: 20 diff --git a/configs/V43nano/rate_plots/tkmuons.yaml b/configs/V43nano/rate_plots/tkmuons.yaml new file mode 100644 index 00000000..faaf7dfe --- /dev/null +++ b/configs/V43nano/rate_plots/tkmuons.yaml @@ -0,0 +1,51 @@ +gmtTkMuonByID: + sample: MinBias + version: V43nano + test_objects: + - L1gmtTkMuon:VLoose + - L1gmtTkMuon:Loose + - L1gmtTkMuon:Medium + - L1gmtTkMuon:Tight + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByID_barrel: + sample: MinBias + version: V43nano + test_objects: + - L1gmtTkMuon:VLoose:barrel + - L1gmtTkMuon:Loose:barrel + - L1gmtTkMuon:Medium:barrel + - L1gmtTkMuon:Tight:barrel + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByID_overlap: + sample: MinBias + version: V43nano + test_objects: + - L1gmtTkMuon:VLoose:overlap + - L1gmtTkMuon:Loose:overlap + - L1gmtTkMuon:Medium:overlap + - L1gmtTkMuon:Tight:overlap + binning: + min: 0 + max: 75 + step: 3 + +gmtTkMuonByID_endcap: + sample: MinBias + version: V43nano + test_objects: + - L1gmtTkMuon:VLoose:endcap + - L1gmtTkMuon:Loose:endcap + - L1gmtTkMuon:Medium:endcap + - L1gmtTkMuon:Tight:endcap + binning: + min: 0 + max: 75 + step: 3 \ No newline at end of file diff --git a/configs/V43nano/rate_table/v38_Step1And2_cfg.yml b/configs/V43nano/rate_table/v38_Step1And2_cfg.yml new file mode 100644 index 00000000..6fb07fa6 --- /dev/null +++ b/configs/V43nano/rate_table/v38_Step1And2_cfg.yml @@ -0,0 +1,4 @@ +version: "V43nano" +sample: "MinBias" +menu_config: "configs/V43nano/rate_table/v38_menu_Step1and2.yml" +table_fname: "rates_Step1and2" diff --git a/configs/V43nano/rate_table/v38_Step2_cfg.yml b/configs/V43nano/rate_table/v38_Step2_cfg.yml new file mode 100644 index 00000000..5087e0b2 --- /dev/null +++ b/configs/V43nano/rate_table/v38_Step2_cfg.yml @@ -0,0 +1,4 @@ +version: "V43nano" +sample: "MinBias" +menu_config: "configs/V43nano/rate_table/v38_menu_Step2.yml" +table_fname: "rates_Step2" diff --git a/configs/V43nano/rate_table/v38_TkMuonLooseID_cfg.yml b/configs/V43nano/rate_table/v38_TkMuonLooseID_cfg.yml new file mode 100644 index 00000000..43871af3 --- /dev/null +++ b/configs/V43nano/rate_table/v38_TkMuonLooseID_cfg.yml @@ -0,0 +1,4 @@ +version: "V43nano" +sample: "MinBias" +menu_config: "configs/V43nano/rate_table/v38_menu_TkMuonLooseID_cfg.yml" +table_fname: "rates_full_TkMuonLooseID" diff --git a/configs/V43nano/rate_table/v38_TkMuonMediumID_JetPt25_cfg.yml b/configs/V43nano/rate_table/v38_TkMuonMediumID_JetPt25_cfg.yml new file mode 100644 index 00000000..f15d1911 --- /dev/null +++ b/configs/V43nano/rate_table/v38_TkMuonMediumID_JetPt25_cfg.yml @@ -0,0 +1,4 @@ +version: "V43nano" +sample: "MinBias" +menu_config: "configs/V43nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml" +table_fname: "rates_full_TkMuonMediumID_JetPt25" diff --git a/configs/V43nano/rate_table/v38_TkMuonMediumID_cfg.yml b/configs/V43nano/rate_table/v38_TkMuonMediumID_cfg.yml new file mode 100644 index 00000000..569dd7cf --- /dev/null +++ b/configs/V43nano/rate_table/v38_TkMuonMediumID_cfg.yml @@ -0,0 +1,4 @@ +version: "V43nano" +sample: "MinBias" +menu_config: "configs/V43nano/rate_table/v38_menu_TkMuonMediumID_cfg.yml" +table_fname: "rates_full_TkMuonMediumID" diff --git a/configs/V43nano/rate_table/v38_cfg.yml b/configs/V43nano/rate_table/v38_cfg.yml new file mode 100644 index 00000000..e22579a1 --- /dev/null +++ b/configs/V43nano/rate_table/v38_cfg.yml @@ -0,0 +1,4 @@ +version: "V43nano" +sample: "MinBias" +menu_config: "configs/V43nano/rate_table/v38_menu_cfg.yml" +table_fname: "rates_full_Final_test" \ No newline at end of file diff --git a/configs/V43nano/rate_table/v38_menu_Step1and2.yml b/configs/V43nano/rate_table/v38_menu_Step1and2.yml new file mode 100644 index 00000000..1b6764bb --- /dev/null +++ b/configs/V43nano/rate_table/v38_menu_Step1and2.yml @@ -0,0 +1,532 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:PtGe25 +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:Medium +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:Medium +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:Medium +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:PtGe25 + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:Medium +################################# +########## STEP 2 +################################# +### SC8 wide cone jet seeds +L1_SinglePfJet8: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC8:default +L1_DoublePFJet8_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 200.0 + obj: L1puppiJetSC8:default + leg2: + threshold_cut: leg2.offline_pt >= 200.0 + obj: L1puppiJetSC8:default +### Bjet seed +L1_PFHTT_QuadJet_BTagNNScore: + cross_masks: + - (leg2.btagScore + leg3.btagScore + leg4.btagScore + leg5.btagScore) > 2.20 + leg1: + threshold_cut: offline_pt >= 299.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg3: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg4: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg5: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default +############################## +### Displaced Muons +############################## +L1_SingleDispMu: + cross_masks: [] + leg1: + threshold_cut: pt >= 22.0 + obj: L1gmtDispMuon:qual15_Eta2p0 +# L1_SingleDispMu_BMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:barrel +# L1_SingleDispMu_OMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:overlap +# # L1_SingleDispMu_EMTF: +# # cross_masks: [] +# # leg1: +# # threshold_cut: pt >= 22.0 +# # obj: L1gmtDispMuon:default:endcap +# L1_SingleDispMu_EMTF_SQ_eta2p0: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:qual15_Eta2p0:endcap +L1_DoubleDispMu: + cross_masks: [] + # - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 15.0 + obj: L1gmtDispMuon:default + leg2: + threshold_cut: pt > 7 + obj: L1gmtDispMuon:default +# ############################## +# ### GTT +# ############################## +L1_W3pi_GTT: + cross_masks: [] + leg1: + threshold_cut: pt > -99 + obj: L1TrackTripletWord:default +# L1_TkDispHT: +# cross_masks: [] +# leg1: +# threshold_cut: ht >= 200 +# obj: L1ExtTrackHT:HT \ No newline at end of file diff --git a/configs/V43nano/rate_table/v38_menu_Step2.yml b/configs/V43nano/rate_table/v38_menu_Step2.yml new file mode 100644 index 00000000..1399f49d --- /dev/null +++ b/configs/V43nano/rate_table/v38_menu_Step2.yml @@ -0,0 +1,125 @@ +### SC8 wide cone jet seeds +L1_SinglePfJet8: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC8:default +L1_DoublePFJet8_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 200.0 + obj: L1puppiJetSC8:default + leg2: + threshold_cut: leg2.offline_pt >= 200.0 + obj: L1puppiJetSC8:default +### Bjet seed +L1_PFHTT_QuadJet_BTagNNScore: + cross_masks: + - (leg2.btagScore + leg3.btagScore + leg4.btagScore + leg5.btagScore) > 2.20 + leg1: + threshold_cut: offline_pt >= 299.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg3: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg4: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default + leg5: + threshold_cut: pt >= 25 + obj: L1puppiExtJetSC4:default +# ############################## +# ### Displaced Muons +# ############################## +L1_SingleDispMu: + cross_masks: [] + leg1: + threshold_cut: pt >= 22.0 + obj: L1gmtDispMuon:qual15_Eta2p0 +# L1_SingleDispMu_BMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:barrel +# L1_SingleDispMu_OMTF: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:default:overlap +# # L1_SingleDispMu_EMTF: +# # cross_masks: [] +# # leg1: +# # threshold_cut: pt >= 22.0 +# # obj: L1gmtDispMuon:default:endcap +# L1_SingleDispMu_EMTF_SQ_eta2p0: +# cross_masks: [] +# leg1: +# threshold_cut: pt >= 22.0 +# obj: L1gmtDispMuon:qual15_Eta2p0:endcap +L1_DoubleDispMu: + cross_masks: [] + leg1: + threshold_cut: pt > 15.0 + obj: L1gmtDispMuon:default + leg2: + threshold_cut: pt > 7 + obj: L1gmtDispMuon:default +# # ############################## +# # ### GTT +# # ############################## +L1_W3pi_GTT: + cross_masks: [] + leg1: + threshold_cut: pt > -99 + obj: L1TrackTripletWord:default +# L1_TkDispHT: +# cross_masks: [] +# leg1: +# threshold_cut: ht >= 200 +# obj: L1ExtTrackHT:HT + + +# #### FOR DEBUG +# #### STEP1 muons +# L1_SingleTkMu: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 22.0 +# obj: L1gmtTkMuon:Medium +# L1_TripleTkMu: +# cross_masks: +# - abs(leg2.z0-leg1.z0) < 1 +# - abs(leg3.z0-leg1.z0) < 1 +# leg1: +# threshold_cut: pt > 5 +# obj: L1gmtTkMuon:Medium +# leg2: +# threshold_cut: pt > 3 +# obj: L1gmtTkMuon:Medium +# leg3: +# threshold_cut: pt > 3 +# obj: L1gmtTkMuon:Medium +# L1_DoubleTkMu: +# cross_masks: +# - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) +# leg1: +# threshold_cut: offline_pt > 15.0 +# obj: L1gmtTkMuon:Medium +# leg2: +# threshold_cut: pt > 7 +# obj: L1gmtTkMuon:Medium +# L1_DoubleTkMu4_SQ_OS_dR_Max1p2: +# cross_masks: +# - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) +# - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) +# - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) +# leg1: +# threshold_cut: pt > 4 +# obj: L1gmtTkMuon:Medium +# leg2: +# threshold_cut: pt > 4 +# obj: L1gmtTkMuon:Medium \ No newline at end of file diff --git a/configs/V43nano/rate_table/v38_menu_TkMuonLooseID_cfg.yml b/configs/V43nano/rate_table/v38_menu_TkMuonLooseID_cfg.yml new file mode 100644 index 00000000..5a412a41 --- /dev/null +++ b/configs/V43nano/rate_table/v38_menu_TkMuonLooseID_cfg.yml @@ -0,0 +1,445 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Loose +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Loose +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:default +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:Loose +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:Loose +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Loose +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:Loose +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:default +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:default +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Loose +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Loose +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Loose + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Loose + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Loose + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:default + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:Loose diff --git a/configs/V43nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml b/configs/V43nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml new file mode 100644 index 00000000..b8690d7f --- /dev/null +++ b/configs/V43nano/rate_table/v38_menu_TkMuonMediumID_JetPt25_cfg.yml @@ -0,0 +1,480 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:PtGe25 +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:Medium +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:Medium +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:Medium +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:PtGe25 +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:PtGe25 + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:PtGe25 +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:Medium +################################# +########## STEP 2 +################################# +L1_PFHTT_QuadJet_BTagNNScore: + cross_masks: + - (leg2.btagScore + leg3.btagScore + leg4.btagScore + leg5.btagScore) > 2.20 + leg1: + threshold_cut: offline_pt >= 299.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 0.0 + obj: L1puppiExtJetSC4:PtGe25 + leg3: + threshold_cut: offline_pt >= 0.0 + obj: L1puppiExtJetSC4:PtGe25 + leg4: + threshold_cut: offline_pt >= 0.0 + obj: L1puppiExtJetSC4:PtGe25 + leg5: + threshold_cut: offline_pt >= 0.0 + obj: L1puppiExtJetSC4:PtGe25 +L1_SinglePfJet8: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC8:default +L1_DoublePFJet8_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 200.0 + obj: L1puppiJetSC8:default + leg2: + threshold_cut: leg2.offline_pt >= 200.0 + obj: L1puppiJetSC8:default \ No newline at end of file diff --git a/configs/V43nano/rate_table/v38_menu_TkMuonMediumID_cfg.yml b/configs/V43nano/rate_table/v38_menu_TkMuonMediumID_cfg.yml new file mode 100644 index 00000000..30871bf5 --- /dev/null +++ b/configs/V43nano/rate_table/v38_menu_TkMuonMediumID_cfg.yml @@ -0,0 +1,445 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:Medium +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:default +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:Medium +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:Medium +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:Medium +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:Medium +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:default +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:default +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:Medium +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:Medium + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:Medium + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:default + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:Medium diff --git a/configs/V43nano/rate_table/v38_menu_cfg.yml b/configs/V43nano/rate_table/v38_menu_cfg.yml new file mode 100644 index 00000000..c3428fe7 --- /dev/null +++ b/configs/V43nano/rate_table/v38_menu_cfg.yml @@ -0,0 +1,445 @@ +L1_PFHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 450.0 + obj: L1puppiJetSC4sums:HT +L1_PFMHTT: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 135.5 + obj: L1puppiJetSC4sums:MHT +L1_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 200.0 + obj: L1puppiMET:default +# L1_PFMLMet: +# cross_masks: [] +# leg1: +# threshold_cut: offline_pt >= 200.0 +# obj: L1puppiMLMET:default +L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18: + cross_masks: + - (((leg1+leg2).mass > 7.0) & (leg1.deltaR(leg2) > 0)) + - (((leg1+leg2).mass < 18.0) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 4.4 + obj: L1gmtTkMuon:default +L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax: + cross_masks: + - abs(leg2.eta) < 2.4 + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) < 0.4 + - abs(leg5.eta-leg4.eta) < 1.6 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4: + cross_masks: + - (abs(leg1.eta) < 1.5) + - (abs(leg2.eta) < 1.5) + - ((leg1.deltaR(leg2) < 1.4)) + - ((leg1.charge*leg2.charge < 0.0)) + - ((abs(leg2.z0-leg1.z0) < 1)) + - ((leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default +L1_SingleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkPhoton:Iso + +L1_DoubleTkPhoIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkPhoton:Iso + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkPhoton:Iso +L1_PFTau_PFTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default + leg2: + threshold_cut: offline_pt > 90.0 + obj: L1caloTau:default +L1_SingleEGEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 51.0 + obj: L1EG:default:inclusive +L1_SinglePFTau: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 150.0 + obj: L1caloTau:default +L1_SinglePfJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 230.0 + obj: L1puppiJetSC4:default +L1_SingleTkEle: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 36.0 + obj: L1tkElectron:NoIso:inclusive +L1_SingleTkEleIso: + cross_masks: [] + leg1: + threshold_cut: offline_pt > 28.0 + obj: L1tkElectron:Iso:inclusive +L1_SingleTkMu: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1gmtTkMuon:default +L1_TkEleIso_EG: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1EG:default:inclusive +L1_TkEleIso_PFHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 26.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiJetSC4sums:HT +L1_TkEleIso_PFIsoTau: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 22.0 + obj: L1tkElectron:Iso:inclusive + leg3: + threshold_cut: offline_pt >= 45.0 + obj: L1nnPuppiTau:default +L1_TkEle_PFJet_dRMin: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg2.deltaR(leg3) > 0.3 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 28.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_TkEle_TkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 10.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1gmtTkMuon:default +L1_TkMu_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt >= 17.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_PfHTT: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 6 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 320.0 + obj: L1puppiJetSC4sums:HT +L1_TkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 110.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 120.0 + obj: L1puppiMET:default +L1_TkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 23.0 + obj: L1tkElectron:NoIso:inclusive +L1_TkMu_TkEleIso: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: offline_pt >= 20.0 + obj: L1tkElectron:Iso:inclusive +L1_TripleTkMu: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default +L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9: + cross_masks: + - (leg1+leg2).mass < 9.0 + - leg1.charge*leg2.charge < 0.0 + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 0 + obj: L1gmtTkMuon:default +L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - leg1.charge*leg3.charge < 0.0 + - (leg1+leg3).mass > 5.0 + - (leg1+leg3).mass < 17.0 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 3.5 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 2.5 + obj: L1gmtTkMuon:default +L1_DoubleTkEle_PFHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg2.deltaR(leg3) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg3: + threshold_cut: offline_pt > 8.0 + obj: L1tkElectron:NoIso:inclusive + leg4: + threshold_cut: offline_pt > 390.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleEGEle: + cross_masks: + - leg1.deltaR(leg2) > 0.1 + leg1: + threshold_cut: offline_pt >= 37.0 + obj: L1EG:default:inclusive + leg2: + threshold_cut: offline_pt >= 24.0 + obj: L1EG:default:inclusive +L1_DoublePFJet_MassMin: + cross_masks: + - (leg1 + leg2).mass > 620 + leg1: + threshold_cut: offline_pt >= 160.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: offline_pt >= 35.0 + obj: L1puppiJetSC4:default +L1_DoublePFJet_dEtaMax: + cross_masks: + - abs(leg2.eta-leg1.eta) < 1.6 + leg1: + threshold_cut: leg1.offline_pt >= 112.0 + obj: L1puppiJetSC4:default + leg2: + threshold_cut: leg2.offline_pt >= 112.0 + obj: L1puppiJetSC4:default +L1_DoubleTkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + leg1: + threshold_cut: offline_pt >= 25.0 + obj: L1tkElectron:NoIso:inclusive + leg2: + threshold_cut: offline_pt >= 12.0 + obj: L1tkElectron:NoIso:inclusive +L1_DoubleTkMu: + cross_masks: + - ((abs(leg1.z0-leg2.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: offline_pt > 15.0 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 7 + obj: L1gmtTkMuon:default +L1_DoubleTkMu4_SQ_OS_dR_Max1p2: + cross_masks: + - ((leg1.deltaR(leg2) < 1.2) & (leg1.deltaR(leg2) > 0)) + - ((leg1.charge*leg2.charge < 0.0) & (leg1.deltaR(leg2) > 0)) + - ((abs(leg2.z0-leg1.z0) < 1) & (leg1.deltaR(leg2) > 0)) + leg1: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 4 + obj: L1gmtTkMuon:default +L1_DoubleTkMu_PfHTT: + cross_masks: + - (abs(leg2.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (abs(leg3.z0-leg1.z0) < 1 & (leg3.deltaR(leg2) > 0)) + - (leg3.deltaR(leg2) > 0) + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg4: + threshold_cut: offline_pt >= 300.0 + obj: L1puppiJetSC4sums:HT +L1_DoubleTkMu_PfJet_PfMet: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: pt > 3 + obj: L1gmtTkMuon:default + leg4: + threshold_cut: offline_pt >= 60.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 130.0 + obj: L1puppiMET:default +L1_DoubleTkMu_TkEle: + cross_masks: + - abs(leg2.z0-leg1.z0) < 1 + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg2: + threshold_cut: pt > 5 + obj: L1gmtTkMuon:default + leg3: + threshold_cut: offline_pt >= 9.0 + obj: L1tkElectron:NoIso:inclusive +L1_PFHTT_QuadJet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 400.0 + obj: L1puppiJetSC4sums:HT + leg2: + threshold_cut: offline_pt >= 70.0 + obj: L1puppiJetSC4:default + leg3: + threshold_cut: offline_pt >= 55.0 + obj: L1puppiJetSC4:default + leg4: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default + leg5: + threshold_cut: offline_pt >= 40.0 + obj: L1puppiJetSC4:default +L1_PFIsoTau_PFIsoTau: + cross_masks: + - leg1.deltaR(leg2) > 0.5 + leg1: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 52.0 + obj: L1nnPuppiTau:default +L1_PFIsoTau_PFMet: + cross_masks: [] + leg1: + threshold_cut: offline_pt >= 55.0 + obj: L1nnPuppiTau:default + leg2: + threshold_cut: offline_pt >= 190.0 + obj: L1puppiMET:default +L1_PFIsoTau_TkMu: + cross_masks: + - abs(leg3.z0-leg1.z0) < 1 + leg1: + threshold_cut: null + obj: L1PV:default + leg2: + threshold_cut: offline_pt >= 42.0 + obj: L1nnPuppiTau:default + leg3: + threshold_cut: offline_pt >= 18.0 + obj: L1gmtTkMuon:default diff --git a/configs/scaling_thresholds.yaml b/configs/scaling_thresholds.yaml index af0cbede..75535cd4 100644 --- a/configs/scaling_thresholds.yaml +++ b/configs/scaling_thresholds.yaml @@ -1,7 +1,25 @@ -Jet: {25, 30, 35, 40, 45, 50, 55, 60, 70, 75, 80, 85, 90, 100, 120, 125, 130, 140, 150, 175} -Muon: {7, 9, 10, 12, 14, 15, 17, 20, 26, 25, 27, 30} -Tau: {27, 30, 40, 50, 60, 70} -EG: {7, 9, 12, 14, 15, 17, 20, 26, 25, 27, 30, 40, 50} -MET: {70, 80, 90, 100, 125, 150, 175} -MHT: {70, 80, 90, 100, 125, 150, 175} -HT: {50, 100, 150, 200, 250, 300, 350, 400, 450, 500} +### General Values +# Jet: [50, 100, 150] +Jet: [25, 30, 35, 40, 45, 50, 55, 60, 70, 75, 80, 85, 90, 100, 120, 125, 130, 140, 150, 175] +Muon: [7, 9, 10, 12, 14, 15, 17, 20, 26, 25, 27, 30] +Tau: [27, 30, 40, 50, 60, 70] +EG: [7, 9, 12, 14, 15, 20, 25, 30, 40, 50] +MET: [30, 40, 50, 60, 70, 80, 90, 100] +MHT: [70, 80, 90, 100, 125] +HT: [50, 100, 150, 200, 250, 300] + +### Specific values: +L1TrackHT:HT:inclusive: [50, 100, 150, 200, 250] +# Jets +L1TrackJet:default:endcap: [5, 7.5, 10, 12.5, 15] +L1TrackJet:default:barrel: [10, 15, 20, 30, 35, 40] +L1caloJet:default:endcap: [100, 115, 130, 145, 160, 180, 200] +L1caloJet:default:forward: [100, 115, 130, 145, 160, 180, 200] +# Sums +L1TrackMHT:default:inclusive: [40, 50, 60, 70, 80, 90, 100, 125] +L1puppiMET:default:inclusive: [30, 40, 50, 60, 70, 80, 90, 100] +L1TrackMET:default:inclusive: [10, 15, 20, 25, 30, 35] +# EG +L1tkPhoton:default:barrel: [15, 20, 25, 30, 40, 50] +L1tkPhoton:default:endcap: [15, 20, 25, 30, 40, 50] + diff --git a/docs/development.md b/docs/development.md new file mode 100644 index 00000000..d45033a7 --- /dev/null +++ b/docs/development.md @@ -0,0 +1,47 @@ +# Instructions for development + +## Dependency management and dev environment +Poetry is used as a backend for packaging and for dependency +management. To set up a working development environment, create +a virtual environment and install the `poetry` python package. +Then `poetry install` installs all develpoment dependencies: + +```bash +python3.11 -m venv +source /bin/activate +pip install poetry +poetry install +``` + +## Testing +The tests are maintained in the subpackages under `tests`, e.g. +`menu_tools/object_performance/tests`. After properly setting up +a development environment as described [above](#dependency-management-and-dev-environment) +you can simply run + +```bash +pytest -vv +``` + +to run all tests. The `-vv` option is optional and can be omitted. +For some of the tests the presence of the `V29` caching files is required. + + +## Code Formatting and Linting +`black` is used for code formatting and `flake8` for linting. +These tools are helpful to have consistent formatting through +the codebase even with multiple developers working on the code. +To run `black`, set up the development environment as described +[above](#dependency-management-and-dev-environment) and run + +```bash +black menu_tools +``` + +If you want to dry-run, add the `--check` flag to see which files would +be modified. +Similarlly `flake8` can be run by simply typing + +```bash +flake8 menu_tools +``` diff --git a/docs/object-performance.md b/docs/object-performance.md index eb202bff..d7332051 100644 --- a/docs/object-performance.md +++ b/docs/object-performance.md @@ -1,14 +1,17 @@ # Object Performance Tools - The tools present in this folder allow the user to produce + The object performance tools allow the user to produce matching efficiency, turn-on curves, and scaling plots for - the various L1 objects under test. + the various L1 objects. The definition of each object to be tested is detailed in this [TWiki page](https://twiki.cern.ch/twiki/bin/view/CMS/PhaseIIL1TriggerMenuTools). - A detailed description of each step, together with instructions on how to set up the configuration files for the cache and plotting steps, is given in [the Wiki pages](https://github.com/cms-l1-dpg/Phase2-L1MenuTools/wiki). + A detailed description of each step, together with instructions on how to set up the + configuration files for the cache and plotting steps, is given in + [the Wiki pages](https://github.com/cms-l1-dpg/Phase2-L1MenuTools/wiki). - The following presents the minimal set of commands to be run to produce the standard set of validation plots (cf. [these slides](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf)). + The following presents the commands to be run to produce the standard set of validation + plots (cf. [these slides](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf)). ## Table of content @@ -17,54 +20,49 @@ * [Reference config files](#reference-config-files) ## Caching the NTuple trees + + **Note:** When running on lxplus, usually the cache files will already + be present in the symliked directory included with the repo. + In order to run the next steps, the object `TTrees` from the L1NTuples need to be cached as `awkward` arrays saved into `.parquet` files. This is done by running: ``` - ./src/cache_objects.py cfg_caching/V22.yaml + cache_objects ``` - This step needs to be run only once per configuration (unless changes in the input L1 ntuples occur) and the `.parquet` files generated by the code can be used for all the subsequent steps of the workflow, without having to open the `.root` files and load the objects every time the framework is run. + An example for a caching config can be found at `configs/V29/caching.yaml`. + The output of this step is saved to `cache`. + This step needs to be run only once per configuration (unless changes in the input + L1 ntuples occur) and the `.parquet` files generated by the code can be + used for all the subsequent steps of the workflow, without having to open the + `.root` files and load the objects every time the framework is run. ## Efficiency and Scalings - The `plotter.py` script can be used to produce matching efficiencies, turn-on curves, and L1 scaling plots. It can be run with + To produce matching efficiencies, turn-on curves, and L1 scalings run ``` - ./src/plotter.py cfg_plots/.yaml + object_performance ``` -### Reference config files - - The following config files (`.yaml`) are available in the `cfg_plots` folder: - - * `electron_iso.yaml`: to produce trigger [efficiency vs L1 isolation plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=57) for electrons. Plot used to estimate EG working points. - - * `electron_matching.yaml` and `electron_matching_eta.yaml`: to produce [electrons matching efficiency plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=21) as a function of transverse momentum (in barrel and endcaps) and pseudorapidity (in low and high-transverse momentum range). - - * `electron_trigger.yaml`: to produce [trigger efficiency (turn-on) plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=22) for electrons (EGamma objects). + The production of the scalings is a prerequisite for the generation of + offline rate plots as well as the rate table. It is possible to use + wildcards (e.g. `*_trigger.yaml`) to run multiple configs in succession. - * `muon_matching.yaml` and `muon_matching_eta.yaml`: to produce [muons matching efficiency plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=21) as a function of transverse momentum (in barrel and endcaps) and pseudorapidity (in low and high-transverse momentum range). - - * `muon_trigger.yaml`: to produce [trigger efficiency (turn-on) plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=22) for muons. - - * `tau_matching.yaml`: to produce [tau matching efficiency plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=26) as a function of transverse momentum (in barrel and endcaps). - - * `tau_matching_GG_VBF.yaml`: to produce [tau matching efficiency plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=26) as a function of transverse momentum (in barrel and endcaps) for HH and H taus. - - * `tau_trigger.yaml`: to produce [trigger efficiency (turn-on) plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=27) for taus. - - * `jets_matching_eta.yaml`: to produce [jets matching efficiency plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=31) as a function of transverse pseudorapidity (in low and high-transverse momentum range). - - * `jets_trigger.yaml`: to produce [trigger efficiency (turn-on) plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=32) for jets. +### Reference config files - * `met_ht_mht_trigger.yaml`: to produce [trigger efficiency (turn-on) plots](https://twiki.cern.ch/twiki/pub/CMS/PhaseIIL1TriggerMenuTools/Phase2Menu_validation123x-3.pdf#page=36) for MHT, HT, and MET. + Default configuration files are contained in `configs` and should be used as + templates for custom configurations. - When the plotter is run with the `*_trigger.yaml` config files as input, scaling plots will be produced in addition to the L1 turn-on efficiency plots. - The points used for the calculation of the scalings correspond to the list of threshold cuts defined in [`scaling_thresholds`](https://github.com/bonanomi/Phase2-L1MenuTools/blob/main/objectPerformance/cfg_plots/scaling_thresholds.yaml). + The points used for the calculation of the scalings correspond to the list of + threshold cuts defined in + [`scaling_thresholds`](https://github.com/cms-l1-dpg/Phase2-L1MenuTools/blob/main/configs/scaling_thresholds.yaml). - The outputs will be written to the `outputs/` directory, where `` is the version of the ntuples used for the plots as specified in the `.yaml` config file (more details on the config file are given below). + The outputs will be written to the `outputs/` directory, + where `` is the version of the ntuples used for the plots as specified + in the `.yaml` config file (more details on the config file are given below). In the current version of the code, the plots will be saved in three folders under `outputs/`: * `distributions`: plots of the distributions (histograms) used to compute the efficiencies. For each efficiency curve plotted, these plots depict the distributions used for as numberator and denumerator in the computation of the efficiencies. diff --git a/docs/objects.md b/docs/objects.md new file mode 100644 index 00000000..b3bf7645 --- /dev/null +++ b/docs/objects.md @@ -0,0 +1,40 @@ +# Objects + +The objects for both the performance and the rate studies are defined +centrally, by default at + +``` +configs//objects +``` + +All objects defined in yaml files in this directory will be found by +the code. + +## Object configuration +Below is an example for an object definition. The outermost key (`gmtMuon`) +references the name of the object in the NTuples. Then `ids` can be defined. +All other key-value pairs at the top level of the definition (`label`, +`match_dR` etc.) are merely defaults that are overwritten by whatever is +defined in a specific id. In addition `eta_ranges` defines the detector regions +on which `cuts` can be defined in the `ids`, e.g. the `oldRateID` applies a cut +on `quality` only in the `overlap` region, which is defined in `eta_ranges`. +A default ID is also defined in the example below, which does not add any +cuts or criteria to the default values. + +```yaml +gmtMuon: + label: "GMT Muon" + match_dR: 0.3 + eta_ranges: + inclusive: [0, 7] + barrel: [0, 0.83] + overlap: [0.83, 1.24] + endcap: [1.24, 2.4] + ids: + default: {} + oldRateID: + label: "GMT Muon, Qual>=12 in OMTF" + cuts: + overlap: + - "{quality} >= 12" +``` diff --git a/docs/rate_table.md b/docs/rate_table.md new file mode 100644 index 00000000..4bf85414 --- /dev/null +++ b/docs/rate_table.md @@ -0,0 +1,24 @@ +# L1 Phase2 Menu Tools: Rate Table + +The rates table can be produced using the following command: + + rate_table .yml + +where `.yml` could be `configs/V29/rate_table/v29_cfg.yml`. +The config must contain the menu version and sample to be used as well as the path to the table +configuration. Additionally the file name of the output table is configurable, +but this is optional. + +```yaml +version: "V29" +sample: "MinBias" +menu_config: "configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml" +table_fname: "rates_full_Final" +``` + +For an example on how to construct the menu configuration file, see +`configs/V29/rate_table/v29_WITHMUONS_Final_clean_cfg.yml`. + +The scalings for the objects in the menu table are applied automatically +and assume that the have been produced by running `object_performance`, which +saves them to `outputs//object_performance/scalings/`. diff --git a/menu_tools/caching/cache_objects.py b/menu_tools/caching/cache_objects.py index fdddf135..5e286cb5 100755 --- a/menu_tools/caching/cache_objects.py +++ b/menu_tools/caching/cache_objects.py @@ -3,7 +3,7 @@ import os import awkward as ak -from progress.bar import IncrementalBar +from tqdm import tqdm import uproot import vector import yaml @@ -257,13 +257,17 @@ def _ak_array_in_chunk(self, arr, chunk_array, branches): @utils.timer("Loading objects files") def _concat_array_from_ntuples(self): fnames = glob.glob(self._ntuple_path)[:] - bar = IncrementalBar("Progress", max=len(fnames)) - branches = [self._object + x for x in self._branches] + ## Nano + if self._tree == "Events": + branches = [f"{self._object}_{x}" for x in self._branches] + ## menu ntuple + else: + branches = [self._object + x for x in self._branches] + all_arrays = {x.removeprefix("part"): [] for x in branches} - for fname in fnames: - bar.next() + for fname in tqdm(fnames): new_array = {x.removeprefix("part"): [] for x in branches} # Read files in chunks to avoid issues with large size files @@ -282,12 +286,17 @@ def _concat_array_from_ntuples(self): # Concatenate array from "fname file" to all_arrays all_arrays = self._ak_array_in_chunk(all_arrays, new_array, branches) - bar.finish() - if self._object.startswith("part"): all_arrays = {**all_arrays, **self._ref_part_iso} + if len(all_arrays) > 1: self._final_ak_array = ak.zip({**all_arrays}) + # sums -> add local index + if "sums" in self._object.lower(): + self._final_ak_array[f"{self._object}_sumType"] = ak.local_index( + self._final_ak_array + ) + self._branches += [f"{self._object}_sumType"] else: self._final_ak_array = ak.Array(all_arrays) @@ -327,7 +336,7 @@ def load(self): self._save_array_to_parquet() -if __name__ == "__main__": +def parse_args(): parser = argparse.ArgumentParser() parser.add_argument( "cfg", @@ -340,6 +349,11 @@ def load(self): help="Only do print-out of objects and branches to be loaded.", ) args = parser.parse_args() + return args + + +def main(): + args = parse_args() with open(args.cfg, "r") as f: cfg = yaml.safe_load(f) @@ -362,3 +376,7 @@ def load(self): dryrun=args.dry_run, ) loader.load() + + +if __name__ == "__main__": + main() diff --git a/menu_tools/caching/merge_arrays.py b/menu_tools/caching/merge_arrays.py new file mode 100644 index 00000000..7e5aea62 --- /dev/null +++ b/menu_tools/caching/merge_arrays.py @@ -0,0 +1,25 @@ +import awkward as ak + +version = "V33nano" +sample = "MinBias" +# sample = "Hgg" +pattern = f"cache/{version}/{version}_{sample}_%s.parquet" +objects = ["L1EGbarrel", "L1EGendcap"] +target_object = "L1EG" + +print(f"Reading files as {pattern} for {objects}") +arrs = [] + +for obj in objects: + arr = ak.from_parquet(pattern % obj) + arr = ak.Array({f.replace(obj, target_object): arr[f] for f in arr.fields}) + # apply 5 gev cut + arr = arr[arr[f"{target_object}_pt"] > 5] + print(obj, arr.fields) + arrs.append(arr) + +print("Merging") +merge_arr = ak.concatenate(arrs, axis=1) +print(merge_arr) +print(f"Writing merged array to: {pattern%target_object}") +ak.to_parquet(merge_arr, pattern % target_object) diff --git a/menu_tools/object_performance/config.py b/menu_tools/object_performance/config.py new file mode 100644 index 00000000..a51dd89e --- /dev/null +++ b/menu_tools/object_performance/config.py @@ -0,0 +1,103 @@ +from typing import Any, Optional + +from menu_tools.utils.config import BasePlotConfig +from menu_tools.utils.objects import Object + + +class PerformancePlotConfig(BasePlotConfig): + def __init__(self, cfg: dict[str, Any], name: Optional[str] = None) -> None: + super().__init__(cfg, name) + + @property + def iso_vs_eff_plot(self): + try: + return self._cfg["iso_vs_efficiency"] + except KeyError: + return False + + @property + def reference_object(self): + return self._cfg["reference_object"]["object"] + + @property + def reference_event_cuts(self): + try: + return self._cfg["reference_object"]["cuts"]["event"] + except KeyError: + return [] + + @property + def reference_object_cuts(self): + try: + return self._cfg["reference_object"]["cuts"]["object"] + except KeyError: + return [] + + @property + def reference_trafo(self) -> Optional[str]: + try: + return self._cfg["reference_object"]["trafo"] + except KeyError: + return None + + @property + def reference_label(self) -> str: + try: + return self._cfg["reference_object"]["label"] + except KeyError: + raise KeyError("No label defined for reference object in {self.plot_name}!") + + @property + def test_objects(self) -> dict[str, Any]: + # Parse to detect faulty config + if not all([":" in x for x in self._cfg["test_objects"]]): + raise ValueError(f"Misconfigured obj:id key in {self.plot_name}!") + + return self._cfg["test_objects"] + + # DEPRECATED + # test_obj = { + # x: {"base_obj": x.split(":")[0], "id": x.split(":")[1], "x_arg": x_arg} + # for x, x_arg in self._cfg["test_objects"].items() + # } + + # return test_obj + + @property + def matching(self): + try: + return self._cfg["match_test_to_ref"] + except KeyError: + return False + + @property + def reference_field(self): + field = self._cfg["reference_object"]["x_arg"] + return field.lower() + + @property + def compute_scalings(self) -> bool: + return "scalings" in self._cfg.keys() + + @property + def scaling_pct(self): + return self._cfg["scalings"]["threshold"] + + @property + def scaling_method(self): + return self._cfg["scalings"]["method"] + + @property + def xlabel(self): + return self._cfg["xlabel"] + + @property + def ylabel(self): + return self._cfg["ylabel"] + + @property + def test_object_instances(self) -> list: + test_objects = [] + for obj_key in self._cfg["test_objects"]: + test_objects.append(Object(obj_key, self.version)) + return test_objects diff --git a/menu_tools/object_performance/plot_config.py b/menu_tools/object_performance/plot_config.py deleted file mode 100644 index d4189494..00000000 --- a/menu_tools/object_performance/plot_config.py +++ /dev/null @@ -1,154 +0,0 @@ -from typing import Any - - -class PlotConfig: - def __init__(self, cfg: dict[str, Any]): - self._cfg = cfg - - @property - def sample(self) -> str: - return self._cfg["sample"] - - @property - def version_ref_object(self): - try: - return self._cfg["reference_object"]["version"] - except KeyError: - return self._cfg["default_version"] - except TypeError: - return None - - @property - def iso_vs_eff_plot(self): - try: - return self._cfg["iso_vs_efficiency"] - except KeyError: - return False - - @property - def reference_object(self): - return self._cfg["reference_object"]["object"] - - @property - def reference_event_cuts(self): - try: - return self._cfg["reference_object"]["cuts"]["event"] - except KeyError: - return [] - - @property - def reference_object_cuts(self): - try: - return self._cfg["reference_object"]["cuts"]["object"] - except KeyError: - return [] - - @property - def reference_trafo(self): - try: - return self._cfg["reference_object"]["trafo"] - except KeyError: - return None - - @property - def test_objects(self) -> dict[str, dict]: - return self._cfg["test_objects"] - - def get_match_dR(self, test_obj): - try: - return self._cfg["test_objects"][test_obj]["match_dR"] - except KeyError: - return self._cfg["match_dR"] - - @property - def matching_configured(self): - if "match_dR" in self._cfg.keys(): - return True - for test_obj in self._cfg["test_objects"].values(): - test_keys = test_obj.keys() - if "match_dR" not in test_keys: - return False - return True - - @property - def reference_object_field(self): - ref_obj = self._cfg["reference_object"]["object"] - field = self._cfg["reference_object"]["suffix"] - return ref_obj + field - - @property - def reference_field(self): - field = self._cfg["reference_object"]["suffix"] - return field.lower() - - @property - def reference_iso_threshold(self): - try: - return self._cfg["reference_object"]["iso_threshold"] - except KeyError: - return None - - @property - def bin_width(self): - return self._cfg["binning"]["step"] - - @property - def bin_min(self): - return self._cfg["binning"]["min"] - - @property - def bin_max(self): - return self._cfg["binning"]["max"] - - @property - def scaling_pct(self): - return self._cfg["scalings"]["threshold"] - - @property - def scaling_method(self): - return self._cfg["scalings"]["method"] - - def get_object_cuts(self, obj): - obj_cfg = self._cfg["test_objects"][obj] - try: - return obj_cfg["cuts"] - except KeyError: - return None - - def get_test_object_version(self, obj): - obj_cfg = self._cfg["test_objects"][obj] - - try: - return obj_cfg["version"] - except KeyError: - return self._cfg["default_version"] - - def get_quality_id(self, obj): - try: - return self._cfg["test_objects"][obj]["quality_id"] - except KeyError: - return None - - def get_base_obj(self, obj): - try: - return self._cfg["test_objects"][obj]["base_obj"] - except KeyError: - return obj - - def get_iso_BB(self, obj): - try: - return self._cfg["test_objects"][obj]["iso_BB"] - except KeyError: - return -1 - - def get_iso_EE(self, obj): - try: - return self._cfg["test_objects"][obj]["iso_EE"] - except KeyError: - return -1 - - def get_l1_iso(self, obj): - try: - return self._cfg["test_objects"][obj]["iso_branch"] - except KeyError: - return None diff --git a/menu_tools/object_performance/plotter.py b/menu_tools/object_performance/plotter.py index 54ec835d..808a6257 100755 --- a/menu_tools/object_performance/plotter.py +++ b/menu_tools/object_performance/plotter.py @@ -1,29 +1,46 @@ import argparse -from typing import Any +import json import os +from typing import Any +import warnings +import yaml +import matplotlib as mpl import matplotlib.pyplot as plt import mplhep as hep import numpy as np -from progress.bar import IncrementalBar -import yaml -import json +from tqdm import tqdm from menu_tools.object_performance.turnon_collection import TurnOnCollection +from menu_tools.object_performance.config import PerformancePlotConfig from menu_tools.object_performance.scaling_collection import ScalingCollection from menu_tools.utils import utils - - +from menu_tools.utils.objects import Object + + +colors = [ + "#3f90da", + "#ffa90e", + "#bd1f01", + "#94a4a2", + "#832db6", + "#a96b59", + "#e76300", + "#b9ac70", + "#717581", + "#92dadd", +] +mpl.rcParams["axes.prop_cycle"] = mpl.cycler(color=colors) plt.style.use(hep.style.CMS) class Plotter: - outdir_base = "outputs/object_performance/" - def _make_output_dirs(self, version: str) -> None: - os.makedirs(f"{self.outdir_base}/{version}/turnons", exist_ok=True) - os.makedirs(f"{self.outdir_base}/{version}/distributions", exist_ok=True) - os.makedirs(f"{self.outdir_base}/{version}/scalings", exist_ok=True) + os.makedirs(f"outputs/{version}/object_performance/turnons", exist_ok=True) + os.makedirs( + f"outputs/{version}/object_performance/distributions", exist_ok=True + ) + os.makedirs(f"outputs/{version}/object_performance/scalings", exist_ok=True) def _create_new_plot(self) -> tuple[plt.Figure, plt.Axes]: fig, ax = plt.subplots(figsize=(10, 10)) @@ -34,7 +51,7 @@ def _create_new_plot(self) -> tuple[plt.Figure, plt.Axes]: class EfficiencyPlotter(Plotter): def __init__(self, name, cfg, turnon_collection): self.plot_name = name - self.cfg = cfg + self.cfg = PerformancePlotConfig(cfg, name) self.turnon_collection = turnon_collection self.version = self.turnon_collection.version self.threshold = self.turnon_collection.threshold @@ -42,20 +59,22 @@ def __init__(self, name, cfg, turnon_collection): @property def _outdir_turnons(self) -> str: - return os.path.join(self.outdir_base, self.version, "turnons") + return os.path.join("outputs", self.version, "object_performance", "turnons") @property def _outdir_distributions(self) -> str: - return os.path.join(self.outdir_base, self.version, "distributions") + return os.path.join( + "outputs", self.version, "object_performance", "distributions" + ) def _style_plot(self, fig, ax, legend_loc="lower right"): ax.axvline(self.threshold, ls=":", c="k") ax.axhline(1, ls=":", c="k") ax.legend(loc=legend_loc, frameon=False) - ax.set_xlabel(rf"{self.cfg['xlabel']}") - ylabel = self.cfg["ylabel"].replace("", str(self.threshold)) + ax.set_xlabel(rf"{self.cfg.xlabel}") + ylabel = self.cfg.ylabel.replace("", str(self.threshold)) ax.set_ylabel(rf"{ylabel}") - ax.set_xlim(self.cfg["binning"]["min"], self.cfg["binning"]["max"]) + ax.set_xlim(self.cfg.bin_min, self.cfg.bin_max) ax.tick_params(direction="in") watermark = f"{self.version}_{self.plot_name}_" f"{self.threshold}" ax.text( @@ -71,25 +90,22 @@ def _style_plot(self, fig, ax, legend_loc="lower right"): def _save_json(self, file_name): plot = {} - - xlabel = self.cfg["xlabel"] - ylabel = self.cfg["ylabel"].replace("", str(self.threshold)) - watermark = f"{self.version}_{self.plot_name}_" f"{self.threshold}" - - plot["xlabel"] = xlabel - plot["ylabel"] = ylabel - plot["watermark"] = watermark + plot["xlabel"] = self.cfg.xlabel + plot["ylabel"] = self.cfg.ylabel.replace("", str(self.threshold)) + plot["watermark"] = f"{self.version}_{self.plot_name}_" f"{self.threshold}" for obj_key, gen_hist_trig in self.turnon_collection.hists.items(): if obj_key == "ref": continue - - _object = {} + obj = Object( + obj_key, + version=self.version, + ) xbins = self.turnon_collection.bins xbins = 0.5 * (xbins[1:] + xbins[:-1]) - if "Iso" in self.cfg["xlabel"]: + if self.cfg.iso_vs_eff_plot: efficiency = self._get_iso_vs_eff_hist(gen_hist_trig[0]) yerr = np.zeros((2, len(efficiency))) xerr = np.zeros(len(efficiency)) @@ -100,26 +116,26 @@ def _save_json(self, file_name): yerr = np.array( [yerr[0][~np.isnan(efficiency)], yerr[1][~np.isnan(efficiency)]] ) - xerr = xerr[~np.isnan(efficiency)] - xbins = xbins[~np.isnan(efficiency)] - efficiency = efficiency[~np.isnan(efficiency)] + xerr = xerr[np.isfinite(efficiency)] + xbins = xbins[np.isfinite(efficiency)] + efficiency = efficiency[np.isfinite(efficiency)] xerr = xerr.tolist() yerr = yerr.tolist() xbins = xbins.tolist() efficiency = efficiency.tolist() - label = self.cfg["test_objects"][obj_key]["label"] - - err_kwargs = {"xerr": xerr, "capsize": 3, "marker": "o", "markersize": 8} - - _object["label"] = label - _object["efficiency"] = efficiency - _object["efficiency_err"] = yerr - _object["xbins"] = xbins - _object["err_kwargs"] = err_kwargs - - plot[obj_key] = _object + plot[obj_key] = {} + plot[obj_key]["label"] = obj.plot_label + plot[obj_key]["efficiency"] = efficiency + plot[obj_key]["efficiency_err"] = yerr + plot[obj_key]["xbins"] = xbins + plot[obj_key]["err_kwargs"] = { + "xerr": xerr, + "capsize": 3, + "marker": "o", + "markersize": 8, + } with open(f"{file_name}", "w") as outfile: outfile.write(json.dumps(plot, indent=4)) @@ -129,7 +145,7 @@ def _get_iso_vs_eff_hist(self, test_hist): Cumulative ratio of efficiency vs L1 Iso histogram. """ - l1_isolation_histogram = np.test_hist) + l1_isolation_histogram = np.sum(test_hist) l1_cumulative_sum = np.cumsum(test_hist) / l1_isolation_histogram return l1_cumulative_sum @@ -148,28 +164,39 @@ def _plot_efficiency_curve(self): continue efficiency, yerr = self.turnon_collection.get_efficiency(obj_key) - label = self.cfg["test_objects"][obj_key]["label"] + obj = Object( + obj_key, + version=self.version, + ) err_kwargs = { - "xerr": self.turnon_collection.xerr(obj_key), + # "xerr": self.turnon_collection.xerr(obj_key), "capsize": 3, "marker": "o", "markersize": 8, } - ax.errorbar(xbins, efficiency, yerr=yerr, label=label, **err_kwargs) + ax.errorbar( + xbins, efficiency, yerr=yerr, label=obj.plot_label, **err_kwargs + ) self._style_plot(fig, ax) ax.set_ylim(0, 1.1) # Save figure plot_fname = f"{self.plot_name}_{self.threshold}_{self.version}" - plt.savefig(os.path.join(self._outdir_turnons, f"{plot_fname}.png")) - plt.savefig(os.path.join(self._outdir_turnons, f"{plot_fname}.pdf")) + plt.savefig( + os.path.join(self._outdir_turnons, f"{plot_fname}.png"), bbox_inches="tight" + ) + plt.savefig( + os.path.join(self._outdir_turnons, f"{plot_fname}.pdf"), bbox_inches="tight" + ) self._save_json(os.path.join(self._outdir_turnons, f"{plot_fname}.json")) # Save config - with open(os.path.join(self._outdir_turnons, f"{plot_fname}.json"), "w") as f: - yaml.dump({self.plot_name: self.cfg}, f, default_flow_style=False) + with open(os.path.join(self._outdir_turnons, f"{plot_fname}.yaml"), "w") as f: + yaml.dump( + {self.plot_name: self.cfg.config_dict}, f, default_flow_style=False + ) plt.close() @@ -187,22 +214,30 @@ def _plot_iso_vs_efficiency_curve(self): continue iso_vs_eff_hist = self._get_iso_vs_eff_hist(gen_hist_trig[0]) + obj = Object( + obj_key, + version=self.version, + ) + # yerr = np.sqrt(iso_vs_eff_hist) # TODO: Possibly introduce errors - label = self.cfg["test_objects"][obj_key]["label"] err_kwargs = {"capsize": 3, "marker": "o", "markersize": 8} - ax.errorbar(xbins, iso_vs_eff_hist, label=label, **err_kwargs) + ax.errorbar(xbins, iso_vs_eff_hist, label=obj.plot_label, **err_kwargs) self._style_plot(fig, ax) # Save figure plot_fname = f"{self.plot_name}_{self.threshold}_{self.version}" plt.savefig(os.path.join(self._outdir_turnons, f"{plot_fname}.png")) - plt.savefig(os.path.join(self._outdir_turnons, f"{plot_fname}.pdf")) + plt.savefig( + os.path.join(self._outdir_turnons, f"{plot_fname}.pdf"), bbox_inches="tight" + ) self._save_json(os.path.join(self._outdir_turnons, f"{plot_fname}.json")) # Save config - with open(os.path.join(self._outdir_turnons, f"{plot_fname}.json"), "w") as f: - yaml.dump({self.plot_name: self.cfg}, f, default_flow_style=False) + with open(os.path.join(self._outdir_turnons, f"{plot_fname}.yaml"), "w") as f: + yaml.dump( + {self.plot_name: self.cfg.config_dict}, f, default_flow_style=False + ) plt.close() @@ -228,17 +263,24 @@ def _plot_raw_counts(self): xbins, ref_hist[0], where="mid", - label="ref: " + obj_key, - ls="--", - color="k", + ls="-.", ) - label = self.cfg["reference_object"]["label"] + + # mock plot outside of visible range to create legend entry for ref + ax.plot( + [xbins[0] - 100, xbins[0] - 99], + [0, 0], + label="reference object", + color="black", + linestyle="-.", + ) + plt.gca().set_prop_cycle(None) for obj_key, gen_hist_trig in self.turnon_collection.hists.items(): if obj_key == "ref": continue yerr = np.sqrt(gen_hist_trig[0]) - label = self.cfg["test_objects"][obj_key]["label"] + label = obj_key test_hist = ax.step(xbins, gen_hist_trig[0], where="mid") ax.errorbar( xbins, @@ -249,17 +291,20 @@ def _plot_raw_counts(self): **err_kwargs, ) - self._style_plot(fig, ax) + self._style_plot(fig, ax, legend_loc="best") # Save figure plot_fname = f"{self.plot_name}_{self.threshold}_dist_{self.version}" plt.savefig(os.path.join(self._outdir_distributions, f"{plot_fname}.png")) - plt.savefig(os.path.join(self._outdir_distributions, f"{plot_fname}.pdf")) + plt.savefig( + os.path.join(self._outdir_distributions, f"{plot_fname}.pdf"), + bbox_inches="tight", + ) plt.close() def plot(self): self._make_output_dirs(self.version) - if "Iso" in self.cfg["xlabel"]: + if self.cfg.iso_vs_eff_plot: self._plot_iso_vs_efficiency_curve() else: self._plot_efficiency_curve() @@ -299,7 +344,7 @@ def run(self): for plot_name, cfg_plot in self.cfg_plots.items(): for threshold in self.get_thresholds(cfg_plot): print(f">>> Turn On {plot_name} ({threshold} GeV) <<<") - turnon_collection = TurnOnCollection(cfg_plot, threshold) + turnon_collection = TurnOnCollection(cfg_plot, threshold, plot_name) turnon_collection.create_hists() plotter = EfficiencyPlotter(plot_name, cfg_plot, turnon_collection) @@ -314,7 +359,7 @@ def __init__( scalings: dict, scaling_pct: float, version: str, - params: dict, + params: dict[str, np.ndarray], ): self.plot_name = plot_name self.cfg_plot = cfg_plot @@ -323,23 +368,12 @@ def __init__( self.version = version self.scaling_pct = scaling_pct - def _params_to_func_str(self, obj): - a = round(self.params[obj][0], 3) - b = round(self.params[obj][1], 3) + def _params_to_func_str(self, obj_key: str): + a = round(self.params[obj_key][0], 3) + b = round(self.params[obj_key][1], 3) pm = "+" if b > 0 else "-" return f"y = {a} x {pm} {abs(b)}" - def _set_plot_ranges(self, ax): - xmax = 0 - ymax = 0 - for points in self.scalings.values(): - x_points = np.array(list(points.keys()) + [xmax]) - y_points = np.array(list(points.values()) + [ymax]) - xmax = np.max(x_points) - ymax = np.max(y_points) - ax.set_xlim(0, xmax) - ax.set_ylim(0, ymax) - def _save_json(self, fpath: str) -> None: plot: dict[str, Any] = {"watermark": f"{self.version}_{self.plot_name}"} @@ -348,11 +382,7 @@ def _save_json(self, fpath: str) -> None: x_points = list(points.keys()) y_points = list(points.values()) - label = ( - self.cfg_plot["test_objects"][obj]["label"] - + ", " - + self._params_to_func_str(obj) - ) + label = obj + ", " + self._params_to_func_str(obj) _object["xvals"] = x_points _object["yvals"] = y_points @@ -367,24 +397,26 @@ def plot(self): self._make_output_dirs(self.version) fig, ax = self._create_new_plot() - for obj, points in self.scalings.items(): + _xlim_upper = 0 + _ylim_upper = 0 + for obj_key, points in self.scalings.items(): + obj = Object(obj_key, self.version) x_points = np.array(list(points.keys())) y_points = np.array(list(points.values())) pts = ax.plot(x_points, y_points, "o") - label = ( - self.cfg_plot["test_objects"][obj]["label"] - + ", " - + self._params_to_func_str(obj) - ) - a, b = self.params[obj] + label = obj.plot_label + ", " + self._params_to_func_str(obj_key) + a, b = self.params[obj_key] x = np.linspace(0, 2500, 20) y = utils.scaling_func(x, a, b) ax.plot(x, y, color=pts[0].get_color(), label=label) + _xlim_upper = max(_xlim_upper, np.max(x_points) * 1.1) + _ylim_upper = max(_ylim_upper, np.max(y_points) * 1.1) + ax.legend(loc="lower right") ax.set_xlabel("L1 threshold [GeV]") - ax.set_ylabel(f"{int(self.scaling_pct*100)}% Location (gen, GeV)") + ax.set_ylabel(f"{int(self.scaling_pct * 100)}% Location (gen, GeV)") watermark = f"{self.version}_{self.plot_name}" ax.text( 0, @@ -395,14 +427,19 @@ def plot(self): fontsize=20, transform=ax.transAxes, ) - self._set_plot_ranges(ax) fig.tight_layout() - - plot_fname = ( - f"{self.outdir}/{self.version}/scalings/{self.plot_name}_{self.version}" + ax.set_xlim(0, _xlim_upper) + ax.set_ylim(0, _ylim_upper) + + plot_fname = os.path.join( + "outputs", + self.version, + "object_performance", + "scalings", + f"{self.plot_name}_{self.version}", ) - for ext in [".png", ".pdf"]: - plt.savefig(f"{plot_fname}{ext}") + plt.savefig(f"{plot_fname}.png") + plt.savefig(f"{plot_fname}.pdf", bbox_inches="tight") self._save_json(f"{plot_fname}.json") ## save config @@ -415,20 +452,21 @@ def plot(self): class ScalingCentral: - outdir = "outputs/object_performance/" - - def __init__(self, cfg_plots_path): + def __init__(self, cfg_plots_path: str) -> None: with open(cfg_plots_path, "r") as f: self.cfg_plots = yaml.safe_load(f) with open("./configs/scaling_thresholds.yaml", "r") as f: self.scaling_thresholds = yaml.safe_load(f) - def _get_scaling_thresholds(self, cfg_plot, test_obj): - if test_obj in self.scaling_thresholds: - return self.scaling_thresholds[test_obj] + def _get_scaling_thresholds(self, cfg_plot, test_obj) -> list[int]: + if str(test_obj) in self.scaling_thresholds: + return self.scaling_thresholds[str(test_obj)] if any("Muon" in x for x in cfg_plot["test_objects"]): return self.scaling_thresholds["Muon"] - if any("Elec" in x or "Photon" in x for x in cfg_plot["test_objects"]): + if any( + any([y in x for x in cfg_plot["test_objects"]]) + for y in ["Ele", "EG", "Photon"] + ): return self.scaling_thresholds["EG"] if any("MHT" in x for x in cfg_plot["test_objects"]): return self.scaling_thresholds["MHT"] @@ -442,73 +480,104 @@ def _get_scaling_thresholds(self, cfg_plot, test_obj): return self.scaling_thresholds["Jet"] raise RuntimeError("Failed to find thresholds in cfg_scaling_thresholds!") - def _rate_config_function(self, name: str, a: float, b: float): - pm = "+" if b < 0 else "" - f_string = ( - f"function :: {name}OfflineEtCut :: " - f"args:=(offline); lambda:=(offline{pm}{-b:.3f})/{a:.3f}" - ) - return f_string + def _write_scalings_to_file( + self, obj: Object, params: np.ndarray, plot_name: str + ) -> None: + """Dumps the scaling parameters to a file. - def _write_scalings_to_file(self, plot_name: str, version: str, params: dict): - with open( - f"{self.outdir}/{version}/scalings/{plot_name}_scalings_{version}.txt", "w+" - ) as f: - f.write("") + Writes the offset and slope params of the linear scaling function to + a yaml file for usage in the offline rate computation. - with open( - f"{self.outdir}/{version}/scalings/{plot_name}_scalings_{version}.txt", "a" - ) as f: - for obj, obj_params in params.items(): - a, b = obj_params - f.write(self._rate_config_function(obj, a, b) + "\n") + Retruns: + None + """ + fpath = os.path.join( + "outputs", + obj.version, + "object_performance", + "scalings", + ) + os.makedirs(fpath, exist_ok=True) + a, b = params + + out_path = os.path.join(fpath, str(obj) + ".yaml") + if os.path.exists(out_path): + warnings.warn( + ( + f"A file already exists at the scaling destination `{out_path}`." + f"Will dump the scalings with `{plot_name}` prefix." + ), + UserWarning, + ) + out_path = out_path.replace(str(obj), plot_name + "_" + str(obj)) + with open(out_path, "w") as f: + yaml.dump({"slope": float(a), "offset": float(b)}, f) def run(self): for plot_name, cfg_plot in self.cfg_plots.items(): - if "scalings" not in cfg_plot: + plot_config = PerformancePlotConfig(cfg_plot, plot_name) + if not plot_config.compute_scalings: continue print(f">>> Scalings {plot_name} <<<") - scalings = {x: {} for x in cfg_plot["test_objects"]} + scalings = {} + scaling_function_params = {} - for test_obj in cfg_plot["test_objects"]: - scal = {test_obj: {}} + pbar = tqdm(total=len(plot_config.test_object_instances), desc="Objects") + for test_obj in plot_config.test_object_instances: + pbar.write(str(test_obj)) + pbar.update(1) + scalings[str(test_obj)] = {} thds = self._get_scaling_thresholds(cfg_plot, test_obj) - bar = IncrementalBar("Progress", max=len(thds)) - for threshold in thds: - bar.next() + for threshold in tqdm(thds, leave=False, desc="Thresholds"): turnon_collection = TurnOnCollection(cfg_plot, threshold) turnon_collection.create_hists() scaling_pct = turnon_collection.cfg_plot.scaling_pct method = turnon_collection.cfg_plot.scaling_method - scaling_collect = ScalingCollection(cfg_plot, method, scaling_pct) - version = turnon_collection.version - scal = scaling_collect._compute_scalings( - turnon_collection, test_obj, scal, scaling_pct, method + scaling_collection = ScalingCollection( + cfg_plot, method, scaling_pct ) - bar.finish() - scalings[test_obj] = scal[test_obj] - - params = scaling_collect._fit_linear_functions(scalings) - if params: - plotter = ScalingPlotter( - plot_name, cfg_plot, scalings, scaling_pct, version, params - ) - plotter.plot() - self._write_scalings_to_file(plot_name, version, params) + scalings[str(test_obj)][ + threshold + ] = scaling_collection._compute_scalings( + turnon_collection, test_obj, scaling_pct, method + ) + # Fit parameters of scaling function + params = scaling_collection.fit_linear_function(scalings[str(test_obj)]) + scaling_function_params[str(test_obj)] = params + # Write scalings for test_obj to file for usage in rate part + self._write_scalings_to_file(test_obj, params, plot_name) + + plotter = ScalingPlotter( + plot_name, + cfg_plot, + scalings, + scaling_pct, + turnon_collection.version, + scaling_function_params, + ) + plotter.plot() -if __name__ == "__main__": +def main(): parser = argparse.ArgumentParser() parser.add_argument( "cfg_plots", - default="cfg_plots/muons.yaml", - help="Path of YAML file specifying the desired plots.", + nargs="+", + type=str, + help="Path of YAML configuration file specifying the desired plots.", ) + parser.add_argument("-s", "--scalings_only", action="store_true") args = parser.parse_args() - plotter = EfficiencyCentral(args.cfg_plots) - plotter.run() + for path_cfg_plot in args.cfg_plots: + if not args.scalings_only: + plotter = EfficiencyCentral(path_cfg_plot) + plotter.run() - scalings = ScalingCentral(args.cfg_plots) - scalings.run() + scalings = ScalingCentral(path_cfg_plot) + scalings.run() + + +if __name__ == "__main__": + main() diff --git a/menu_tools/object_performance/quality_obj.py b/menu_tools/object_performance/quality_obj.py deleted file mode 100644 index 66cbab36..00000000 --- a/menu_tools/object_performance/quality_obj.py +++ /dev/null @@ -1,200 +0,0 @@ -class L1IsoCut: - def __init__(self, ak_arrays, obj: str, IsoBB=-1, IsoEE=-1, l1_iso="iso"): - ak_arrays = ak_arrays[obj] # TODO: remove obj arg - self.IsoBB = IsoBB - self.IsoEE = IsoEE - self.l1_iso = l1_iso - - self.sel_iso_BB = ak_arrays["eta"] > -100 - self.sel_iso_EE = ak_arrays["eta"] > -100 - - if self.IsoBB >= 0: - self.sel_iso_BB = (abs(ak_arrays["eta"]) < 1.479) & ( - ak_arrays[self.l1_iso] > self.IsoBB - ) - if self.IsoEE >= 0: - self.sel_iso_EE = (abs(ak_arrays["eta"]) > 1.479) & ( - ak_arrays[self.l1_iso] > self.IsoEE - ) - - @property - def ISO_EEBB(self): - return self.sel_iso_EE | self.sel_iso_BB - - -class Quality: - """ - Class implementing the L1 quality criteria. - Hardware criteria to be decide with Menu team. - """ - - def __init__(self, ak_arrays, obj: str): - ak_arrays = ak_arrays[obj] # TODO: remove obj arg - # print("Computing quality for ", obj) - - self.sel_lowEta = (abs(ak_arrays["eta"]) < 0.9) & (ak_arrays["region"] != 1) - self.sel_midEta = ( - (abs(ak_arrays["eta"]) > 0.9) - & (abs(ak_arrays["eta"]) < 1.2) - & (ak_arrays["region"] != 2) - ) - self.sel_highEta = (abs(ak_arrays["eta"]) > 1.2) & (ak_arrays["region"] != 3) - - self.sel_qualities = ( - (ak_arrays["quality"] != 11) - & (ak_arrays["quality"] != 13) - & (ak_arrays["quality"] != 14) - & (ak_arrays["quality"] != 15) - & (ak_arrays["region"] == 3) - ) - self.sel_qual_12 = (ak_arrays["quality"] < 12) & (ak_arrays["region"] == 2) - self.sel_qual_0 = (ak_arrays["quality"] == 0) & (ak_arrays["region"] == 3) - self.sel_qual_1 = (ak_arrays["quality"] < 2) & (ak_arrays["region"] == 1) - self.sel_qual_3 = (ak_arrays["quality"] != 3) & (ak_arrays["region"] == 1) - self.sel_qual_5 = (ak_arrays["quality"] != 5) & (ak_arrays["region"] == 1) - self.sel_qualOnly_12 = ak_arrays["quality"] < 12 - - self.sel_midEta_qual = ( - (abs(ak_arrays["eta"]) > 0.9) - & (abs(ak_arrays["eta"]) < 1.2) - & (ak_arrays["region"] == 3) - ) - - self.sel_odd = ak_arrays["quality"] % 2 == 0 - self.sel_odd_type = (ak_arrays["quality"] % 2 == 0) & (ak_arrays["region"] == 1) - self.sel_not_4 = ak_arrays["region"] == 4 - - ### EG IDs from 123x - self.sel_tkIsoPho_123 = ( - (ak_arrays["quality"] > 0) & (abs(ak_arrays["eta"]) < 1.479) - ) | ((ak_arrays["quality"] == 3) & (abs(ak_arrays["eta"]) >= 1.479)) - - ## EG IDs from 125x - # for EG: region == HGC - if "passeseleid" in ak_arrays.fields: - self.sel_EG_barrelID = (ak_arrays["region"] == 0) & ( - ak_arrays["passeseleid"] == 1 - ) - else: - self.sel_EG_barrelID = (ak_arrays["region"] == 0) & ( - ((ak_arrays["quality"] >> 1) & 1) > 0 - ) - - if "passessaid" in ak_arrays.fields: - self.sel_EG_endcapID = (ak_arrays["region"] == 1) & ( - ak_arrays["passessaid"] == 1 - ) - else: - self.sel_EG_endcapID = (ak_arrays["region"] == 1) & ( - ((ak_arrays["quality"] >> 0) & 1) > 0 - ) - - # for EG: quality = HwQual, alt approach: use HW qual bits directly instead of the menu ntuple variables: bit0: SA, 1: Ele, 2: Pho - # self.sel_EG_barrelID = (ak_arrays['region'] == 0) & (((ak_arrays['quality'] >> 1)&1) > 0) - # self.sel_EG_endcapID = (ak_arrays['region'] == 1) & (((ak_arrays['quality'] >> 0)&1) > 0) - - ## tkPhoton from 125x - # self.sel_tkPho_barrelID = (ak_arrays['region'] == 0) & (ak_arrays['passeseleid'] == 1) - # self.sel_tkPho_endcapID = (ak_arrays['region'] == 1) & (ak_arrays['passesphoid'] == 1) - if "passesphoid" in ak_arrays.fields: - self.sel_tkPho_endcapID = (ak_arrays["region"] == 1) & ( - ak_arrays["passesphoid"] == 1 - ) - else: - self.sel_tkPho_endcapID = (ak_arrays["region"] == 1) & ( - ((ak_arrays["quality"] >> 2) & 1) > 0 - ) - - # self.sel_tkPho_barrelID = (ak_arrays['region'] == 0) & (((ak_arrays['quality'] >> 1)&1) > 0) - # self.sel_tkPho_endcapID = (ak_arrays['region'] == 1) & (((ak_arrays['quality'] >> 2)&1) > 0) - - @property - def QUAL_125x_EGID(self): - return ~(self.sel_EG_barrelID | self.sel_EG_endcapID) - - @property - def QUAL_125x_tkPhoID(self): - # return ~(self.sel_tkPho_barrelID | self.sel_tkPho_endcapID) - return ~(self.sel_EG_barrelID | self.sel_tkPho_endcapID) - - @property - def QUAL_123x_tkPhoID(self): - return ~(self.sel_tkIsoPho_123) - - @property - def QUAL_Overlap12EndcapJaana1345(self): - return self.sel_qual_12 | self.sel_qualities - - @property - def QUAL_OverlapNotRegion3(self): - return self.sel_midEta_qual - - @property - def QUAL_Endcap1OverlapNotRegion3(self): - return self.sel_midEta_qual | self.sel_qual_0 - - @property - def QUAL_Overlap12(self): - return self.sel_qual_12 - - @property - def QUAL_BarrelNoneEndcap3(self): - return self.sel_qual_3 - - @property - def QUAL_CorrectRegion(self): - return self.sel_lowEta | self.sel_midEta | self.sel_highEta - - @property - def QUAL_Endcap1CorrectRegion(self): - return self.sel_lowEta | self.sel_midEta | self.sel_highEta | self.sel_qual_0 - - @property - def QUAL_BarrelOddEndcap2(self): - return self.sel_odd_type | self.sel_qual_1 - - @property - def QUAL_BarrelNoneEndcap5(self): - return self.sel_qual_5 - - @property - def QUAL_Overlap12Endcap1(self): - return self.sel_qual_12 | self.sel_qual_0 - - @property - def QUAL_Endcap1(self): - return self.sel_qual_0 - - @property - def QUAL_Odd(self): - return self.sel_odd - - @property - def QUAL_Overlap12Endcap1CorrectRegion(self): - return ( - self.sel_lowEta - | self.sel_midEta - | self.sel_highEta - | self.sel_qual_12 - | self.sel_qual_0 - ) - - @property - def QUAL_12(self): - return self.sel_qualOnly_12 - - @property - def QUAL_RegionNotFour(self): - return self.sel_not_4 - - @property - def QUAL_Overlap12Endcap1OverlapNotRegion3(self): - return self.sel_midEta_qual | self.sel_qual_12 | self.sel_qual_0 - - @property - def QUAL_BarrelNoneEndcap2(self): - return self.sel_qual_1 - - @property - def QUAL_EndcapJaana1345(self): - return self.sel_qualities diff --git a/menu_tools/object_performance/scaling_collection.py b/menu_tools/object_performance/scaling_collection.py index f219d200..93b4bd13 100644 --- a/menu_tools/object_performance/scaling_collection.py +++ b/menu_tools/object_performance/scaling_collection.py @@ -1,9 +1,10 @@ -#!/afs/cern.ch/user/d/dhundhau/public/miniconda3/envs/py310/bin/python from scipy.optimize import curve_fit import numpy as np -from menu_tools.object_performance.plot_config import PlotConfig +from menu_tools.object_performance.config import PerformancePlotConfig +from menu_tools.object_performance.turnon_collection import TurnOnCollection from menu_tools.utils import utils +from menu_tools.utils.objects import Object class ScalingCollection: @@ -14,7 +15,9 @@ class ScalingCollection: objects. """ - def __init__(self, cfg: PlotConfig, method: str, plateau_pct: float = 0.95): + def __init__( + self, cfg: PerformancePlotConfig, method: str, plateau_pct: float = 0.95 + ): self.cfg = cfg self.method = method self.plateau_pct = plateau_pct @@ -31,7 +34,7 @@ def _find_percentage_point(self, hist, bins, scaling_pct): if is_point: return bins[i + 1] - def _find_turnon_cut(self, graph_x, graph_y, Target): + def _find_turnon_cut(self, graph_x, graph_y, Target) -> float: L = 0 R = np.max(graph_x) @@ -152,104 +155,70 @@ def _get_point_on_curve(self, x, graph_x, graph_y): return -1 def _compute_scalings_naive( - self, turnon_collection, test_obj, scalings, scaling_pct - ): + self, turnon_collection: TurnOnCollection, test_obj: Object, scaling_pct: float + ) -> float: bins = turnon_collection.bins bins = 0.5 * (bins[1:] + bins[:-1]) - threshold = turnon_collection.threshold - - for obj_key, gen_hist_trig in turnon_collection.hists.items(): - if (obj_key == "ref") | (obj_key != test_obj): - continue - efficiency, yerr = turnon_collection.get_efficiency(obj_key) - - xbins = bins - xbins = xbins[~np.isnan(efficiency)] - er_dn = yerr[0] - er_up = yerr[1] - er_dn = er_dn[~np.isnan(efficiency)] - er_up = er_up[~np.isnan(efficiency)] - efficiency = efficiency[~np.isnan(efficiency)] - - K1 = [] - for i in range(len(efficiency)): - K1.append(1 / (er_dn[i] + er_up[i]) / (er_up[i] + er_dn[i])) - - percentage_point = self._find_turnon_cut( - xbins, self._interpolate(efficiency, K1, 100), scaling_pct - ) - if percentage_point: - scalings[obj_key][threshold] = percentage_point - return scalings + efficiency, yerr = turnon_collection.get_efficiency(test_obj) - def _compute_scalings_tanh( - self, turnon_collection, test_obj, scalings, scaling_pct - ): + xbins = bins + xbins = xbins[~np.isnan(efficiency)] + er_dn = yerr[0] + er_up = yerr[1] + er_dn = er_dn[~np.isnan(efficiency)] + er_up = er_up[~np.isnan(efficiency)] + efficiency = efficiency[~np.isnan(efficiency)] + + K1 = [] + for i in range(len(efficiency)): + K1.append(1 / (er_dn[i] + er_up[i]) / (er_up[i] + er_dn[i])) + + percentage_point = self._find_turnon_cut( + xbins, self._interpolate(efficiency, K1, 100), scaling_pct + ) + return percentage_point + + def _compute_scalings_tanh(self, turnon_collection, test_obj, scaling_pct) -> float: bins = turnon_collection.bins bins = 0.5 * (bins[1:] + bins[:-1]) - threshold = turnon_collection.threshold - - for obj_key, gen_hist_trig in turnon_collection.hists.items(): - if (obj_key == "ref") | (obj_key != test_obj): - continue - efficiency, _ = turnon_collection.get_efficiency(obj_key) - percentage_point = self._compute_value_of_tanh_at_threshold( - efficiency, bins, scaling_pct - ) - if percentage_point: - scalings[obj_key][threshold] = percentage_point - return scalings + efficiency, _ = turnon_collection.get_efficiency(test_obj) + percentage_point = self._compute_value_of_tanh_at_threshold( + efficiency, bins, scaling_pct + ) + return percentage_point - def _compute_scalings_errf( - self, turnon_collection, test_obj, scalings, scaling_pct - ): + def _compute_scalings_errf(self, turnon_collection, test_obj, scaling_pct) -> float: bins = turnon_collection.bins bins = 0.5 * (bins[1:] + bins[:-1]) - threshold = turnon_collection.threshold - - for obj_key, gen_hist_trig in turnon_collection.hists.items(): - if (obj_key == "ref") | (obj_key != test_obj): - continue - efficiency, _ = turnon_collection.get_efficiency(obj_key) - percentage_point = self._compute_value_of_errf_at_threshold( - efficiency, bins, scaling_pct - ) - if percentage_point: - scalings[obj_key][threshold] = percentage_point - return scalings + efficiency, _ = turnon_collection.get_efficiency(test_obj) + percentage_point = self._compute_value_of_errf_at_threshold( + efficiency, bins, scaling_pct + ) + return percentage_point def _compute_scalings( - self, turnon_collection, test_obj, scalings, scaling_pct, method="tanh" - ) -> dict: + self, + turnon_collection: TurnOnCollection, + test_obj: Object, + scaling_pct: float, + method: str = "tanh", + ) -> float: if method == "tanh": - return self._compute_scalings_tanh( - turnon_collection, test_obj, scalings, scaling_pct - ) + return self._compute_scalings_tanh(turnon_collection, test_obj, scaling_pct) if method == "errf": - return self._compute_scalings_errf( - turnon_collection, test_obj, scalings, scaling_pct - ) + return self._compute_scalings_errf(turnon_collection, test_obj, scaling_pct) if method == "naive": return self._compute_scalings_naive( - turnon_collection, test_obj, scalings, scaling_pct + turnon_collection, test_obj, scaling_pct ) else: raise ValueError(f"`{method}` is not a valid scaling method!") - def _fit_linear_functions(self, scalings): - params = {} - for obj, thresh_points in scalings.items(): - xdata = [th for th, val in thresh_points.items() if val] - ydata = [thresh_points[x] for x in xdata] - if not ydata: - return None - popt, pcov = curve_fit(utils.scaling_func, xdata, ydata) - params[obj] = popt - return params - - -if __name__ == "__main__": - pass + def fit_linear_function(self, scaling_values: dict[float, float]) -> np.ndarray: + xdata = [th for th, val in scaling_values.items() if val] + ydata = [scaling_values[x] for x in xdata] + popt, pcov = curve_fit(utils.scaling_func, xdata, ydata) + return popt diff --git a/menu_tools/object_performance/tests/conftest.py b/menu_tools/object_performance/tests/conftest.py deleted file mode 100644 index ed782f48..00000000 --- a/menu_tools/object_performance/tests/conftest.py +++ /dev/null @@ -1,94 +0,0 @@ -import pytest - - -@pytest.fixture -def met_config(): - cfg_plot = { - "sample": "TT", - "default_version": "V22", - "reference_object": {"object": "genMetTrue", "suffix": "", "label": "Gen MET"}, - "test_objects": { - "trackerMET": {"suffix": "", "label": "Tracker MET"}, - "puppiMET": {"suffix": "Et", "label": "Puppi MET"}, - }, - "binning": {"min": 0, "max": 500, "step": 20}, - "trackerMETTruth": [ - 17671, - 8214, - 6463, - 5321, - 4212, - 3308, - 2453, - 1811, - 1146, - 759, - 482, - 307, - 261, - 154, - 93, - 73, - 61, - 32, - 22, - 18, - 20, - 14, - 8, - 7, - ], - "puppiMETTruth": [ - 31222, - 14025, - 13874, - 13621, - 11387, - 8429, - 5670, - 3644, - 2133, - 1306, - 766, - 460, - 352, - 222, - 145, - 98, - 81, - 45, - 29, - 21, - 24, - 15, - 9, - 7, - ], - "genMETTruth": [ - 130238, - 51518, - 40197, - 29181, - 18620, - 11269, - 6729, - 3975, - 2255, - 1353, - 791, - 470, - 355, - 225, - 148, - 98, - 81, - 45, - 30, - 21, - 25, - 15, - 9, - 7, - ], - } - return cfg_plot diff --git a/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.json b/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.json new file mode 100644 index 00000000..fe51f03f --- /dev/null +++ b/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.json @@ -0,0 +1,525 @@ +{ + "xlabel": "Isolation", + "ylabel": "Efficiency (Barrel)", + "watermark": "V29_ElectronsIsolation_Barrel_-999", + "tkElectron:NoIsoLowPt:inclusive": { + "label": "TkElectron, no ID for $p_T<25$", + "efficiency": [ + 0.9455413650661311, + 0.9455413650661311, + 0.9455413650661311, + 0.9456929548641376, + 0.9458445446621443, + 0.9464888013036723, + 0.9474362375412134, + 0.9485731610262629, + 0.9509607003448668, + 0.9538030090574904, + 0.9572895744116421, + 0.9601697805737673, + 0.9636184484784174, + 0.966574449539546, + 0.9691514761056581, + 0.9713874256262554, + 0.9734338878993444, + 0.9752908629249252, + 0.9766930685564862, + 0.9779815818395422, + 0.9798006594156213, + 0.981240762496684, + 0.982415583431235, + 0.9836661992647895, + 0.984575738052829, + 0.9854852768408686, + 0.986091636032895, + 0.9868116875734263, + 0.9878349187099709, + 0.9884791753514989, + 0.9889339447455187, + 0.9893508166900368, + 0.9899192784325614, + 0.9904119452760829, + 0.9907909197710995, + 0.9913214840641225, + 0.9917762534581422, + 0.9922689203016637, + 0.9927994845946868, + 0.9931026641906999, + 0.993746920832228, + 0.9938606131807329, + 0.9942395876757494, + 0.9945048698222609, + 0.9947322545192708, + 0.9950354341152841, + 0.9951870239132906, + 0.9954144086103005, + 0.9955281009588055, + 0.9955659984083072, + 0.9957175882063137, + 0.9959828703528253, + 0.9961723576003335, + 0.9962481524993368, + 0.9963239473983401, + 0.996665024443855, + 0.9967408193428582, + 0.9968166142418615, + 0.9970439989388714, + 0.9971576912873764, + 0.9972334861863796, + 0.9972713836358813, + 0.9974229734338879, + 0.9974987683328912, + 0.9976882555803994, + 0.9978398453784061, + 0.9978777428279076, + 0.9980293326259143, + 0.9981430249744192, + 0.9982188198734225, + 0.9982567173229242, + 0.9983704096714291, + 0.9984462045704324, + 0.9985219994694358, + 0.9986356918179407, + 0.9987872816159472, + 0.9989388714139539, + 0.9989767688634555, + 0.9990525637624588, + 0.9991283586614621, + 0.9992041535604654, + 0.999355743358472, + 0.9994694357069769, + 0.9994694357069769, + 0.9995452306059802, + 0.9995831280554819, + 0.9996589229544852, + 0.9996589229544852, + 0.9996968204039868, + 0.9996968204039868, + 0.9996968204039868, + 0.9997347178534884, + 0.9997347178534884, + 0.9998105127524918, + 0.9998105127524918, + 0.9998863076514951, + 0.9998863076514951, + 0.9999621025504983, + 0.9999621025504983, + 1.0 + ], + "efficiency_err": [ + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ] + ], + "xbins": [ + 0.0025, + 0.0075, + 0.0125, + 0.0175, + 0.0225, + 0.0275, + 0.0325, + 0.037500000000000006, + 0.042499999999999996, + 0.0475, + 0.052500000000000005, + 0.057499999999999996, + 0.0625, + 0.0675, + 0.07250000000000001, + 0.0775, + 0.0825, + 0.0875, + 0.0925, + 0.0975, + 0.10250000000000001, + 0.1075, + 0.1125, + 0.1175, + 0.1225, + 0.1275, + 0.1325, + 0.1375, + 0.14250000000000002, + 0.1475, + 0.1525, + 0.1575, + 0.1625, + 0.1675, + 0.17250000000000001, + 0.1775, + 0.1825, + 0.1875, + 0.1925, + 0.1975, + 0.2025, + 0.20750000000000002, + 0.2125, + 0.2175, + 0.2225, + 0.2275, + 0.2325, + 0.2375, + 0.2425, + 0.2475, + 0.2525, + 0.2575, + 0.2625, + 0.2675, + 0.2725, + 0.2775, + 0.28250000000000003, + 0.2875, + 0.2925, + 0.2975, + 0.3025, + 0.3075, + 0.3125, + 0.3175, + 0.3225, + 0.3275, + 0.3325, + 0.3375, + 0.3425, + 0.34750000000000003, + 0.35250000000000004, + 0.3575, + 0.3625, + 0.3675, + 0.3725, + 0.3775, + 0.3825, + 0.3875, + 0.3925, + 0.3975, + 0.4025, + 0.40750000000000003, + 0.41250000000000003, + 0.4175, + 0.4225, + 0.4275, + 0.4325, + 0.4375, + 0.4425, + 0.4475, + 0.4525, + 0.4575, + 0.4625, + 0.4675, + 0.47250000000000003, + 0.47750000000000004, + 0.4825, + 0.4875, + 0.4925, + 0.4975 + ], + "err_kwargs": { + "xerr": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "capsize": 3, + "marker": "o", + "markersize": 8 + } + } +} \ No newline at end of file diff --git a/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.yaml b/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.yaml new file mode 100644 index 00000000..bf6e1ea4 --- /dev/null +++ b/menu_tools/object_performance/tests/reference_data/ElectronsIsolation_Barrel_-999_V29.yaml @@ -0,0 +1,23 @@ +ElectronsIsolation_Barrel: + binning: + max: 0.5 + min: 0 + step: 0.005 + iso_vs_efficiency: true + match_test_to_ref: true + reference_object: + cuts: + event: + - '{dr_0.3} < 0.15' + - abs({eta}) < 1.479 + object: + - abs({eta}) < 1.479 + label: Gen Electrons + object: part_e + x_arg: Pt + sample: DYLL_M50 + test_objects: + tkElectron:NoIsoLowPt: trkiso + version: V29 + xlabel: Isolation + ylabel: Efficiency (Barrel) diff --git a/menu_tools/object_performance/tests/reference_data/HT_50perc_350_V29.json b/menu_tools/object_performance/tests/reference_data/HT_50perc_350_V29.json new file mode 100644 index 00000000..1189c8fb --- /dev/null +++ b/menu_tools/object_performance/tests/reference_data/HT_50perc_350_V29.json @@ -0,0 +1,620 @@ +{ + "xlabel": "Gen. HT (GeV)", + "ylabel": "Trigger Efficiency (350 GeV)", + "watermark": "V29_HT_50perc_350", + "trackerHT:default:inclusive": { + "label": "Tracker HT", + "efficiency": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.00013333333333333334, + 0.0, + 0.0, + 0.0002831657935721365, + 0.00015202189115232594, + 0.00017137960582690659, + 0.0005751533742331289, + 0.0013259668508287293, + 0.0010070493454179255, + 0.0011458034947006588, + 0.0047169811320754715, + 0.0065334358186010764, + 0.009683098591549295, + 0.020813623462630087, + 0.02336448598130841, + 0.048731642189586116, + 0.05747126436781609, + 0.061837455830388695, + 0.09765625, + 0.10372040586245772, + 0.12862547288776796, + 0.1485148514851485, + 0.22085889570552147, + 0.26119402985074625, + 0.23586744639376217, + 0.288135593220339 + ], + "efficiency_err": [ + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.00011008648525952339, + 0.0, + 0.0, + 0.0001823513829141161, + 0.0001255167107782635, + 0.0001414994374845714, + 0.00031192164388792805, + 0.0005236922261730564, + 0.00048009876080158523, + 0.0005462387052469576, + 0.001238184873004851, + 0.0015586180038634307, + 0.002032740516790456, + 0.003086696109909668, + 0.0036299344476051904, + 0.005552239303424154, + 0.006436728922849196, + 0.007156409074103788, + 0.009303555410625802, + 0.010276833295418189, + 0.011961828411951522, + 0.0134836778358714, + 0.016468200979164654, + 0.01932259798778216, + 0.01906225933597891, + 0.022810750520902534 + ], + [ + 0.0046879041451349576, + 0.004073155301754859, + 0.002224231670144308, + 0.0017487856735373052, + 0.0009992720608026564, + 0.0007243644346267765, + 0.0005336709648947606, + 0.00040679589146676575, + 0.00033362631974555594, + 0.0002866581334490885, + 0.0002579314630318181, + 0.0003050696561426725, + 0.00023905576131004127, + 0.00024195956021445879, + 0.00037153169312786834, + 0.0003478188064797919, + 0.0003920958493622838, + 0.0005563888435802931, + 0.0007871342825670361, + 0.0007915796948517353, + 0.0009005340889981848, + 0.0016139392292979912, + 0.001981014480253805, + 0.0025071376227297996, + 0.003570982617458661, + 0.004226832816821902, + 0.006186050147179441, + 0.007149778995645256, + 0.007971980522778178, + 0.01012428693723158, + 0.011212116822432228, + 0.012940250496853822, + 0.014522080708850332, + 0.01735752730139206, + 0.020249609977856187, + 0.02013640533025912, + 0.02388299640520314 + ] + ], + "xbins": [ + 10.0, + 30.0, + 50.0, + 70.0, + 90.0, + 110.0, + 130.0, + 150.0, + 170.0, + 190.0, + 210.0, + 230.0, + 250.0, + 270.0, + 290.0, + 310.0, + 330.0, + 350.0, + 370.0, + 390.0, + 410.0, + 430.0, + 450.0, + 470.0, + 490.0, + 510.0, + 530.0, + 550.0, + 570.0, + 590.0, + 610.0, + 630.0, + 650.0, + 670.0, + 690.0, + 710.0, + 730.0 + ], + "err_kwargs": { + "xerr": [ + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0 + ], + "capsize": 3, + "marker": "o", + "markersize": 8 + } + }, + "phase1PuppiHT:default:inclusive": { + "label": "Histogrammed Puppi HT", + "efficiency": [ + 0.0, + 0.0022271714922048997, + 0.002430133657351154, + 0.0009551098376313276, + 0.0016366612111292963, + 0.0019770660340055358, + 0.0029129041654529565, + 0.005772646536412078, + 0.008011653313911144, + 0.0172090112640801, + 0.029842342342342343, + 0.06066666666666667, + 0.09575994781474234, + 0.1526475637131916, + 0.21959507291519184, + 0.31529340224992397, + 0.4281062553556127, + 0.5433282208588958, + 0.6651933701657459, + 0.7595669687814703, + 0.8427384703523346, + 0.8800539083557951, + 0.9362029208301307, + 0.9617077464788732, + 0.9744560075685903, + 0.9853971962616822, + 0.985981308411215, + 0.9846743295019157, + 0.9973498233215548, + 1.0, + 0.9977452085682075, + 1.0, + 1.0, + 1.0, + 0.9981343283582089, + 0.9980506822612085, + 0.9975786924939467 + ], + "efficiency_err": [ + [ + 0.0, + 0.0018389319832569585, + 0.0015648087797643124, + 0.0007885970671355072, + 0.0008875236458577121, + 0.0008503624538187063, + 0.0009009377552959101, + 0.001117258583657704, + 0.0011937195600976802, + 0.0016182739735769065, + 0.0020105396509121944, + 0.0027485350801974145, + 0.003354359186525241, + 0.004129541396414388, + 0.0049290698539978806, + 0.005744412295983381, + 0.006514426960063269, + 0.006962391845237836, + 0.007123242155422038, + 0.006934412945263868, + 0.006369835376131561, + 0.006229648041136793, + 0.005130677874428113, + 0.00443887806185439, + 0.0038909454852842362, + 0.003492967407424552, + 0.003721998685895622, + 0.004186612456707484, + 0.0025584787506947038, + 0.0017880299021929558, + 0.002951688848833567, + 0.0023082794376581006, + 0.0025886965210667467, + 0.0028067614256136464, + 0.004256551066554315, + 0.004446778399965989, + 0.005519190778433658 + ], + [ + 0.0046879041451349576, + 0.005078294715424368, + 0.0031805789145277334, + 0.0021823611280588733, + 0.001581610553844316, + 0.0013285594214324592, + 0.0012339867559877774, + 0.0013565887776518116, + 0.0013850621382176243, + 0.0017754451527456604, + 0.0021465129005511577, + 0.0028676381984171703, + 0.003461087503886115, + 0.004222050485594181, + 0.005009014088096453, + 0.005800893257580153, + 0.006539209238764998, + 0.0069456729954276986, + 0.007049632644374859, + 0.006802284247529711, + 0.0061704198638199426, + 0.005968287652665327, + 0.004784555424000914, + 0.004013419733016055, + 0.0034146848995719736, + 0.0028733743898573527, + 0.003007174042333638, + 0.0033662712202982004, + 0.0014370010235984498, + 0.0, + 0.0014519127770952212, + 0.0, + 0.0, + 0.0, + 0.0015404383715550418, + 0.001609505337728745, + 0.0019992334393843514 + ] + ], + "xbins": [ + 10.0, + 30.0, + 50.0, + 70.0, + 90.0, + 110.0, + 130.0, + 150.0, + 170.0, + 190.0, + 210.0, + 230.0, + 250.0, + 270.0, + 290.0, + 310.0, + 330.0, + 350.0, + 370.0, + 390.0, + 410.0, + 430.0, + 450.0, + 470.0, + 490.0, + 510.0, + 530.0, + 550.0, + 570.0, + 590.0, + 610.0, + 630.0, + 650.0, + 670.0, + 690.0, + 710.0, + 730.0 + ], + "err_kwargs": { + "xerr": [ + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0 + ], + "capsize": 3, + "marker": "o", + "markersize": 8 + } + }, + "seededConePuppiHT:default:inclusive": { + "label": "SeededCone HT", + "efficiency": [ + 0.0, + 0.0022271714922048997, + 0.002430133657351154, + 0.0009551098376313276, + 0.0005455537370430987, + 0.0019770660340055358, + 0.0037867754150888435, + 0.005772646536412078, + 0.010742898761835398, + 0.01955569461827284, + 0.03420608108108108, + 0.0672, + 0.10437051532941943, + 0.16255116862537963, + 0.23148803624522157, + 0.3339920948616601, + 0.4481576692373608, + 0.5648006134969326, + 0.6846408839779006, + 0.7779456193353474, + 0.8607848753938699, + 0.8982479784366577, + 0.9465795541890853, + 0.9691901408450704, + 0.9796594134342479, + 0.9877336448598131, + 0.9919893190921228, + 0.9877394636015325, + 0.9964664310954063, + 1.0, + 0.9988726042841037, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0 + ], + "efficiency_err": [ + [ + 0.0, + 0.0018389319832569585, + 0.0015648087797643124, + 0.0007885970671355072, + 0.0004504391188022924, + 0.0008503624538187063, + 0.0010308807980181803, + 0.001117258583657704, + 0.0013819069127093287, + 0.0017234954877210357, + 0.0021481838905352754, + 0.0028832249924839876, + 0.0034858887659411225, + 0.004237227675487343, + 0.005023187390551687, + 0.005833142665312374, + 0.00655043422376117, + 0.006934376650048257, + 0.007020225149216741, + 0.006754273421534895, + 0.006074460092601042, + 0.00582430916443577, + 0.0047551672768813, + 0.004045688680966553, + 0.0035369437733976383, + 0.0032604119472066095, + 0.0030115358616300547, + 0.0038435540182472083, + 0.0027712486786956037, + 0.0017880299021929558, + 0.002575292661612605, + 0.0023082794376581006, + 0.0025886965210667467, + 0.0028067614256136464, + 0.0034131571592493914, + 0.003565910541162176, + 0.004427413234551869 + ], + [ + 0.0046879041451349576, + 0.005078294715424368, + 0.0031805789145277334, + 0.0021823611280588733, + 0.001247393278627939, + 0.0013285594214324592, + 0.0013577907768089897, + 0.0013565887776518116, + 0.0015703676556506358, + 0.0018794641871793562, + 0.0022826039655549704, + 0.00300042747386578, + 0.003590268761640189, + 0.004327063398556902, + 0.005099720754426218, + 0.0058838958976762945, + 0.006568303462218095, + 0.00690937073223985, + 0.006937929890030614, + 0.006612716368271099, + 0.005864297382878636, + 0.005549872504061137, + 0.004399618977669162, + 0.0036108457836996344, + 0.003051788994082316, + 0.0026327050815019293, + 0.002265023346719186, + 0.003008289686007304, + 0.0016840561707416324, + 0.0, + 0.0009308497718625297, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ] + ], + "xbins": [ + 10.0, + 30.0, + 50.0, + 70.0, + 90.0, + 110.0, + 130.0, + 150.0, + 170.0, + 190.0, + 210.0, + 230.0, + 250.0, + 270.0, + 290.0, + 310.0, + 330.0, + 350.0, + 370.0, + 390.0, + 410.0, + 430.0, + 450.0, + 470.0, + 490.0, + 510.0, + 530.0, + 550.0, + 570.0, + 590.0, + 610.0, + 630.0, + 650.0, + 670.0, + 690.0, + 710.0, + 730.0 + ], + "err_kwargs": { + "xerr": [ + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0 + ], + "capsize": 3, + "marker": "o", + "markersize": 8 + } + } +} diff --git a/menu_tools/object_performance/tests/reference_data/HT_50perc_350_V29.yaml b/menu_tools/object_performance/tests/reference_data/HT_50perc_350_V29.yaml new file mode 100644 index 00000000..224160bf --- /dev/null +++ b/menu_tools/object_performance/tests/reference_data/HT_50perc_350_V29.yaml @@ -0,0 +1,27 @@ +HT_50perc: + binning: + max: 750 + min: 0 + step: 20 + version: V29 + reference_object: + cuts: + object: + - abs({eta}) < 2.4 + - '{pt} > 30' + label: Gen HT + object: jet + x_arg: Pt + trafo: HT + sample: TT + scalings: + method: naive + threshold: 0.5 + test_objects: + phase1PuppiHT:default: "" + seededConePuppiHT:default: "" + trackerHT:default: "" + thresholds: + - 350 + xlabel: Gen. HT (GeV) + ylabel: Trigger Efficiency ( GeV) diff --git a/menu_tools/object_performance/tests/reference_data/HT_90perc_350_V29.json b/menu_tools/object_performance/tests/reference_data/HT_90perc_350_V29.json new file mode 100644 index 00000000..136fafdb --- /dev/null +++ b/menu_tools/object_performance/tests/reference_data/HT_90perc_350_V29.json @@ -0,0 +1,620 @@ +{ + "xlabel": "Gen. HT (GeV)", + "ylabel": "Trigger Efficiency (350 GeV)", + "watermark": "V29_HT_90perc_350", + "trackerHT:default:inclusive": { + "label": "Tracker HT", + "efficiency": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.00013333333333333334, + 0.0, + 0.0, + 0.0002831657935721365, + 0.00015202189115232594, + 0.00017137960582690659, + 0.0005751533742331289, + 0.0013259668508287293, + 0.0010070493454179255, + 0.0011458034947006588, + 0.0047169811320754715, + 0.0065334358186010764, + 0.009683098591549295, + 0.020813623462630087, + 0.02336448598130841, + 0.048731642189586116, + 0.05747126436781609, + 0.061837455830388695, + 0.09765625, + 0.10372040586245772, + 0.12862547288776796, + 0.1485148514851485, + 0.22085889570552147, + 0.26119402985074625, + 0.23586744639376217, + 0.288135593220339 + ], + "efficiency_err": [ + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.00011008648525952339, + 0.0, + 0.0, + 0.0001823513829141161, + 0.0001255167107782635, + 0.0001414994374845714, + 0.00031192164388792805, + 0.0005236922261730564, + 0.00048009876080158523, + 0.0005462387052469576, + 0.001238184873004851, + 0.0015586180038634307, + 0.002032740516790456, + 0.003086696109909668, + 0.0036299344476051904, + 0.005552239303424154, + 0.006436728922849196, + 0.007156409074103788, + 0.009303555410625802, + 0.010276833295418189, + 0.011961828411951522, + 0.0134836778358714, + 0.016468200979164654, + 0.01932259798778216, + 0.01906225933597891, + 0.022810750520902534 + ], + [ + 0.0046879041451349576, + 0.004073155301754859, + 0.002224231670144308, + 0.0017487856735373052, + 0.0009992720608026564, + 0.0007243644346267765, + 0.0005336709648947606, + 0.00040679589146676575, + 0.00033362631974555594, + 0.0002866581334490885, + 0.0002579314630318181, + 0.0003050696561426725, + 0.00023905576131004127, + 0.00024195956021445879, + 0.00037153169312786834, + 0.0003478188064797919, + 0.0003920958493622838, + 0.0005563888435802931, + 0.0007871342825670361, + 0.0007915796948517353, + 0.0009005340889981848, + 0.0016139392292979912, + 0.001981014480253805, + 0.0025071376227297996, + 0.003570982617458661, + 0.004226832816821902, + 0.006186050147179441, + 0.007149778995645256, + 0.007971980522778178, + 0.01012428693723158, + 0.011212116822432228, + 0.012940250496853822, + 0.014522080708850332, + 0.01735752730139206, + 0.020249609977856187, + 0.02013640533025912, + 0.02388299640520314 + ] + ], + "xbins": [ + 10.0, + 30.0, + 50.0, + 70.0, + 90.0, + 110.0, + 130.0, + 150.0, + 170.0, + 190.0, + 210.0, + 230.0, + 250.0, + 270.0, + 290.0, + 310.0, + 330.0, + 350.0, + 370.0, + 390.0, + 410.0, + 430.0, + 450.0, + 470.0, + 490.0, + 510.0, + 530.0, + 550.0, + 570.0, + 590.0, + 610.0, + 630.0, + 650.0, + 670.0, + 690.0, + 710.0, + 730.0 + ], + "err_kwargs": { + "xerr": [ + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0 + ], + "capsize": 3, + "marker": "o", + "markersize": 8 + } + }, + "phase1PuppiHT:default:inclusive": { + "label": "Histogrammed Puppi HT", + "efficiency": [ + 0.0, + 0.0022271714922048997, + 0.002430133657351154, + 0.0009551098376313276, + 0.0016366612111292963, + 0.0019770660340055358, + 0.0029129041654529565, + 0.005772646536412078, + 0.008011653313911144, + 0.0172090112640801, + 0.029842342342342343, + 0.06066666666666667, + 0.09575994781474234, + 0.1526475637131916, + 0.21959507291519184, + 0.31529340224992397, + 0.4281062553556127, + 0.5433282208588958, + 0.6651933701657459, + 0.7595669687814703, + 0.8427384703523346, + 0.8800539083557951, + 0.9362029208301307, + 0.9617077464788732, + 0.9744560075685903, + 0.9853971962616822, + 0.985981308411215, + 0.9846743295019157, + 0.9973498233215548, + 1.0, + 0.9977452085682075, + 1.0, + 1.0, + 1.0, + 0.9981343283582089, + 0.9980506822612085, + 0.9975786924939467 + ], + "efficiency_err": [ + [ + 0.0, + 0.0018389319832569585, + 0.0015648087797643124, + 0.0007885970671355072, + 0.0008875236458577121, + 0.0008503624538187063, + 0.0009009377552959101, + 0.001117258583657704, + 0.0011937195600976802, + 0.0016182739735769065, + 0.0020105396509121944, + 0.0027485350801974145, + 0.003354359186525241, + 0.004129541396414388, + 0.0049290698539978806, + 0.005744412295983381, + 0.006514426960063269, + 0.006962391845237836, + 0.007123242155422038, + 0.006934412945263868, + 0.006369835376131561, + 0.006229648041136793, + 0.005130677874428113, + 0.00443887806185439, + 0.0038909454852842362, + 0.003492967407424552, + 0.003721998685895622, + 0.004186612456707484, + 0.0025584787506947038, + 0.0017880299021929558, + 0.002951688848833567, + 0.0023082794376581006, + 0.0025886965210667467, + 0.0028067614256136464, + 0.004256551066554315, + 0.004446778399965989, + 0.005519190778433658 + ], + [ + 0.0046879041451349576, + 0.005078294715424368, + 0.0031805789145277334, + 0.0021823611280588733, + 0.001581610553844316, + 0.0013285594214324592, + 0.0012339867559877774, + 0.0013565887776518116, + 0.0013850621382176243, + 0.0017754451527456604, + 0.0021465129005511577, + 0.0028676381984171703, + 0.003461087503886115, + 0.004222050485594181, + 0.005009014088096453, + 0.005800893257580153, + 0.006539209238764998, + 0.0069456729954276986, + 0.007049632644374859, + 0.006802284247529711, + 0.0061704198638199426, + 0.005968287652665327, + 0.004784555424000914, + 0.004013419733016055, + 0.0034146848995719736, + 0.0028733743898573527, + 0.003007174042333638, + 0.0033662712202982004, + 0.0014370010235984498, + 0.0, + 0.0014519127770952212, + 0.0, + 0.0, + 0.0, + 0.0015404383715550418, + 0.001609505337728745, + 0.0019992334393843514 + ] + ], + "xbins": [ + 10.0, + 30.0, + 50.0, + 70.0, + 90.0, + 110.0, + 130.0, + 150.0, + 170.0, + 190.0, + 210.0, + 230.0, + 250.0, + 270.0, + 290.0, + 310.0, + 330.0, + 350.0, + 370.0, + 390.0, + 410.0, + 430.0, + 450.0, + 470.0, + 490.0, + 510.0, + 530.0, + 550.0, + 570.0, + 590.0, + 610.0, + 630.0, + 650.0, + 670.0, + 690.0, + 710.0, + 730.0 + ], + "err_kwargs": { + "xerr": [ + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0 + ], + "capsize": 3, + "marker": "o", + "markersize": 8 + } + }, + "seededConePuppiHT:default:inclusive": { + "label": "SeededCone HT", + "efficiency": [ + 0.0, + 0.0022271714922048997, + 0.002430133657351154, + 0.0009551098376313276, + 0.0005455537370430987, + 0.0019770660340055358, + 0.0037867754150888435, + 0.005772646536412078, + 0.010742898761835398, + 0.01955569461827284, + 0.03420608108108108, + 0.0672, + 0.10437051532941943, + 0.16255116862537963, + 0.23148803624522157, + 0.3339920948616601, + 0.4481576692373608, + 0.5648006134969326, + 0.6846408839779006, + 0.7779456193353474, + 0.8607848753938699, + 0.8982479784366577, + 0.9465795541890853, + 0.9691901408450704, + 0.9796594134342479, + 0.9877336448598131, + 0.9919893190921228, + 0.9877394636015325, + 0.9964664310954063, + 1.0, + 0.9988726042841037, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0 + ], + "efficiency_err": [ + [ + 0.0, + 0.0018389319832569585, + 0.0015648087797643124, + 0.0007885970671355072, + 0.0004504391188022924, + 0.0008503624538187063, + 0.0010308807980181803, + 0.001117258583657704, + 0.0013819069127093287, + 0.0017234954877210357, + 0.0021481838905352754, + 0.0028832249924839876, + 0.0034858887659411225, + 0.004237227675487343, + 0.005023187390551687, + 0.005833142665312374, + 0.00655043422376117, + 0.006934376650048257, + 0.007020225149216741, + 0.006754273421534895, + 0.006074460092601042, + 0.00582430916443577, + 0.0047551672768813, + 0.004045688680966553, + 0.0035369437733976383, + 0.0032604119472066095, + 0.0030115358616300547, + 0.0038435540182472083, + 0.0027712486786956037, + 0.0017880299021929558, + 0.002575292661612605, + 0.0023082794376581006, + 0.0025886965210667467, + 0.0028067614256136464, + 0.0034131571592493914, + 0.003565910541162176, + 0.004427413234551869 + ], + [ + 0.0046879041451349576, + 0.005078294715424368, + 0.0031805789145277334, + 0.0021823611280588733, + 0.001247393278627939, + 0.0013285594214324592, + 0.0013577907768089897, + 0.0013565887776518116, + 0.0015703676556506358, + 0.0018794641871793562, + 0.0022826039655549704, + 0.00300042747386578, + 0.003590268761640189, + 0.004327063398556902, + 0.005099720754426218, + 0.0058838958976762945, + 0.006568303462218095, + 0.00690937073223985, + 0.006937929890030614, + 0.006612716368271099, + 0.005864297382878636, + 0.005549872504061137, + 0.004399618977669162, + 0.0036108457836996344, + 0.003051788994082316, + 0.0026327050815019293, + 0.002265023346719186, + 0.003008289686007304, + 0.0016840561707416324, + 0.0, + 0.0009308497718625297, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ] + ], + "xbins": [ + 10.0, + 30.0, + 50.0, + 70.0, + 90.0, + 110.0, + 130.0, + 150.0, + 170.0, + 190.0, + 210.0, + 230.0, + 250.0, + 270.0, + 290.0, + 310.0, + 330.0, + 350.0, + 370.0, + 390.0, + 410.0, + 430.0, + 450.0, + 470.0, + 490.0, + 510.0, + 530.0, + 550.0, + 570.0, + 590.0, + 610.0, + 630.0, + 650.0, + 670.0, + 690.0, + 710.0, + 730.0 + ], + "err_kwargs": { + "xerr": [ + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0, + 10.0 + ], + "capsize": 3, + "marker": "o", + "markersize": 8 + } + } +} diff --git a/menu_tools/object_performance/tests/reference_data/HT_90perc_350_V29.yaml b/menu_tools/object_performance/tests/reference_data/HT_90perc_350_V29.yaml new file mode 100644 index 00000000..969165bf --- /dev/null +++ b/menu_tools/object_performance/tests/reference_data/HT_90perc_350_V29.yaml @@ -0,0 +1,27 @@ +HT_90perc: + binning: + max: 750 + min: 0 + step: 20 + version: V29 + reference_object: + cuts: + object: + - abs({eta}) < 2.4 + - '{pt} > 30' + label: Gen HT + object: jet + x_arg: Pt + trafo: HT + sample: TT + scalings: + method: naive + threshold: 0.9 + test_objects: + phase1PuppiHT:default: "" + seededConePuppiHT:default: "" + trackerHT:default: "" + thresholds: + - 350 + xlabel: Gen. HT (GeV) + ylabel: Trigger Efficiency ( GeV) diff --git a/menu_tools/object_performance/tests/test_integration.py b/menu_tools/object_performance/tests/test_integration.py deleted file mode 100644 index e0d2e7e7..00000000 --- a/menu_tools/object_performance/tests/test_integration.py +++ /dev/null @@ -1,41 +0,0 @@ -from menu_tools.object_performance.turnon_collection import TurnOnCollection - - -def off_test_turnon_collection_met(met_config): - """ - This integration test tests whether the MET histograms for the - MET plots for V22 are produced as expected. The cache files - included in the test directory should lead to the bin values - specified below. - """ - turnon_collection = TurnOnCollection(met_config, 70) - turnon_collection.create_hists() - - assert all( - [ - x == y - for x, y in zip( - list(turnon_collection.hists["trackerMET"][0]), - met_config["trackerMETTruth"], - ) - ] - ) - - assert all( - [ - x == y - for x, y in zip( - list(turnon_collection.hists["puppiMET"][0]), - met_config["puppiMETTruth"], - ) - ] - ) - - assert all( - [ - x == y - for x, y in zip( - list(turnon_collection.hists["ref"][0]), met_config["genMETTruth"] - ) - ] - ) diff --git a/menu_tools/object_performance/tests/test_turnon_collection.py b/menu_tools/object_performance/tests/test_turnon_collection.py deleted file mode 100644 index 5ee90a70..00000000 --- a/menu_tools/object_performance/tests/test_turnon_collection.py +++ /dev/null @@ -1,40 +0,0 @@ -from unittest.mock import MagicMock - -import awkward as ak - -from menu_tools.object_performance.turnon_collection import TurnOnCollection - - -def test_select_highest_pt_ref_object(): - """ - Tests that no more than one reference object per event is - selected. If there are multiple reference objects in the event - the highest pt one should be selected. If there are no reference - objects in the event, the selection should yield an empty array - element. - """ - # Set up mock TurnOnCollection object - TurnOnCollection._set_bins = MagicMock() - turnon_collection = TurnOnCollection(None, None) - arr_content = [[], [None]] + [ - [float(f"{i}.{k}") for k in range(3)] for i in range(5) - ] - idx_empty = [i for i, x in enumerate(arr_content) if len(x) == 0 or x[0] is None] - turnon_collection.ak_arrays = {} - turnon_collection.ak_arrays["ref"] = ak.Array( - {"pt": arr_content, "other": arr_content} - ) - - # Execute selection of highest pt reference object - turnon_collection._select_highest_pt_ref_object() - ref_objects = turnon_collection.ak_arrays["ref"] - - # Assert outcome of selection as expected - # The number of events should remain unchanged in all variables - assert len(arr_content) == len(ref_objects["pt"]) - assert len(arr_content) == len(ref_objects["other"]) - # Each event should contain exactly one refernce object or a None entry - assert all(ak.num(ref_objects["pt"], axis=-1) == 1) - assert all(ak.num(ref_objects["other"], axis=-1) == 1) - # Events without reference objects should contain a None entry - assert all([not ref_objects["pt"][i] for i in idx_empty]) diff --git a/menu_tools/object_performance/tests/test_turnons_v29.py b/menu_tools/object_performance/tests/test_turnons_v29.py new file mode 100644 index 00000000..9bea1fea --- /dev/null +++ b/menu_tools/object_performance/tests/test_turnons_v29.py @@ -0,0 +1,55 @@ +""" +These tests check if V29 electron object performance plots can be reproduced. +""" +import json +from unittest.mock import patch +import sys + +import numpy as np +import pytest + +from menu_tools.object_performance import plotter + + +testdata = [ + "HT_50perc_350_V29", + "HT_90perc_350_V29", + "ElectronsIsolation_Barrel_-999_V29", +] + + +@pytest.mark.parametrize("test_name", testdata) +def test_matching_plots_reproduced(test_name): + # Prepare patching of the command line arguments for argparse + testargs = [ + "foo", + f"menu_tools/object_performance/tests/reference_data/{test_name}.yaml", + ] + + # Run Plotting + with patch.object(sys, "argv", testargs): + plotter.main() + + # Load result and assert correct outcome + with open( + f"outputs/V29/object_performance/turnons/{test_name}.json", + "r", + ) as f: + test_result = json.load(f) + with open( + f"menu_tools/object_performance/tests/reference_data/{test_name}.json", + "r", + ) as f: + reference_data = json.load(f) + + for key, val in reference_data.items(): + if isinstance(val, dict): + efficiencies_test = np.array( + test_result[key]["efficiency"], dtype=np.float64 + ) + efficiencies_reference = np.array(val["efficiency"], dtype=np.float64) + print(efficiencies_reference) + differences = efficiencies_test - efficiencies_reference + assert not np.any(abs(differences) > 1e-4) + else: + assert val == test_result[key] diff --git a/menu_tools/object_performance/turnon_collection.py b/menu_tools/object_performance/turnon_collection.py index 5d785c40..675e874f 100644 --- a/menu_tools/object_performance/turnon_collection.py +++ b/menu_tools/object_performance/turnon_collection.py @@ -1,20 +1,22 @@ +from typing import Any, Optional import re import awkward as ak import numpy as np import vector -from menu_tools.object_performance.plot_config import PlotConfig -from menu_tools.object_performance.quality_obj import Quality, L1IsoCut +from menu_tools.object_performance.config import PerformancePlotConfig from menu_tools.utils import utils +from menu_tools.utils.objects import Object vector.register_awkward() class ArrayLoader: - def __init__(self, turnon_collection): + def __init__(self, turnon_collection, cfg_plot: PerformancePlotConfig): self.turnon_collection = turnon_collection + self.cfg_plot = cfg_plot def _transform_key(self, raw_key: str, obj: str): """ @@ -22,24 +24,18 @@ def _transform_key(self, raw_key: str, obj: str): NTuple branch names for quality and region to "quality"/"region". """ - key = raw_key.removeprefix(obj).lower() + ## nano + if ("_" in raw_key) and ("dr_0" not in raw_key): + key = raw_key.removeprefix(obj).split("_")[-1] + ## menu ntuples + else: + key = raw_key.removeprefix(obj).lower() + if "qual" in key: return "quality" else: return key - def _map_region(self, test_array, obj: str): - """ - This method serves to map a 'region' branch - to the correct eta region in the detector. - Needed from V25 after the barrel and endcap - collections have been merged. - """ - if "hgc" in test_array.fields: - test_array["region"] = ak.where(abs(test_array["eta"]) > 1.479, 1, 0) - - return test_array - def _load_array_from_parquet(self, obj: str): """ Loads the specified parquet file @@ -48,42 +44,37 @@ def _load_array_from_parquet(self, obj: str): in self._transform_key(). """ fname = ( - f"cache/{self.turnon_collection.cfg_plot.version_ref_object}/" - f"{self.turnon_collection.cfg_plot.version_ref_object}_" - f"{self.turnon_collection.cfg_plot.sample}_" + f"cache/{self.cfg_plot.version}/" + f"{self.cfg_plot.version}_" + f"{self.cfg_plot.sample}_" f"{obj}.parquet" ) array = ak.from_parquet(fname) array_dict = {self._transform_key(key, obj): array[key] for key in array.fields} - if self.turnon_collection.cfg_plot.reference_trafo: + if self.cfg_plot.reference_trafo and not obj.startswith("L1"): array = ak.Array(array_dict) else: array = ak.zip(array_dict) + + array = ak.with_name(array, "Momentum4D") return array - def _load_ref_branches(self): + def _load_ref_branches(self) -> None: """ Load reference object. """ - ref_array = self._load_array_from_parquet( - self.turnon_collection.cfg_plot.reference_object - ) - ref_array = ak.with_name(ref_array, "Momentum4D") + ref_array = self._load_array_from_parquet(self.cfg_plot.reference_object) self.turnon_collection.ak_arrays["ref"] = ref_array - def _load_test_branches(self): + def _load_test_branches(self) -> None: """ Load test objects. """ - test_objects = self.turnon_collection.cfg_plot.test_objects - for test_obj, obj_cfg in test_objects.items(): - obj_name = self.turnon_collection.cfg_plot.get_base_obj(test_obj) - test_array = self._load_array_from_parquet(obj_name) - test_array = ak.with_name(test_array, "Momentum4D") - test_array = self._map_region(test_array, test_obj) - self.turnon_collection.ak_arrays[test_obj] = test_array - - def load_arrays(self): + for obj in self.cfg_plot.test_object_instances: + test_array = self._load_array_from_parquet(obj.nano_obj_name) + self.turnon_collection.ak_arrays[str(obj)] = test_array + + def load_arrays(self) -> None: """ Load ak arrays from cache (parquet) files. """ @@ -92,16 +83,37 @@ def load_arrays(self): class TurnOnCollection: - def __init__(self, cfg_plot, threshold): - self.cfg_plot = PlotConfig(cfg_plot) - self.version = self.cfg_plot.version_ref_object + def __init__( + self, cfg_plot: dict, threshold: float, plot_name: Optional[str] = None + ): + self.cfg_plot = PerformancePlotConfig(cfg_plot, plot_name) + self.version = self.cfg_plot.version self.threshold = threshold - self.ak_arrays = {} - self.numerators = {"ref": {}, "test": {}} - self.hists = {"ref": {}} + self.ak_arrays: dict[str, Any] = {} + self.numerators: dict[str, Any] = {"ref": {}, "test": {}} + self.hists: dict[str, Any] = {"ref": {}} + + @property + def test_objects(self) -> list[tuple[Object, str]]: + """Instantiates all test objects. + + Returns: + obj_args: list containig tuples of test objects and their x_args. + """ + obj_args = [] + + test_objects = self.cfg_plot.test_objects + for obj_key, x_arg in test_objects.items(): + obj = Object(obj_key, self.cfg_plot.version) + if "L1" in obj_key: + obj_args.append((obj, x_arg)) + else: + obj_args.append((obj, x_arg.lower())) + + return obj_args @property - def bins(self): + def bins(self) -> np.ndarray: """ Set bins according to configuration. """ @@ -110,11 +122,11 @@ def bins(self): xmin = self.cfg_plot.bin_min return np.arange(xmin, xmax, bin_width) - def _load_arrays(self): + def _load_arrays(self) -> None: """ Load ak arrays from cache (parquet) files. """ - loader = ArrayLoader(self) + loader = ArrayLoader(self, self.cfg_plot) loader.load_arrays() def _match_test_to_ref(self): @@ -123,28 +135,23 @@ def _match_test_to_ref(self): to reference objects. Selects highest pT deltaR-matched reco lepton. """ - for test_obj, obj_cfg in self.cfg_plot.test_objects.items(): - suffix = obj_cfg["suffix"].lower() + for test_obj, x_arg in self.test_objects: ref_test = ak.cartesian( - {"ref": self.ak_arrays["ref"], "test": self.ak_arrays[test_obj]}, + {"ref": self.ak_arrays["ref"], "test": self.ak_arrays[str(test_obj)]}, nested=True, ) js, gs = ak.unzip(ref_test) dR = gs.deltaR(js) - pass_dR = dR < self.cfg_plot.get_match_dR(test_obj) + pass_dR = dR < test_obj.match_dR pt_max = ak.argmax(ref_test["test"]["pt"][pass_dR], axis=-1, keepdims=True) - if "iso" not in suffix: - self.numerators["ref"][test_obj] = ref_test["ref"][suffix][pass_dR][ + if "iso" not in x_arg.lower(): + self.numerators["ref"][str(test_obj)] = ref_test["ref"][x_arg][pass_dR][ pt_max - ][ - :, :, 0 - ] # noqa - self.numerators["test"][test_obj] = ref_test["test"][suffix][pass_dR][ + ][:, :, 0] + self.numerators["test"][str(test_obj)] = ref_test["test"][x_arg][pass_dR][ pt_max - ][ - :, :, 0 - ] # noqa + ][:, :, 0] def _flatten_array(self, ak_array, ak_to_np=False): """ @@ -183,11 +190,10 @@ def _reduce_to_per_event(self): for some of which one number per event is stored in the branches and for some of which one number per jet is stored. """ - for test_obj, cfg in self.cfg_plot.test_objects.items(): - field = cfg["suffix"].lower() + for test_obj, x_arg in self.test_objects: try: - self.ak_arrays[test_obj][field] = ak.max( - self.ak_arrays[test_obj][field], axis=1 + self.ak_arrays[str(test_obj)][x_arg] = ak.max( + self.ak_arrays[str(test_obj)][x_arg], axis=1 ) except ValueError: pass @@ -211,43 +217,6 @@ def _apply_reference_trafo(self): if trafo: self._reduce_to_per_event() - def _apply_quality_cuts(self): - """ - Function to implement quality criteria. - Events not fulfilling L1 hardware quality - criteria are filtered out. - """ - for test_obj in self.cfg_plot.test_objects: - if not (quality_id := self.cfg_plot.get_quality_id(test_obj)): - return - - ## force quality bit to be int! - self.ak_arrays[test_obj]["quality"] = ak.values_astype( - self.ak_arrays[test_obj]["quality"], np.int32 - ) - - quality = Quality(self.ak_arrays, test_obj) - sel = ~getattr(quality, quality_id) - self.ak_arrays[test_obj] = self.ak_arrays[test_obj][sel] - - def _apply_L1_isolation_cuts(self): - """ - Function to implement isolation criteria. - Events not fulfilling L1 Iso EE/BB quality - criteria are filtered out. - """ - for test_obj in self.cfg_plot.test_objects: - iso_BB = self.cfg_plot.get_iso_BB(test_obj) - iso_EE = self.cfg_plot.get_iso_EE(test_obj) - l1_iso = self.cfg_plot.get_l1_iso(test_obj) - - if (iso_BB == -1) & (iso_EE == -1): - continue - - isolation = L1IsoCut(self.ak_arrays, test_obj, iso_BB, iso_EE, l1_iso) - sel = ~getattr(isolation, "ISO_EEBB") - self.ak_arrays[test_obj] = self.ak_arrays[test_obj][sel] - def _select_highest_pt_ref_object(self): """ The raw cached arrays of the reference still contain @@ -263,56 +232,78 @@ def _apply_list_of_reference_cuts(self, cut_list): cut = re.sub(r"{([^&|]*)}", r"self.ak_arrays['ref']['\1']", cut) sel = eval(cut) self.ak_arrays["ref"] = self.ak_arrays["ref"][sel] + if not isinstance( + self.ak_arrays["ref"], vector.backends.awkward.MomentumArray4D + ): + self.ak_arrays["ref"] = ak.with_name(self.ak_arrays["ref"], "Momentum4D") - def _apply_reference_cuts(self): - """ - Applies configured cuts on reference objects. Should be - applied before any matching and before the selection of - the highest pT object. - """ - if self.cfg_plot.reference_trafo: - ref_object_cuts = self.cfg_plot.reference_object_cuts - ref_event_cuts = self.cfg_plot.reference_event_cuts + def _apply_reference_cuts(self) -> None: + """Applies configured cuts on reference objects. - self._apply_list_of_reference_cuts(ref_object_cuts) - return + Should be applied before any matching and before the + selection of the highest pT object. + """ if "met" in self.cfg_plot.reference_object.lower(): # TODO: Maybe we want to modify it and allow possible cuts on MET return ref_object_cuts = self.cfg_plot.reference_object_cuts - ref_event_cuts = self.cfg_plot.reference_event_cuts - self._apply_list_of_reference_cuts(ref_object_cuts) + + if self.cfg_plot.reference_trafo: + # In this case each event is reduced to a single value already + return None + self._select_highest_pt_ref_object() + ref_event_cuts = self.cfg_plot.reference_event_cuts self._apply_list_of_reference_cuts(ref_event_cuts) def _apply_test_obj_cuts(self): - """ - Applies configured cuts on all configured - test objects. + """Applies configured cuts on all configured test objects. + Should be applied before any matching. """ - for test_obj in self.cfg_plot.test_objects: - if not (cuts := self.cfg_plot.get_object_cuts(test_obj)): + for test_obj, _ in self.test_objects: + if not test_obj.cuts: continue - for cut in cuts: - cut = re.sub(r"{([^&|]*)}", r"self.ak_arrays[test_obj]['\1']", cut) - sel = eval(cut) - self.ak_arrays[test_obj] = self.ak_arrays[test_obj][sel] - - def _skim_to_hists(self): + ## add dummy eta + if "eta" not in self.ak_arrays[str(test_obj)].fields: + self.ak_arrays[str(test_obj)]["eta"] = 0 + for ( + range_i, + range_cuts, + ) in test_obj.cuts.items(): # TODO: use the version from utils + for cut in range_cuts: + cut = re.sub( + r"{([^&|]*)}", r"self.ak_arrays[str(test_obj)]['\1']", cut + ) + eta_sel = ( + abs(self.ak_arrays[str(test_obj)]["eta"]) + >= test_obj.eta_ranges[range_i][0] + ) & ( + abs(self.ak_arrays[str(test_obj)]["eta"]) + < test_obj.eta_ranges[range_i][1] + ) + + sel = eval(cut) + ~eta_sel + self.ak_arrays[str(test_obj)] = self.ak_arrays[str(test_obj)][sel] + + def _skim_to_hists(self) -> None: + """ + TODO! + """ ref_field = self.cfg_plot.reference_field if trafo := self.cfg_plot.reference_trafo: ref_field = trafo - for test_obj, cfg in self.cfg_plot.test_objects.items(): - field = cfg["suffix"].lower() - sel = self.ak_arrays[test_obj][field] > self.threshold - ak_array = self._flatten_array(self.ak_arrays["ref"][sel][ref_field]) - self.hists[test_obj] = np.histogram(ak_array, bins=self.bins) + for test_obj, x_arg in self.test_objects: + sel = self.ak_arrays[str(test_obj)][x_arg] > self.threshold + if (self.ak_arrays["ref"].ndim == 1) and (sel.ndim == 2): + sel = sel[:, 0] + ak_array = self._flatten_array(self.ak_arrays["ref"][ref_field][sel]) + self.hists[str(test_obj)] = np.histogram(ak_array, bins=self.bins) - self.hists["ref"][test_obj] = np.histogram( + self.hists["ref"][str(test_obj)] = np.histogram( self._flatten_array(self.ak_arrays["ref"][ref_field]), bins=self.bins ) @@ -327,40 +318,40 @@ def _skim_to_hists_dR_matched(self): ref_obj = self._remove_inner_nones_zeros(self.ak_arrays["ref"][ref_field]) - for test_obj, cfg in self.cfg_plot.test_objects.items(): - sel_threshold = self.numerators["test"][test_obj] >= self.threshold - numerator = self.numerators["ref"][test_obj][sel_threshold] + for test_obj, _ in self.test_objects: + sel_threshold = self.numerators["test"][str(test_obj)] >= self.threshold + numerator = self.numerators["ref"][str(test_obj)][sel_threshold] numerator = self._remove_inner_nones_zeros(numerator) numerator = self._flatten_array(numerator, ak_to_np=True) # Create Test Object(s) Numpy Histogram - self.hists[test_obj] = np.histogram(numerator, bins=self.bins) + self.hists[str(test_obj)] = np.histogram(numerator, bins=self.bins) # Create Reference Numpy Histogram if self.threshold >= 0: - ref_obj = self.numerators["ref"][test_obj] + ref_obj = self.numerators["ref"][str(test_obj)] ref_obj = self._remove_inner_nones_zeros(ref_obj) ref_flat_np = self._flatten_array(ref_obj, ak_to_np=True) - self.hists["ref"][test_obj] = np.histogram(ref_flat_np, bins=self.bins) + self.hists["ref"][str(test_obj)] = np.histogram(ref_flat_np, bins=self.bins) def _skim_to_hists_dR_matched_Iso(self): - for test_obj, cfg in self.cfg_plot.test_objects.items(): - numerator = self.numerators["test"][test_obj] + for test_obj, _ in self.test_objects: + numerator = self.numerators["test"][str(test_obj)] numerator = self._remove_inner_nones_zeros(numerator) numerator = self._flatten_array(numerator, ak_to_np=True) # Create Test Object(s) Numpy Histogram - self.hists[test_obj] = np.histogram(numerator, bins=self.bins) + self.hists[str(test_obj)] = np.histogram(numerator, bins=self.bins) - def xerr(self, obj_key: str): - ref_vals = self.hists["ref"][obj_key][0] + def xerr(self, obj: Object): + ref_vals = self.hists["ref"][str(obj)][0] bin_width = self.cfg_plot.bin_width return np.ones_like(ref_vals) * bin_width / 2 @utils.ignore_warnings - def get_efficiency(self, obj_key: str): - ref_vals = self.hists["ref"][obj_key][0] - test_vals = self.hists[obj_key][0] + def get_efficiency(self, obj: Object): + ref_vals = self.hists["ref"][str(obj)][0] + test_vals = self.hists[str(obj)][0] eff = test_vals / ref_vals assert all(0 <= i <= 1 or str(i) == "nan" for i in eff) @@ -370,18 +361,17 @@ def get_efficiency(self, obj_key: str): return eff, err def _apply_cuts(self): + # Apply cuts on test objects + self._apply_test_obj_cuts() + # Apply cuts on reference objects self._apply_reference_cuts() self._apply_reference_trafo() - # Apply cuts on test objects - self._apply_quality_cuts() - self._apply_L1_isolation_cuts() - self._apply_test_obj_cuts() def create_hists(self): self._load_arrays() self._apply_cuts() - if not self.cfg_plot.matching_configured: + if not self.cfg_plot.matching: self._skim_to_hists() else: self._match_test_to_ref() diff --git a/rates/table/lib/__init__.py b/menu_tools/rate_plots/__init__.py similarity index 100% rename from rates/table/lib/__init__.py rename to menu_tools/rate_plots/__init__.py diff --git a/menu_tools/rate_plots/config.py b/menu_tools/rate_plots/config.py new file mode 100644 index 00000000..461336ab --- /dev/null +++ b/menu_tools/rate_plots/config.py @@ -0,0 +1,51 @@ +from menu_tools.utils.config import BasePlotConfig +from menu_tools.utils.objects import Object + + +class RatePlotConfig(BasePlotConfig): + def __init__(self, cfg: dict, name: str): + super().__init__(cfg, name) + + @property + def compare_versions(self) -> bool: + """ + Returns a boolean specifying if a plot comparing two versions + is to be produced. If a list of two versions is given this is true. + """ + return len(self.versions) == 2 + + @property + def versions(self) -> list[str]: + if "version" in self._cfg.keys(): + version = self._cfg["version"] + if isinstance(version, str): + return [version] + try: + versions = self._cfg["versions"] + except KeyError: + raise ValueError( + "`version(s)` must be specified as either a single" + "version (e.g. `V30`) or a list of exactly two versions" + "(e.g. [`V29`, `V30`])." + ) + if isinstance(versions, str): + return [versions] + if isinstance(versions, list): + assert ( + len(versions) == 2 + ), "To compare versions, exactly two must be specified." + return versions + raise RuntimeError("Somthing is wrong with the version config!") + + @property + def test_objects(self) -> list: + return self._cfg["test_objects"] + + @property + def test_object_instances(self) -> dict[str, dict[str, Object]]: + test_objects: dict[str, dict[str, Object]] = {} + for obj_key in self._cfg["test_objects"]: + test_objects[obj_key] = {} + for version in self.versions: + test_objects[obj_key][version] = Object(obj_key, version) + return test_objects diff --git a/menu_tools/rate_plots/plotter.py b/menu_tools/rate_plots/plotter.py new file mode 100644 index 00000000..1d23d8c8 --- /dev/null +++ b/menu_tools/rate_plots/plotter.py @@ -0,0 +1,370 @@ +import argparse +import os +import json + +import awkward as ak +import matplotlib as mpl +import matplotlib.pyplot as plt +import mplhep as hep +import numpy as np +import yaml + +from menu_tools.utils import constants +from menu_tools.utils import objects +from menu_tools.utils import scalings +from menu_tools.utils.objects import Object +from menu_tools.rate_plots.config import RatePlotConfig + +colors = [ + "#3f90da", + "#ffa90e", + "#bd1f01", + "#94a4a2", + "#832db6", + "#a96b59", + "#e76300", + "#b9ac70", + "#717581", + "#92dadd", +] +mpl.rcParams["axes.prop_cycle"] = mpl.cycler(color=colors) +plt.style.use(hep.style.CMS) + + +class RatePlotter: + # Common plot properties + _figsize = (10, 10) + _llabel = "Phase-2 Simulation" + _com = 14 + _outdir = "outputs/rate_plots/" + + def __init__(self, cfg, data, offline_pt: bool): + self.cfg = cfg + self.data = data + self.offline_pt = offline_pt + + ## Overwrite outdir + self._outdir = os.path.join( + "outputs", self.cfg.version, "object_performance", "rates" + ) + + @property + def _online_offline(self): + if self.offline_pt: + return "Offline" + return "Online" + + def _style_plot(self, fig, ax0, ax1=None, legend_loc="upper right"): + ax0.legend(loc=legend_loc, frameon=False) + ax0.set_ylabel("Rate [kHz]") + ax0.set_yscale("log") + ax0.grid() + ax0.tick_params(direction="in") + if ax1: + ax1.set_xlabel(rf"{self._online_offline} $p_T$ [GeV]") + ax1.grid() + else: + ax0.set_xlabel(rf"{self._online_offline} $p_T$ [GeV]") + fig.tight_layout() + + def _plot_single_version_rate_curves(self): + """ + TODO: Write description! + """ + version = self.cfg.version + fig, ax = plt.subplots(figsize=self._figsize) + hep.cms.label(ax=ax, llabel=self._llabel, com=self._com) + + plot_dict = {} + + for obj_specifier, obj_instances in self.cfg.test_object_instances.items(): + if obj_specifier not in self.data.keys(): + continue + rate_values = self.data[obj_specifier][version] + + xvals = list(rate_values.keys()) + yvals = list(rate_values.values()) + label = f"{obj_instances[version].plot_label}" + + plot_dict[obj_specifier] = { + "x_values": xvals, + "y_values": yvals, + "object": obj_instances[version].plot_label, + "label": label, + "version": version, + "xlabel": rf"{self._online_offline} $p_T$ [GeV]", + } + + ax.plot( + xvals, + yvals, + marker="o", + label=label, + ) + + self._style_plot(fig, ax) + + # Save plot + fname = os.path.join( + self._outdir, + f"{version}_{self._online_offline}_{self.cfg.plot_name}", + ) + print("Saving to ", fname) + plt.savefig(fname + ".png") + plt.savefig(fname + ".pdf", bbox_inches="tight") + + with open(fname + ".json", "w") as outfile: + outfile.write(json.dumps(plot_dict, indent=4)) + + # TODO: Add styling + plt.close() + + def _plot_version_comparsion_rate_curves(self): + """ + TODO: Write description! + """ + v1, v2 = self.cfg.versions + fig, axs = plt.subplots( + 2, + 1, + figsize=self._figsize, + sharex=True, + gridspec_kw={"height_ratios": [3, 1]}, + ) + hep.cms.label(ax=axs[0], llabel=self._llabel, com=self._com) + + for obj_key, rate_values in self.data.items(): + xvalues = np.fromiter(rate_values[v1].keys(), dtype=float) + v1_values = np.fromiter(rate_values[v1].values(), dtype=float) + v2_values = np.fromiter(rate_values[v2].values(), dtype=float) + p = axs[0].plot( + xvalues, + v1_values, + marker="o", + linestyle="solid", + label=f"{obj_key} @ {v1}", + ) + axs[0].plot( + xvalues, + v2_values, + marker="o", + linestyle="dashed", + label=f"{obj_key} @ {v2}", + color=p[0].get_color(), + ) + axs[1].plot( + xvalues, + v1_values / v2_values, + marker="o", + linestyle="dotted", + label=f"({obj_key} @ {v1}) / ({obj_key} @ {v2})", + ) + axs[1].axhline(1, alpha=0.6, color="black") + + self._style_plot(fig, axs[0], axs[1]) + fname = os.path.join( + self._outdir, f"{v1}-vs-{v2}_{self._online_offline}_{self.cfg.plot_name}" + ) + plt.savefig(fname + ".png") + plt.savefig(fname + ".pdf", bbox_inches="tight") + + plt.close() + + def plot(self): + os.makedirs(self._outdir, exist_ok=True) + if self.cfg.compare_versions: + self._plot_version_comparsion_rate_curves() + else: + self._plot_single_version_rate_curves() + + # Dump plot conifg + with open(os.path.join(self._outdir, f"{self.cfg.plot_name}.yaml"), "w") as f: + yaml.dump( + {self.cfg.plot_name: self.cfg.config_dict}, f, default_flow_style=False + ) + + +class RateComputer: + def __init__( + self, + obj: Object, + sample: str, + version: str, + apply_offline_conversion: bool, + ): + self.object = obj + self.sample = sample + self.version = version + self.apply_offline_conversion = apply_offline_conversion + self.arrays = self._load_cached_arrays() + + def _transform_key(self, raw_key: str) -> str: + """Maps to . + + Returns: + key: string of with the l1 object name prefix removed, qual + transformed to quality + """ + ## nano + if "_" in raw_key: + key = raw_key.removeprefix(self.object.nano_obj_name).split("_")[-1] + ## menu ntuples + else: + key = raw_key.removeprefix(self.object.nano_obj_name).lower() + + if "qual" in key: + return "quality" + return key + + def _load_cached_arrays(self): + """ + Loads array for specified object/version combination + from the cached parquet file. + """ + fpath = os.path.join( + "cache", + self.version, + f"{self.version}_{self.sample}_{self.object.nano_obj_name}.parquet", + ) + arr = ak.from_parquet(fpath) + + # Remove object name prefix from array fields + arr = ak.zip({self._transform_key(var): arr[var] for var in arr.fields}) + + # Apply scalings if so configured + if self.apply_offline_conversion: + arr = scalings.add_offline_pt(arr, self.object) + arr["pt"] = scalings.get_pt_branch(arr, str(self.object)) + + return arr + + def compute_rate(self, thresholds: np.ndarray) -> dict: + """Computes rate at threholds after application of all object cuts. + + threshold: pt threshold for which to compute rate + + Returns: + rate: rate computed after all object cuts are applied + """ + obj_mask = objects.compute_selection_mask_for_object_cuts( + self.object, self.arrays + ) + + pt_field = "offline_pt" if self.apply_offline_conversion else "pt" + + if (max_pt_obj := self.arrays[obj_mask][pt_field]).ndim > 1: + max_pt_obj = ak.max(max_pt_obj, axis=1) + + cumsum = np.cumsum( + np.histogram(max_pt_obj, bins=[-1] + list(thresholds) + [1e5])[0] + ) + rate = (cumsum[-1] - cumsum) / len(obj_mask) * constants.RATE_NORM_FACTOR + + return dict(zip(thresholds, rate)) + + +class RatePlotCentral: + """ + Class that orchestrates the creation of the rate plots + (pt thresholds vs. rate). + """ + + def __init__(self, cfg_plots_path: str): + with open(cfg_plots_path, "r") as f: + self.cfg_plots = yaml.safe_load(f) + + def get_bins(self, plot_config: RatePlotConfig) -> np.ndarray: + """ + Set bins according to configuration. + """ + bin_width = plot_config.bin_width + xmax = plot_config.bin_max + 1e-5 + xmin = plot_config.bin_min + return np.arange(xmin, xmax, bin_width) + + def _compute_rates( + self, + plot_config: RatePlotConfig, + obj_specifier: str, + obj_instances: dict[str, Object], + apply_offline_conversion: bool, + ) -> dict: + """ + This function orchestrates the computations of + the rates at the different thresholds that are + to be plotted. Instances of RateComputer are created + and called for this purpose. + """ + rate_data: dict[str, dict] = {} + + # Iterate over version(s) + for version in plot_config.versions: + rate_data[version] = {} + rate_computer = RateComputer( + obj_instances[version], + plot_config.sample, + version, + apply_offline_conversion, + ) + + rate_data[version] = rate_computer.compute_rate(self.get_bins(plot_config)) + + return rate_data + + def run(self, apply_offline_conversion: bool = False) -> None: + """ + This function iterates over all plots defined + in the configuration file, computes the rates + at the configured thresholds and passes it to + the RatePlotter for plotting. + """ + # Iterate over plots + for plot_name, cfg_plot in self.cfg_plots.items(): + print( + "Plotting ", + plot_name, + " Offline" if apply_offline_conversion else " Online", + ) + plot_config = RatePlotConfig(cfg_plot, plot_name) + rate_plot_data = {} + + # Iterate over test objects in plot + for ( + obj_specifier, + obj_instances, + ) in plot_config.test_object_instances.items(): + try: + rate_plot_data[obj_specifier] = self._compute_rates( + plot_config, + obj_specifier, + obj_instances, + apply_offline_conversion, + ) + scalings_found = True + except UserWarning: + # Continue without creating a plot if a warning was raised. + # This applies to no scalings being found for an object. + scalings_found = False + continue + if not scalings_found: + continue + + # Plot Rate vs. Threshold after all data has been aggregated + plotter = RatePlotter(plot_config, rate_plot_data, apply_offline_conversion) + plotter.plot() + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + "cfg_plots", help="Path of YAML file specifying the desired plots." + ) + args = parser.parse_args() + + plotter = RatePlotCentral(args.cfg_plots) + plotter.run(apply_offline_conversion=True) + plotter.run() + + +if __name__ == "__main__": + main() diff --git a/menu_tools/rate_plots/tests/reference_data/HTRates.yaml b/menu_tools/rate_plots/tests/reference_data/HTRates.yaml new file mode 100644 index 00000000..85f7aa7e --- /dev/null +++ b/menu_tools/rate_plots/tests/reference_data/HTRates.yaml @@ -0,0 +1,10 @@ +HTRates: + binning: + max: 420 + min: 40 + step: 20 + sample: MinBias + test_objects: + - phase1PuppiHT:default + - seededConePuppiHT:default + version: V29 diff --git a/menu_tools/rate_plots/tests/reference_data/V29_Offline_HTRates.json b/menu_tools/rate_plots/tests/reference_data/V29_Offline_HTRates.json new file mode 100644 index 00000000..b4cfa778 --- /dev/null +++ b/menu_tools/rate_plots/tests/reference_data/V29_Offline_HTRates.json @@ -0,0 +1,100 @@ +{ + "phase1PuppiHT:default": { + "x_values": [ + 40.0, + 60.0, + 80.0, + 100.0, + 120.0, + 140.0, + 160.0, + 180.0, + 200.0, + 220.0, + 240.0, + 260.0, + 280.0, + 300.0, + 320.0, + 340.0, + 360.0, + 380.0, + 400.0, + 420.0 + ], + "y_values": [ + 31038.96, + 6515.021489281441, + 6515.021489281441, + 3321.78311602815, + 1973.7157652260328, + 1320.8727725069464, + 856.6764291074289, + 573.4939974851442, + 389.77321796093855, + 272.7326631107145, + 193.69841994037355, + 138.77418484190886, + 102.54622232137424, + 76.02836096294642, + 59.44092721114649, + 46.520355000304214, + 36.57418979049628, + 28.610962581377894, + 22.850999817470136, + 18.003818038006774 + ], + "object": "Histogrammed Puppi HT", + "label": "Histogrammed Puppi HT @ V29", + "version": "V29" + }, + "seededConePuppiHT:default": { + "x_values": [ + 40.0, + 60.0, + 80.0, + 100.0, + 120.0, + 140.0, + 160.0, + 180.0, + 200.0, + 220.0, + 240.0, + 260.0, + 280.0, + 300.0, + 320.0, + 340.0, + 360.0, + 380.0, + 400.0, + 420.0 + ], + "y_values": [ + 31038.96, + 8214.792795951893, + 8214.792795951893, + 2991.718364532419, + 2138.315356886446, + 1259.2443184537692, + 824.4615553978138, + 541.0430597278277, + 367.86647433427305, + 256.1609669620946, + 180.73063491999108, + 130.03981507696676, + 95.55872650942057, + 72.12543537428762, + 56.05734252743018, + 43.8607000628714, + 34.6699398057071, + 26.942776644289857, + 21.403140324903156, + 16.94939862494169 + ], + "object": "SeededCone HT", + "label": "SeededCone HT @ V29", + "version": "V29" + } +} \ No newline at end of file diff --git a/menu_tools/rate_plots/tests/reference_data/V29_Online_HTRates.json b/menu_tools/rate_plots/tests/reference_data/V29_Online_HTRates.json new file mode 100644 index 00000000..5f30cc52 --- /dev/null +++ b/menu_tools/rate_plots/tests/reference_data/V29_Online_HTRates.json @@ -0,0 +1,100 @@ +{ + "phase1PuppiHT:default": { + "x_values": [ + 40.0, + 60.0, + 80.0, + 100.0, + 120.0, + 140.0, + 160.0, + 180.0, + 200.0, + 220.0, + 240.0, + 260.0, + 280.0, + 300.0, + 320.0, + 340.0, + 360.0, + 380.0, + 400.0, + 420.0 + ], + "y_values": [ + 3669.442507879206, + 1985.5347052142697, + 1275.2179856815462, + 802.3659605329872, + 520.0963098951468, + 345.81809227898674, + 235.56044439937534, + 163.45074662826778, + 115.86023461171843, + 82.90569355263958, + 62.619923053521816, + 48.172803334212176, + 37.12500590179893, + 28.406373740036912, + 22.441822134788165, + 17.169725069462753, + 13.361225099884399, + 10.607144543371124, + 8.41961770134058, + 6.279303668850265 + ], + "object": "Histogrammed Puppi HT", + "label": "Histogrammed Puppi HT @ V29", + "version": "V29" + }, + "seededConePuppiHT:default": { + "x_values": [ + 40.0, + 60.0, + 80.0, + 100.0, + 120.0, + 140.0, + 160.0, + 180.0, + 200.0, + 220.0, + 240.0, + 260.0, + 280.0, + 300.0, + 320.0, + 340.0, + 360.0, + 380.0, + 400.0, + 420.0 + ], + "y_values": [ + 4042.156163992942, + 2461.5027757924836, + 1437.173660007707, + 891.8814474212586, + 565.4678198633054, + 370.0067883667633, + 249.8659256900643, + 172.20085399638995, + 121.36839572474497, + 86.4151790617965, + 64.68154907011176, + 49.4003363822581, + 38.33680134666477, + 29.27194191494108, + 22.976900642910742, + 17.67332837122518, + 13.864828401646825, + 11.252386273754233, + 8.765844971302249, + 6.436679700651023 + ], + "object": "SeededCone HT", + "label": "SeededCone HT @ V29", + "version": "V29" + } +} \ No newline at end of file diff --git a/menu_tools/rate_plots/tests/test_rate_plots_v29.py b/menu_tools/rate_plots/tests/test_rate_plots_v29.py new file mode 100644 index 00000000..bc6d920d --- /dev/null +++ b/menu_tools/rate_plots/tests/test_rate_plots_v29.py @@ -0,0 +1,63 @@ +""" +These tests check if V29 electron object performance plots can be reproduced. +""" +import json +from unittest.mock import patch +import re +import sys + +import numpy as np +import pytest + +from menu_tools.rate_plots import plotter + + +testdata = [ + "HTRates", +] + + +@pytest.mark.parametrize("test_name", testdata) +def test_matching_plots_reproduced(test_name): + # Prepare patching of the command line arguments for argparse + testargs = [ + "foo", + f"menu_tools/rate_plots/tests/reference_data/{test_name}.yaml", + ] + + # Run Plotting + with patch.object(sys, "argv", testargs): + plotter.main() + pass + + # Load result and assert correct outcome (Offline) + for online_offline in ["Online", "Offline"]: + with open( + f"outputs/rate_plots/V29_{online_offline}_{test_name}.json", + "r", + ) as f: + test_result = json.load(f) + with open( + f"menu_tools/rate_plots/tests/reference_data/V29_{online_offline}_{test_name}.json", + "r", + ) as f: + reference_data = json.load(f) + + for key, val in reference_data.items(): + print(key) + if isinstance(val, dict): + efficiencies_test = np.array( + test_result[key]["y_values"], dtype=np.float64 + ) + efficiencies_reference = np.array(val["y_values"], dtype=np.float64) + differences = efficiencies_test - efficiencies_reference + print(differences) + try: + assert not np.any(abs(differences) > 1e-4) + except Exception as e: + print(online_offline) + print(efficiencies_test) + print(efficiencies_reference) + raise e + else: + assert val == test_result[key] diff --git a/menu_tools/rate_table/L1Table.ipynb b/menu_tools/rate_table/L1Table.ipynb new file mode 100644 index 00000000..1baff32c --- /dev/null +++ b/menu_tools/rate_table/L1Table.ipynb @@ -0,0 +1,218 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from collections import defaultdict\n", + "import csv\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! ls /eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano_DT12x/rate_tables/*.csv" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#fname = \"/afs/cern.ch/user/a/alobanov/work/L1T/phase2/menu/MenuTools/test/Phase2-L1MenuTools/outputs/V38nano_DT12x/rate_tables/rates_Step2_V38nano_DT12x.csv\"\n", + "# fname = \"/eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano_DT12x/rate_tables/rate_table_V38_DT12x/rates_Step1and2_V38nano_DT12x.csv\"\n", + "\n", + "# Step1\n", + "#fname = \"/eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano_DT12x/rate_tables/menu_Step1_V38nano_DT12x.csv\"\n", + "# Step1+2\n", + "fname = \"/eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano_DT12x/rate_tables/rates_Step1and2_V38nano_DT12x.csv\"\n", + "df = pd.read_csv(fname)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "### UNCOMMENT FOR OFFLINE THRESHOLDS -> DERIVED EXTERNALLY \n", + "\n", + "# l1_obj = []\n", + "# thresholds = defaultdict(list)\n", + "# with open(\"onl2off_th_update.txt\") as f:\n", + "# for line in f:\n", + "# if \"####\" in line: continue\n", + "# if \"L1_\" in line:\n", + "# l1_obj.append(line)\n", + "# obj = line\n", + "# if \"leg\" in line:\n", + "# legs = line.split(',')\n", + "# _dict = {}\n", + "# _dict[legs[0].split(' Eta = ')[0]] = {'offline': legs[1].split(' = ')[1], 'online': legs[2].split(' = ')[1][:-1]}\n", + "# thresholds[obj[:-1]].append(_dict)\n", + "# # print(line) \n", + "\n", + "# l1_thresholds = defaultdict(list)\n", + "# rates = defaultdict(list)\n", + "# for _obj in thresholds:\n", + "# # if _obj == 'L1_PFMHTT': continue # not in menu\n", + "# dfi= df[df.seed==_obj]\n", + "# if(len(dfi) == 0):\n", + "# print(f\"... {_obj} missing ...\")\n", + "# continue\n", + "# rates[_obj] = float(dfi.rate)\n", + "# offlines = []\n", + "# onlines = []\n", + "# for legs in thresholds[_obj]:\n", + "# for leg in legs:\n", + "# onlines.append(int(float(legs[leg]['online'])))\n", + "# offlines.append(int(float(legs[leg]['offline'])))\n", + "# l1_thresholds[_obj] = (onlines, offlines)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l1_names_map = {\n", + " \"Single/Double/Triple Lepton (electron, muon) seeds\":\n", + " {\"L1_SingleTkMu\": [\"Single tkMuon\", r\"$|\\eta|<2.4$\", \"95\"],\n", + " \"L1_DoubleTkMu\": [\"Double tkMuon\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$\", \"95\"],\n", + "# \"L1_DoubleTkMu9_SQ\": [\"\\color{black}Double TkMuon 9 SQ\", r\"$|\\eta|<2.4$\", \"?\"], \n", + " \"L1_SingleTkEle\": [\"Single tkElectron\", r\"$|\\eta|<2.4$\", \"93\"],\n", + " \"L1_SingleTkEleIso\": [\"Single tkIsoElectron\", r\"$|\\eta|<2.4$\", \"93\"],\n", + " \"L1_TkEleIso_EG\": [\"TkIsoElectron-StaEG\", r\"$|\\eta|<2.4$\", \"93,99\"],\n", + " \"L1_DoubleTkEle\": [\"Double tkElectron\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$\", \"93\"],\n", + " \"L1_SingleEGEle\": [\"Single StaEG\", r\"$|\\eta|<2.4$\", \"99\"],\n", + " \"L1_DoubleEGEle\": [\"Double StaEG\", r\"$|\\eta|<2.4$\", \"99\"],},\n", + " \n", + " \"Photon seeds\":\n", + " {\"L1_SingleTkPhoIso\": [\"Single TkIsoPhoton\", r\"$|\\eta|<2.4$\", \"97\"],\n", + " \"L1_DoubleTkPhoIso\": [\"Double TkIsoPhoton\", r\"$|\\eta|<2.4$\", \"97\"],},\n", + " \n", + " \"Tau seeds\":\n", + " {\"L1_SinglePFTau\": [\"Single CaloTau\", r\"$|\\eta|<2.172$\", \"99\"],\n", + " \"L1_PFTau_PFTau\": [\"Double CaloTau\", r\"$|\\eta|<2.172$, ${\\Delta}R >0.5$\", \"99\"],\n", + " \"L1_PFIsoTau_PFIsoTau\": [\"Double PuppiTau\", r\"$|\\eta|<2.172$, ${\\Delta}R >0.5$, $\\text{LooseNN} > 0$\", \"90\"],},\n", + " \n", + " r\"Hadronic seeds (jets,\\HT)\":\n", + " {\"L1_SinglePfJet\": [\"Single PuppiJet\", r\"$|\\eta|<2.4$\", \"100\"],\n", + " \"L1_DoublePFJet_dEtaMax\": [\"Double PuppiJet\", r\"$|\\eta|<2.4$, ${\\Delta}\\eta <1.6$\", \"100\"],\n", + " \"L1_PFHTT\": [\"Puppi\\HT\", r\"jets: $|\\eta|<2.4$, $\\pt >30$\", \"100\"],\n", + " \"L1_PFMHTT\": [r\"Puppi$\\slashed{\\ensuremath{H}}_{\\mathrm{T}}$\", r\"jets: $|\\eta|<2.4$, $\\pt >30$\", \"100\"],\n", + " \"L1_PFHTT_QuadJet\": [\"QuadPuppiJets-Puppi\\HT(**)\", r\"jets: $|\\eta|<2.4$, $\\pt >25$\", \"100,100\"],},\n", + "\n", + " r\"\\ETmiss seeds\":\n", + " {\"L1_PFMet\": [r\"PuppiE_{T}^{miss}\", \"\", \"100\"],},\n", + " \n", + " \"Cross Lepton seeds\":\n", + " {\"L1_TkMu_TkEleIso\": [\"TkMuon-TkIsoElectron\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$\", \"95,93\"],\n", + " \"L1_TkMu_TkEle\": [\"TkMuon-TkElectron\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$\", \"95,93\"],\n", + " \"L1_TkEle_TkMu\": [\"\\color{black}TkElectron-TkMuon\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$\", \"93,95\"],\n", + " \"L1_TripleTkMu\": [\"Triple TkMuon\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$, Qual $>$ 0\", \"95\"],\n", + " \"L1_TkMu_DoubleTkEle\": [\"TkMuon-DoubleTkElectron\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$\", \"95,93\"],\n", + " \"L1_DoubleTkMu_TkEle\": [\"DoubleTkMuon-TkElectron\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$, Qual $>$ 0\", \"95,93\"],\n", + " \"L1_PFIsoTau_TkMu\": [\"PuppiTau-TkMuon\", r\" $|\\eta|<2.172$, $|\\eta|<2.1$, ${\\Delta}z <1$, $\\text{LooseNN} > 0$\", \"90,95\"],\n", + " \"L1_TkEleIso_PFIsoTau\": [\"TkIsoElectron-PuppiTau\", r\"$|\\eta|<2.172$, $|\\eta|<2.1$, ${\\Delta}z <1$, $\\text{LooseNN} > 0$\", \"93,90\"],},\n", + " \n", + " \"Cross Hadronic-Lepton seeds\":\n", + " {\"L1_TkMu_PfHTT\": [r\"TkMuon-Puppi\\HT\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$\", \"95,100\"],\n", + " \"L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax\": [\"TkMuon-TriplePuppiJet\", r\"$|\\eta|<2.4$, ${\\Delta}R_{j1\\mu}<0.4$,${\\Delta}\\eta_{j2j3}<1.6$, ${\\Delta}z <1$\", \"95,100\"],\n", + " \"L1_DoubleTkEle_PFHTT\": [\"DoubleTkElectron-Puppi\\HT\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$\", \"93,100\"],\n", + " \"L1_DoubleTkMu_PfHTT\": [\"DoubleTkMuon-Puppi\\HT\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$, Qual $>$ 0\", \"93,100\"],\n", + " \"L1_DoubleTkMu_PfJet_PfMet\": [\"DoubleTkMuon-PuppiJet-PuppiETmiss\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$, Qual $>$ 0\", \"95,100,100\"],\n", + " \"L1_TkEleIso_PFHTT\": [\"TkIsoElectron-Puppi\\HT\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$, $\\text{LooseNN} > 0$\", \"93,100\"],\n", + " \"L1_TkEle_PFJet_dRMin\": [\"TkElectron-PuppiJet (**)\", r\"$|\\eta|<2.1$, $|\\eta|<2.4$, ${\\Delta}R>0.3$, ${\\Delta}z <1$\", \"93,100\"],\n", + " \"L1_PFIsoTau_PFMet\": [\"PuppiTau-PuppiE_{T}^{miss}\", r\"$|\\eta|<2.172$, $\\text{LooseNN} > 0$\", \"90,100\"],\n", + " \"L1_TkMu_PfJet_PfMet\": [\"TkMuon-PuppiJet-PuppiETmiss\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$, Qual $>$ 0\", \"95,100,100\"],},\n", + " \n", + " \"VBF seeds\":\n", + " {\"L1_DoublePFJet_MassMin\": [\"Double PuppiJets (**)\", r\"$|\\eta|<5$, $m_{jj}>620$\", \"100\"]},\n", + " \n", + " \"BPH seeds\": {\n", + " \"L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4\": [\"\\color{black}Double TkMuon\", r\"$|\\eta|<1.5$, ${\\Delta}z <1$, ${\\Delta}R <1.4$, $q_1\\times q_2 <0$\", \"95\"],\n", + " \"L1_DoubleTkMu4_SQ_OS_dR_Max1p2\": [\"\\color{black}Double TkMuon\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$, ${\\Delta}R <1.5$, $q_1\\times q_2 <0$, Qual $>$ 0\", \"95\"],\n", + " \"L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18\": [\"\\color{black}Double TkMuon\", r\"$|\\eta|<2.0$, ${\\Delta}z <1$, $7 < m <18$, $q_1\\times q_2 <0$, Qual $>$ 0\", \"95\"],\n", + " \"L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9\": [\"Triple TkMuon\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$, $0< m <9$, $q_1\\times q_2 <0$, Qual $>$ 0\", \"95\"],\n", + " \"L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17\": [\"Triple TkMuon\", r\"$|\\eta|<2.4$, ${\\Delta}z <1$,$5 $ 0\", \"95\"],\n", + " },\n", + " \n", + " \"Step2 seeds\":{\n", + " \"L1_PFHTT_QuadJet_BTagNNScore\": [\"QuadPuppiJets-Puppi\\HT\", r\"$|\\eta|<2.4$, Tot. b-tag score $>$ 2.2\", \"95\"],\n", + " \"L1_SinglePfJet8\": [\"Single Ak8 PuppiJet\", r\"$|\\eta|<2.4$\", \"100\"],\n", + " \"L1_DoublePFJet8_dEtaMax\": [\"Double Ak8 PuppiJet\", r\"$|\\eta|<2.4$, ${\\Delta}\\eta_{j1j2}<1.6$\", \"100\"], \n", + " \n", + " \"L1_SingleDispMu\": [\"Single Displaced Muon\", r\"$|\\eta|<2.0$, Qual $\\geq$ 15\", \"99\"],\n", + " \"L1_DoubleDispMu\": [\"Single Displaced Muon\", r\"$|\\eta|<2.4$\", \"99\"],\n", + " \n", + " \"L1_W3pi_GTT\": [\"Track Triplet for W3Pi\", \"\", \"100\"],\n", + " }\n", + "\n", + " }" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "tot_rate = int(df[df.seed=='Total'].rate)\n", + "tot_rate_30pc = int(1.3*tot_rate)\n", + "my_rates = []\n", + "# print('L1 Trigger seeds & Offline Threshold(s) at 90\\% or 95\\% [GeV] & Online Threshold(s) (Barrel) [kHz] & Rate [kHz] \\\\\\\\')\n", + "for seed in l1_names_map:\n", + " print(f\"\\\\hline \\\\multicolumn{{5}}{{|l|}}{{{seed}}} \\\\\\\\\")\n", + " for obj in l1_names_map[seed]:\n", + " if obj not in l1_thresholds.keys(): continue\n", + " print(f\"\\\\hline {l1_names_map[seed][obj][0]}\", end = \" & \") #obj.replace('_', '\\_'), end=\" & \")\n", + " print(*l1_thresholds[obj][1], end= \" & \", sep = \",\")\n", + "# if \"0.0\" in l1_thresholds[obj][0]:\n", + "# print(\"--\", sep=\",\", end = \" & \")\n", + "# else:\n", + "# print(*l1_thresholds[obj][0], sep=\",\", end = \" & \")\n", + " print(int(rates[obj]), end = \" & \")\n", + " my_rates.append(rates[obj])\n", + " print(l1_names_map[seed][obj][1], end = \" & \")\n", + " print(l1_names_map[seed][obj][2], end = '\\\\\\\\\\n')\n", + " print(\"\\\\hline\")\n", + "\n", + "print(\"\\\\hline\")\n", + "print(f\"\\multicolumn{{3}}{{|l}}{{Rate for above Trigger seeds}} & \\\\multicolumn{{2}}{{r|}}{{{{\\color{{black}}{tot_rate}}}}}\\\\\\\\\")\n", + "print(\"\\\\hline\")\n", + "print(f\"\\multicolumn{{3}}{{|l}}{{\\\\bf Total \\\\Lone Menu Rate (+30\\\\%)}} & \\\\multicolumn{{2}}{{r|}}{{{{\\color{{black}}{tot_rate_30pc}}}}}\\\\\\\\\")\n", + "print(\"\\\\hline\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/menu_tools/rate_table/Pure_rate.ipynb b/menu_tools/rate_table/Pure_rate.ipynb new file mode 100644 index 00000000..afafea9f --- /dev/null +++ b/menu_tools/rate_table/Pure_rate.ipynb @@ -0,0 +1,362 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "1b8a651b", + "metadata": {}, + "outputs": [], + "source": [ + "# import argparse \n", + "import os, sys \n", + "\n", + "import awkward as ak\n", + " \n", + "import matplotlib.pyplot as plt \n", + "import mplhep as hep \n", + "plt.style.use(hep.style.CMS)\n", + "\n", + "from matplotlib.colors import LogNorm\n", + "\n", + "# import uproot\n", + "\n", + "import numpy as np \n", + "import pandas as pd\n", + " \n", + "from glob import glob" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "67769805", + "metadata": {}, + "outputs": [], + "source": [ + "plt.rcParams['figure.facecolor'] = \"white\"" + ] + }, + { + "cell_type": "markdown", + "id": "582d9747", + "metadata": {}, + "source": [ + "# compare masks" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5e91706a", + "metadata": {}, + "outputs": [], + "source": [ + "! ls /eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano_DT12x/rate_tables/*.parquet" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "92cb4a57", + "metadata": {}, + "outputs": [], + "source": [ + "# fname = \"~/cernbox/SWAN_projects/L1T-Ph2-Menu/rates/menu/outputs/new_fwk_rates/V29_fromCache_Full_wBtag/rates_full_wBtag_V29_masks.parquet\"\n", + "# fname = \"/eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano/rate_tables/rates_full_Final_V38nano_masks.parquet\"\n", + "#fname = \"/eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano_DT12x/rate_tables/menu_Step1_tkMuVLoose_V38nano_DT12x_masks.parquet\"\n", + "# fname = \"/eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano_DT12x/rate_tables/menu_Step1_V38nano_DT12x_masks.parquet\"\n", + "fname = \"/eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano_DT12x/rate_tables/rates_Step1and2_V38nano_DT12x_masks.parquet\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4e522641", + "metadata": {}, + "outputs": [], + "source": [ + "new_masks = ak.from_parquet(fname)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "44712c41", + "metadata": {}, + "outputs": [], + "source": [ + "new_masks" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f7a10a4c", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "# new fwk\n", + "df_masks = ak.to_dataframe(new_masks)" + ] + }, + { + "cell_type": "markdown", + "id": "048a9bc0", + "metadata": {}, + "source": [ + "### Pure" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f3d1bfee", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "test_seed = \"L1_DoublePFJet_dEtaMax\"\n", + "\n", + "or_all_excl_seed = False\n", + "\n", + "for seed in new_masks.fields:\n", + " if seed == test_seed: continue\n", + " \n", + " or_all_excl_seed = or_all_excl_seed | new_masks[seed]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a725d02a", + "metadata": {}, + "outputs": [], + "source": [ + "np.sum((or_all_excl_seed==False) & new_masks[seed])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "005dd97c", + "metadata": {}, + "outputs": [], + "source": [ + "np.sum(new_masks[seed])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6ad6c26a", + "metadata": {}, + "outputs": [], + "source": [ + "np.sum(or_all_excl_seed)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "058c7b0d", + "metadata": {}, + "outputs": [], + "source": [ + "df_masks[seed].sum()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "89bf081b", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "\n", + "counts = {}\n", + "\n", + "for seed in df_masks.columns:\n", + " counts[seed] = {\n", + " \"total\": df_masks[seed].sum(), \n", + " \"pure\" : ((df_masks[seed]==True)&~(df_masks.drop(seed, axis=1).any(axis=1))).sum()}\n", + "\n", + "df_counts = pd.DataFrame(counts).T" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a5c409f4", + "metadata": {}, + "outputs": [], + "source": [ + "df_counts.sort_values(\"total\", ascending=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7ced193f", + "metadata": {}, + "outputs": [], + "source": [ + "df_counts.sort_values(\"total\", ascending=False).plot.barh(figsize = (10,20))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7140bb52", + "metadata": {}, + "outputs": [], + "source": [ + "ax = df_counts.sort_values(\"total\", ascending=False).plot.barh(figsize = (10,20))\n", + "ax.set_xscale(\"log\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0f9727ac", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "21738288", + "metadata": {}, + "outputs": [], + "source": [ + "sel = df_counts.index.str.contains(\"Mu\")\n", + "df_counts[sel].sort_values(\"total\", ascending=False).plot.barh(figsize = (10,10))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b444b84a", + "metadata": {}, + "outputs": [], + "source": [ + "# df_counts" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ec1e086e", + "metadata": {}, + "outputs": [], + "source": [ + "f,axs = plt.subplots(1,3,figsize = (20,16), sharey = True)\n", + "# hep.cms.label(ax=axs[0], llabel=\"Phase-2 Simulation\", rlabel = \"14 TeV\")\n", + "# hep.cms.label(ax=axs[0], llabel=\"Phase-2 Simulation\")\n", + "# hep.cms.label(ax=axs[2], label = \"14 TeV\")\n", + "\n", + "ax1,ax2,ax3 = axs\n", + "rate_fact = 11.2*2700/len(df_masks)\n", + "df = df_counts.sort_values(\"pure\")*rate_fact\n", + "df.plot(kind = \"barh\", ax = ax1)\n", + "df.plot(kind = \"barh\", ax = ax2)\n", + "\n", + "ax1.set_xlabel(\"L1 Rate [kHz]\")\n", + "ax1.grid()\n", + "\n", + "ax2.set_xscale(\"log\")\n", + "ax2.set_xlabel(\"L1 Rate [kHz]\")\n", + "ax2.grid()\n", + "\n", + "# pure/total\n", + "(df.pure/df.total).plot(kind = \"barh\", ax = ax3, legend = False, color = \"C2\")\n", + "\n", + "# ax3.set_xscale(\"log\")\n", + "ax3.set_xlabel(\"Pure/Total\")\n", + "ax3.grid()\n", + "\n", + "\n", + "plt.subplots_adjust(wspace=0, hspace=0)\n", + "\n", + "plt.tight_layout()\n", + "\n", + "for ext in [\".png\",\".pdf\"]:\n", + " outfname = fname.replace(\".parquet\",f\"_pureRates{ext}\")\n", + " plt.savefig(outfname)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0409d04f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b4b8bb96", + "metadata": {}, + "outputs": [], + "source": [ + "outfname" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "36a75bd5", + "metadata": {}, + "outputs": [], + "source": [ + "! ls /eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano_DT12x/rate_tables/menu_Step1_V38nano_DT12x_masks_pureRates.png" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4e4b3c97", + "metadata": {}, + "outputs": [], + "source": [ + "! readlink -f /eos/home-a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V38nano_DT12x/rate_tables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d9ddb8fe", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "@webio": { + "lastCommId": null, + "lastKernelId": null + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/menu_tools/rate_table/__init__.py b/menu_tools/rate_table/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/menu_tools/rate_table/menu_config.py b/menu_tools/rate_table/menu_config.py new file mode 100644 index 00000000..b535763a --- /dev/null +++ b/menu_tools/rate_table/menu_config.py @@ -0,0 +1,29 @@ +import os + + +class MenuConfig: + def __init__(self, config: dict) -> None: + self._config = config + + @property + def sample(self) -> str: + return self._config["sample"] + + @property + def menu_config(self) -> str: + return self._config["menu_config"] + + @property + def version(self) -> str: + return self._config["version"] + + @property + def table_outdir(self) -> str: + return os.path.join("outputs", self.version, "rate_tables") + + @property + def table_fname(self) -> str: + try: + return self._config["table_fname"] + except KeyError: + return f"{self.version}_rate_table" diff --git a/menu_tools/rate_table/menu_table.py b/menu_tools/rate_table/menu_table.py new file mode 100644 index 00000000..69ca42ac --- /dev/null +++ b/menu_tools/rate_table/menu_table.py @@ -0,0 +1,433 @@ +from itertools import combinations +import os +from typing import Optional, Union +import re +import warnings +import yaml + +from tqdm import tqdm + +import awkward as ak + +import numpy as np +import pandas as pd +import vector + +from menu_tools.rate_table.menu_config import MenuConfig +from menu_tools.utils import constants +from menu_tools.utils import objects +from menu_tools.utils import scalings + + +vector.register_awkward() + + +class MenuTable: + """ + Base class that defines the rates table. + This class contains method to read the minbias sample, + convert online to offline pT, and compute the trigger rates. + All the relevant information is dumped to a csv table. + """ + + def __init__(self, config: dict): + self.config: MenuConfig = MenuConfig(config) + self.arr_cache: dict = {} + self.table: Optional[list[dict[str, Union[str, float]]]] = None + self._trigger_seeds: Optional[dict] = None + self._seed_masks: dict[str, np.ndarray] = {} + self._prepare_masks() + + @property + def trigger_seeds(self) -> dict: + """Loads the menu definition. + + Loads the yaml file referenced in the config, + containing the definition of the L1 seeds. + + Returns: + menu_seeds: dict of + """ + # Only load seed table once + if self._trigger_seeds is not None: + return self._trigger_seeds + + with open(self.config.menu_config, "r") as f: + menu_seeds = yaml.safe_load(f) + + self._trigger_seeds = menu_seeds + + return menu_seeds + + def _transform_key(self, raw_key: str, obj: objects.Object) -> str: + """Maps to . + + Returns: + key: string of with the l1 object name prefix removed, qual + transformed to quality + """ + if raw_key.startswith("L1"): + key = raw_key.removeprefix(obj.nano_obj_name + "_") + else: + key = raw_key.removeprefix(obj.nano_obj_name).lower() + + if "qual" in key: + return "quality" + return key + + def _load_cached_arrays(self, object_name: str) -> ak.Array: + """Loads array for specified object/version combination + from the cached parquet file. + + object_name: :: combination defining a `utils.Object` + object. + + Returns: + arr: Array of cached `object_name` object from sample specified in + config + """ + obj = objects.Object(object_name, self.config.version) + fpath = os.path.join( + "cache", + self.config.version, + f"{self.config.version}_{self.config.sample}_{obj.nano_obj_name}.parquet", + ) + + arr = ak.from_parquet(fpath) + # if fpath not in self.arr_cache: + # print("Loading from parquet") + # arr = ak.from_parquet(fpath) + # print(f"adding to cache: {fpath}") + # self.arr_cache[fpath] = arr + # else: + # print("Loading from cache") + # arr = self.arr_cache[fpath] + + # Remove object name prefix from array fields + arr = ak.zip({self._transform_key(var, obj): arr[var] for var in arr.fields}) + + # Apply scalings, except for PV variable, which has no scalings + if ( + ("PV" not in object_name) + and ("disp" not in object_name.lower()) + and ("TrackTripletWord" not in object_name) + and ("ExtTrackHT" not in object_name) + ): + print("adding scalings") + arr = scalings.add_offline_pt(arr, obj) + + if "idx" not in arr.fields: + arr["idx"] = ak.local_index(arr) + + # When loading sums (MET, HT, etc.) transfrom the array structure to + # mimic that of "normal" objects which have lists at the event level + # instead of a single number. + if isinstance(arr[0], ak.highlevel.Record): + arr = ak.zip({field: [[k] for k in arr[field]] for field in arr.fields}) + + if "eta" in arr.fields: + arr = ak.with_name(arr, "Momentum4D") + + print("done loading") + return arr + + def get_legs_arrays_for_seed( + self, seed_legs: dict[str, dict[str, str]] + ) -> dict[str, ak.Array]: + """Parses the config file (menu definition) + to get the cuts to be used for the definition of each trigger leg + and the L1 object used. + The function returns the awkard array after the application of the cuts. + + seed_legs: dict of dicts with the keys `obj` and `leg_mask` defining leg of + a seed. + + Returns: + masked_object_arrays: Array of object the leg is defined on with + the mask defined by the `leg_mask` value applied. + """ + raw_object_arrays = {} + masked_object_arrays = {} + + for leg_key, leg in seed_legs.items(): + # Load object array if not already loeaded + if leg["obj"] not in raw_object_arrays: + print("Loading ", leg["obj"]) + + if leg["obj"] not in self.arr_cache: + print(f"Caching {leg['obj']}") + self.arr_cache[leg["obj"]] = self._load_cached_arrays(leg["obj"]) + else: + print(f"Using cached {leg['obj']}") + # raw_object_arrays[leg["obj"]] = self._load_cached_arrays(leg["obj"]) + raw_object_arrays[leg["obj"]] = self.arr_cache[leg["obj"]] + + # Prepare object ID mask + obj = objects.Object(leg["obj"], self.config.version) + obj_mask = objects.compute_selection_mask_for_object_cuts( + obj, raw_object_arrays[leg["obj"]] + ) + + leg_mask = obj_mask + leg_array = raw_object_arrays[leg["obj"]] + if leg["threshold_cut"] is not None: + # Substitute + if re.match(r"leg\d", leg["threshold_cut"]): + leg_mask_str = re.sub( + r"(leg\d)", r"leg_array", leg["threshold_cut"] + ) + else: + leg_mask_str = re.sub( + r"([a-zA-Z_]+ )", r"leg_array.\1", leg["threshold_cut"] + ) + threshold_mask = eval(leg_mask_str) + leg_mask = threshold_mask & obj_mask + + ## apply mask if regular (non-jagged) array, e.g. MET/HT etc + if "var" in str(leg_array.type): + masked_object_arrays[leg_key] = leg_array[leg_mask] + else: + masked_object_arrays[leg_key] = ak.mask(leg_array, leg_mask) + + return masked_object_arrays + + def get_combined_legs(self, leg_arrs: dict[str, ak.Array], seed_legs) -> ak.Array: + """ + For multi-leg triggers, this function creates the combination of the legs. + After the trigger legs are combined, the resulting array corresponding to the + AND of all the conditions on each leg is returned. + """ + combined_arrays = ak.cartesian(leg_arrs) + + # duplicate handling (exclude combinations) + # first check whether objects are repeating + objs = [o["obj"] for o in seed_legs.values()] + seed_has_one_leg_per_object = all([objs.count(o) <= 1 for o in objs]) + + if seed_has_one_leg_per_object: + return combined_arrays + + masks_remove_duplicates = [] + for leg1, leg2 in combinations(leg_arrs, 2): + ## check that the legs are the same type object, skip otherwise + if seed_legs[leg1]["obj"] == seed_legs[leg2]["obj"]: + masks_remove_duplicates.append( + combined_arrays[leg1].idx != combined_arrays[leg2].idx + ) + + no_duplicates_mask = ak.from_numpy( + np.ones(len(combined_arrays), dtype=np.bool_) + ) + for i, mask in enumerate(masks_remove_duplicates): + no_duplicates_mask = no_duplicates_mask & mask + + combined_arrays = combined_arrays[no_duplicates_mask] + return combined_arrays + + def _filter_seed_legs(self, seed: str) -> dict: + """Skim all non-leg entries from the seed menu definition and return + as dict. + + Returns: + seed_legs: dict with all legs from `seed` menu definition + """ + seed_legs = { + leg_name: leg + for leg_name, leg in self.trigger_seeds[seed].items() + if re.match(r"leg\d", leg_name) + } + return seed_legs + + def _load_cross_seeds(self, seed_name: str) -> list: + """Loads the cross seeds + + seed: name of the trigger seed + + Returns: + cross_seeds: todo + """ + cross_seeds: list = [] + seeds = self.trigger_seeds[seed_name] + if "x_seeds" not in seeds: + return cross_seeds + + cross_seeds = seeds[seed_name]["x-seeds"] + assert isinstance(cross_seeds, list), "x-seeds value must be list!" + return cross_seeds + + def get_trigger_pass_mask(self, seed_name: str) -> ak.Array: + """Computes number of events passing the `seed`. + + After loading the minbias sample and the menu definition, + each leg is selected and the masks are applied + (together with cross-masks/seeds). + + Returns: + total_mask: boolean awkward array mask defining trigger `seed` + """ + print("==> ", seed_name) + total_mask = 1 + seed_legs = self._filter_seed_legs(seed_name) + legs_arrays = self.get_legs_arrays_for_seed(seed_legs) + combined_legs = self.get_combined_legs(legs_arrays, seed_legs) + + # Cut on the individual object thresholds + # if "var" in str(combined_legs.type): + total_mask = total_mask & (ak.num(combined_legs, axis=-1) > 0) + # else: + # raise RuntimeError("This part of the code needs some work!") + # # total_mask = total_mask & ~ak.is_none(_leg) + + ## add cross_conditions + cross_mask_strs: list = self.trigger_seeds[seed_name]["cross_masks"] + if len(cross_mask_strs) > 0: + eval_str = "(" + ") & (".join(cross_mask_strs) + ")" + eval_str = re.sub(r"(leg\d)", r"combined_legs['\1']", eval_str) + cross_mask = eval(f"ak.any({eval_str}, axis=1)") + total_mask = total_mask & cross_mask + + ## Add cross-seeds + cross_seeds = self._load_cross_seeds(seed_name) + for xseed in cross_seeds: + xseed_mask = self.get_trigger_pass_mask(self.trigger_seeds[xseed]) + total_mask = total_mask & xseed_mask + + total_mask = ak.fill_none(total_mask, False) + return total_mask + + def _prepare_masks(self) -> dict[str, np.ndarray]: + """Calls `get_trigger_pass_mask` for each object defined in the menu. + The function returns the masks for each object. + + Returns: + seed_masks: array contining masks all trigger seeds + """ + seed_masks: dict = {} + + for seed_name in tqdm(self.trigger_seeds): + mask = self.get_trigger_pass_mask(seed_name) + seed_masks[seed_name] = mask.to_numpy() + self._seed_masks = seed_masks + self.make_table() + self.print_table() + + # self.compute_tot_and_pure() + + return seed_masks + + def print_table(self) -> None: + """ + Prints the rate table to stdout. + """ + print("===============") + print("=====TABLE=====") + print("===============") + df_table = pd.DataFrame(self.table) + print(df_table) + + def compute_tot_and_pure(self) -> pd.DataFrame: + df_masks = ak.to_dataframe(self._seed_masks) + counts = {} + + for seed in df_masks.columns: + counts[seed] = { + "total": df_masks[seed].sum(), + "pure": ( + (df_masks[seed] == True) + & ~(df_masks.drop(seed, axis=1).any(axis=1)) + ).sum(), + } + + counts["total"] = { + "total": np.sum(np.any(df_masks, axis=1)), + "pure": 0, + } + + df_counts = pd.DataFrame(counts).T + df_counts.index.name = "seed" + + # ## ALTERNATIVE + ntot = len(df_masks[seed]) + df_counts["eff_total"] = df_counts["total"] / ntot + df_counts["eff_pure"] = df_counts["pure"] / ntot + + df_counts["rate_total"] = df_counts["eff_total"] * constants.RATE_NORM_FACTOR + df_counts["rate_pure"] = df_counts["eff_pure"] * constants.RATE_NORM_FACTOR + + print(df_counts) + out_file = os.path.join( + self.config.table_outdir, + f"{self.config.table_fname}_{self.config.version}_pd.csv", + ) + df_counts.to_csv(out_file) + + return df_counts + + def make_table(self) -> None: + """ + Function that prints to screen the rates table. + Returns a list containing the csv-compatible table. + """ + print("Making table") + + table: list[dict[str, Union[str, float]]] = [] + all_seeds_or_mask = ak.zeros_like(list(self._seed_masks.values())[0]) + + for seed, mask in self._seed_masks.items(): + # Compute seed values + npass = ak.sum(mask) + efficiency = npass / len(mask) + rate = efficiency * constants.RATE_NORM_FACTOR + table.append( + {"seed": seed, "npass": npass, "efficiency": efficiency, "rate": rate} + ) + # Modify total mask + all_seeds_or_mask = all_seeds_or_mask | mask + + ## Total OR of all seeds + npass = np.sum(all_seeds_or_mask) + efficiency = npass / len(all_seeds_or_mask) + rate = efficiency * constants.RATE_NORM_FACTOR + table.append( + {"seed": "Total", "npass": npass, "efficiency": efficiency, "rate": rate} + ) + table.append( + { + "seed": "Total Event Number", + "npass": len(all_seeds_or_mask), + "efficiency": np.nan, + "rate": np.nan, + } + ) + self.table = table + + def dump_masks(self) -> None: + """ + Dumps the masks produced by `_prepare_masks` to parquet file. + """ + os.makedirs(self.config.table_outdir, exist_ok=True) + out_path = os.path.join( + self.config.table_outdir, + f"{self.config.table_fname}_{self.config.version}_masks.parquet", + ) + print(f"Dumping masks of seeds to `{out_path}`") + ak.to_parquet(ak.zip(self._seed_masks), out_path) + + def save_table(self) -> None: + """Function that saves to file the table produced by `make_table`.""" + if self.table is None: + warnings.warn("Table was not computed yet. Run `make_table` first.") + return + + os.makedirs(self.config.table_outdir, exist_ok=True) + out_file = os.path.join( + self.config.table_outdir, + f"{self.config.table_fname}_{self.config.version}.csv", + ) + with open(out_file, "w") as f: + f.write(",".join(self.table[0]) + "\n") + for seed in self.table: + f.write(f"{seed['seed']},") + f.write(f"{seed['npass']},") + f.write(f"{seed['efficiency']},") + f.write(f"{seed['rate']}\n") diff --git a/menu_tools/rate_table/rate_table.py b/menu_tools/rate_table/rate_table.py new file mode 100755 index 00000000..b0449573 --- /dev/null +++ b/menu_tools/rate_table/rate_table.py @@ -0,0 +1,29 @@ +import argparse +import yaml + +from menu_tools.rate_table.menu_table import MenuTable + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + "config_file", + help="Path to the menu config file, e.g. `configs/V29/rate_table/v29_cfg.yml`", + default="configs/V38nano/rate_table/v38_cfg.yml", + ) + args = parser.parse_args() + + with open(args.config_file, "r") as f: + menu_config_dict = yaml.safe_load(f) + + menu_table = MenuTable(menu_config_dict) + menu_table.make_table() + menu_table.print_table() + menu_table.save_table() + menu_table.dump_masks() + + # menu_table.compute_tot_and_pure() + + +if __name__ == "__main__": + main() diff --git a/menu_tools/rate_table/utils.py b/menu_tools/rate_table/utils.py new file mode 100644 index 00000000..4ffaf270 --- /dev/null +++ b/menu_tools/rate_table/utils.py @@ -0,0 +1,75 @@ +import numpy as np + + +def dr(leg1, leg2): + return leg1.deltaR(leg2) + + +def deltar(eta1, eta2, phi1, phi2): + return np.sqrt( + np.power(abs(eta1 - eta2), 2) + + np.power( + abs(phi1 - phi2) + if abs(phi1 - phi2) <= np.pi + else 2 * np.pi - abs(phi1 - phi2), + 2, + ) + ) + + +def notmatched(eta1, eta2, phi1, phi2): + return deltar(eta1, eta2, phi1, phi2) > 0.1 + + +def pairinvmass(pt1, pt2, eta1, eta2, phi1, phi2): + return np.sqrt(2.0 * pt1 * pt2 * (np.cosh(eta1 - eta2) - np.cos(phi1 - phi2))) + + +def phoid(EleID, PhoID, Eta): + return (EleID * (abs(Eta) < 1.5)) + (PhoID * (abs(Eta) >= 1.5)) + + +def egid(EleID, SaID, Eta): + return (EleID * (abs(Eta) < 1.5)) + (SaID * (abs(Eta) >= 1.5)) + + +def TkEleQualHIGH(Et, Eta, PassesEleID): + return PassesEleID + + +def TkEleQualLOW(Et, Eta, PassesEleID): + return PassesEleID * (abs(Eta) < 1.479) + (abs(Eta) > 1.479) + + +def TkEleIsoQualHIGH(Et, Eta, PassesEleID): + return PassesEleID * (abs(Eta) > 1.479) + (abs(Eta) < 1.479) + + +def TkEleIsoQualLOW(Et, Eta, PassesEleID): + return ( + PassesEleID >= 0 + ) # this should be always true: we can remove this condition from the menu + + +def tkelequalhigh(et, eta, passeseleid): + return passeseleid + + +def tkelequallow(et, eta, passeseleid): + return passeseleid * (abs(eta) < 1.479) + (abs(eta) > 1.479) + + +def tkeleisoqualhigh(et, eta, passeseleid): + return passeseleid * (abs(eta) > 1.479) + (abs(eta) < 1.479) + + +def tkeleisoquallow(et, eta, passeseleid): + return ( + passeseleid >= 0 + ) # this should be always true: we can remove this condition from the menu + + +def rangecutless(x, eta, etaRange, cutInRange, cutOutRange): + return (x < cutInRange) * (abs(eta) < etaRange) + (x < cutOutRange) * ( + abs(eta) >= etaRange + ) diff --git a/menu_tools/utils/compare_json-wNano.ipynb b/menu_tools/utils/compare_json-wNano.ipynb new file mode 100644 index 00000000..418573f5 --- /dev/null +++ b/menu_tools/utils/compare_json-wNano.ipynb @@ -0,0 +1,1788 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "id": "d44d7c5e", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "import argparse \n", + "import os, sys\n", + "from glob import glob\n", + " \n", + "import matplotlib.pyplot as plt \n", + "f = plt.figure()\n", + "plt.close()\n", + "import mplhep as hep \n", + "plt.style.use(hep.style.CMS)\n", + "plt.rcParams['figure.facecolor'] = 'white'\n", + "\n", + "import numpy as np \n", + "import pandas as pd\n", + "import yaml \n", + "import json " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "8d2dcafd", + "metadata": {}, + "outputs": [], + "source": [ + "def load_json(fname):\n", + " with open(fname) as f:\n", + " plot = json.load(f)\n", + " return plot" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "b66a8e5f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "0401ce63", + "metadata": {}, + "source": [ + "# Combined function for scalings and turnons" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a842c1df", + "metadata": {}, + "outputs": [], + "source": [ + "def remap_nano_key(key):\n", + " if \"StaMu\" in key: key = key.replace(\"StaMu\",\"gmtMuon\")\n", + "\n", + "# print(\"before\", key)\n", + "\n", + " if \"L1puppiJetSC4sums:HT\" in key:\n", + " key = key.replace(\"L1puppiJetSC4sums:HT\",\"seededConePuppiHT:default\")\n", + " if \"L1puppiJetSC4sums:MHT\" in key:\n", + " key = key.replace(\"L1puppiJetSC4sums:MHT\",\"seededConePuppiMHT:default\")\n", + " \n", + " if \"nnPuppiTau\" in key:\n", + " key = key.replace(\"nnPuppiTau\",\"nnTau\")\n", + " \n", + " if \"L1puppiHistoJetSums:HT\" in key:\n", + " key = key.replace(\"L1puppiHistoJetSums:HT\",\"phase1PuppiHT:default\")\n", + " if \"L1puppiHistoJetSums:MHT\" in key:\n", + " key = key.replace(\"L1puppiHistoJetSums:MHT\",\"phase1PuppiMHT:default\")\n", + "\n", + " if \"L1TrackHT:HT\" in key:\n", + " key = key.replace(\"L1TrackHT:HT\",\"trackerHT:default\")\n", + " if \"L1TrackHT:MHT\" in key:\n", + " key = key.replace(\"L1TrackHT:MHT\",\"trackerMHT:default\")\n", + " if \"L1TrackMET\" in key:\n", + " key = key.replace(\"L1TrackMET\",\"trackerMET\")\n", + " if \"L1TrackJet\" in key:\n", + " key = key.replace(\"L1TrackJet\",\"trackerJet\")\n", + " \n", + " if \"puppiJetHisto\" in key: key = key.replace(\"puppiJetHisto\",\"phase1PuppiJet\")\n", + " if \"puppiJetSC4\" in key: key = key.replace(\"puppiJetSC4\",\"seededConePuppiJet\") \n", + "# if \"L1caloJet\" in key: key = key.replace(\"puppiJetHisto\",\"phase1PuppiJet\")\n", + "\n", + " key = key.replace(\"L1\",\"\")\n", + "# print(\"after\", key)\n", + "\n", + " return key\n", + "\n", + "def comp_plots(nano_plot,menu_plot, sfxs = [\"v22\",\"v27\"], ptype = \"turnon\",\n", + " lss = [\"-\",\"--\"], keys = None, markers = [\"o\",\"s\"]):\n", + " \n", + " fig, axs = plt.subplots(2,1,figsize=(10, 12),\n", + " sharex = True,\n", + " gridspec_kw={'height_ratios': [3, 1]}) \n", + " hep.cms.label(ax=axs[0], llabel=\"Phase-2 Simulation\", rlabel = \"14 TeV\")\n", + "\n", + " if keys is None: keys = nano_plot.keys()\n", + " # clean keys\n", + " clean_keys = []\n", + " for key in keys:\n", + " if key in ['xlabel', 'ylabel', 'watermark']: \n", + " continue\n", + " if key not in nano_plot.keys():\n", + " print(f\"Warning: {key} not in plot 1 keys. Skipping...\")\n", + " continue\n", + " if remap_nano_key(key) not in menu_plot.keys():\n", + " print(menu_plot.keys())\n", + " print(f\"Warning: {key} not in plot 2 keys. Skipping...\")\n", + " continue\n", + " clean_keys.append(key)\n", + " \n", + "# if ptype == \"rate\":\n", + "# xval_str = \"x_values\"\n", + "# yval_str = \"y_values\"\n", + "# else:\n", + "# xval_str = \"xvals\"\n", + "# yval_str = \"yvals\"\n", + " \n", + " \n", + " for j,key in enumerate(clean_keys):\n", + " ## plot 1\n", + " plots = [nano_plot[key],menu_plot[remap_nano_key(key)]]\n", + " color = f\"C{j}\"\n", + "\n", + " for i,p1 in enumerate(plots):\n", + " sfx = sfxs[i]\n", + " label = f\"{sfx}, {p1['label']}\"\n", + "\n", + " if ptype == \"scalings\":\n", + " axs[0].plot(p1[\"xvals\"],p1[\"yvals\"], color = color, marker = markers[i],\n", + " label = label, ls = lss[i], mfc=\"none\" if i == 1 else color)\n", + " elif ptype == \"rate\":\n", + " axs[0].plot(p1[\"x_values\"],p1[\"y_values\"], color = color, marker = markers[i],\n", + " label = label, ls = lss[i], mfc=\"none\" if i == 1 else color)\n", + " elif ptype == \"turnon\":\n", + " p1[\"err_kwargs\"][\"marker\"] = markers[i]\n", + " p1[\"err_kwargs\"][\"xerr\"] = None\n", + "\n", + " axs[0].errorbar(p1[\"xbins\"],p1[\"efficiency\"], yerr = p1[\"efficiency_err\"], \n", + " label = label, ls = lss[i], color = color, mfc=\"none\" if i == 1 else color,\n", + " **(p1[\"err_kwargs\"])\n", + " )\n", + " \n", + " ## Make ratios\n", + " if ptype == \"scalings\":\n", + " d_p1 = dict(zip(plots[0][\"xvals\"],plots[0][\"yvals\"]))\n", + " d_p2 = dict(zip(plots[1][\"xvals\"],plots[1][\"yvals\"]))\n", + " elif ptype == \"rate\":\n", + " d_p1 = dict(zip(plots[0][\"x_values\"],plots[0][\"y_values\"]))\n", + " d_p2 = dict(zip(plots[1][\"x_values\"],plots[1][\"y_values\"]))\n", + " elif ptype == \"turnon\":\n", + " d_p1 = dict(zip(plots[0][\"xbins\"],plots[0][\"efficiency\"]))\n", + " d_p2 = dict(zip(plots[1][\"xbins\"],plots[1][\"efficiency\"]))\n", + " \n", + " # add 100% eff line\n", + "# axs[0].axhline(1,ls = \":\", alpha = 0.5, c = \"k\")\n", + " \n", + " df_p1 = pd.Series(d_p1)\n", + " df_p2 = pd.Series(d_p2)\n", + " \n", + "# ax = axs[1]\n", + "\n", + " if (df_p1.sum()!=0) and (df_p1.sum()!=0):\n", + "\n", + " diff = (df_p1 - df_p2) \n", + " if ptype == \"rate\":\n", + " diff /= df_p2\n", + " label = p1[\"label\"].split(\",\")[0]\n", + " \n", + " diff.plot(ax = axs[1], color = color, label = label)#, marker = \".\", color = color)\n", + "# axs[1].errorbar(p1[\"xbins\"],df_p1 - df_p2,\n", + "# yerr = np.hypot(plots[0][\"efficiency_err\"], plots[1][\"efficiency_err\"]),\n", + "# label = label, marker = \".\", color = color\n", + "# # label = label, ls = lss[i], color = color, mfc=\"none\" if i == 1 else color,\n", + "# # **(p1[\"err_kwargs\"])\n", + "# )\n", + " if ptype == \"turnon\":\n", + " if len(plots[0][\"efficiency_err\"][0]) != len(plots[1][\"efficiency_err\"][0]): continue\n", + " y_err = np.hypot(plots[0][\"efficiency_err\"][0], plots[1][\"efficiency_err\"][0])\n", + " if len(diff) != len(y_err): continue\n", + " axs[1].fill_between(diff.index,diff.values - y_err,diff.values + y_err,\n", + " # label = label, \n", + " alpha = 0.3, \n", + " color = color\n", + " )\n", + " \n", + " # make axis stuff\n", + " axs[0].legend(fontsize = \"x-small\")\n", + " axs[1].legend(fontsize = \"x-small\")\n", + " \n", + " if ptype == \"rate\":\n", + " axs[1].set_ylabel(f\"({sfxs[0]}-{sfxs[1]})/{sfxs[1]}\", fontsize = \"x-small\")\n", + " axs[0].set_yscale(\"log\")\n", + " axs[1].set_xlabel(\"Threshold [GeV]\")\n", + " axs[0].set_ylabel(\"Rate [kHz]\")\n", + " else:\n", + " axs[1].set_ylabel(f\"{sfxs[0]} - {sfxs[1]}\", fontsize = \"x-small\")\n", + " \n", + " if ptype == \"scalings\":\n", + " axs[0].set_ylabel(\"95 % Location [GeV]\")\n", + " axs[1].set_xlabel(\"L1 threshold [GeV]\")\n", + " elif ptype == \"turnon\":\n", + " axs[0].set_ylabel(nano_plot[\"ylabel\"], fontsize = \"small\")\n", + " axs[1].set_xlabel(nano_plot[\"xlabel\"])\n", + "\n", + " axs[1].set_ylim(-.1,.1)\n", + " \n", + " for ax in axs: ax.grid()\n", + " plt.tight_layout()\n", + " plt.subplots_adjust(wspace=0, hspace=0)\n", + "\n", + " return fig" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "6011aaf0", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "V33nano_Offline_JetDefaultRates.json\n", + "V31_Offline_JetDefaultRates.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V33nanovsV31/object_performance/rates/V33nanovsV31_Offline_JetDefaultRates.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V31/object_performance/rates/V31_Offline_JetSC8Rates.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V31/object_performance/rates/V31_Offline_JetSC8Rates_byRegion.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V31/object_performance/rates/V31_Offline_JetSC8Rates_byRegion2.json does not exist\n", + "V33nano_Offline_JetsByRegion.json\n", + "V31_Offline_JetsByRegion.json\n", + "dict_keys(['phase1PuppiJet:default:barrel', 'phase1PuppiJet:default:endcap', 'phase1PuppiJet:default:forward', 'seededConePuppiJet:default:barrel', 'seededConePuppiJet:default:endcap', 'seededConePuppiJet:default:forward', 'caloJet:default:barrel', 'caloJet:default:endcap', 'caloJet:default:forward'])\n", + "Warning: L1TrackJet:default:barrel not in plot 2 keys. Skipping...\n", + "dict_keys(['phase1PuppiJet:default:barrel', 'phase1PuppiJet:default:endcap', 'phase1PuppiJet:default:forward', 'seededConePuppiJet:default:barrel', 'seededConePuppiJet:default:endcap', 'seededConePuppiJet:default:forward', 'caloJet:default:barrel', 'caloJet:default:endcap', 'caloJet:default:forward'])\n", + "Warning: L1TrackJet:default:endcap not in plot 2 keys. Skipping...\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V33nanovsV31/object_performance/rates/V33nanovsV31_Offline_JetsByRegion.png\n", + "V33nano_Online_JetDefaultRates.json\n", + "V31_Online_JetDefaultRates.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V33nanovsV31/object_performance/rates/V33nanovsV31_Online_JetDefaultRates.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V31/object_performance/rates/V31_Online_JetExtendedRates.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V31/object_performance/rates/V31_Online_JetSC8Rates.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V31/object_performance/rates/V31_Online_JetSC8Rates_byRegion.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V31/object_performance/rates/V31_Online_JetSC8Rates_byRegion2.json does not exist\n", + "V33nano_Online_JetsByRegion.json\n", + "V31_Online_JetsByRegion.json\n", + "dict_keys(['phase1PuppiJet:default:barrel', 'phase1PuppiJet:default:endcap', 'seededConePuppiJet:default:barrel', 'seededConePuppiJet:default:endcap'])\n", + "Warning: L1puppiJetSC4:default:forward not in plot 2 keys. Skipping...\n", + "dict_keys(['phase1PuppiJet:default:barrel', 'phase1PuppiJet:default:endcap', 'seededConePuppiJet:default:barrel', 'seededConePuppiJet:default:endcap'])\n", + "Warning: L1caloJet:default:barrel not in plot 2 keys. Skipping...\n", + "dict_keys(['phase1PuppiJet:default:barrel', 'phase1PuppiJet:default:endcap', 'seededConePuppiJet:default:barrel', 'seededConePuppiJet:default:endcap'])\n", + "Warning: L1caloJet:default:endcap not in plot 2 keys. Skipping...\n", + "dict_keys(['phase1PuppiJet:default:barrel', 'phase1PuppiJet:default:endcap', 'seededConePuppiJet:default:barrel', 'seededConePuppiJet:default:endcap'])\n", + "Warning: L1caloJet:default:forward not in plot 2 keys. Skipping...\n", + "dict_keys(['phase1PuppiJet:default:barrel', 'phase1PuppiJet:default:endcap', 'seededConePuppiJet:default:barrel', 'seededConePuppiJet:default:endcap'])\n", + "Warning: L1TrackJet:default:barrel not in plot 2 keys. Skipping...\n", + "dict_keys(['phase1PuppiJet:default:barrel', 'phase1PuppiJet:default:endcap', 'seededConePuppiJet:default:barrel', 'seededConePuppiJet:default:endcap'])\n", + "Warning: L1TrackJet:default:endcap not in plot 2 keys. Skipping...\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V33nanovsV31/object_performance/rates/V33nanovsV31_Online_JetsByRegion.png\n", + "CPU times: user 11.3 s, sys: 3.25 s, total: 14.5 s\n", + "Wall time: 16 s\n" + ] + } + ], + "source": [ + "%%time\n", + "# %%capture\n", + "\n", + "v0 = \"V33nano\"\n", + "# v0 = \"V29\"\n", + "# v0 = \"V32nano\"\n", + "# v0 = \"V31\"\n", + "\n", + "v0_jsons = glob(\n", + "# f\"/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/tool_refact_test/object_performance/{v0}//s*/**.json\")\n", + " f\"/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/{v0}/object_performance/r*/*Jet*.json\")\n", + "\n", + "# v1 = \"V29\"\n", + "# v1 = \"V32\"\n", + "# v1 = \"V32nano\"\n", + "v1 = \"V31\"\n", + "# v1 = \"V30\"\n", + "# v1 = \"V29\"\n", + "# v0 = \"JetMatchingBarrel_-999\"\n", + "# v1 = \"JetMatchingBarrel_GenRefPtBelow50_-999\"\n", + "# v0 = \"90perc\"\n", + "# v1 = \"50perc\"\n", + "\n", + "# outdir = \"https://alobanov.web.cern.ch/L1T/Phase2/menu/plots/tools/comparison/%svs%s\"%(v0,v1)\n", + "\n", + "for v0_json in v0_jsons:\n", + " \n", + " v1_json = v0_json.replace(v0,v1)\n", + " if not os.path.exists(v1_json): \n", + " print(v1_json + \" does not exist\")\n", + " continue\n", + "# continue\n", + " \n", + "# print(\"1\")\n", + " plot1 = load_json(v0_json)\n", + "# print(\"2\")\n", + " plot2 = load_json(v1_json)\n", + "\n", + " print(os.path.basename(v0_json))\n", + " print(os.path.basename(v1_json))\n", + " \n", + " if \"turnon\" in v0_json:\n", + " ptype = \"turnon\"\n", + " elif \"scaling\" in v0_json:\n", + " ptype = \"scalings\"\n", + " elif \"rate\" in v0_json:\n", + " ptype = \"rate\"\n", + " else:\n", + " print(\"WARNING, unsupported plot type\")\n", + " continue\n", + " \n", + " f = comp_plots(plot1,plot2, sfxs = [v0,v1], \n", + " lss = [\"-\",\"--\"],\n", + "# lss = [\"\",\"\"],\n", + " markers = [\".\",\"o\"],\n", + " ptype = ptype)\n", + " \n", + " #outfname = v0_json.replace(v0,\"%svs%s\"%(v0,v1)).replace(\".json\",\".png\").replace(\"tools\",\"tools/comparisons\")\n", + " outfname = v0_json.replace(v0,\"%svs%s\"%(v0,v1)).replace(\".json\",\".png\").replace(\"%svs%s/\"%(v0,v1), \"comparisons/%svs%s/\"%(v0,v1))\n", + " \n", + "# break\n", + " \n", + " outdir = os.path.dirname(outfname)\n", + " if not os.path.exists(outdir): os.makedirs(outdir)\n", + " \n", + " print(\"Saving plot %s\" %outfname)\n", + " plt.savefig(outfname)\n", + "\n", + " # save pdf\n", + " outfname = outfname.replace(\".png\",\".pdf\")\n", + " plt.savefig(outfname)\n", + " \n", + " plt.close()\n", + "# break " + ] + }, + { + "cell_type": "markdown", + "id": "d4ab4dbd", + "metadata": {}, + "source": [ + "# Compare graphs within one plot" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "b674a828", + "metadata": {}, + "outputs": [], + "source": [ + "def comp_nano_plots(nano_plot,menu_plot, sfxs = [\"v22\",\"v27\"], ptype = \"turnon\",\n", + " lss = [\"-\",\"--\"], keys = None, markers = [\"o\",\"s\"]):\n", + " \n", + " fig, axs = plt.subplots(2,1,figsize=(10, 12),\n", + " sharex = True,\n", + " gridspec_kw={'height_ratios': [3, 1]}) \n", + " hep.cms.label(ax=axs[0], llabel=\"Phase-2 Simulation\", rlabel = \"14 TeV\")\n", + "\n", + " if keys is None: keys = nano_plot.keys()\n", + " # clean keys\n", + " clean_keys = []\n", + " for key in keys:\n", + " if key in ['xlabel', 'ylabel', 'watermark']: \n", + " continue\n", + " if key not in nano_plot.keys():\n", + " print(f\"Warning: {key} not in plot 1 keys. Skipping...\")\n", + " continue\n", + " if key not in menu_plot.keys():\n", + " print(menu_plot.keys())\n", + " print(f\"Warning: {key} not in plot 2 keys. Skipping...\")\n", + " continue\n", + " clean_keys.append(key)\n", + " \n", + " for j,key in enumerate(clean_keys):\n", + " ## plot 1\n", + " plots = [nano_plot[key],menu_plot[key]]\n", + " color = f\"C{j}\"\n", + "\n", + " for i,p1 in enumerate(plots):\n", + " sfx = sfxs[i]\n", + " label = f\"{sfx}, {p1['label']}\"\n", + "\n", + "\n", + " if ptype == \"scalings\":\n", + " axs[0].plot(p1[\"xvals\"],p1[\"yvals\"], color = color, marker = markers[i],\n", + " label = label, ls = lss[i], mfc=\"none\" if i == 1 else color)\n", + " elif ptype == \"turnon\":\n", + " p1[\"err_kwargs\"][\"marker\"] = markers[i]\n", + " p1[\"err_kwargs\"][\"xerr\"] = None\n", + "\n", + " axs[0].errorbar(p1[\"xbins\"],p1[\"efficiency\"], yerr = p1[\"efficiency_err\"], \n", + " label = label, ls = lss[i], color = color, mfc=\"none\" if i == 1 else color,\n", + " **(p1[\"err_kwargs\"])\n", + " )\n", + " \n", + " ## Make ratios\n", + " if ptype == \"scalings\":\n", + " d_p1 = dict(zip(plots[0][\"xvals\"],plots[0][\"yvals\"]))\n", + " d_p2 = dict(zip(plots[1][\"xvals\"],plots[1][\"yvals\"]))\n", + " elif ptype == \"turnon\":\n", + " d_p1 = dict(zip(plots[0][\"xbins\"],plots[0][\"efficiency\"]))\n", + " d_p2 = dict(zip(plots[1][\"xbins\"],plots[1][\"efficiency\"]))\n", + " \n", + " # add 100% eff line\n", + "# axs[0].axhline(1,ls = \":\", alpha = 0.5, c = \"k\")\n", + " \n", + " df_p1 = pd.Series(d_p1)\n", + " df_p2 = pd.Series(d_p2)\n", + " \n", + "# ax = axs[1]\n", + "\n", + " if (df_p1.sum()!=0) and (df_p1.sum()!=0):\n", + "\n", + " diff = (df_p1 - df_p2) \n", + "# diff /= df_p2\n", + " label = p1[\"label\"].split(\",\")[0]\n", + " \n", + " diff.plot(ax = axs[1], color = color,label = label)#, marker = \".\", color = color)\n", + "# )\n", + " if ptype == \"turnon\":\n", + " if len(plots[0][\"efficiency_err\"][0]) != len(plots[1][\"efficiency_err\"][0]): continue\n", + " y_err = np.hypot(plots[0][\"efficiency_err\"][0], plots[1][\"efficiency_err\"][0])\n", + " if len(diff) != len(y_err): continue\n", + " axs[1].fill_between(diff.index,diff.values - y_err,diff.values + y_err,\n", + "# label = label, \n", + " alpha = 0.3, \n", + " color = color\n", + " )\n", + " \n", + " # make axis stuff\n", + " axs[0].legend(fontsize = \"x-small\")\n", + " #axs[1].set_ylabel(f\"({sfxs[0]}-{sfxs[1]})/{sfxs[1]}\", fontsize = \"x-small\")\n", + " axs[1].set_ylabel(f\"{sfxs[0]} - {sfxs[1]}\", fontsize = \"x-small\")\n", + " axs[1].legend(fontsize = \"x-small\")\n", + " \n", + " if ptype == \"scalings\":\n", + "# axs[0].set_ylabel(\"95 % Location [GeV]\")\n", + " axs[1].set_xlabel(\"Threshold [GeV]\")\n", + " elif ptype == \"turnon\":\n", + " axs[0].set_ylabel(nano_plot[\"ylabel\"], fontsize = \"small\")\n", + " axs[1].set_xlabel(nano_plot[\"xlabel\"])\n", + "\n", + " axs[1].set_ylim(-.1,.1)\n", + " \n", + " for ax in axs: ax.grid()\n", + " plt.tight_layout()\n", + " plt.subplots_adjust(wspace=0, hspace=0)\n", + "\n", + " return fig" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "d7bb1ff1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ElectronsIsolation_Barrel_-999_V34nano.json\n", + "ElectronsIsolation_Barrel_-999_V33nano.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V34nanovsV33nano/object_performance/turnons/ElectronsIsolation_Barrel_-999_V34nanovsV33nano.png\n", + "ElectronsIsolation_Endcap_-999_V34nano.json\n", + "ElectronsIsolation_Endcap_-999_V33nano.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V34nanovsV33nano/object_performance/turnons/ElectronsIsolation_Endcap_-999_V34nanovsV33nano.png\n", + "ElectronsMatchingBarrel_-999_V34nano.json\n", + "ElectronsMatchingBarrel_-999_V33nano.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V34nanovsV33nano/object_performance/turnons/ElectronsMatchingBarrel_-999_V34nanovsV33nano.png\n", + "ElectronsMatchingEndcap_-999_V34nano.json\n", + "ElectronsMatchingEndcap_-999_V33nano.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V34nanovsV33nano/object_performance/turnons/ElectronsMatchingEndcap_-999_V34nanovsV33nano.png\n", + "ElectronsMatching_Eta_Pt10to25_-999_V34nano.json\n", + "ElectronsMatching_Eta_Pt10to25_-999_V33nano.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V34nanovsV33nano/object_performance/turnons/ElectronsMatching_Eta_Pt10to25_-999_V34nanovsV33nano.png\n", + "ElectronsMatching_Eta_Pt25toInf_-999_V34nano.json\n", + "ElectronsMatching_Eta_Pt25toInf_-999_V33nano.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V34nanovsV33nano/object_performance/turnons/ElectronsMatching_Eta_Pt25toInf_-999_V34nanovsV33nano.png\n", + "ElectronsTriggerBarrel_10_V34nano.json\n", + "ElectronsTriggerBarrel_10_V33nano.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V34nanovsV33nano/object_performance/turnons/ElectronsTriggerBarrel_10_V34nanovsV33nano.png\n", + "ElectronsTriggerBarrel_20_V34nano.json\n", + "ElectronsTriggerBarrel_20_V33nano.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V34nanovsV33nano/object_performance/turnons/ElectronsTriggerBarrel_20_V34nanovsV33nano.png\n", + "ElectronsTriggerBarrel_30_V34nano.json\n", + "ElectronsTriggerBarrel_30_V33nano.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/comparisons/V34nanovsV33nano/object_performance/turnons/ElectronsTriggerBarrel_30_V34nanovsV33nano.png\n", + "CPU times: user 9.56 s, sys: 2.32 s, total: 11.9 s\n", + "Wall time: 10.3 s\n" + ] + } + ], + "source": [ + "%%time\n", + "# %%capture\n", + "\n", + "v0 = \"V34nano\"\n", + "v1 = \"V33nano\"\n", + "\n", + "# v0 = \"V33nano\"\n", + "# v1 = \"V32nano\"\n", + "v0_jsons = glob(\n", + "# f\"/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/tool_refact_test/object_performance/{v0}//*/*.json\")\n", + " f\"/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/{v0}/object_performance/*/*El*.json\")\n", + "\n", + "\n", + "# v0 = \"Run3Winter24\"\n", + "# v1 = \"Run3Summer23Bpix\"\n", + "# v0_jsons = glob(\n", + "# f\"/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//{v0}/*/*Of**.json\")\n", + "\n", + "# outdir = \"https://alobanov.web.cern.ch/L1T/Phase2/menu/plots/tools/comparison/%svs%s\"%(v0,v1)\n", + "\n", + "for v0_json in v0_jsons:\n", + " \n", + " v1_json = v0_json.replace(v0,v1)\n", + " if not os.path.exists(v1_json): \n", + " print(v1_json + \" does not exist\")\n", + " continue\n", + "# continue\n", + " \n", + "# print(\"1\")\n", + " plot1 = load_json(v0_json)\n", + "# print(\"2\")\n", + " plot2 = load_json(v1_json)\n", + " \n", + " print(os.path.basename(v0_json))\n", + " print(os.path.basename(v1_json))\n", + " \n", + " f = comp_nano_plots(plot1,plot2, sfxs = [v0,v1], \n", + " lss = [\"-\",\"--\"],\n", + "# lss = [\"\",\"\"],\n", + " markers = [\".\",\"o\"],\n", + " ptype = \"turnon\" if \"turnon\" in v0_json else \"scalings\")\n", + " \n", + "# outfname = v0_json.replace(v0,\"%svs%s\"%(v0,v1)).replace(\".json\",\".png\").replace(\"tools\",\"tools/comparisons\")\n", + " outfname = v0_json.replace(v0,\"%svs%s\"%(v0,v1)).replace(\".json\",\".png\").replace(\"%svs%s/\"%(v0,v1), \"comparisons/%svs%s/\"%(v0,v1))\n", + " \n", + "# break\n", + " \n", + " outdir = os.path.dirname(outfname)\n", + " if not os.path.exists(outdir): os.makedirs(outdir)\n", + " \n", + " print(\"Saving plot %s\" %outfname)\n", + " plt.savefig(outfname)\n", + "\n", + " # save pdf\n", + " outfname = outfname.replace(\".png\",\".pdf\")\n", + " plt.savefig(outfname)\n", + " \n", + " plt.close()\n", + "# \n", + "# break " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3a2892cb", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "493b185b", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "2377cd08", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "HHbbWW_MET_90perc_Run3Winter24.json\n", + "HHbbWW_MET_90perc_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/scalings/HHbbWW_MET_90perc_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/scalings/HHbbWW_MET_90perc_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "JetTurnonBarrel_HHbbWW_Run3Winter24.json\n", + "JetTurnonBarrel_HHbbWW_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/scalings/JetTurnonBarrel_HHbbWW_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/scalings/JetTurnonBarrel_HHbbWW_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "JetTurnonEndcap_HHbbWW_Run3Winter24.json\n", + "JetTurnonEndcap_HHbbWW_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/scalings/JetTurnonEndcap_HHbbWW_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/scalings/JetTurnonEndcap_HHbbWW_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "JetTurnonForward_HHbbWW_Run3Winter24.json\n", + "JetTurnonForward_HHbbWW_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/scalings/JetTurnonForward_HHbbWW_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/scalings/JetTurnonForward_HHbbWW_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/scalings/MET_90perc_Run3Summer23Bpix.json does not exist\n", + "VBFHinv_MET_90perc_Run3Winter24.json\n", + "VBFHinv_MET_90perc_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/scalings/VBFHinv_MET_90perc_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/scalings/VBFHinv_MET_90perc_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "HHbbWW_MET_90perc_150_Run3Winter24.json\n", + "HHbbWW_MET_90perc_150_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/HHbbWW_MET_90perc_150_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/HHbbWW_MET_90perc_150_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "HHbbWW_MET_90perc_90_Run3Winter24.json\n", + "HHbbWW_MET_90perc_90_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/HHbbWW_MET_90perc_90_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/HHbbWW_MET_90perc_90_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/turnons/JetMatchingBarrel_HHbbWW_-999_Run3Summer23Bpix.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/turnons/JetMatchingEndcap_2p1_HHbbWW_-999_Run3Summer23Bpix.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/turnons/JetMatchingEndcap_HHbbWW_-999_Run3Summer23Bpix.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/turnons/JetMatchingForward_HHbbWW_-999_Run3Summer23Bpix.json does not exist\n", + "JetMatching_Eta_Pt100ToInf_HHbbWW_-999_Run3Winter24.json\n", + "JetMatching_Eta_Pt100ToInf_HHbbWW_-999_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetMatching_Eta_Pt100ToInf_HHbbWW_-999_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetMatching_Eta_Pt100ToInf_HHbbWW_-999_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "JetMatching_Eta_Pt100ToInf_VBFHinv_-999_Run3Winter24.json\n", + "JetMatching_Eta_Pt100ToInf_VBFHinv_-999_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetMatching_Eta_Pt100ToInf_VBFHinv_-999_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetMatching_Eta_Pt100ToInf_VBFHinv_-999_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "JetMatching_Eta_Pt40To100_HHbbWW_-999_Run3Winter24.json\n", + "JetMatching_Eta_Pt40To100_HHbbWW_-999_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetMatching_Eta_Pt40To100_HHbbWW_-999_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetMatching_Eta_Pt40To100_HHbbWW_-999_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "JetMatching_Eta_Pt40To100_VBFHinv_-999_Run3Winter24.json\n", + "JetMatching_Eta_Pt40To100_VBFHinv_-999_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetMatching_Eta_Pt40To100_VBFHinv_-999_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetMatching_Eta_Pt40To100_VBFHinv_-999_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/turnons/JetTrigger_Eta_Pt100ToInf_HHbbWW_100_Run3Summer23Bpix.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/turnons/JetTrigger_Eta_Pt100ToInf_HHbbWW_50_Run3Summer23Bpix.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/turnons/JetTrigger_Eta_Pt40To100_HHbbWW_100_Run3Summer23Bpix.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/turnons/JetTrigger_Eta_Pt40To100_HHbbWW_50_Run3Summer23Bpix.json does not exist\n", + "JetTurnonBarrel_HHbbWW_100_Run3Winter24.json\n", + "JetTurnonBarrel_HHbbWW_100_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonBarrel_HHbbWW_100_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonBarrel_HHbbWW_100_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "JetTurnonBarrel_HHbbWW_50_Run3Winter24.json\n", + "JetTurnonBarrel_HHbbWW_50_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonBarrel_HHbbWW_50_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonBarrel_HHbbWW_50_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "JetTurnonEndcap_HHbbWW_100_Run3Winter24.json\n", + "JetTurnonEndcap_HHbbWW_100_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonEndcap_HHbbWW_100_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonEndcap_HHbbWW_100_Run3Winter24vsRun3Summer23Bpix.pdf\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "JetTurnonEndcap_HHbbWW_50_Run3Winter24.json\n", + "JetTurnonEndcap_HHbbWW_50_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonEndcap_HHbbWW_50_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonEndcap_HHbbWW_50_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "JetTurnonForward_HHbbWW_100_Run3Winter24.json\n", + "JetTurnonForward_HHbbWW_100_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonForward_HHbbWW_100_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonForward_HHbbWW_100_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "JetTurnonForward_HHbbWW_50_Run3Winter24.json\n", + "JetTurnonForward_HHbbWW_50_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonForward_HHbbWW_50_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/JetTurnonForward_HHbbWW_50_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/turnons/MET_90perc_150_Run3Summer23Bpix.json does not exist\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Summer23Bpix/turnons/MET_90perc_90_Run3Summer23Bpix.json does not exist\n", + "VBFHinv_MET_90perc_150_Run3Winter24.json\n", + "VBFHinv_MET_90perc_150_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/VBFHinv_MET_90perc_150_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/VBFHinv_MET_90perc_150_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "VBFHinv_MET_90perc_90_Run3Winter24.json\n", + "VBFHinv_MET_90perc_90_Run3Summer23Bpix.json\n", + "Saving plot /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/VBFHinv_MET_90perc_90_Run3Winter24vsRun3Summer23Bpix.png\n", + "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//Run3Winter24vsRun3Summer23Bpix/turnons/VBFHinv_MET_90perc_90_Run3Winter24vsRun3Summer23Bpix.pdf\n", + "CPU times: user 26.5 s, sys: 7.43 s, total: 33.9 s\n", + "Wall time: 34.8 s\n" + ] + } + ], + "source": [ + "%%time\n", + "# %%capture\n", + "\n", + "# v0 = \"V33nano\"\n", + "# v0 = \"V29\"\n", + "v0 = \"Run3Winter24\"\n", + "# v0 = \"V32\"\n", + "\n", + "v0_jsons = glob(\n", + " f\"/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/test_run3/object_performance//{v0}/*/*.json\")\n", + "\n", + "# v1 = \"V29\"\n", + "v1 = \"Run3Summer23Bpix\"\n", + "# v1 = \"V31\"\n", + "# v1 = \"V30\"\n", + "# v1 = \"V29\"\n", + "# v0 = \"JetMatchingBarrel_-999\"\n", + "# v1 = \"JetMatchingBarrel_GenRefPtBelow50_-999\"\n", + "# v0 = \"90perc\"\n", + "# v1 = \"50perc\"\n", + "\n", + "# outdir = \"https://alobanov.web.cern.ch/L1T/Phase2/menu/plots/tools/comparison/%svs%s\"%(v0,v1)\n", + "\n", + "for v0_json in v0_jsons:\n", + " \n", + " v1_json = v0_json.replace(v0,v1)\n", + " if not os.path.exists(v1_json): \n", + " print(v1_json + \" does not exist\")\n", + " continue\n", + "# continue\n", + " \n", + "# print(\"1\")\n", + " plot1 = load_json(v0_json)\n", + "# print(\"2\")\n", + " plot2 = load_json(v1_json)\n", + " \n", + " print(os.path.basename(v0_json))\n", + " print(os.path.basename(v1_json))\n", + " \n", + " f = comp_nano_plots(plot1,plot2, sfxs = [v0,v1], \n", + " lss = [\"-\",\"--\"],\n", + "# lss = [\"\",\"\"],\n", + " markers = [\".\",\"o\"],\n", + " ptype = \"turnon\" if \"turnon\" in v0_json else \"scalings\")\n", + " \n", + " outfname = v0_json.replace(v0,\"%svs%s\"%(v0,v1)).replace(\".json\",\".png\").replace(\"tools\",\"tools/comparisons\")\n", + " \n", + "# break\n", + " \n", + " outdir = os.path.dirname(outfname)\n", + " if not os.path.exists(outdir): os.makedirs(outdir)\n", + " \n", + " print(\"Saving plot %s\" %outfname)\n", + " plt.savefig(outfname)\n", + "\n", + " # save pdf\n", + " outfname = outfname.replace(\".png\",\".pdf\")\n", + " print(outfname)\n", + " plt.savefig(outfname)\n", + " \n", + " plt.close()\n", + "# \n", + "# break " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "5ba17e2d", + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "# %%time\n", + "# # %%capture\n", + "\n", + "# v0 = \"V32nano\"\n", + "# # v0 = \"V29\"\n", + "# # v0 = \"V32\"\n", + "\n", + "# v0_jsons = glob(\n", + "# f\"/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/tool_refact_test/object_performance/{v0}//*/ElectronsMatching*GenPart*.json\")\n", + "\n", + "# v0 = \"_wPrunedGenPart\"\n", + "# v1 = \"\"\n", + "# # v1 = \"V29\"\n", + "# # v1 = \"V32\"\n", + "# # v1 = \"V31\"\n", + "# # v1 = \"V30\"\n", + "# # v1 = \"V29\"\n", + "# # v0 = \"JetMatchingBarrel_-999\"\n", + "# # v1 = \"JetMatchingBarrel_GenRefPtBelow50_-999\"\n", + "# # v0 = \"90perc\"\n", + "# # v1 = \"50perc\"\n", + "\n", + "# # outdir = \"https://alobanov.web.cern.ch/L1T/Phase2/menu/plots/tools/comparison/%svs%s\"%(v0,v1)\n", + "\n", + "# for v0_json in v0_jsons:\n", + " \n", + "# v1_json = v0_json.replace(v0,v1)\n", + "# if not os.path.exists(v1_json): \n", + "# print(v1_json + \" does not exist\")\n", + "# continue\n", + "# # continue\n", + "# # else:\n", + "# # print(v1_json)\n", + " \n", + "# # print(\"1\")\n", + "# plot1 = load_json(v0_json)\n", + "# # print(\"2\")\n", + "# plot2 = load_json(v1_json)\n", + " \n", + "# # print(plot1)\n", + "# # print()\n", + "# # print(plot2)\n", + " \n", + "# print(\"File 1:\", os.path.basename(v0_json))\n", + "# print(\"File 2:\", os.path.basename(v1_json))\n", + " \n", + "# f = comp_nano_plots(plot1,plot2, \n", + "# #sfxs = [v0,v1], \n", + "# sfxs = [\"PrunedGen\",\"Gen\"], \n", + "# lss = [\"-\",\"--\"],\n", + "# # lss = [\"\",\"\"],\n", + "# markers = [\".\",\"o\"],\n", + "# # keys = [\"L1tkElectron:NoIso:inclusive\"],\n", + "# ptype = \"turnon\" if \"turnon\" in v0_json else \"scalings\")\n", + " \n", + "# outfname = v0_json.replace(v0,\"%svs%s\"%(v0,v1)).replace(\".json\",\".png\").replace(\"tools\",\"tools/comparisons\")\n", + " \n", + "# # break\n", + " \n", + "# # outdir = os.path.dirname(outfname)\n", + "# # if not os.path.exists(outdir): os.makedirs(outdir)\n", + " \n", + "# # print(\"Saving plot %s\" %outfname)\n", + "# # plt.savefig(outfname)\n", + "\n", + "# # # save pdf\n", + "# # outfname = outfname.replace(\".png\",\".pdf\")\n", + "# # plt.savefig(outfname)\n", + " \n", + "# # plt.close()\n", + "# # \n", + "# # break " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a652a7bd", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "39333245", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "321a51f7", + "metadata": {}, + "source": [ + "# Below is for dev" + ] + }, + { + "cell_type": "markdown", + "id": "b660a1c8", + "metadata": {}, + "source": [ + "## With ratio" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "8234b18f", + "metadata": {}, + "outputs": [], + "source": [ + "def comp_turnons(plot1,plot2, sfxs = [\"v22\",\"v27\"], lss = [\"-\",\"--\"], keys = None,markers = [\"o\",\"s\"]):\n", + " fig, axs = plt.subplots(2,1,figsize=(10, 10),\n", + " sharex = True,gridspec_kw={'height_ratios': [3, 1]}) \n", + "\n", + " hep.cms.label(ax=axs[0], llabel=\"Phase-2 Simulation\", rlabel = \"14 TeV\")\n", + "\n", + " if keys is None:\n", + " keys = plot1.keys()\n", + " # or hardcode \n", + " # keys = [\"EG\"]\n", + " \n", + " for j,key in enumerate(keys):\n", + " if key in ['xlabel', 'ylabel', 'watermark']: continue\n", + " if key not in plot1.keys():\n", + " print(f\"Warning: {key} not in plot 1 keys. Skipping...\")\n", + " if key not in plot2.keys():\n", + " print(f\"Warning: {key} not in plot 2 keys. Skipping...\")\n", + " continue\n", + "\n", + " ## plot 1\n", + " plots = [plot1[key],plot2[key]]\n", + " color = f\"C{j-3}\"\n", + "# print(color)\n", + "\n", + " for i,p1 in enumerate(plots):\n", + " sfx = sfxs[i]\n", + "\n", + "\n", + " #label = p1[\"label\"] + \", \" + sfx\n", + " label = f\"{sfx}, {p1['label']}\"\n", + " p1[\"err_kwargs\"][\"marker\"] = markers[i]\n", + " if i == 1: \n", + " p1[\"err_kwargs\"][\"markerfacecolor\"] ='none'\n", + "# mfc='w'\n", + "\n", + " axs[0].errorbar(p1[\"xbins\"],p1[\"efficiency\"],yerr = p1[\"efficiency_err\"], \n", + " label = label, ls = lss[i], color = color,\n", + " **(p1[\"err_kwargs\"]))\n", + "\n", + " # axs[]\n", + " x = plots[0][\"xbins\"]\n", + " y = plots[0][\"efficiency\"]\n", + " d_p1 = dict(zip(x,y))\n", + "\n", + " x = plots[1][\"xbins\"]\n", + " y = plots[1][\"efficiency\"]\n", + " d_p2 = dict(zip(x,y))\n", + "\n", + " (pd.Series(d_p1) - pd.Series(d_p2)).plot(ax = axs[1], label = p1[\"label\"], marker = \".\")\n", + "\n", + " axs[0].legend(ncol = 1)\n", + " axs[1].legend()\n", + "\n", + " axs[0].set_ylabel(plot1[\"ylabel\"], fontsize = \"small\")\n", + "\n", + " axs[1].set_xlabel(plot1[\"xlabel\"])\n", + " axs[1].set_ylabel(f\"{sfxs[0]} - {sfxs[1]}\")\n", + " \n", + " plt.subplots_adjust(wspace=0, hspace=0)\n", + " for ax in axs: ax.grid()\n", + " \n", + " return fig" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "3e6690d0", + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "# f = comp_turnons(plot1,plot2, sfxs = [\"v22\",\"v27\"], lss = [\"-\",\"--\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "3519a529", + "metadata": {}, + "outputs": [], + "source": [ + "v0_jsons = glob(\"/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/turnons/*.json\")" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "bf4f8055", + "metadata": {}, + "outputs": [], + "source": [ + "%%capture\n", + "\n", + "v0 = \"V27\"\n", + "v1 = \"V22\"\n", + "\n", + "outdir = \"/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/%svs%s\"%(v0,v1)\n", + "\n", + "for v0_json in v0_jsons[:100]:\n", + "# print(\"he\")\n", + " \n", + " #v1_json = v0_json.replace(\"V27\",\"V26\")\n", + " v1_json = v0_json.replace(v0,v1)#.replace(\"_V26\",\"\")\n", + " if not os.path.exists(v1_json): \n", + " print(v1_json + \" does not exist\")\n", + " continue\n", + " \n", + " plot1 = load_json(v0_json)\n", + " plot2 = load_json(v1_json)\n", + " \n", + " print(os.path.basename(v0_json))\n", + " f = comp_turnons(plot1,plot2, sfxs = [v0,v1], lss = [\"-\",\"--\"])\n", + " \n", + " outfname = v0_json.replace(v0,\"%svs%s\"%(v0,v1)).replace(\".json\",\".png\")\n", + " \n", + " outdir = os.path.dirname(outfname)\n", + " if not os.path.exists(outdir): os.makedirs(outdir)\n", + " \n", + "# print(\"here\")\n", + " plt.savefig(outfname)\n", + " \n", + " outfname = outfname.replace(\".png\",\".pdf\")\n", + " plt.savefig(outfname)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "71098c6e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "48" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(v0_jsons)" + ] + }, + { + "cell_type": "markdown", + "id": "8b49ca38", + "metadata": {}, + "source": [ + "# scalings" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "16201359", + "metadata": {}, + "outputs": [], + "source": [ + "def comp_scalings(plot1,plot2, sfxs = [\"v22\",\"v27\"], lss = [\"-\",\"--\"], keys = None, markers = [\"o\",\"s\"]):\n", + " fig, axs = plt.subplots(2,1,figsize=(10, 10),\n", + " sharex = True,\n", + " gridspec_kw={'height_ratios': [3, 1]}) \n", + " hep.cms.label(ax=axs[0], llabel=\"Phase-2 Simulation\", rlabel = \"14 TeV\")\n", + "\n", + " if keys is None:\n", + " keys = plot1.keys()\n", + " # or hardcode \n", + " # keys = [\"EG\"]\n", + "# markers = [\"o-\",\"s--\"]\n", + " \n", + " for j,key in enumerate(keys):\n", + " if key in ['xlabel', 'ylabel', 'watermark']: continue\n", + " if key not in plot1.keys():\n", + " print(f\"Warning: {key} not in plot 1 keys. Skipping...\")\n", + " if key not in plot2.keys():\n", + " print(f\"Warning: {key} not in plot 2 keys. Skipping...\")\n", + " continue\n", + "\n", + " ## plot 1\n", + " plots = [plot1[key],plot2[key]]\n", + " color = f\"C{j-1}\"\n", + "\n", + " for i,p1 in enumerate(plots):\n", + " sfx = sfxs[i]\n", + "\n", + " label = sfx + \", \" + p1[\"label\"]\n", + " \n", + " axs[0].plot(p1[\"xvals\"],p1[\"yvals\"], color = color, marker = markers[i],\n", + " label = label, ls = lss[i], mfc=\"none\" if i == 1 else color)\n", + " \n", + " x = plots[0][\"xvals\"]\n", + " y = plots[0][\"yvals\"]\n", + " d_p1 = dict(zip(x,y))\n", + "\n", + " x = plots[1][\"xvals\"]\n", + " y = plots[1][\"yvals\"]\n", + " d_p2 = dict(zip(x,y))\n", + "\n", + " (pd.Series(d_p1) - pd.Series(d_p2)).plot(ax = axs[1], label = p1[\"label\"], marker = \".\")\n", + " \n", + " \n", + " ax = axs[0]\n", + "# ax.set_ylabel(\"95 % Location [GeV]\")\n", + " axs[0].legend(fontsize = \"small\")\n", + " \n", + "# axs[0].set_ylabel(plot1[\"ylabel\"], fontsize = \"x-small\")\n", + "\n", + "# axs[1].set_xlabel(plot1[\"xlabel\"])\n", + " axs[1].set_ylabel(f\"{sfxs[0]} - {sfxs[1]}\")\n", + " axs[1].set_xlabel(\"Threshold [GeV]\")\n", + " \n", + " for ax in axs: ax.grid()\n", + " plt.subplots_adjust(wspace=0, hspace=0)\n", + "# plt.tight_layout()\n", + "\n", + " return fig" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "d6481abf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/ElectronsTriggerBarrel.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/ElectronsTriggerEndcap.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/HT.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/JetTurnonBarrel.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/JetTurnonEndcap.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/JetTurnonForward.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/MET.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/MHT15.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/MHT30.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/MuonsTrigger.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/TauTriggerBarrel.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/TauTriggerEndcap.json']" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v0_jsons = glob(\"/eos/user/a/alobanov/www/L1T/Phase2/menu/plots/tools/V27/scalings/*.json\")\n", + "len(v0_jsons)\n", + "v0_jsons" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "c6b393ae", + "metadata": {}, + "outputs": [], + "source": [ + "%%capture\n", + "# %matplotlib auto\n", + "\n", + "v0 = \"V27\"\n", + "v1 = \"V22\"\n", + "\n", + "for v0_json in v0_jsons[:100]:\n", + " print(v0_json)\n", + " \n", + " v22_json = v0_json.replace(v0,v1)\n", + " if not os.path.exists(v22_json): \n", + " print(v22_json + \" does not exist\")\n", + " continue\n", + " \n", + "# continue \n", + " \n", + " plot1 = load_json(v0_json)\n", + " plot2 = load_json(v22_json)\n", + " \n", + " print(os.path.basename(v0_json))\n", + " f = comp_scalings(plot1,plot2, sfxs = [v0,v1], lss = [\"-\",\"--\"])\n", + " \n", + " outfname = v0_json.replace(v0,f\"{v0}vs{v1}\").replace(\".json\",\".png\")\n", + " \n", + " outdir = os.path.dirname(outfname)\n", + " if not os.path.exists(outdir): os.makedirs(outdir)\n", + " \n", + " plt.savefig(outfname)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "c3f90920", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "f = comp_scalings(plot1,plot2, sfxs = [\"v27\",\"v22\"], lss = [\"-\",\"--\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f423e0b1", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "9066d279", + "metadata": {}, + "outputs": [], + "source": [ + "import awkward as ak" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "0f435e43", + "metadata": {}, + "outputs": [], + "source": [ + "a = ak.from_parquet(\"/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/cache/V29_13X/V29_13X_ZEE_tkElectron.parquet\")" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "83100525", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e8a9ef5f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d848dfbc", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "00233512", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_EGRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_HTRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_JetDefaultRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_JetSC8Rates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_JetSC8Rates_byRegion.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_JetSC8Rates_byRegion2.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_JetsByRegion.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_METRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_MHTRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_TauRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Offline_TauRatesByRegion.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_EGRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_HTRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_JetDefaultRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_JetSC8Rates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_JetSC8Rates_byRegion.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_JetSC8Rates_byRegion2.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_JetsByRegion.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_METRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_MHTRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_MuonRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_TauRates.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_TauRatesByRegion.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_gmtMuonByRegion.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/rates/V33nano_Online_gmtTkMuonByRegion.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/ElectronsTriggerBarrel_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/ElectronsTriggerEndcap_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/HT_90perc_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/JetTurnonBarrelSC8_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/JetTurnonBarrel_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/JetTurnonEndcapSC8_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/JetTurnonEndcap_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/JetTurnonForwardSC8_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/JetTurnonForward_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/MET_90perc_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/MHT_50perc_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/MuonsTrigger_Barrel_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/MuonsTrigger_Endcap_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/MuonsTrigger_Overlap_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/PhotonsTrigger_Barrel_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/PhotonsTrigger_Endcap_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/TauTriggerBarrel_90perc_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/scalings/TauTriggerEndcap_90perc_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsIsolation_Barrel_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsIsolation_Endcap_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsMatchingBarrel_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsMatchingEndcap_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsMatching_Eta_Pt10to25_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsMatching_Eta_Pt25toInf_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsTriggerBarrel_10_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsTriggerBarrel_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsTriggerBarrel_30_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsTriggerBarrel_40_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsTriggerEndcap_10_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsTriggerEndcap_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsTriggerEndcap_30_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/ElectronsTriggerEndcap_40_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/HT_90perc_350_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatchingBarrelSC8_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatchingBarrel_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatchingEndcapSC8_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatchingEndcap_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatchingForward_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatching_Eta_Pt100ToInf_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatching_Eta_Pt100ToInf_ExtendedVsRegular_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatching_Eta_Pt100ToInf_extEta_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatching_Eta_Pt30ToInf_genBJets_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatching_Eta_Pt30ToInf_genNotBJets_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatching_Eta_Pt40To100_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatching_Eta_Pt40To100_ExtendedVsRegular_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatching_Eta_SC8_Pt100ToInf_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatching_Pt_Pt30ToInf_genBJets_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetMatching_Pt_Pt30ToInf_genNotBJets_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetTurnonBarrelSC8_150_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetTurnonBarrel_100_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetTurnonBarrel_50_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetTurnonEndcapSC8_150_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetTurnonEndcap_100_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetTurnonEndcap_50_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetTurnonForwardSC8_150_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetTurnonForward_100_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/JetTurnonForward_50_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MET_90perc_150_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MHT_50perc_150_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MHT_50perc_70_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsMatchingBarrel_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsMatchingEndcap_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsMatchingOverlap_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsMatching_Eta_Pt15toInf_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsMatching_Eta_Pt2to5_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsTrigger_Barrel_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsTrigger_Barrel_25_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsTrigger_Endcap_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsTrigger_Endcap_25_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsTrigger_Overlap_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/MuonsTrigger_Overlap_25_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonIsolation_Barrel_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonIsolation_Endcap_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsMatching_Barrel_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsMatching_Barrel_wPrunedGenParts_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsMatching_Endcap_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsMatching_Endcap_wPrunedGenParts_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsMatching_Eta_Pt10to25_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsMatching_Eta_Pt25toInf_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsTrigger_Barrel_10_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsTrigger_Barrel_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsTrigger_Barrel_30_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsTrigger_Barrel_40_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsTrigger_Endcap_10_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsTrigger_Endcap_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsTrigger_Endcap_30_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/PhotonsTrigger_Endcap_40_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TauMatching_Eta_Pt100ToInf_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TauMatching_Eta_Pt40To100_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TauTriggerBarrel_50perc_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TauTriggerBarrel_50perc_30_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TauTriggerBarrel_90perc_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TauTriggerBarrel_90perc_30_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TauTriggerEndcap_50perc_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TauTriggerEndcap_50perc_30_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TauTriggerEndcap_90perc_20_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TauTriggerEndcap_90perc_30_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TausMatchingBarrel_-999_V33nano.json',\n", + " '/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/TausMatchingEndcap_-999_V33nano.json']" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v0_jsons" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "ec38ad27", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "total 12720\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 189 Mar 3 15:53 EGRates.yaml\r\n", + " 76 -rw-r--r--. 1 alobanov 1399 77607 Mar 5 12:26 ElectronsIsolation_Barrel_-999_V33nano.png\r\n", + " 23 -rw-r--r--. 1 alobanov 1399 23179 Mar 5 12:26 ElectronsIsolation_Barrel_-999_V33nano.pdf\r\n", + " 12 -rw-r--r--. 1 alobanov 1399 12197 Mar 5 12:26 ElectronsIsolation_Barrel_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 498 Mar 5 12:26 ElectronsIsolation_Barrel_-999_V33nano.yaml\r\n", + " 79 -rw-r--r--. 1 alobanov 1399 80731 Mar 5 12:26 ElectronsIsolation_Endcap_-999_V33nano.png\r\n", + " 23 -rw-r--r--. 1 alobanov 1399 23481 Mar 5 12:26 ElectronsIsolation_Endcap_-999_V33nano.pdf\r\n", + " 12 -rw-r--r--. 1 alobanov 1399 12222 Mar 5 12:26 ElectronsIsolation_Endcap_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 502 Mar 5 12:26 ElectronsIsolation_Endcap_-999_V33nano.yaml\r\n", + "132 -rw-r--r--. 1 alobanov 1399 134322 Mar 5 12:26 ElectronsMatching_Eta_Pt10to25_-999_V33nano.png\r\n", + " 30 -rw-r--r--. 1 alobanov 1399 29969 Mar 5 12:26 ElectronsMatching_Eta_Pt10to25_-999_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15384 Mar 5 12:26 ElectronsMatching_Eta_Pt10to25_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 555 Mar 5 12:26 ElectronsMatching_Eta_Pt10to25_-999_V33nano.yaml\r\n", + "115 -rw-r--r--. 1 alobanov 1399 116760 Mar 5 12:27 ElectronsMatching_Eta_Pt25toInf_-999_V33nano.png\r\n", + " 30 -rw-r--r--. 1 alobanov 1399 29913 Mar 5 12:27 ElectronsMatching_Eta_Pt25toInf_-999_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15556 Mar 5 12:27 ElectronsMatching_Eta_Pt25toInf_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 531 Mar 5 12:27 ElectronsMatching_Eta_Pt25toInf_-999_V33nano.yaml\r\n", + "110 -rw-r--r--. 1 alobanov 1399 111935 Mar 5 12:27 ElectronsMatchingBarrel_-999_V33nano.png\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 29359 Mar 5 12:27 ElectronsMatchingBarrel_-999_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15588 Mar 5 12:27 ElectronsMatchingBarrel_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 520 Mar 5 12:27 ElectronsMatchingBarrel_-999_V33nano.yaml\r\n", + "116 -rw-r--r--. 1 alobanov 1399 117806 Mar 5 12:27 ElectronsMatchingEndcap_-999_V33nano.png\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 29143 Mar 5 12:27 ElectronsMatchingEndcap_-999_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15543 Mar 5 12:27 ElectronsMatchingEndcap_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 520 Mar 5 12:27 ElectronsMatchingEndcap_-999_V33nano.yaml\r\n", + "163 -rw-r--r--. 1 alobanov 1399 166499 Mar 5 12:51 JetMatching_Eta_Pt40To100_-999_V33nano.png\r\n", + " 34 -rw-r--r--. 1 alobanov 1399 34731 Mar 5 12:51 JetMatching_Eta_Pt40To100_-999_V33nano.pdf\r\n", + " 24 -rw-r--r--. 1 alobanov 1399 24261 Mar 5 12:51 JetMatching_Eta_Pt40To100_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 509 Mar 5 12:51 JetMatching_Eta_Pt40To100_-999_V33nano.yaml\r\n", + "133 -rw-r--r--. 1 alobanov 1399 136082 Mar 5 12:51 JetMatching_Eta_Pt100ToInf_-999_V33nano.png\r\n", + " 34 -rw-r--r--. 1 alobanov 1399 34133 Mar 5 12:51 JetMatching_Eta_Pt100ToInf_-999_V33nano.pdf\r\n", + " 22 -rw-r--r--. 1 alobanov 1399 22485 Mar 5 12:52 JetMatching_Eta_Pt100ToInf_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 488 Mar 5 12:52 JetMatching_Eta_Pt100ToInf_-999_V33nano.yaml\r\n", + " 81 -rw-r--r--. 1 alobanov 1399 82634 Mar 5 12:52 JetMatching_Eta_Pt100ToInf_extEta_-999_V33nano.png\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 24712 Mar 5 12:52 JetMatching_Eta_Pt100ToInf_extEta_-999_V33nano.pdf\r\n", + " 6 -rw-r--r--. 1 alobanov 1399 5811 Mar 5 12:52 JetMatching_Eta_Pt100ToInf_extEta_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 407 Mar 5 12:52 JetMatching_Eta_Pt100ToInf_extEta_-999_V33nano.yaml\r\n", + " 86 -rw-r--r--. 1 alobanov 1399 88028 Mar 5 12:52 JetMatching_Eta_SC8_Pt100ToInf_-999_V33nano.png\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 25274 Mar 5 12:52 JetMatching_Eta_SC8_Pt100ToInf_-999_V33nano.pdf\r\n", + " 6 -rw-r--r--. 1 alobanov 1399 5820 Mar 5 12:52 JetMatching_Eta_SC8_Pt100ToInf_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 407 Mar 5 12:52 JetMatching_Eta_SC8_Pt100ToInf_-999_V33nano.yaml\r\n", + "113 -rw-r--r--. 1 alobanov 1399 115073 Mar 5 12:52 JetMatching_Eta_Pt40To100_ExtendedVsRegular_-999_V33nano.png\r\n", + " 28 -rw-r--r--. 1 alobanov 1399 28534 Mar 5 12:52 JetMatching_Eta_Pt40To100_ExtendedVsRegular_-999_V33nano.pdf\r\n", + " 13 -rw-r--r--. 1 alobanov 1399 12427 Mar 5 12:52 JetMatching_Eta_Pt40To100_ExtendedVsRegular_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 473 Mar 5 12:52 JetMatching_Eta_Pt40To100_ExtendedVsRegular_-999_V33nano.yaml\r\n", + "100 -rw-r--r--. 1 alobanov 1399 101556 Mar 5 12:52 JetMatching_Eta_Pt100ToInf_ExtendedVsRegular_-999_V33nano.png\r\n", + " 28 -rw-r--r--. 1 alobanov 1399 28547 Mar 5 12:52 JetMatching_Eta_Pt100ToInf_ExtendedVsRegular_-999_V33nano.pdf\r\n", + " 12 -rw-r--r--. 1 alobanov 1399 11407 Mar 5 12:52 JetMatching_Eta_Pt100ToInf_ExtendedVsRegular_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 452 Mar 5 12:52 JetMatching_Eta_Pt100ToInf_ExtendedVsRegular_-999_V33nano.yaml\r\n", + " 77 -rw-r--r--. 1 alobanov 1399 78289 Mar 5 12:53 JetMatching_Eta_Pt30ToInf_genBJets_-999_V33nano.png\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 25264 Mar 5 12:53 JetMatching_Eta_Pt30ToInf_genBJets_-999_V33nano.pdf\r\n", + " 4 -rw-r--r--. 1 alobanov 1399 3538 Mar 5 12:53 JetMatching_Eta_Pt30ToInf_genBJets_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 448 Mar 5 12:53 JetMatching_Eta_Pt30ToInf_genBJets_-999_V33nano.yaml\r\n", + " 77 -rw-r--r--. 1 alobanov 1399 78332 Mar 5 12:53 JetMatching_Eta_Pt30ToInf_genNotBJets_-999_V33nano.png\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 25441 Mar 5 12:53 JetMatching_Eta_Pt30ToInf_genNotBJets_-999_V33nano.pdf\r\n", + " 4 -rw-r--r--. 1 alobanov 1399 3549 Mar 5 12:53 JetMatching_Eta_Pt30ToInf_genNotBJets_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 451 Mar 5 12:53 JetMatching_Eta_Pt30ToInf_genNotBJets_-999_V33nano.yaml\r\n", + " 75 -rw-r--r--. 1 alobanov 1399 76781 Mar 5 12:53 JetMatching_Pt_Pt30ToInf_genBJets_-999_V33nano.png\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 25283 Mar 5 12:53 JetMatching_Pt_Pt30ToInf_genBJets_-999_V33nano.pdf\r\n", + " 3 -rw-r--r--. 1 alobanov 1399 3061 Mar 5 12:53 JetMatching_Pt_Pt30ToInf_genBJets_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 416 Mar 5 12:53 JetMatching_Pt_Pt30ToInf_genBJets_-999_V33nano.yaml\r\n", + " 71 -rw-r--r--. 1 alobanov 1399 72688 Mar 5 12:53 JetMatching_Pt_Pt30ToInf_genNotBJets_-999_V33nano.png\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 25442 Mar 5 12:53 JetMatching_Pt_Pt30ToInf_genNotBJets_-999_V33nano.pdf\r\n", + " 4 -rw-r--r--. 1 alobanov 1399 3075 Mar 5 12:53 JetMatching_Pt_Pt30ToInf_genNotBJets_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 419 Mar 5 12:53 JetMatching_Pt_Pt30ToInf_genNotBJets_-999_V33nano.yaml\r\n", + "119 -rw-r--r--. 1 alobanov 1399 121328 Mar 5 12:54 JetMatchingBarrel_-999_V33nano.png\r\n", + " 36 -rw-r--r--. 1 alobanov 1399 35853 Mar 5 12:54 JetMatchingBarrel_-999_V33nano.pdf\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 28839 Mar 5 12:54 JetMatchingBarrel_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 498 Mar 5 12:54 JetMatchingBarrel_-999_V33nano.yaml\r\n", + "128 -rw-r--r--. 1 alobanov 1399 130115 Mar 5 12:54 JetMatchingEndcap_-999_V33nano.png\r\n", + " 35 -rw-r--r--. 1 alobanov 1399 35056 Mar 5 12:54 JetMatchingEndcap_-999_V33nano.pdf\r\n", + " 28 -rw-r--r--. 1 alobanov 1399 28412 Mar 5 12:54 JetMatchingEndcap_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 498 Mar 5 12:54 JetMatchingEndcap_-999_V33nano.yaml\r\n", + "128 -rw-r--r--. 1 alobanov 1399 130747 Mar 5 12:55 JetMatchingForward_-999_V33nano.png\r\n", + " 32 -rw-r--r--. 1 alobanov 1399 31977 Mar 5 12:55 JetMatchingForward_-999_V33nano.pdf\r\n", + " 21 -rw-r--r--. 1 alobanov 1399 20665 Mar 5 12:55 JetMatchingForward_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 471 Mar 5 12:55 JetMatchingForward_-999_V33nano.yaml\r\n", + " 77 -rw-r--r--. 1 alobanov 1399 78129 Mar 5 12:55 JetMatchingBarrelSC8_-999_V33nano.png\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 26312 Mar 5 12:55 JetMatchingBarrelSC8_-999_V33nano.pdf\r\n", + " 7 -rw-r--r--. 1 alobanov 1399 6437 Mar 5 12:55 JetMatchingBarrelSC8_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 430 Mar 5 12:55 JetMatchingBarrelSC8_-999_V33nano.yaml\r\n", + " 89 -rw-r--r--. 1 alobanov 1399 90504 Mar 5 12:55 JetMatchingEndcapSC8_-999_V33nano.png\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 25734 Mar 5 12:55 JetMatchingEndcapSC8_-999_V33nano.pdf\r\n", + " 7 -rw-r--r--. 1 alobanov 1399 6364 Mar 5 12:55 JetMatchingEndcapSC8_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 430 Mar 5 12:55 JetMatchingEndcapSC8_-999_V33nano.yaml\r\n", + " 92 -rw-r--r--. 1 alobanov 1399 93683 Mar 5 12:55 JetTurnonBarrelSC8_150_V33nano.png\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 25355 Mar 5 12:55 JetTurnonBarrelSC8_150_V33nano.pdf\r\n", + " 7 -rw-r--r--. 1 alobanov 1399 6257 Mar 5 12:55 JetTurnonBarrelSC8_150_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 496 Mar 5 12:55 JetTurnonBarrelSC8_150_V33nano.yaml\r\n", + " 96 -rw-r--r--. 1 alobanov 1399 97755 Mar 5 12:55 JetTurnonEndcapSC8_150_V33nano.png\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 24743 Mar 5 12:55 JetTurnonEndcapSC8_150_V33nano.pdf\r\n", + " 7 -rw-r--r--. 1 alobanov 1399 6262 Mar 5 12:55 JetTurnonEndcapSC8_150_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 496 Mar 5 12:55 JetTurnonEndcapSC8_150_V33nano.yaml\r\n", + " 97 -rw-r--r--. 1 alobanov 1399 99072 Mar 5 12:56 JetTurnonForwardSC8_150_V33nano.png\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 24769 Mar 5 12:56 JetTurnonForwardSC8_150_V33nano.pdf\r\n", + " 6 -rw-r--r--. 1 alobanov 1399 5714 Mar 5 12:56 JetTurnonForwardSC8_150_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 497 Mar 5 12:56 JetTurnonForwardSC8_150_V33nano.yaml\r\n", + "134 -rw-r--r--. 1 alobanov 1399 136815 Mar 5 13:04 JetTurnonBarrel_50_V33nano.png\r\n", + " 35 -rw-r--r--. 1 alobanov 1399 35335 Mar 5 13:04 JetTurnonBarrel_50_V33nano.pdf\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 28814 Mar 5 13:04 JetTurnonBarrel_50_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 603 Mar 5 13:04 JetTurnonBarrel_50_V33nano.yaml\r\n", + "142 -rw-r--r--. 1 alobanov 1399 144707 Mar 5 13:04 JetTurnonBarrel_100_V33nano.png\r\n", + " 36 -rw-r--r--. 1 alobanov 1399 36130 Mar 5 13:04 JetTurnonBarrel_100_V33nano.pdf\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 29536 Mar 5 13:04 JetTurnonBarrel_100_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 603 Mar 5 13:04 JetTurnonBarrel_100_V33nano.yaml\r\n", + "148 -rw-r--r--. 1 alobanov 1399 150552 Mar 5 13:05 JetTurnonEndcap_50_V33nano.png\r\n", + " 34 -rw-r--r--. 1 alobanov 1399 34641 Mar 5 13:05 JetTurnonEndcap_50_V33nano.pdf\r\n", + " 28 -rw-r--r--. 1 alobanov 1399 27988 Mar 5 13:05 JetTurnonEndcap_50_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 603 Mar 5 13:05 JetTurnonEndcap_50_V33nano.yaml\r\n", + "163 -rw-r--r--. 1 alobanov 1399 166561 Mar 5 13:05 JetTurnonEndcap_100_V33nano.png\r\n", + " 35 -rw-r--r--. 1 alobanov 1399 35629 Mar 5 13:05 JetTurnonEndcap_100_V33nano.pdf\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 28954 Mar 5 13:05 JetTurnonEndcap_100_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 603 Mar 5 13:05 JetTurnonEndcap_100_V33nano.yaml\r\n", + "123 -rw-r--r--. 1 alobanov 1399 125789 Mar 5 13:06 JetTurnonForward_50_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 30840 Mar 5 13:06 JetTurnonForward_50_V33nano.pdf\r\n", + " 19 -rw-r--r--. 1 alobanov 1399 19156 Mar 5 13:06 JetTurnonForward_50_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 572 Mar 5 13:06 JetTurnonForward_50_V33nano.yaml\r\n", + "135 -rw-r--r--. 1 alobanov 1399 137784 Mar 5 13:06 JetTurnonForward_100_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 31164 Mar 5 13:06 JetTurnonForward_100_V33nano.pdf\r\n", + " 19 -rw-r--r--. 1 alobanov 1399 19352 Mar 5 13:06 JetTurnonForward_100_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 572 Mar 5 13:06 JetTurnonForward_100_V33nano.yaml\r\n", + " 73 -rw-r--r--. 1 alobanov 1399 74114 Mar 5 14:15 PhotonIsolation_Barrel_-999_V33nano.png\r\n", + " 24 -rw-r--r--. 1 alobanov 1399 24031 Mar 5 14:15 PhotonIsolation_Barrel_-999_V33nano.pdf\r\n", + " 12 -rw-r--r--. 1 alobanov 1399 12187 Mar 5 14:15 PhotonIsolation_Barrel_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 493 Mar 5 14:15 PhotonIsolation_Barrel_-999_V33nano.yaml\r\n", + " 73 -rw-r--r--. 1 alobanov 1399 73930 Mar 5 14:15 PhotonIsolation_Endcap_-999_V33nano.png\r\n", + " 24 -rw-r--r--. 1 alobanov 1399 23799 Mar 5 14:15 PhotonIsolation_Endcap_-999_V33nano.pdf\r\n", + " 12 -rw-r--r--. 1 alobanov 1399 12189 Mar 5 14:15 PhotonIsolation_Endcap_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 518 Mar 5 14:15 PhotonIsolation_Endcap_-999_V33nano.yaml\r\n", + "151 -rw-r--r--. 1 alobanov 1399 153947 Mar 5 14:16 PhotonsMatching_Eta_Pt10to25_-999_V33nano.png\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 28831 Mar 5 14:16 PhotonsMatching_Eta_Pt10to25_-999_V33nano.pdf\r\n", + " 15 -rw-r--r--. 1 alobanov 1399 14563 Mar 5 14:16 PhotonsMatching_Eta_Pt10to25_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 542 Mar 5 14:16 PhotonsMatching_Eta_Pt10to25_-999_V33nano.yaml\r\n", + "113 -rw-r--r--. 1 alobanov 1399 115541 Mar 5 14:16 PhotonsMatching_Eta_Pt25toInf_-999_V33nano.png\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 29419 Mar 5 14:16 PhotonsMatching_Eta_Pt25toInf_-999_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15489 Mar 5 14:16 PhotonsMatching_Eta_Pt25toInf_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 519 Mar 5 14:16 PhotonsMatching_Eta_Pt25toInf_-999_V33nano.yaml\r\n", + "113 -rw-r--r--. 1 alobanov 1399 115616 Mar 5 14:16 PhotonsMatching_Barrel_-999_V33nano.png\r\n", + " 30 -rw-r--r--. 1 alobanov 1399 29754 Mar 5 14:16 PhotonsMatching_Barrel_-999_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15530 Mar 5 14:16 PhotonsMatching_Barrel_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 508 Mar 5 14:16 PhotonsMatching_Barrel_-999_V33nano.yaml\r\n", + "118 -rw-r--r--. 1 alobanov 1399 120570 Mar 5 14:17 PhotonsMatching_Endcap_-999_V33nano.png\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 28906 Mar 5 14:17 PhotonsMatching_Endcap_-999_V33nano.pdf\r\n", + " 15 -rw-r--r--. 1 alobanov 1399 15354 Mar 5 14:17 PhotonsMatching_Endcap_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 508 Mar 5 14:17 PhotonsMatching_Endcap_-999_V33nano.yaml\r\n", + "116 -rw-r--r--. 1 alobanov 1399 118065 Mar 5 14:17 PhotonsMatching_Barrel_wPrunedGenParts_-999_V33nano.png\r\n", + " 30 -rw-r--r--. 1 alobanov 1399 30451 Mar 5 14:17 PhotonsMatching_Barrel_wPrunedGenParts_-999_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15546 Mar 5 14:17 PhotonsMatching_Barrel_wPrunedGenParts_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 524 Mar 5 14:17 PhotonsMatching_Barrel_wPrunedGenParts_-999_V33nano.yaml\r\n", + "120 -rw-r--r--. 1 alobanov 1399 122878 Mar 5 14:17 PhotonsMatching_Endcap_wPrunedGenParts_-999_V33nano.png\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 29556 Mar 5 14:17 PhotonsMatching_Endcap_wPrunedGenParts_-999_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15370 Mar 5 14:18 PhotonsMatching_Endcap_wPrunedGenParts_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 524 Mar 5 14:18 PhotonsMatching_Endcap_wPrunedGenParts_-999_V33nano.yaml\r\n", + "104 -rw-r--r--. 1 alobanov 1399 106363 Mar 5 14:18 PhotonsTrigger_Barrel_10_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 31277 Mar 5 14:18 PhotonsTrigger_Barrel_10_V33nano.pdf\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 25481 Mar 5 14:18 PhotonsTrigger_Barrel_10_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 646 Mar 5 14:18 PhotonsTrigger_Barrel_10_V33nano.yaml\r\n", + "110 -rw-r--r--. 1 alobanov 1399 112502 Mar 5 14:18 PhotonsTrigger_Barrel_20_V33nano.png\r\n", + " 32 -rw-r--r--. 1 alobanov 1399 32506 Mar 5 14:18 PhotonsTrigger_Barrel_20_V33nano.pdf\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 26892 Mar 5 14:18 PhotonsTrigger_Barrel_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 646 Mar 5 14:18 PhotonsTrigger_Barrel_20_V33nano.yaml\r\n", + "112 -rw-r--r--. 1 alobanov 1399 113831 Mar 5 14:19 PhotonsTrigger_Barrel_30_V33nano.png\r\n", + " 32 -rw-r--r--. 1 alobanov 1399 32487 Mar 5 14:19 PhotonsTrigger_Barrel_30_V33nano.pdf\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 26954 Mar 5 14:19 PhotonsTrigger_Barrel_30_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 646 Mar 5 14:19 PhotonsTrigger_Barrel_30_V33nano.yaml\r\n", + "111 -rw-r--r--. 1 alobanov 1399 112900 Mar 5 14:19 PhotonsTrigger_Barrel_40_V33nano.png\r\n", + " 32 -rw-r--r--. 1 alobanov 1399 32154 Mar 5 14:19 PhotonsTrigger_Barrel_40_V33nano.pdf\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 26639 Mar 5 14:19 PhotonsTrigger_Barrel_40_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 646 Mar 5 14:19 PhotonsTrigger_Barrel_40_V33nano.yaml\r\n", + " 94 -rw-r--r--. 1 alobanov 1399 95269 Mar 5 14:20 PhotonsTrigger_Endcap_10_V33nano.png\r\n", + " 28 -rw-r--r--. 1 alobanov 1399 28011 Mar 5 14:20 PhotonsTrigger_Endcap_10_V33nano.pdf\r\n", + " 23 -rw-r--r--. 1 alobanov 1399 23024 Mar 5 14:20 PhotonsTrigger_Endcap_10_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 646 Mar 5 14:20 PhotonsTrigger_Endcap_10_V33nano.yaml\r\n", + "108 -rw-r--r--. 1 alobanov 1399 110536 Mar 5 14:20 PhotonsTrigger_Endcap_20_V33nano.png\r\n", + " 30 -rw-r--r--. 1 alobanov 1399 29936 Mar 5 14:20 PhotonsTrigger_Endcap_20_V33nano.pdf\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 24683 Mar 5 14:20 PhotonsTrigger_Endcap_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 646 Mar 5 14:20 PhotonsTrigger_Endcap_20_V33nano.yaml\r\n", + "112 -rw-r--r--. 1 alobanov 1399 114151 Mar 5 14:21 PhotonsTrigger_Endcap_30_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 30744 Mar 5 14:21 PhotonsTrigger_Endcap_30_V33nano.pdf\r\n", + " 25 -rw-r--r--. 1 alobanov 1399 25577 Mar 5 14:21 PhotonsTrigger_Endcap_30_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 646 Mar 5 14:21 PhotonsTrigger_Endcap_30_V33nano.yaml\r\n", + "110 -rw-r--r--. 1 alobanov 1399 112334 Mar 5 14:21 PhotonsTrigger_Endcap_40_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 30741 Mar 5 14:21 PhotonsTrigger_Endcap_40_V33nano.pdf\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 25629 Mar 5 14:21 PhotonsTrigger_Endcap_40_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 646 Mar 5 14:21 PhotonsTrigger_Endcap_40_V33nano.yaml\r\n", + "104 -rw-r--r--. 1 alobanov 1399 105700 Mar 5 14:55 ElectronsTriggerBarrel_10_V33nano.png\r\n", + " 32 -rw-r--r--. 1 alobanov 1399 32110 Mar 5 14:55 ElectronsTriggerBarrel_10_V33nano.pdf\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 27253 Mar 5 14:55 ElectronsTriggerBarrel_10_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 658 Mar 5 14:55 ElectronsTriggerBarrel_10_V33nano.yaml\r\n", + "110 -rw-r--r--. 1 alobanov 1399 112112 Mar 5 14:55 ElectronsTriggerBarrel_20_V33nano.png\r\n", + " 32 -rw-r--r--. 1 alobanov 1399 32165 Mar 5 14:55 ElectronsTriggerBarrel_20_V33nano.pdf\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 27045 Mar 5 14:55 ElectronsTriggerBarrel_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 658 Mar 5 14:55 ElectronsTriggerBarrel_20_V33nano.yaml\r\n", + "110 -rw-r--r--. 1 alobanov 1399 112444 Mar 5 14:56 ElectronsTriggerBarrel_30_V33nano.png\r\n", + " 32 -rw-r--r--. 1 alobanov 1399 31851 Mar 5 14:56 ElectronsTriggerBarrel_30_V33nano.pdf\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 26759 Mar 5 14:56 ElectronsTriggerBarrel_30_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 658 Mar 5 14:56 ElectronsTriggerBarrel_30_V33nano.yaml\r\n", + "110 -rw-r--r--. 1 alobanov 1399 112569 Mar 5 14:57 ElectronsTriggerBarrel_40_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 31289 Mar 5 14:57 ElectronsTriggerBarrel_40_V33nano.pdf\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 26189 Mar 5 14:57 ElectronsTriggerBarrel_40_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 658 Mar 5 14:57 ElectronsTriggerBarrel_40_V33nano.yaml\r\n", + "102 -rw-r--r--. 1 alobanov 1399 104394 Mar 5 14:57 ElectronsTriggerEndcap_10_V33nano.png\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 29301 Mar 5 14:57 ElectronsTriggerEndcap_10_V33nano.pdf\r\n", + " 24 -rw-r--r--. 1 alobanov 1399 24487 Mar 5 14:57 ElectronsTriggerEndcap_10_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 658 Mar 5 14:57 ElectronsTriggerEndcap_10_V33nano.yaml\r\n", + "108 -rw-r--r--. 1 alobanov 1399 110230 Mar 5 14:58 ElectronsTriggerEndcap_20_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 30984 Mar 5 14:58 ElectronsTriggerEndcap_20_V33nano.pdf\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 26147 Mar 5 14:58 ElectronsTriggerEndcap_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 658 Mar 5 14:58 ElectronsTriggerEndcap_20_V33nano.yaml\r\n", + "107 -rw-r--r--. 1 alobanov 1399 108881 Mar 5 14:59 ElectronsTriggerEndcap_30_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 30990 Mar 5 14:59 ElectronsTriggerEndcap_30_V33nano.pdf\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 26156 Mar 5 14:59 ElectronsTriggerEndcap_30_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 658 Mar 5 14:59 ElectronsTriggerEndcap_30_V33nano.yaml\r\n", + "112 -rw-r--r--. 1 alobanov 1399 114149 Mar 5 14:59 ElectronsTriggerEndcap_40_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 31071 Mar 5 14:59 ElectronsTriggerEndcap_40_V33nano.pdf\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 26177 Mar 5 14:59 ElectronsTriggerEndcap_40_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 658 Mar 5 14:59 ElectronsTriggerEndcap_40_V33nano.yaml\r\n", + "128 -rw-r--r--. 1 alobanov 1399 130118 Mar 7 10:15 TauMatching_Eta_Pt40To100_-999_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 30746 Mar 7 10:15 TauMatching_Eta_Pt40To100_-999_V33nano.pdf\r\n", + " 17 -rw-r--r--. 1 alobanov 1399 17098 Mar 7 10:15 TauMatching_Eta_Pt40To100_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 520 Mar 7 10:15 TauMatching_Eta_Pt40To100_-999_V33nano.yaml\r\n", + "156 -rw-r--r--. 1 alobanov 1399 159609 Mar 7 10:16 TauMatching_Eta_Pt100ToInf_-999_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 31511 Mar 7 10:16 TauMatching_Eta_Pt100ToInf_-999_V33nano.pdf\r\n", + " 20 -rw-r--r--. 1 alobanov 1399 19633 Mar 7 10:16 TauMatching_Eta_Pt100ToInf_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 493 Mar 7 10:16 TauMatching_Eta_Pt100ToInf_-999_V33nano.yaml\r\n", + "126 -rw-r--r--. 1 alobanov 1399 128665 Mar 7 10:16 TausMatchingBarrel_-999_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 31699 Mar 7 10:16 TausMatchingBarrel_-999_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 16251 Mar 7 10:16 TausMatchingBarrel_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 488 Mar 7 10:16 TausMatchingBarrel_-999_V33nano.yaml\r\n", + "145 -rw-r--r--. 1 alobanov 1399 147646 Mar 7 10:16 TausMatchingEndcap_-999_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 31494 Mar 7 10:16 TausMatchingEndcap_-999_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 16136 Mar 7 10:16 TausMatchingEndcap_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 488 Mar 7 10:16 TausMatchingEndcap_-999_V33nano.yaml\r\n", + "117 -rw-r--r--. 1 alobanov 1399 119326 Mar 7 10:37 TauTriggerBarrel_50perc_20_V33nano.png\r\n", + " 30 -rw-r--r--. 1 alobanov 1399 29886 Mar 7 10:37 TauTriggerBarrel_50perc_20_V33nano.pdf\r\n", + " 15 -rw-r--r--. 1 alobanov 1399 14617 Mar 7 10:37 TauTriggerBarrel_50perc_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 594 Mar 7 10:37 TauTriggerBarrel_50perc_20_V33nano.yaml\r\n", + "145 -rw-r--r--. 1 alobanov 1399 147718 Mar 7 10:37 TauTriggerBarrel_50perc_30_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 31138 Mar 7 10:37 TauTriggerBarrel_50perc_30_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15836 Mar 7 10:37 TauTriggerBarrel_50perc_30_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 594 Mar 7 10:37 TauTriggerBarrel_50perc_30_V33nano.yaml\r\n", + "113 -rw-r--r--. 1 alobanov 1399 115524 Mar 7 10:38 TauTriggerEndcap_50perc_20_V33nano.png\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 29537 Mar 7 10:38 TauTriggerEndcap_50perc_20_V33nano.pdf\r\n", + " 14 -rw-r--r--. 1 alobanov 1399 14298 Mar 7 10:38 TauTriggerEndcap_50perc_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 594 Mar 7 10:38 TauTriggerEndcap_50perc_20_V33nano.yaml\r\n", + "146 -rw-r--r--. 1 alobanov 1399 149052 Mar 7 10:38 TauTriggerEndcap_50perc_30_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 30895 Mar 7 10:38 TauTriggerEndcap_50perc_30_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15599 Mar 7 10:38 TauTriggerEndcap_50perc_30_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 594 Mar 7 10:38 TauTriggerEndcap_50perc_30_V33nano.yaml\r\n", + "118 -rw-r--r--. 1 alobanov 1399 119980 Mar 7 10:44 TauTriggerBarrel_90perc_20_V33nano.png\r\n", + " 30 -rw-r--r--. 1 alobanov 1399 29884 Mar 7 10:44 TauTriggerBarrel_90perc_20_V33nano.pdf\r\n", + " 15 -rw-r--r--. 1 alobanov 1399 14610 Mar 7 10:44 TauTriggerBarrel_90perc_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 622 Mar 7 10:44 TauTriggerBarrel_90perc_20_V33nano.yaml\r\n", + "145 -rw-r--r--. 1 alobanov 1399 147705 Mar 7 10:44 TauTriggerBarrel_90perc_30_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 31158 Mar 7 10:44 TauTriggerBarrel_90perc_30_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15818 Mar 7 10:44 TauTriggerBarrel_90perc_30_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 622 Mar 7 10:44 TauTriggerBarrel_90perc_30_V33nano.yaml\r\n", + "113 -rw-r--r--. 1 alobanov 1399 115339 Mar 7 10:45 TauTriggerEndcap_90perc_20_V33nano.png\r\n", + " 29 -rw-r--r--. 1 alobanov 1399 29548 Mar 7 10:45 TauTriggerEndcap_90perc_20_V33nano.pdf\r\n", + " 14 -rw-r--r--. 1 alobanov 1399 14311 Mar 7 10:45 TauTriggerEndcap_90perc_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 622 Mar 7 10:45 TauTriggerEndcap_90perc_20_V33nano.yaml\r\n", + "146 -rw-r--r--. 1 alobanov 1399 148894 Mar 7 10:45 TauTriggerEndcap_90perc_30_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 30924 Mar 7 10:45 TauTriggerEndcap_90perc_30_V33nano.pdf\r\n", + " 16 -rw-r--r--. 1 alobanov 1399 15592 Mar 7 10:45 TauTriggerEndcap_90perc_30_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 622 Mar 7 10:45 TauTriggerEndcap_90perc_30_V33nano.yaml\r\n", + "116 -rw-r--r--. 1 alobanov 1399 118002 Mar 7 11:21 HT_90perc_350_V33nano.png\r\n", + " 31 -rw-r--r--. 1 alobanov 1399 30814 Mar 7 11:21 HT_90perc_350_V33nano.pdf\r\n", + " 18 -rw-r--r--. 1 alobanov 1399 17600 Mar 7 11:21 HT_90perc_350_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 484 Mar 7 11:21 HT_90perc_350_V33nano.yaml\r\n", + "108 -rw-r--r--. 1 alobanov 1399 109976 Mar 7 11:21 MHT_50perc_70_V33nano.png\r\n", + " 28 -rw-r--r--. 1 alobanov 1399 28199 Mar 7 11:21 MHT_50perc_70_V33nano.pdf\r\n", + " 12 -rw-r--r--. 1 alobanov 1399 11334 Mar 7 11:21 MHT_50perc_70_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 501 Mar 7 11:21 MHT_50perc_70_V33nano.yaml\r\n", + "110 -rw-r--r--. 1 alobanov 1399 112418 Mar 7 11:21 MHT_50perc_150_V33nano.png\r\n", + " 28 -rw-r--r--. 1 alobanov 1399 28094 Mar 7 11:21 MHT_50perc_150_V33nano.pdf\r\n", + " 12 -rw-r--r--. 1 alobanov 1399 11470 Mar 7 11:21 MHT_50perc_150_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 501 Mar 7 11:21 MHT_50perc_150_V33nano.yaml\r\n", + "129 -rw-r--r--. 1 alobanov 1399 131776 Mar 7 11:21 MET_90perc_150_V33nano.png\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 27441 Mar 7 11:21 MET_90perc_150_V33nano.pdf\r\n", + " 12 -rw-r--r--. 1 alobanov 1399 12161 Mar 7 11:21 MET_90perc_150_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 406 Mar 7 11:21 MET_90perc_150_V33nano.yaml\r\n", + " 99 -rw-r--r--. 1 alobanov 1399 100428 Mar 7 14:07 MuonsTrigger_Barrel_20_V33nano.png\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 26703 Mar 7 14:07 MuonsTrigger_Barrel_20_V33nano.pdf\r\n", + " 10 -rw-r--r--. 1 alobanov 1399 9344 Mar 7 14:07 MuonsTrigger_Barrel_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 578 Mar 7 14:07 MuonsTrigger_Barrel_20_V33nano.yaml\r\n", + " 99 -rw-r--r--. 1 alobanov 1399 100978 Mar 7 14:08 MuonsTrigger_Barrel_25_V33nano.png\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 26612 Mar 7 14:08 MuonsTrigger_Barrel_25_V33nano.pdf\r\n", + " 10 -rw-r--r--. 1 alobanov 1399 9252 Mar 7 14:08 MuonsTrigger_Barrel_25_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 578 Mar 7 14:08 MuonsTrigger_Barrel_25_V33nano.yaml\r\n", + "103 -rw-r--r--. 1 alobanov 1399 104911 Mar 7 14:08 MuonsTrigger_Overlap_20_V33nano.png\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 26707 Mar 7 14:08 MuonsTrigger_Overlap_20_V33nano.pdf\r\n", + " 10 -rw-r--r--. 1 alobanov 1399 9573 Mar 7 14:08 MuonsTrigger_Overlap_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 608 Mar 7 14:08 MuonsTrigger_Overlap_20_V33nano.yaml\r\n", + "103 -rw-r--r--. 1 alobanov 1399 105116 Mar 7 14:08 MuonsTrigger_Overlap_25_V33nano.png\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 26639 Mar 7 14:08 MuonsTrigger_Overlap_25_V33nano.pdf\r\n", + " 10 -rw-r--r--. 1 alobanov 1399 9474 Mar 7 14:08 MuonsTrigger_Overlap_25_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 608 Mar 7 14:08 MuonsTrigger_Overlap_25_V33nano.yaml\r\n", + "104 -rw-r--r--. 1 alobanov 1399 105680 Mar 7 14:08 MuonsTrigger_Endcap_20_V33nano.png\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 26455 Mar 7 14:08 MuonsTrigger_Endcap_20_V33nano.pdf\r\n", + " 10 -rw-r--r--. 1 alobanov 1399 9769 Mar 7 14:08 MuonsTrigger_Endcap_20_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 578 Mar 7 14:08 MuonsTrigger_Endcap_20_V33nano.yaml\r\n", + "104 -rw-r--r--. 1 alobanov 1399 105958 Mar 7 14:09 MuonsTrigger_Endcap_25_V33nano.png\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 26432 Mar 7 14:09 MuonsTrigger_Endcap_25_V33nano.pdf\r\n", + " 10 -rw-r--r--. 1 alobanov 1399 9736 Mar 7 14:09 MuonsTrigger_Endcap_25_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 578 Mar 7 14:09 MuonsTrigger_Endcap_25_V33nano.yaml\r\n", + "106 -rw-r--r--. 1 alobanov 1399 108026 Mar 13 11:53 MuonsMatching_Eta_Pt2to5_-999_V33nano.png\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 25721 Mar 13 11:53 MuonsMatching_Eta_Pt2to5_-999_V33nano.pdf\r\n", + " 8 -rw-r--r--. 1 alobanov 1399 8000 Mar 13 11:53 MuonsMatching_Eta_Pt2to5_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 511 Mar 13 11:53 MuonsMatching_Eta_Pt2to5_-999_V33nano.yaml\r\n", + " 82 -rw-r--r--. 1 alobanov 1399 83299 Mar 13 11:53 MuonsMatching_Eta_Pt15toInf_-999_V33nano.png\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 26464 Mar 13 11:53 MuonsMatching_Eta_Pt15toInf_-999_V33nano.pdf\r\n", + " 9 -rw-r--r--. 1 alobanov 1399 8693 Mar 13 11:53 MuonsMatching_Eta_Pt15toInf_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 496 Mar 13 11:53 MuonsMatching_Eta_Pt15toInf_-999_V33nano.yaml\r\n", + " 95 -rw-r--r--. 1 alobanov 1399 96432 Mar 13 11:53 MuonsMatchingBarrel_-999_V33nano.png\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 27157 Mar 13 11:53 MuonsMatchingBarrel_-999_V33nano.pdf\r\n", + " 11 -rw-r--r--. 1 alobanov 1399 10367 Mar 13 11:53 MuonsMatchingBarrel_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 483 Mar 13 11:53 MuonsMatchingBarrel_-999_V33nano.yaml\r\n", + " 96 -rw-r--r--. 1 alobanov 1399 98012 Mar 13 11:54 MuonsMatchingOverlap_-999_V33nano.png\r\n", + " 27 -rw-r--r--. 1 alobanov 1399 26901 Mar 13 11:54 MuonsMatchingOverlap_-999_V33nano.pdf\r\n", + " 11 -rw-r--r--. 1 alobanov 1399 10290 Mar 13 11:54 MuonsMatchingOverlap_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 513 Mar 13 11:54 MuonsMatchingOverlap_-999_V33nano.yaml\r\n", + " 96 -rw-r--r--. 1 alobanov 1399 97953 Mar 13 11:54 MuonsMatchingEndcap_-999_V33nano.png\r\n", + " 26 -rw-r--r--. 1 alobanov 1399 26603 Mar 13 11:54 MuonsMatchingEndcap_-999_V33nano.pdf\r\n", + " 11 -rw-r--r--. 1 alobanov 1399 10584 Mar 13 11:54 MuonsMatchingEndcap_-999_V33nano.json\r\n", + " 1 -rw-r--r--. 1 alobanov 1399 508 Mar 13 11:54 MuonsMatchingEndcap_-999_V33nano.yaml\r\n" + ] + } + ], + "source": [ + "! ls -lsrt /eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools/V33nano/object_performance/turnons/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9e2ddbd3", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/menu_tools/utils/compare_plots.py b/menu_tools/utils/compare_plots.py new file mode 100644 index 00000000..51fbbaba --- /dev/null +++ b/menu_tools/utils/compare_plots.py @@ -0,0 +1,303 @@ +import os +import json +import numpy as np +import pandas as pd +from glob import glob +import matplotlib.pyplot as plt +import mplhep as hep + +f = plt.figure() +plt.close() + + +plt.style.use(hep.style.CMS) +plt.rcParams["figure.facecolor"] = "white" + + +def load_json(fname): + with open(fname) as f: + plot = json.load(f) + return plot + + +def remap_nano_key(key): + if "StaMu" in key: + key = key.replace("StaMu", "gmtMuon") + + # print("before", key) + + if "L1puppiJetSC4sums:HT" in key: + key = key.replace("L1puppiJetSC4sums:HT", "seededConePuppiHT:default") + if "L1puppiJetSC4sums:MHT" in key: + key = key.replace("L1puppiJetSC4sums:MHT", "seededConePuppiMHT:default") + + if "nnPuppiTau" in key: + key = key.replace("nnPuppiTau", "nnTau") + + if "L1puppiHistoJetSums:HT" in key: + key = key.replace("L1puppiHistoJetSums:HT", "phase1PuppiHT:default") + if "L1puppiHistoJetSums:MHT" in key: + key = key.replace("L1puppiHistoJetSums:MHT", "phase1PuppiMHT:default") + + if "L1TrackHT:HT" in key: + key = key.replace("L1TrackHT:HT", "trackerHT:default") + if "L1TrackHT:MHT" in key: + key = key.replace("L1TrackHT:MHT", "trackerMHT:default") + if "L1TrackMET" in key: + key = key.replace("L1TrackMET", "trackerMET") + if "L1TrackJet" in key: + key = key.replace("L1TrackJet", "trackerJet") + + if "puppiJetHisto" in key: + key = key.replace("puppiJetHisto", "phase1PuppiJet") + if "puppiJetSC4" in key: + key = key.replace("puppiJetSC4", "seededConePuppiJet") + + if "L1puppiExtJetSC4" in key: + key = "seededConeExtendedPuppiJet" + + key = key.replace("L1", "") + # print("after", key) + + return key + + +def comp_plots( + nano_plot, + menu_plot, + sfxs=["v22", "v27"], + ptype="turnon", + lss=["-", "--"], + keys=None, + markers=["o", "s"], +): + fig, axs = plt.subplots( + 2, 1, figsize=(10, 12), sharex=True, gridspec_kw={"height_ratios": [3, 1]} + ) + hep.cms.label(ax=axs[0], llabel="Phase-2 Simulation", rlabel="14 TeV") + + if keys is None: + keys = nano_plot.keys() + # clean keys + clean_keys = [] + for key in keys: + if key in ["xlabel", "ylabel", "watermark"]: + continue + if key not in nano_plot.keys(): + print(f"Warning: {key} not in plot 1 keys. Skipping...") + continue + if remap_nano_key(key) not in menu_plot.keys(): + print(menu_plot.keys()) + print(f"Warning: {key} not in plot 2 keys. Skipping...") + continue + clean_keys.append(key) + + # if ptype == "rate": + # xval_str = "x_values" + # yval_str = "y_values" + # else: + # xval_str = "xvals" + # yval_str = "yvals" + + for j, key in enumerate(clean_keys): + ## plot 1 + plots = [nano_plot[key], menu_plot[remap_nano_key(key)]] + color = f"C{j}" + + for i, p1 in enumerate(plots): + sfx = sfxs[i] + label = f"{sfx}, {p1['label']}" + + if ptype == "scalings": + axs[0].plot( + p1["xvals"], + p1["yvals"], + color=color, + marker=markers[i], + label=label, + ls=lss[i], + mfc="none" if i == 1 else color, + ) + elif ptype == "rate": + axs[0].plot( + p1["x_values"], + p1["y_values"], + color=color, + marker=markers[i], + label=label, + ls=lss[i], + mfc="none" if i == 1 else color, + ) + elif ptype == "turnon": + p1["err_kwargs"]["marker"] = markers[i] + p1["err_kwargs"]["xerr"] = None + + axs[0].errorbar( + p1["xbins"], + p1["efficiency"], + yerr=p1["efficiency_err"], + label=label, + ls=lss[i], + color=color, + mfc="none" if i == 1 else color, + **(p1["err_kwargs"]), + ) + + ## Make ratios + if ptype == "scalings": + d_p1 = dict(zip(plots[0]["xvals"], plots[0]["yvals"])) + d_p2 = dict(zip(plots[1]["xvals"], plots[1]["yvals"])) + elif ptype == "rate": + d_p1 = dict(zip(plots[0]["x_values"], plots[0]["y_values"])) + d_p2 = dict(zip(plots[1]["x_values"], plots[1]["y_values"])) + elif ptype == "turnon": + d_p1 = dict(zip(plots[0]["xbins"], plots[0]["efficiency"])) + d_p2 = dict(zip(plots[1]["xbins"], plots[1]["efficiency"])) + + # add 100% eff line + # axs[0].axhline(1,ls = ":", alpha = 0.5, c = "k") + + df_p1 = pd.Series(d_p1) + df_p2 = pd.Series(d_p2) + + # ax = axs[1] + + if (df_p1.sum() != 0) and (df_p1.sum() != 0): + diff = df_p1 - df_p2 + if ptype == "rate": + diff /= df_p2 + label = p1["label"].split(",")[0] + + diff.plot(ax=axs[1], color=color, label=label) + if ptype == "turnon": + if len(plots[0]["efficiency_err"][0]) != len( + plots[1]["efficiency_err"][0] + ): + continue + y_err = np.hypot( + plots[0]["efficiency_err"][0], plots[1]["efficiency_err"][0] + ) + if len(diff) != len(y_err): + continue + axs[1].fill_between( + diff.index, + diff.values - y_err, + diff.values + y_err, + # label = label, + alpha=0.3, + color=color, + ) + + # make axis stuff + axs[0].legend(fontsize="x-small") + axs[1].legend(fontsize="x-small") + + if ptype == "rate": + axs[1].set_ylabel(f"({sfxs[0]}-{sfxs[1]})/{sfxs[1]}", fontsize="x-small") + axs[0].set_yscale("log") + axs[1].set_xlabel("Threshold [GeV]") + axs[0].set_ylabel("Rate [kHz]") + else: + axs[1].set_ylabel(f"{sfxs[0]} - {sfxs[1]}", fontsize="x-small") + + if ptype == "scalings": + axs[0].set_ylabel("95 % Location [GeV]") + axs[1].set_xlabel("L1 threshold [GeV]") + elif ptype == "turnon": + axs[0].set_ylabel(nano_plot["ylabel"], fontsize="small") + axs[1].set_xlabel(nano_plot["xlabel"]) + + axs[1].set_ylim(-0.1, 0.1) + + for ax in axs: + ax.grid() + plt.tight_layout() + plt.subplots_adjust(wspace=0, hspace=0) + + return fig + + +def main(v0, v1, v0_jsons): + for v0_json in v0_jsons: + v1_json = v0_json.replace(v0, v1) + if not os.path.exists(v1_json): + print(v1_json + " does not exist") + continue + # continue + + # print("1") + plot1 = load_json(v0_json) + # print("2") + plot2 = load_json(v1_json) + + print(os.path.basename(v0_json)) + print(os.path.basename(v1_json)) + + if "turnon" in v0_json: + ptype = "turnon" + elif "scaling" in v0_json: + ptype = "scalings" + elif "rate" in v0_json: + ptype = "rate" + else: + print("WARNING, unsupported plot type") + continue + + comp_plots( + plot1, + plot2, + sfxs=[v0, v1], + lss=["-", "--"], + # lss = ["",""], + markers=[".", "o"], + ptype=ptype, + ) + + # outfname = v0_json.replace( + # v0,"%svs%s"%(v0,v1)).replace( + # ".json",".png").replace("tools","tools/comparisons") + + outfname = ( + v0_json.replace(v0, "%svs%s" % (v0, v1)) + .replace(".json", ".png") + .replace("%svs%s/" % (v0, v1), "comparisons/%svs%s/" % (v0, v1)) + ) + + # break + + outdir = os.path.dirname(outfname) + if not os.path.exists(outdir): + os.makedirs(outdir) + + print("Saving plot %s" % outfname) + plt.savefig(outfname) + + # save pdf + outfname = outfname.replace(".png", ".pdf") + plt.savefig(outfname) + + plt.close() + # break + + +### MAIN + +v0 = "V33nano" +# v0 = "V29" +# v0 = "V32nano" +# v0 = "V31" + +basedir = "/eos/user/a/alobanov/www/L1T/Phase2/menu/Validation/NewMenuTools" +v0_jsons = glob( + # f"{basedir}/{v0}//s*/**.json") + f"{basedir}/{v0}/object_performance/r*/*JetsBy*.json" +) + +# v1 = "V29" +# v1 = "V32" +# v1 = "V32nano" +v1 = "V31" + +print(f"Found {len(v0_jsons)} files") + +main(v0, v1, v0_jsons) diff --git a/menu_tools/utils/config.py b/menu_tools/utils/config.py new file mode 100644 index 00000000..05419827 --- /dev/null +++ b/menu_tools/utils/config.py @@ -0,0 +1,46 @@ +from typing import Any, Optional + + +class BasePlotConfig: + """Base class for yaml/dict style plot config + + Includes abstractions for test_objects and creation of Object instances. + """ + + def __init__(self, cfg: dict[str, Any], name: Optional[str] = None) -> None: + self._cfg = cfg + self._name = name + + @property + def plot_name(self) -> Optional[str]: + return self._name + + @property + def config_dict(self) -> dict[str, Any]: + return self._cfg + + @property + def sample(self): + try: + return self._cfg["sample"] + except KeyError: + raise KeyError(f"No sample configured for {self.plot_name}!") + + @property + def version(self) -> str: + try: + return self._cfg["version"] + except KeyError: + raise KeyError(f"No version configured for {self.plot_name}!") + + @property + def bin_width(self) -> float: + return float(self._cfg["binning"]["step"]) + + @property + def bin_min(self) -> float: + return float(self._cfg["binning"]["min"]) + + @property + def bin_max(self) -> float: + return float(self._cfg["binning"]["max"]) diff --git a/menu_tools/utils/constants.py b/menu_tools/utils/constants.py new file mode 100644 index 00000000..d17d803f --- /dev/null +++ b/menu_tools/utils/constants.py @@ -0,0 +1,3 @@ +N_BUNCHES = 2760 +REVOLUTION_FREQUENCY = 11246 +RATE_NORM_FACTOR = N_BUNCHES * REVOLUTION_FREQUENCY / 1000 # in kHz diff --git a/menu_tools/utils/objects.py b/menu_tools/utils/objects.py new file mode 100644 index 00000000..83b57182 --- /dev/null +++ b/menu_tools/utils/objects.py @@ -0,0 +1,209 @@ +import glob +import re +from typing import Optional +import yaml + +import awkward as ak + + +class Object: + """This class represents a physics object. + + The objects are configurable under `configs//objects`. + + Attributes: + eta_ranges: ranges with different cuts/quality criteria + cuts: the cuts to be applied in the different eta ranges + version: version of the menu + """ + + def __init__( + self, + object_key: str, + version: str, + ) -> None: + """Initializes an Object loading the parameters from the + corresponding config file. + + Args: + object_key: object/id specifier of the form l1_object:id[:eta_range] + version: version of the menu + """ + self.object_key = object_key + self.version = version + self._nano_obj # fail early if no config can be found + + def __str__(self) -> str: + return f"{self.nano_obj_name}:{self.obj_id_name}:{self.eta_range}" + + @property + def nano_obj_name(self) -> str: + return self.object_key.split(":")[0] + + @property + def obj_id_name(self) -> str: + return self.object_key.split(":")[1] + + @property + def eta_range(self) -> str: + """If an eta range other than "inclusive" is specified, a cut to that + range is added to `cuts`. + + Returns: + eta_range_key: `barrel`/`endcap`/`overlap`/`forward`/`inclusive` + """ + try: + eta_range_key = self.object_key.split(":")[2] + except IndexError: + eta_range_key = "inclusive" + if eta_range_key not in self.eta_ranges.keys(): + raise ValueError( + f"`eta` range specifier `{eta_range_key}` not " + f"found in object definition of {self.nano_obj_name}!" + ) + return eta_range_key + + @property + def _nano_obj(self) -> dict[str, dict]: + """ + Loads all object configuration files from self.version, + merges them and returns the configuration of self.nano_obj_name. + + Returns: + nano_obj_configs: dictionary containing the object parameters and ids + or None if no configuration is found. + """ + nano_obj_configs: dict[str, dict] = {} + config_path = f"configs/{self.version}/objects/*.y*ml" + config_files = glob.glob(config_path) + + for config in config_files: + with open(config, "r") as f: + _conf_dict = yaml.safe_load(f) + nano_obj_configs = nano_obj_configs | _conf_dict + + try: + return nano_obj_configs[self.nano_obj_name] + except KeyError: + raise FileNotFoundError( + f"No config file found for {self.nano_obj_name}:{self.obj_id_name}!" + ) + + def _get_object_default_params(self) -> dict: + """Get default paramters of the object. + + Returns: + default_object_params: dict contianing all parameters of the nano + object except ids. + """ + default_object_params = {x: y for x, y in self._nano_obj.items() if x != "ids"} + return default_object_params + + def _get_object_id_params(self) -> dict: + """Get the specific parameters specified in the object id. + + Returns: + id_params: parameters specifically definied for the object id. + """ + id_params = self._nano_obj["ids"][self.obj_id_name] + return id_params + + @property + def _object_params(self) -> dict: + """ + Returns: + object_parameters: Parameters of the objects as a dict where + defaults are overwritten if id specific params are configured. + """ + defaults = self._get_object_default_params() + id_specific = self._get_object_id_params() + object_parameters = defaults | id_specific + return object_parameters + + @property + def match_dR(self) -> float: + return self._object_params["match_dR"] + + @property + def plot_label(self) -> str: + return self._object_params["label"] + + def get_scaling_object(self, eta_range: str) -> str: + """ + This enables the definition of an object/id which uses + the scalings from a different object. + """ + if "use_scalings_from_object" in self._object_params: + return self._object_params["use_scalings_from_object"] + return str(self).replace("inclusive", eta_range) + + @property + def eta_ranges(self) -> dict[str, tuple[float, float]]: + _eta_ranges = {} + if "eta_ranges" in self._object_params.keys(): + _eta_ranges = self._object_params["eta_ranges"] + if "inclusive" not in _eta_ranges: + _eta_ranges["inclusive"] = [0, 7] + return _eta_ranges + + @property + def cuts(self) -> Optional[dict[str, list[str]]]: + _cuts = {} + if "cuts" in self._object_params.keys(): + _cuts = self._object_params["cuts"] + if self.eta_range != "inclusive": + # if a region other than inclusive is specified an eta cut + eta_min = self.eta_ranges[self.eta_range][0] + eta_max = self.eta_ranges[self.eta_range][1] + global_eta_cut = ( + f"((abs({{eta}}) > {eta_min}) & (abs({{eta}}) < {eta_max}))" + ) + try: + _cuts["inclusive"].append(global_eta_cut) + except KeyError: + _cuts["inclusive"] = [global_eta_cut] + return _cuts + + +def compute_selection_mask_for_object_cuts(obj: Object, ak_array: ak.Array) -> ak.Array: + """Compute selection mask for object cuts on array + + obj: Object that specifies the cuts to be applied + ak_array: array on which the selection is evaluated + + Returns: + sel: boolean selection mask for entries passing all cuts form obj + """ + # Initialize mask with True everywhere + sel = ak.ones_like(ak_array[ak_array.fields[0]]) > 0 + + # If no cut are specified in object return true everywhere + if not obj.cuts: + return sel + + ## add fake eta + if "eta" not in ak_array.fields: + ak_array["eta"] = 0 + + for range_i, range_cuts in obj.cuts.items(): + # Initialize temporary mask (for rangei) with True everywhere + _sel = ak.ones_like(ak_array[ak_array.fields[0]]) > 0 + for cut in range_cuts: + cut = re.sub(r"{([^&|]*)}", r"ak_array['\1']", cut) + eta_sel = (abs(ak_array["eta"]) >= obj.eta_ranges[range_i][0]) & ( + abs(ak_array["eta"]) < obj.eta_ranges[range_i][1] + ) + _sel = _sel & (eval(cut) + ~eta_sel) + # apply OR logic + sel = sel & _sel + return sel + + +if __name__ == "__main__": + x = Object("tkElectron:Iso", "V29") + x = Object("caloJet:default", "V29") + print(x) + print(x.match_dR) + print(x.plot_label) + print(x.eta_ranges) + print(x.cuts) diff --git a/menu_tools/utils/scalings.py b/menu_tools/utils/scalings.py new file mode 100644 index 00000000..091b1ca0 --- /dev/null +++ b/menu_tools/utils/scalings.py @@ -0,0 +1,87 @@ +import os +import warnings + +import awkward as ak +import yaml + +from menu_tools.utils.objects import Object + + +def load_scaling_params(obj: Object, eta_range: str) -> tuple[float, float]: + """Retrieves scalings for object+id from `outputs` + + obj: Object for which to retrive scaling parameters + eta_range: specifier of the range for which scalings are to be retrieved + + Returns: + scaling_params: parameters computed in object_performance + for the online-offline scaling + """ + fpath = os.path.join( + "outputs", + obj.version, + "object_performance", + "scalings", + obj.get_scaling_object(eta_range) + ".yaml", + ) + try: + with open(fpath, "r") as f: + scaling_params = yaml.safe_load(f) + except FileNotFoundError: + warnings.warn_explicit( + (f"No file was found at `{fpath}`"), + UserWarning, + filename="utils/scalings.py", + lineno=26, + ) + raise UserWarning + return scaling_params["slope"], scaling_params["offset"] + + +def get_pt_branch(arr: ak.Array, obj_name: str) -> ak.Array: + if "pt" in arr.fields: + pt_orig = arr.pt + elif "et" in arr.fields: + pt_orig = arr.et + elif "" in arr.fields: + pt_orig = arr[""] + ### HACK + elif "TrackHT:MHT" in obj_name: + pt_orig = arr["mht"] + elif "TrackHT:HT" in obj_name: + pt_orig = arr["ht"] + else: + raise RuntimeError(f"Unknown pt branch for {obj_name}! in fields", arr.fields) + return pt_orig + + +def add_offline_pt(arr: ak.Array, obj: Object) -> ak.Array: + """ + Add offline pt to filed called `offline_pt` and return array + """ + pt_orig = get_pt_branch(arr, str(obj)) + new_pt = ak.zeros_like(pt_orig) + + if len(obj.eta_ranges) == 1 and list(obj.eta_ranges)[0] == "inclusive": + # if only a single eta range is configured, the scalings are applied + # inclusively on that region + slope, offset = load_scaling_params(obj, "inclusive") + new_pt = new_pt + (pt_orig * slope + offset) + else: + # if multiple eta ranges are found, the "inclusive" range is skipped + # and all other ranges are applied + for eta_range, eta_min_max in obj.eta_ranges.items(): + if eta_range == "inclusive": + continue + slope, offset = load_scaling_params(obj, eta_range) + eta_mask = (abs(arr.eta) >= eta_min_max[0]) & ( + abs(arr.eta) < eta_min_max[1] + ) + new_pt = new_pt + eta_mask * (pt_orig * slope + offset) + + if "eta" in arr.fields: + arr["mass"] = 0.0 * ak.ones_like(arr["eta"]) + + arr["idx"] = ak.local_index(arr) + + return ak.with_field(arr, new_pt, "offline_pt") diff --git a/menu_tools/object_performance/tests/test_utils.py b/menu_tools/utils/tests/test_utils.py similarity index 95% rename from menu_tools/object_performance/tests/test_utils.py rename to menu_tools/utils/tests/test_utils.py index 7df338ed..e4fdb1b2 100644 --- a/menu_tools/object_performance/tests/test_utils.py +++ b/menu_tools/utils/tests/test_utils.py @@ -1,4 +1,4 @@ -from menu_tools.object_performance.utils import utils +from menu_tools.utils import utils def test_get_pdg_id(): diff --git a/menu_tools/utils/utils.py b/menu_tools/utils/utils.py index 576cf067..df53c38c 100644 --- a/menu_tools/utils/utils.py +++ b/menu_tools/utils/utils.py @@ -58,12 +58,23 @@ def get_branches(ntuple_path: str, tree: str, obj: str): ntuple = glob.glob(ntuple_path)[0] with uproot.open(ntuple) as f: all_branches = f[tree].keys() - if "GenTree" in tree: - prefix = "Generator/" - else: - prefix = "L1PhaseII/" - - obj_branches = [x.removeprefix(prefix + obj) for x in all_branches if obj in x] + if "GenTree" in tree: + prefix = "Generator/" + elif "L1PhaseII" in tree: + prefix = "L1PhaseII/" + elif "Events" in tree: + prefix = "" + + ## nano + if tree == "Events": + obj_branches = [x.split("_")[-1] for x in all_branches if x.startswith(obj)] + ## no nano + else: + obj_branches = [ + x.removeprefix(prefix + obj) + for x in all_branches + if x.startswith(prefix + obj) + ] return obj_branches diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..bcbd3ce5 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,1313 @@ +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. + +[[package]] +name = "awkward" +version = "2.5.2" +description = "Manipulate JSON-like data with NumPy-like idioms." +optional = false +python-versions = ">=3.8" +files = [ + {file = "awkward-2.5.2-py3-none-any.whl", hash = "sha256:6b6cbb62cdafb65457c4672980735a2b2e635a5eda5570a51459b4e42359ceb5"}, + {file = "awkward-2.5.2.tar.gz", hash = "sha256:34f4b440684b2e20f23b1a406aa3da4ecdf4fdb5fa0e076d5d337e955dee8ab6"}, +] + +[package.dependencies] +awkward-cpp = "28" +importlib-metadata = {version = ">=4.13.0", markers = "python_version < \"3.12\""} +numpy = ">=1.18.0" +packaging = "*" + +[[package]] +name = "awkward-cpp" +version = "28" +description = "CPU kernels and compiled extensions for Awkward Array" +optional = false +python-versions = ">=3.8" +files = [ + {file = "awkward-cpp-28.tar.gz", hash = "sha256:304ebbf900c577368fd3c491a4ddfe6a5790bdec76a2b06bdcc4728176264592"}, + {file = "awkward_cpp-28-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d7f995056387fb3d004d45012fd15eccdedee5613a331c18941caf9c2670353d"}, + {file = "awkward_cpp-28-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d8540242144067b2ef76eae0bcfa4ae7ac188f3b6160c815ce8cb95ef5fdad32"}, + {file = "awkward_cpp-28-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45b0cff5955e78f4208735e95c9f6ef5c79f9c0df857baa418ff9f0386c71af6"}, + {file = "awkward_cpp-28-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c7c726430b328aa1e3d82af5fbf25e78ab1088f3ea9cfb752efffa4ca812496"}, + {file = "awkward_cpp-28-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:31069d5d0c26be0086a5b37c9c4212b9d232c9d54a16ec4b47292bd0ebd085df"}, + {file = "awkward_cpp-28-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8f2136fa34837632ecc4d68bae41d2518bb92b60ca52aa2f5d3f3a7c0017c6a2"}, + {file = "awkward_cpp-28-cp310-cp310-win_amd64.whl", hash = "sha256:312360d76888b5114a38bcbd9ad5179e939acc0873033cf08cb8c272a15fa6e9"}, + {file = "awkward_cpp-28-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff429cc7fedc1fddbe9726256ea03265c0ab14fb200ae5d787bb2bed149cf592"}, + {file = "awkward_cpp-28-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:14ed98a25528e2517ca660638ca72217441b3817d59cf78ea10ccac9230f3749"}, + {file = "awkward_cpp-28-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26d21c444e5a83c0e4fa74f1cf1505f7c4083e23be1af2cd8191b9e181b181b4"}, + {file = "awkward_cpp-28-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cbc55e27117bf5ab26b514ddd11a0cadd847eec50dd4b8833fd65be126f46d5"}, + {file = "awkward_cpp-28-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4737ea0c337b35ee586078bc2ba41eb2f4b771108f551bc63fab6c73d2a9fc5e"}, + {file = "awkward_cpp-28-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:286f5288ad21f0296a8c4182a360c141c8dd000b6eb2fa03696ba5f2c632bd95"}, + {file = "awkward_cpp-28-cp311-cp311-win_amd64.whl", hash = "sha256:0be97d9ca36068878b18a307f919e55bb4e9538fb46432c7492bab3e64bc8251"}, + {file = "awkward_cpp-28-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d5cc1a7a6871dcaba33986bb634c9d4e6e58c6f3324f58db1884a171d1b74d11"}, + {file = "awkward_cpp-28-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4ce8def0cd6df1507876664a1714242016e52265fd715eaba57b8fe9dd978e40"}, + {file = "awkward_cpp-28-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e4419c82cdd6095471334b0bdb197c507598ffdb89b01e0bae2f04077a77b1b"}, + {file = "awkward_cpp-28-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f38e6198a9dcc4693b347c035db996f89d4407a3f6cf4cbae7d00aa8eedf8f57"}, + {file = "awkward_cpp-28-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:facc2c40ed566fe25f376eae9743ad147d900c1beb7d3dc3f592669907314a1f"}, + {file = "awkward_cpp-28-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9f0cceb35aeee70f53f03814c3a3dac06c3514eec3149e09dbd0b9e723215145"}, + {file = "awkward_cpp-28-cp312-cp312-win_amd64.whl", hash = "sha256:59ec43807b8f999c855250f464316e4ecb2e3737feb26bd996df281032c7eabc"}, + {file = "awkward_cpp-28-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:cc28f0a4528ac722979efcf970ff82fd2bcf9fa74ea70b9e3797de9182f2cd6b"}, + {file = "awkward_cpp-28-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2991ca89342e1b7ff1a803335506ead04fc83232bb1610de5321823158b18792"}, + {file = "awkward_cpp-28-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8d4f7da0d48a8e612b43b14f679a5546b758e2fea66bbb2fd515c410055c9be"}, + {file = "awkward_cpp-28-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccfc10ee04d29de244a76b9cc5f2855a1a1aa73aba1a60ab68279fa085fae583"}, + {file = "awkward_cpp-28-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cb6e81d67f40bac7d2335e6169f1065bd53af055f952347428ea7470b08f32ec"}, + {file = "awkward_cpp-28-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:17074f0354faa956aab651b578658e2d988a3974a7b0b57c54a377451240cf25"}, + {file = "awkward_cpp-28-cp38-cp38-win32.whl", hash = "sha256:2d4d40d8656f93d9df388c98083f135764bea66f7501ecf4b674427a17625aae"}, + {file = "awkward_cpp-28-cp38-cp38-win_amd64.whl", hash = "sha256:f7ce31e9c46f50adf534ca8c95a2fc97dd4e2409a95047785c84558a35996208"}, + {file = "awkward_cpp-28-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:504c1827dc301b43e80fa2223f22c7c4a30d45799fe07a5f921858d78081fd2f"}, + {file = "awkward_cpp-28-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dba4f11f362ace07820ad0340a4d94a8a08aad9b57e44839dd6ba76761e90bab"}, + {file = "awkward_cpp-28-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a787dbd2882c232cf61c76caf13610334de5d5badff269fc49c4f6a7e13a87cd"}, + {file = "awkward_cpp-28-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eaf046c3ea8b65e9340e88483271c8540e1d3c76d41afa495574e2b47117cc6"}, + {file = "awkward_cpp-28-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:22ce5406055bcc73720f76ae0dc1a12fbaaa22b00ca924688478d413a3ebfa7f"}, + {file = "awkward_cpp-28-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7d9407d051272c020c6ffea0a51a062bc44c8b5fda6e911f38faee0126d9e624"}, + {file = "awkward_cpp-28-cp39-cp39-win32.whl", hash = "sha256:26afc25e86c3631999f4188d5e173ce60ffc0125d1c69b17136d1fade3748fdf"}, + {file = "awkward_cpp-28-cp39-cp39-win_amd64.whl", hash = "sha256:4098c799897a94fdf26224a8e57064096e5918c44a2c33f280641970a595186c"}, + {file = "awkward_cpp-28-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b16a452644db24544403cb8a9fe4f47a63841f7625b9febf021a70f2331dd12e"}, + {file = "awkward_cpp-28-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abb01c5abc00cb77225f64c205da5b05a1a9a7544c388c0d3a1c811e0d1dfe18"}, + {file = "awkward_cpp-28-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9dc49bffe7f096708b3e2b1455df1d1ba3e999c6bcd3b186873d13fb015fc090"}, + {file = "awkward_cpp-28-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66d3171519caab2b10161b682839b59155b7001b1d1199230d9e137b309e5caa"}, + {file = "awkward_cpp-28-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:240479e25e83f08fe6cf93e6abb6eed1b83bf6cbf1a8ed894b2b4568ba17250f"}, + {file = "awkward_cpp-28-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dda7cebbafa71742d65f9ad10f4820ec12c257cb3ac3e250698d8b2e4acb9491"}, +] + +[package.dependencies] +numpy = ">=1.18.0" + +[[package]] +name = "black" +version = "23.12.1" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.8" +files = [ + {file = "black-23.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0aaf6041986767a5e0ce663c7a2f0e9eaf21e6ff87a5f95cbf3675bfd4c41d2"}, + {file = "black-23.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c88b3711d12905b74206227109272673edce0cb29f27e1385f33b0163c414bba"}, + {file = "black-23.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a920b569dc6b3472513ba6ddea21f440d4b4c699494d2e972a1753cdc25df7b0"}, + {file = "black-23.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:3fa4be75ef2a6b96ea8d92b1587dd8cb3a35c7e3d51f0738ced0781c3aa3a5a3"}, + {file = "black-23.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d4df77958a622f9b5a4c96edb4b8c0034f8434032ab11077ec6c56ae9f384ba"}, + {file = "black-23.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:602cfb1196dc692424c70b6507593a2b29aac0547c1be9a1d1365f0d964c353b"}, + {file = "black-23.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c4352800f14be5b4864016882cdba10755bd50805c95f728011bcb47a4afd59"}, + {file = "black-23.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:0808494f2b2df923ffc5723ed3c7b096bd76341f6213989759287611e9837d50"}, + {file = "black-23.12.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:25e57fd232a6d6ff3f4478a6fd0580838e47c93c83eaf1ccc92d4faf27112c4e"}, + {file = "black-23.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d9e13db441c509a3763a7a3d9a49ccc1b4e974a47be4e08ade2a228876500ec"}, + {file = "black-23.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1bd9c210f8b109b1762ec9fd36592fdd528485aadb3f5849b2740ef17e674e"}, + {file = "black-23.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:ae76c22bde5cbb6bfd211ec343ded2163bba7883c7bc77f6b756a1049436fbb9"}, + {file = "black-23.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1fa88a0f74e50e4487477bc0bb900c6781dbddfdfa32691e780bf854c3b4a47f"}, + {file = "black-23.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4d6a9668e45ad99d2f8ec70d5c8c04ef4f32f648ef39048d010b0689832ec6d"}, + {file = "black-23.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b18fb2ae6c4bb63eebe5be6bd869ba2f14fd0259bda7d18a46b764d8fb86298a"}, + {file = "black-23.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:c04b6d9d20e9c13f43eee8ea87d44156b8505ca8a3c878773f68b4e4812a421e"}, + {file = "black-23.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e1b38b3135fd4c025c28c55ddfc236b05af657828a8a6abe5deec419a0b7055"}, + {file = "black-23.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4f0031eaa7b921db76decd73636ef3a12c942ed367d8c3841a0739412b260a54"}, + {file = "black-23.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97e56155c6b737854e60a9ab1c598ff2533d57e7506d97af5481141671abf3ea"}, + {file = "black-23.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:dd15245c8b68fe2b6bd0f32c1556509d11bb33aec9b5d0866dd8e2ed3dba09c2"}, + {file = "black-23.12.1-py3-none-any.whl", hash = "sha256:78baad24af0f033958cad29731e27363183e140962595def56423e626f4bee3e"}, + {file = "black-23.12.1.tar.gz", hash = "sha256:4ce3ef14ebe8d9509188014d96af1c456a910d5b5cbf434a09fef7e024b3d0d5"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "contourpy" +version = "1.3.0" +description = "Python library for calculating contours of 2D quadrilateral grids" +optional = false +python-versions = ">=3.9" +files = [ + {file = "contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7"}, + {file = "contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41"}, + {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d"}, + {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223"}, + {file = "contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f"}, + {file = "contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b"}, + {file = "contourpy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad"}, + {file = "contourpy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d"}, + {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c"}, + {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb"}, + {file = "contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c"}, + {file = "contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67"}, + {file = "contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f"}, + {file = "contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09"}, + {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd"}, + {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35"}, + {file = "contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb"}, + {file = "contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b"}, + {file = "contourpy-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3"}, + {file = "contourpy-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da"}, + {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14"}, + {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8"}, + {file = "contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294"}, + {file = "contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087"}, + {file = "contourpy-1.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8"}, + {file = "contourpy-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6"}, + {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2"}, + {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927"}, + {file = "contourpy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8"}, + {file = "contourpy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2"}, + {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e"}, + {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800"}, + {file = "contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5"}, + {file = "contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb"}, + {file = "contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4"}, +] + +[package.dependencies] +numpy = ">=1.23" + +[package.extras] +bokeh = ["bokeh", "selenium"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.11.1)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] + +[[package]] +name = "cycler" +version = "0.12.1" +description = "Composable style cycles" +optional = false +python-versions = ">=3.8" +files = [ + {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, + {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, +] + +[package.extras] +docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] +tests = ["pytest", "pytest-cov", "pytest-xdist"] + +[[package]] +name = "flake8" +version = "7.1.1" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.8.1" +files = [ + {file = "flake8-7.1.1-py2.py3-none-any.whl", hash = "sha256:597477df7860daa5aa0fdd84bf5208a043ab96b8e96ab708770ae0364dd03213"}, + {file = "flake8-7.1.1.tar.gz", hash = "sha256:049d058491e228e03e67b390f311bbf88fce2dbaa8fa673e7aea87b7198b8d38"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.12.0,<2.13.0" +pyflakes = ">=3.2.0,<3.3.0" + +[[package]] +name = "fonttools" +version = "4.54.1" +description = "Tools to manipulate font files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fonttools-4.54.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7ed7ee041ff7b34cc62f07545e55e1468808691dddfd315d51dd82a6b37ddef2"}, + {file = "fonttools-4.54.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41bb0b250c8132b2fcac148e2e9198e62ff06f3cc472065dff839327945c5882"}, + {file = "fonttools-4.54.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7965af9b67dd546e52afcf2e38641b5be956d68c425bef2158e95af11d229f10"}, + {file = "fonttools-4.54.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:278913a168f90d53378c20c23b80f4e599dca62fbffae4cc620c8eed476b723e"}, + {file = "fonttools-4.54.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0e88e3018ac809b9662615072dcd6b84dca4c2d991c6d66e1970a112503bba7e"}, + {file = "fonttools-4.54.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4aa4817f0031206e637d1e685251ac61be64d1adef111060df84fdcbc6ab6c44"}, + {file = "fonttools-4.54.1-cp310-cp310-win32.whl", hash = "sha256:7e3b7d44e18c085fd8c16dcc6f1ad6c61b71ff463636fcb13df7b1b818bd0c02"}, + {file = "fonttools-4.54.1-cp310-cp310-win_amd64.whl", hash = "sha256:dd9cc95b8d6e27d01e1e1f1fae8559ef3c02c76317da650a19047f249acd519d"}, + {file = "fonttools-4.54.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5419771b64248484299fa77689d4f3aeed643ea6630b2ea750eeab219588ba20"}, + {file = "fonttools-4.54.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:301540e89cf4ce89d462eb23a89464fef50915255ece765d10eee8b2bf9d75b2"}, + {file = "fonttools-4.54.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76ae5091547e74e7efecc3cbf8e75200bc92daaeb88e5433c5e3e95ea8ce5aa7"}, + {file = "fonttools-4.54.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82834962b3d7c5ca98cb56001c33cf20eb110ecf442725dc5fdf36d16ed1ab07"}, + {file = "fonttools-4.54.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d26732ae002cc3d2ecab04897bb02ae3f11f06dd7575d1df46acd2f7c012a8d8"}, + {file = "fonttools-4.54.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:58974b4987b2a71ee08ade1e7f47f410c367cdfc5a94fabd599c88165f56213a"}, + {file = "fonttools-4.54.1-cp311-cp311-win32.whl", hash = "sha256:ab774fa225238986218a463f3fe151e04d8c25d7de09df7f0f5fce27b1243dbc"}, + {file = "fonttools-4.54.1-cp311-cp311-win_amd64.whl", hash = "sha256:07e005dc454eee1cc60105d6a29593459a06321c21897f769a281ff2d08939f6"}, + {file = "fonttools-4.54.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:54471032f7cb5fca694b5f1a0aaeba4af6e10ae989df408e0216f7fd6cdc405d"}, + {file = "fonttools-4.54.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fa92cb248e573daab8d032919623cc309c005086d743afb014c836636166f08"}, + {file = "fonttools-4.54.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a911591200114969befa7f2cb74ac148bce5a91df5645443371aba6d222e263"}, + {file = "fonttools-4.54.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93d458c8a6a354dc8b48fc78d66d2a8a90b941f7fec30e94c7ad9982b1fa6bab"}, + {file = "fonttools-4.54.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5eb2474a7c5be8a5331146758debb2669bf5635c021aee00fd7c353558fc659d"}, + {file = "fonttools-4.54.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c9c563351ddc230725c4bdf7d9e1e92cbe6ae8553942bd1fb2b2ff0884e8b714"}, + {file = "fonttools-4.54.1-cp312-cp312-win32.whl", hash = "sha256:fdb062893fd6d47b527d39346e0c5578b7957dcea6d6a3b6794569370013d9ac"}, + {file = "fonttools-4.54.1-cp312-cp312-win_amd64.whl", hash = "sha256:e4564cf40cebcb53f3dc825e85910bf54835e8a8b6880d59e5159f0f325e637e"}, + {file = "fonttools-4.54.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6e37561751b017cf5c40fce0d90fd9e8274716de327ec4ffb0df957160be3bff"}, + {file = "fonttools-4.54.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:357cacb988a18aace66e5e55fe1247f2ee706e01debc4b1a20d77400354cddeb"}, + {file = "fonttools-4.54.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e953cc0bddc2beaf3a3c3b5dd9ab7554677da72dfaf46951e193c9653e515a"}, + {file = "fonttools-4.54.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:58d29b9a294573d8319f16f2f79e42428ba9b6480442fa1836e4eb89c4d9d61c"}, + {file = "fonttools-4.54.1-cp313-cp313-win32.whl", hash = "sha256:9ef1b167e22709b46bf8168368b7b5d3efeaaa746c6d39661c1b4405b6352e58"}, + {file = "fonttools-4.54.1-cp313-cp313-win_amd64.whl", hash = "sha256:262705b1663f18c04250bd1242b0515d3bbae177bee7752be67c979b7d47f43d"}, + {file = "fonttools-4.54.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ed2f80ca07025551636c555dec2b755dd005e2ea8fbeb99fc5cdff319b70b23b"}, + {file = "fonttools-4.54.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9dc080e5a1c3b2656caff2ac2633d009b3a9ff7b5e93d0452f40cd76d3da3b3c"}, + {file = "fonttools-4.54.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d152d1be65652fc65e695e5619e0aa0982295a95a9b29b52b85775243c06556"}, + {file = "fonttools-4.54.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8583e563df41fdecef31b793b4dd3af8a9caa03397be648945ad32717a92885b"}, + {file = "fonttools-4.54.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0d1d353ef198c422515a3e974a1e8d5b304cd54a4c2eebcae708e37cd9eeffb1"}, + {file = "fonttools-4.54.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:fda582236fee135d4daeca056c8c88ec5f6f6d88a004a79b84a02547c8f57386"}, + {file = "fonttools-4.54.1-cp38-cp38-win32.whl", hash = "sha256:e7d82b9e56716ed32574ee106cabca80992e6bbdcf25a88d97d21f73a0aae664"}, + {file = "fonttools-4.54.1-cp38-cp38-win_amd64.whl", hash = "sha256:ada215fd079e23e060157aab12eba0d66704316547f334eee9ff26f8c0d7b8ab"}, + {file = "fonttools-4.54.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f5b8a096e649768c2f4233f947cf9737f8dbf8728b90e2771e2497c6e3d21d13"}, + {file = "fonttools-4.54.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4e10d2e0a12e18f4e2dd031e1bf7c3d7017be5c8dbe524d07706179f355c5dac"}, + {file = "fonttools-4.54.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31c32d7d4b0958600eac75eaf524b7b7cb68d3a8c196635252b7a2c30d80e986"}, + {file = "fonttools-4.54.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c39287f5c8f4a0c5a55daf9eaf9ccd223ea59eed3f6d467133cc727d7b943a55"}, + {file = "fonttools-4.54.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a7a310c6e0471602fe3bf8efaf193d396ea561486aeaa7adc1f132e02d30c4b9"}, + {file = "fonttools-4.54.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d3b659d1029946f4ff9b6183984578041b520ce0f8fb7078bb37ec7445806b33"}, + {file = "fonttools-4.54.1-cp39-cp39-win32.whl", hash = "sha256:e96bc94c8cda58f577277d4a71f51c8e2129b8b36fd05adece6320dd3d57de8a"}, + {file = "fonttools-4.54.1-cp39-cp39-win_amd64.whl", hash = "sha256:e8a4b261c1ef91e7188a30571be6ad98d1c6d9fa2427244c545e2fa0a2494dd7"}, + {file = "fonttools-4.54.1-py3-none-any.whl", hash = "sha256:37cddd62d83dc4f72f7c3f3c2bcf2697e89a30efb152079896544a93907733bd"}, + {file = "fonttools-4.54.1.tar.gz", hash = "sha256:957f669d4922f92c171ba01bef7f29410668db09f6c02111e22b2bce446f3285"}, +] + +[package.extras] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["munkres", "pycairo", "scipy"] +lxml = ["lxml (>=4.0)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.23.0)"] +symfont = ["sympy"] +type1 = ["xattr"] +ufo = ["fs (>=2.2.0,<3)"] +unicode = ["unicodedata2 (>=15.1.0)"] +woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] + +[[package]] +name = "fsspec" +version = "2023.12.2" +description = "File-system specification" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fsspec-2023.12.2-py3-none-any.whl", hash = "sha256:d800d87f72189a745fa3d6b033b9dc4a34ad069f60ca60b943a63599f5501960"}, + {file = "fsspec-2023.12.2.tar.gz", hash = "sha256:8548d39e8810b59c38014934f6b31e57f40c1b20f911f4cc2b85389c7e9bf0cb"}, +] + +[package.extras] +abfs = ["adlfs"] +adl = ["adlfs"] +arrow = ["pyarrow (>=1)"] +dask = ["dask", "distributed"] +devel = ["pytest", "pytest-cov"] +dropbox = ["dropbox", "dropboxdrivefs", "requests"] +full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] +fuse = ["fusepy"] +gcs = ["gcsfs"] +git = ["pygit2"] +github = ["requests"] +gs = ["gcsfs"] +gui = ["panel"] +hdfs = ["pyarrow (>=1)"] +http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "requests"] +libarchive = ["libarchive-c"] +oci = ["ocifs"] +s3 = ["s3fs"] +sftp = ["paramiko"] +smb = ["smbprotocol"] +ssh = ["paramiko"] +tqdm = ["tqdm"] + +[[package]] +name = "importlib-metadata" +version = "8.5.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, + {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, +] + +[package.dependencies] +zipp = ">=3.20" + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +perf = ["ipython"] +test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +type = ["pytest-mypy"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "kiwisolver" +version = "1.4.7" +description = "A fast implementation of the Cassowary constraint solver" +optional = false +python-versions = ">=3.8" +files = [ + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5d5abf8f8ec1f4e22882273c423e16cae834c36856cac348cfbfa68e01c40f3a"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:aeb3531b196ef6f11776c21674dba836aeea9d5bd1cf630f869e3d90b16cfade"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7d755065e4e866a8086c9bdada157133ff466476a2ad7861828e17b6026e22c"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08471d4d86cbaec61f86b217dd938a83d85e03785f51121e791a6e6689a3be95"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7bbfcb7165ce3d54a3dfbe731e470f65739c4c1f85bb1018ee912bae139e263b"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d34eb8494bea691a1a450141ebb5385e4b69d38bb8403b5146ad279f4b30fa3"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9242795d174daa40105c1d86aba618e8eab7bf96ba8c3ee614da8302a9f95503"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a0f64a48bb81af7450e641e3fe0b0394d7381e342805479178b3d335d60ca7cf"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8e045731a5416357638d1700927529e2b8ab304811671f665b225f8bf8d8f933"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4322872d5772cae7369f8351da1edf255a604ea7087fe295411397d0cfd9655e"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e1631290ee9271dffe3062d2634c3ecac02c83890ada077d225e081aca8aab89"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:edcfc407e4eb17e037bca59be0e85a2031a2ac87e4fed26d3e9df88b4165f92d"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4d05d81ecb47d11e7f8932bd8b61b720bf0b41199358f3f5e36d38e28f0532c5"}, + {file = "kiwisolver-1.4.7-cp38-cp38-win32.whl", hash = "sha256:b38ac83d5f04b15e515fd86f312479d950d05ce2368d5413d46c088dda7de90a"}, + {file = "kiwisolver-1.4.7-cp38-cp38-win_amd64.whl", hash = "sha256:d83db7cde68459fc803052a55ace60bea2bae361fc3b7a6d5da07e11954e4b09"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bfa1acfa0c54932d5607e19a2c24646fb4c1ae2694437789129cf099789a3b00"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:eee3ea935c3d227d49b4eb85660ff631556841f6e567f0f7bda972df6c2c9935"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f3160309af4396e0ed04db259c3ccbfdc3621b5559b5453075e5de555e1f3a1b"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a17f6a29cf8935e587cc8a4dbfc8368c55edc645283db0ce9801016f83526c2d"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10849fb2c1ecbfae45a693c070e0320a91b35dd4bcf58172c023b994283a124d"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ac542bf38a8a4be2dc6b15248d36315ccc65f0743f7b1a76688ffb6b5129a5c2"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0"}, + {file = "kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60"}, +] + +[[package]] +name = "matplotlib" +version = "3.9.2" +description = "Python plotting package" +optional = false +python-versions = ">=3.9" +files = [ + {file = "matplotlib-3.9.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9d78bbc0cbc891ad55b4f39a48c22182e9bdaea7fc0e5dbd364f49f729ca1bbb"}, + {file = "matplotlib-3.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c375cc72229614632c87355366bdf2570c2dac01ac66b8ad048d2dabadf2d0d4"}, + {file = "matplotlib-3.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d94ff717eb2bd0b58fe66380bd8b14ac35f48a98e7c6765117fe67fb7684e64"}, + {file = "matplotlib-3.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab68d50c06938ef28681073327795c5db99bb4666214d2d5f880ed11aeaded66"}, + {file = "matplotlib-3.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:65aacf95b62272d568044531e41de26285d54aec8cb859031f511f84bd8b495a"}, + {file = "matplotlib-3.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:3fd595f34aa8a55b7fc8bf9ebea8aa665a84c82d275190a61118d33fbc82ccae"}, + {file = "matplotlib-3.9.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d8dd059447824eec055e829258ab092b56bb0579fc3164fa09c64f3acd478772"}, + {file = "matplotlib-3.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c797dac8bb9c7a3fd3382b16fe8f215b4cf0f22adccea36f1545a6d7be310b41"}, + {file = "matplotlib-3.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d719465db13267bcef19ea8954a971db03b9f48b4647e3860e4bc8e6ed86610f"}, + {file = "matplotlib-3.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8912ef7c2362f7193b5819d17dae8629b34a95c58603d781329712ada83f9447"}, + {file = "matplotlib-3.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7741f26a58a240f43bee74965c4882b6c93df3e7eb3de160126d8c8f53a6ae6e"}, + {file = "matplotlib-3.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:ae82a14dab96fbfad7965403c643cafe6515e386de723e498cf3eeb1e0b70cc7"}, + {file = "matplotlib-3.9.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ac43031375a65c3196bee99f6001e7fa5bdfb00ddf43379d3c0609bdca042df9"}, + {file = "matplotlib-3.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be0fc24a5e4531ae4d8e858a1a548c1fe33b176bb13eff7f9d0d38ce5112a27d"}, + {file = "matplotlib-3.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf81de2926c2db243c9b2cbc3917619a0fc85796c6ba4e58f541df814bbf83c7"}, + {file = "matplotlib-3.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6ee45bc4245533111ced13f1f2cace1e7f89d1c793390392a80c139d6cf0e6c"}, + {file = "matplotlib-3.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:306c8dfc73239f0e72ac50e5a9cf19cc4e8e331dd0c54f5e69ca8758550f1e1e"}, + {file = "matplotlib-3.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:5413401594cfaff0052f9d8b1aafc6d305b4bd7c4331dccd18f561ff7e1d3bd3"}, + {file = "matplotlib-3.9.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:18128cc08f0d3cfff10b76baa2f296fc28c4607368a8402de61bb3f2eb33c7d9"}, + {file = "matplotlib-3.9.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4876d7d40219e8ae8bb70f9263bcbe5714415acfdf781086601211335e24f8aa"}, + {file = "matplotlib-3.9.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d9f07a80deab4bb0b82858a9e9ad53d1382fd122be8cde11080f4e7dfedb38b"}, + {file = "matplotlib-3.9.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7c0410f181a531ec4e93bbc27692f2c71a15c2da16766f5ba9761e7ae518413"}, + {file = "matplotlib-3.9.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:909645cce2dc28b735674ce0931a4ac94e12f5b13f6bb0b5a5e65e7cea2c192b"}, + {file = "matplotlib-3.9.2-cp313-cp313-win_amd64.whl", hash = "sha256:f32c7410c7f246838a77d6d1eff0c0f87f3cb0e7c4247aebea71a6d5a68cab49"}, + {file = "matplotlib-3.9.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:37e51dd1c2db16ede9cfd7b5cabdfc818b2c6397c83f8b10e0e797501c963a03"}, + {file = "matplotlib-3.9.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b82c5045cebcecd8496a4d694d43f9cc84aeeb49fe2133e036b207abe73f4d30"}, + {file = "matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f053c40f94bc51bc03832a41b4f153d83f2062d88c72b5e79997072594e97e51"}, + {file = "matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbe196377a8248972f5cede786d4c5508ed5f5ca4a1e09b44bda889958b33f8c"}, + {file = "matplotlib-3.9.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5816b1e1fe8c192cbc013f8f3e3368ac56fbecf02fb41b8f8559303f24c5015e"}, + {file = "matplotlib-3.9.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:cef2a73d06601437be399908cf13aee74e86932a5ccc6ccdf173408ebc5f6bb2"}, + {file = "matplotlib-3.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e0830e188029c14e891fadd99702fd90d317df294c3298aad682739c5533721a"}, + {file = "matplotlib-3.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ba9c1299c920964e8d3857ba27173b4dbb51ca4bab47ffc2c2ba0eb5e2cbc5"}, + {file = "matplotlib-3.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cd93b91ab47a3616b4d3c42b52f8363b88ca021e340804c6ab2536344fad9ca"}, + {file = "matplotlib-3.9.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6d1ce5ed2aefcdce11904fc5bbea7d9c21fff3d5f543841edf3dea84451a09ea"}, + {file = "matplotlib-3.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:b2696efdc08648536efd4e1601b5fd491fd47f4db97a5fbfd175549a7365c1b2"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d52a3b618cb1cbb769ce2ee1dcdb333c3ab6e823944e9a2d36e37253815f9556"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:039082812cacd6c6bec8e17a9c1e6baca230d4116d522e81e1f63a74d01d2e21"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6758baae2ed64f2331d4fd19be38b7b4eae3ecec210049a26b6a4f3ae1c85dcc"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:050598c2b29e0b9832cde72bcf97627bf00262adbc4a54e2b856426bb2ef0697"}, + {file = "matplotlib-3.9.2.tar.gz", hash = "sha256:96ab43906269ca64a6366934106fa01534454a69e471b7bf3d79083981aaab92"}, +] + +[package.dependencies] +contourpy = ">=1.0.1" +cycler = ">=0.10" +fonttools = ">=4.22.0" +kiwisolver = ">=1.3.1" +numpy = ">=1.23" +packaging = ">=20.0" +pillow = ">=8" +pyparsing = ">=2.3.1" +python-dateutil = ">=2.7" + +[package.extras] +dev = ["meson-python (>=0.13.1)", "numpy (>=1.25)", "pybind11 (>=2.6)", "setuptools (>=64)", "setuptools_scm (>=7)"] + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mplhep" +version = "0.3.31" +description = "Matplotlib styles for HEP" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mplhep-0.3.31-py3-none-any.whl", hash = "sha256:60511b210051d389fbce47ecb10737f09d4c5ba1deb588366c440e536240b74c"}, + {file = "mplhep-0.3.31.tar.gz", hash = "sha256:699c1acdb0e58d19dc076a7ba83f790a6b34b90054f2d72252b5dc2a9b325533"}, +] + +[package.dependencies] +matplotlib = ">=3.4" +mplhep-data = "*" +numpy = ">=1.16.0" +packaging = "*" +uhi = ">=0.2.0" + +[package.extras] +all = ["black", "boost-histogram", "bumpversion", "flake8", "hist", "jupyter", "nteract-scrapbook (>=0.3,<1.0)", "papermill (>=1.0,<2.0)", "pre-commit", "pytest (>=6.0)", "pytest-mock", "pytest-mpl", "scikit-hep-testdata", "scipy (>=1.1.0)", "twine", "uproot", "uproot4"] +dev = ["black", "bumpversion", "flake8", "jupyter", "pre-commit", "twine"] +test = ["boost-histogram", "hist", "nteract-scrapbook (>=0.3,<1.0)", "papermill (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-mock", "pytest-mpl", "scikit-hep-testdata", "scipy (>=1.1.0)", "uproot", "uproot4"] + +[[package]] +name = "mplhep-data" +version = "0.0.3" +description = "Font (Data) sub-package for mplhep" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mplhep_data-0.0.3-py3-none-any.whl", hash = "sha256:a1eba7727fab31902e6fcd113c8f4b12ff3fb0666781e7514f8b79093cdc1c65"}, + {file = "mplhep_data-0.0.3.tar.gz", hash = "sha256:b54d257f3f53c93a442cda7a6681ce267277e09173c0b41fd78820f78321772f"}, +] + +[package.extras] +dev = ["pytest (>=4.6)"] +test = ["pytest (>=4.6)"] + +[[package]] +name = "mypy" +version = "1.8.0" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mypy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3"}, + {file = "mypy-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4"}, + {file = "mypy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d"}, + {file = "mypy-1.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9"}, + {file = "mypy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410"}, + {file = "mypy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae"}, + {file = "mypy-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3"}, + {file = "mypy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817"}, + {file = "mypy-1.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d"}, + {file = "mypy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835"}, + {file = "mypy-1.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd"}, + {file = "mypy-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55"}, + {file = "mypy-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218"}, + {file = "mypy-1.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3"}, + {file = "mypy-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e"}, + {file = "mypy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6"}, + {file = "mypy-1.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66"}, + {file = "mypy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6"}, + {file = "mypy-1.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d"}, + {file = "mypy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02"}, + {file = "mypy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8"}, + {file = "mypy-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259"}, + {file = "mypy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b"}, + {file = "mypy-1.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592"}, + {file = "mypy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a"}, + {file = "mypy-1.8.0-py3-none-any.whl", hash = "sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d"}, + {file = "mypy-1.8.0.tar.gz", hash = "sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +typing-extensions = ">=4.1.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +mypyc = ["setuptools (>=50)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "numpy" +version = "1.26.4" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, +] + +[[package]] +name = "packaging" +version = "24.1" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, +] + +[[package]] +name = "pandas" +version = "2.1.4" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pandas-2.1.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bdec823dc6ec53f7a6339a0e34c68b144a7a1fd28d80c260534c39c62c5bf8c9"}, + {file = "pandas-2.1.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:294d96cfaf28d688f30c918a765ea2ae2e0e71d3536754f4b6de0ea4a496d034"}, + {file = "pandas-2.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b728fb8deba8905b319f96447a27033969f3ea1fea09d07d296c9030ab2ed1d"}, + {file = "pandas-2.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00028e6737c594feac3c2df15636d73ace46b8314d236100b57ed7e4b9ebe8d9"}, + {file = "pandas-2.1.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:426dc0f1b187523c4db06f96fb5c8d1a845e259c99bda74f7de97bd8a3bb3139"}, + {file = "pandas-2.1.4-cp310-cp310-win_amd64.whl", hash = "sha256:f237e6ca6421265643608813ce9793610ad09b40154a3344a088159590469e46"}, + {file = "pandas-2.1.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b7d852d16c270e4331f6f59b3e9aa23f935f5c4b0ed2d0bc77637a8890a5d092"}, + {file = "pandas-2.1.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7d5f2f54f78164b3d7a40f33bf79a74cdee72c31affec86bfcabe7e0789821"}, + {file = "pandas-2.1.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0aa6e92e639da0d6e2017d9ccff563222f4eb31e4b2c3cf32a2a392fc3103c0d"}, + {file = "pandas-2.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d797591b6846b9db79e65dc2d0d48e61f7db8d10b2a9480b4e3faaddc421a171"}, + {file = "pandas-2.1.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d2d3e7b00f703aea3945995ee63375c61b2e6aa5aa7871c5d622870e5e137623"}, + {file = "pandas-2.1.4-cp311-cp311-win_amd64.whl", hash = "sha256:dc9bf7ade01143cddc0074aa6995edd05323974e6e40d9dbde081021ded8510e"}, + {file = "pandas-2.1.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:482d5076e1791777e1571f2e2d789e940dedd927325cc3cb6d0800c6304082f6"}, + {file = "pandas-2.1.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8a706cfe7955c4ca59af8c7a0517370eafbd98593155b48f10f9811da440248b"}, + {file = "pandas-2.1.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0513a132a15977b4a5b89aabd304647919bc2169eac4c8536afb29c07c23540"}, + {file = "pandas-2.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9f17f2b6fc076b2a0078862547595d66244db0f41bf79fc5f64a5c4d635bead"}, + {file = "pandas-2.1.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:45d63d2a9b1b37fa6c84a68ba2422dc9ed018bdaa668c7f47566a01188ceeec1"}, + {file = "pandas-2.1.4-cp312-cp312-win_amd64.whl", hash = "sha256:f69b0c9bb174a2342818d3e2778584e18c740d56857fc5cdb944ec8bbe4082cf"}, + {file = "pandas-2.1.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3f06bda01a143020bad20f7a85dd5f4a1600112145f126bc9e3e42077c24ef34"}, + {file = "pandas-2.1.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab5796839eb1fd62a39eec2916d3e979ec3130509930fea17fe6f81e18108f6a"}, + {file = "pandas-2.1.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edbaf9e8d3a63a9276d707b4d25930a262341bca9874fcb22eff5e3da5394732"}, + {file = "pandas-2.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ebfd771110b50055712b3b711b51bee5d50135429364d0498e1213a7adc2be8"}, + {file = "pandas-2.1.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8ea107e0be2aba1da619cc6ba3f999b2bfc9669a83554b1904ce3dd9507f0860"}, + {file = "pandas-2.1.4-cp39-cp39-win_amd64.whl", hash = "sha256:d65148b14788b3758daf57bf42725caa536575da2b64df9964c563b015230984"}, + {file = "pandas-2.1.4.tar.gz", hash = "sha256:fcb68203c833cc735321512e13861358079a96c174a61f5116a1de89c58c0ef7"}, +] + +[package.dependencies] +numpy = {version = ">=1.23.2,<2", markers = "python_version == \"3.11\""} +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.1" + +[package.extras] +all = ["PyQt5 (>=5.15.6)", "SQLAlchemy (>=1.4.36)", "beautifulsoup4 (>=4.11.1)", "bottleneck (>=1.3.4)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=0.8.1)", "fsspec (>=2022.05.0)", "gcsfs (>=2022.05.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.8.0)", "matplotlib (>=3.6.1)", "numba (>=0.55.2)", "numexpr (>=2.8.0)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pandas-gbq (>=0.17.5)", "psycopg2 (>=2.9.3)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.5)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "pyxlsb (>=1.0.9)", "qtpy (>=2.2.0)", "s3fs (>=2022.05.0)", "scipy (>=1.8.1)", "tables (>=3.7.0)", "tabulate (>=0.8.10)", "xarray (>=2022.03.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)", "zstandard (>=0.17.0)"] +aws = ["s3fs (>=2022.05.0)"] +clipboard = ["PyQt5 (>=5.15.6)", "qtpy (>=2.2.0)"] +compression = ["zstandard (>=0.17.0)"] +computation = ["scipy (>=1.8.1)", "xarray (>=2022.03.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pyxlsb (>=1.0.9)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)"] +feather = ["pyarrow (>=7.0.0)"] +fss = ["fsspec (>=2022.05.0)"] +gcp = ["gcsfs (>=2022.05.0)", "pandas-gbq (>=0.17.5)"] +hdf5 = ["tables (>=3.7.0)"] +html = ["beautifulsoup4 (>=4.11.1)", "html5lib (>=1.1)", "lxml (>=4.8.0)"] +mysql = ["SQLAlchemy (>=1.4.36)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.8.10)"] +parquet = ["pyarrow (>=7.0.0)"] +performance = ["bottleneck (>=1.3.4)", "numba (>=0.55.2)", "numexpr (>=2.8.0)"] +plot = ["matplotlib (>=3.6.1)"] +postgresql = ["SQLAlchemy (>=1.4.36)", "psycopg2 (>=2.9.3)"] +spss = ["pyreadstat (>=1.1.5)"] +sql-other = ["SQLAlchemy (>=1.4.36)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.8.0)"] + +[[package]] +name = "pathspec" +version = "0.12.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + +[[package]] +name = "pillow" +version = "10.4.0" +description = "Python Imaging Library (Fork)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"}, + {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc"}, + {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e"}, + {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46"}, + {file = "pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984"}, + {file = "pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141"}, + {file = "pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"}, + {file = "pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c"}, + {file = "pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319"}, + {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d"}, + {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696"}, + {file = "pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496"}, + {file = "pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91"}, + {file = "pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22"}, + {file = "pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94"}, + {file = "pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a"}, + {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b"}, + {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9"}, + {file = "pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42"}, + {file = "pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a"}, + {file = "pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9"}, + {file = "pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3"}, + {file = "pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc"}, + {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a"}, + {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309"}, + {file = "pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060"}, + {file = "pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea"}, + {file = "pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d"}, + {file = "pillow-10.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736"}, + {file = "pillow-10.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd"}, + {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84"}, + {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0"}, + {file = "pillow-10.4.0-cp38-cp38-win32.whl", hash = "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e"}, + {file = "pillow-10.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab"}, + {file = "pillow-10.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d"}, + {file = "pillow-10.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c"}, + {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1"}, + {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df"}, + {file = "pillow-10.4.0-cp39-cp39-win32.whl", hash = "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef"}, + {file = "pillow-10.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5"}, + {file = "pillow-10.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3"}, + {file = "pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=7.3)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] + +[[package]] +name = "platformdirs" +version = "4.3.6" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] + +[[package]] +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pyarrow" +version = "14.0.2" +description = "Python library for Apache Arrow" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyarrow-14.0.2-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:ba9fe808596c5dbd08b3aeffe901e5f81095baaa28e7d5118e01354c64f22807"}, + {file = "pyarrow-14.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:22a768987a16bb46220cef490c56c671993fbee8fd0475febac0b3e16b00a10e"}, + {file = "pyarrow-14.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dbba05e98f247f17e64303eb876f4a80fcd32f73c7e9ad975a83834d81f3fda"}, + {file = "pyarrow-14.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a898d134d00b1eca04998e9d286e19653f9d0fcb99587310cd10270907452a6b"}, + {file = "pyarrow-14.0.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:87e879323f256cb04267bb365add7208f302df942eb943c93a9dfeb8f44840b1"}, + {file = "pyarrow-14.0.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:76fc257559404ea5f1306ea9a3ff0541bf996ff3f7b9209fc517b5e83811fa8e"}, + {file = "pyarrow-14.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0c4a18e00f3a32398a7f31da47fefcd7a927545b396e1f15d0c85c2f2c778cd"}, + {file = "pyarrow-14.0.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:87482af32e5a0c0cce2d12eb3c039dd1d853bd905b04f3f953f147c7a196915b"}, + {file = "pyarrow-14.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:059bd8f12a70519e46cd64e1ba40e97eae55e0cbe1695edd95384653d7626b23"}, + {file = "pyarrow-14.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f16111f9ab27e60b391c5f6d197510e3ad6654e73857b4e394861fc79c37200"}, + {file = "pyarrow-14.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06ff1264fe4448e8d02073f5ce45a9f934c0f3db0a04460d0b01ff28befc3696"}, + {file = "pyarrow-14.0.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:6dd4f4b472ccf4042f1eab77e6c8bce574543f54d2135c7e396f413046397d5a"}, + {file = "pyarrow-14.0.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:32356bfb58b36059773f49e4e214996888eeea3a08893e7dbde44753799b2a02"}, + {file = "pyarrow-14.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:52809ee69d4dbf2241c0e4366d949ba035cbcf48409bf404f071f624ed313a2b"}, + {file = "pyarrow-14.0.2-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:c87824a5ac52be210d32906c715f4ed7053d0180c1060ae3ff9b7e560f53f944"}, + {file = "pyarrow-14.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a25eb2421a58e861f6ca91f43339d215476f4fe159eca603c55950c14f378cc5"}, + {file = "pyarrow-14.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c1da70d668af5620b8ba0a23f229030a4cd6c5f24a616a146f30d2386fec422"}, + {file = "pyarrow-14.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2cc61593c8e66194c7cdfae594503e91b926a228fba40b5cf25cc593563bcd07"}, + {file = "pyarrow-14.0.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:78ea56f62fb7c0ae8ecb9afdd7893e3a7dbeb0b04106f5c08dbb23f9c0157591"}, + {file = "pyarrow-14.0.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:37c233ddbce0c67a76c0985612fef27c0c92aef9413cf5aa56952f359fcb7379"}, + {file = "pyarrow-14.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:e4b123ad0f6add92de898214d404e488167b87b5dd86e9a434126bc2b7a5578d"}, + {file = "pyarrow-14.0.2-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:e354fba8490de258be7687f341bc04aba181fc8aa1f71e4584f9890d9cb2dec2"}, + {file = "pyarrow-14.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:20e003a23a13da963f43e2b432483fdd8c38dc8882cd145f09f21792e1cf22a1"}, + {file = "pyarrow-14.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc0de7575e841f1595ac07e5bc631084fd06ca8b03c0f2ecece733d23cd5102a"}, + {file = "pyarrow-14.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66e986dc859712acb0bd45601229021f3ffcdfc49044b64c6d071aaf4fa49e98"}, + {file = "pyarrow-14.0.2-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:f7d029f20ef56673a9730766023459ece397a05001f4e4d13805111d7c2108c0"}, + {file = "pyarrow-14.0.2-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:209bac546942b0d8edc8debda248364f7f668e4aad4741bae58e67d40e5fcf75"}, + {file = "pyarrow-14.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:1e6987c5274fb87d66bb36816afb6f65707546b3c45c44c28e3c4133c010a881"}, + {file = "pyarrow-14.0.2-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:a01d0052d2a294a5f56cc1862933014e696aa08cc7b620e8c0cce5a5d362e976"}, + {file = "pyarrow-14.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a51fee3a7db4d37f8cda3ea96f32530620d43b0489d169b285d774da48ca9785"}, + {file = "pyarrow-14.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64df2bf1ef2ef14cee531e2dfe03dd924017650ffaa6f9513d7a1bb291e59c15"}, + {file = "pyarrow-14.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c0fa3bfdb0305ffe09810f9d3e2e50a2787e3a07063001dcd7adae0cee3601a"}, + {file = "pyarrow-14.0.2-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c65bf4fd06584f058420238bc47a316e80dda01ec0dfb3044594128a6c2db794"}, + {file = "pyarrow-14.0.2-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:63ac901baec9369d6aae1cbe6cca11178fb018a8d45068aaf5bb54f94804a866"}, + {file = "pyarrow-14.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:75ee0efe7a87a687ae303d63037d08a48ef9ea0127064df18267252cfe2e9541"}, + {file = "pyarrow-14.0.2.tar.gz", hash = "sha256:36cef6ba12b499d864d1def3e990f97949e0b79400d08b7cf74504ffbd3eb025"}, +] + +[package.dependencies] +numpy = ">=1.16.6" + +[[package]] +name = "pycodestyle" +version = "2.12.1" +description = "Python style guide checker" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pycodestyle-2.12.1-py2.py3-none-any.whl", hash = "sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3"}, + {file = "pycodestyle-2.12.1.tar.gz", hash = "sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521"}, +] + +[[package]] +name = "pyflakes" +version = "3.2.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"}, + {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, +] + +[[package]] +name = "pyparsing" +version = "3.1.4" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.1.4-py3-none-any.whl", hash = "sha256:a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c"}, + {file = "pyparsing-3.1.4.tar.gz", hash = "sha256:f86ec8d1a83f11977c9a6ea7598e8c27fc5cddfa5b07ea2241edbbde1d7bc032"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pytest" +version = "7.4.3" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, + {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "pytz" +version = "2024.2" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, + {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "scipy" +version = "1.10.1" +description = "Fundamental algorithms for scientific computing in Python" +optional = false +python-versions = "<3.12,>=3.8" +files = [ + {file = "scipy-1.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e7354fd7527a4b0377ce55f286805b34e8c54b91be865bac273f527e1b839019"}, + {file = "scipy-1.10.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:4b3f429188c66603a1a5c549fb414e4d3bdc2a24792e061ffbd607d3d75fd84e"}, + {file = "scipy-1.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1553b5dcddd64ba9a0d95355e63fe6c3fc303a8fd77c7bc91e77d61363f7433f"}, + {file = "scipy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c0ff64b06b10e35215abce517252b375e580a6125fd5fdf6421b98efbefb2d2"}, + {file = "scipy-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:fae8a7b898c42dffe3f7361c40d5952b6bf32d10c4569098d276b4c547905ee1"}, + {file = "scipy-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f1564ea217e82c1bbe75ddf7285ba0709ecd503f048cb1236ae9995f64217bd"}, + {file = "scipy-1.10.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:d925fa1c81b772882aa55bcc10bf88324dadb66ff85d548c71515f6689c6dac5"}, + {file = "scipy-1.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaea0a6be54462ec027de54fca511540980d1e9eea68b2d5c1dbfe084797be35"}, + {file = "scipy-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15a35c4242ec5f292c3dd364a7c71a61be87a3d4ddcc693372813c0b73c9af1d"}, + {file = "scipy-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:43b8e0bcb877faf0abfb613d51026cd5cc78918e9530e375727bf0625c82788f"}, + {file = "scipy-1.10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5678f88c68ea866ed9ebe3a989091088553ba12c6090244fdae3e467b1139c35"}, + {file = "scipy-1.10.1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:39becb03541f9e58243f4197584286e339029e8908c46f7221abeea4b749fa88"}, + {file = "scipy-1.10.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bce5869c8d68cf383ce240e44c1d9ae7c06078a9396df68ce88a1230f93a30c1"}, + {file = "scipy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07c3457ce0b3ad5124f98a86533106b643dd811dd61b548e78cf4c8786652f6f"}, + {file = "scipy-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:049a8bbf0ad95277ffba9b3b7d23e5369cc39e66406d60422c8cfef40ccc8415"}, + {file = "scipy-1.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cd9f1027ff30d90618914a64ca9b1a77a431159df0e2a195d8a9e8a04c78abf9"}, + {file = "scipy-1.10.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:79c8e5a6c6ffaf3a2262ef1be1e108a035cf4f05c14df56057b64acc5bebffb6"}, + {file = "scipy-1.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51af417a000d2dbe1ec6c372dfe688e041a7084da4fdd350aeb139bd3fb55353"}, + {file = "scipy-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b4735d6c28aad3cdcf52117e0e91d6b39acd4272f3f5cd9907c24ee931ad601"}, + {file = "scipy-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ff7f37b1bf4417baca958d254e8e2875d0cc23aaadbe65b3d5b3077b0eb23ea"}, + {file = "scipy-1.10.1.tar.gz", hash = "sha256:2cf9dfb80a7b4589ba4c40ce7588986d6d5cebc5457cad2c2880f6bc2d42f3a5"}, +] + +[package.dependencies] +numpy = ">=1.19.5,<1.27.0" + +[package.extras] +dev = ["click", "doit (>=0.36.0)", "flake8", "mypy", "pycodestyle", "pydevtool", "rich-click", "typing_extensions"] +doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] +test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "tqdm" +version = "4.66.1" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, + {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, +] + +[[package]] +name = "tzdata" +version = "2024.2" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"}, + {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, +] + +[[package]] +name = "uhi" +version = "0.5.0" +description = "Unified Histogram Interface: tools to help library authors work with histograms" +optional = false +python-versions = ">=3.8" +files = [ + {file = "uhi-0.5.0-py3-none-any.whl", hash = "sha256:d5fc4620425a56ca22b7668fe6e328bf2ae349ddf07d402a7fa9d43341344de5"}, + {file = "uhi-0.5.0.tar.gz", hash = "sha256:9559bbf2f38f18a2fc1d8f73139396068f88f898d6a9afc833207ec0fd59a31c"}, +] + +[package.dependencies] +numpy = ">=1.13.3" + +[package.extras] +docs = ["furo", "myst-parser", "sphinx (>=4.0)", "sphinx-copybutton (>=0.3.1)", "sphinx-github-changelog", "sphinx-jsonschema"] +schema = ["fastjsonschema", "importlib-resources"] +test = ["boost-histogram (>=1.0)", "pytest (>=6)"] + +[[package]] +name = "uproot" +version = "5.0.4" +description = "ROOT I/O in pure Python and NumPy." +optional = false +python-versions = ">=3.7" +files = [ + {file = "uproot-5.0.4-py3-none-any.whl", hash = "sha256:5a4a526fbec5d5bb3c439dcee0876bc689d42a36627a4a89105924afc3b3ec24"}, + {file = "uproot-5.0.4.tar.gz", hash = "sha256:c4ea1af198e3292a4649e3fe789d11b038c1ed57c10f167fc3f52100300c2eea"}, +] + +[package.dependencies] +awkward = ">=2.0.0" +numpy = "*" +packaging = "*" + +[package.extras] +dev = ["awkward (>=2.0.0)", "awkward-pandas", "boost-histogram (>=0.13)", "dask-awkward (>=2022.12a3)", "dask[array]", "hist (>=1.2)", "pandas"] +test = ["awkward (>=2.0.0)", "lz4", "pytest (>=6)", "pytest-rerunfailures", "pytest-timeout", "requests", "scikit-hep-testdata", "xxhash"] + +[[package]] +name = "vector" +version = "1.1.1.post1" +description = "Vector classes and utilities" +optional = false +python-versions = ">=3.8" +files = [ + {file = "vector-1.1.1.post1-py3-none-any.whl", hash = "sha256:f7683f9fb14be481ea9b562180fbc4cfe09e61168511e05646c2047f4f458282"}, + {file = "vector-1.1.1.post1.tar.gz", hash = "sha256:7a55ae549816e5fca0e52fab8cc66d4b0e4bb3b7753933e85b4167657940372b"}, +] + +[package.dependencies] +numpy = ">=1.13.3" +packaging = ">=19" + +[package.extras] +awkward = ["awkward (>=1.2)"] +dev = ["awkward (>=1.2)", "numba (>=0.57)", "papermill (>=2.4)", "pytest (>=6)", "pytest-cov (>=3)", "xdoctest (>=1)"] +docs = ["awkward (>=1.2)", "ipykernel", "myst-parser (>0.13)", "nbsphinx", "sphinx (>=4)", "sphinx-book-theme (>=0.0.42)", "sphinx-copybutton", "sphinx-math-dollar"] +test = ["papermill (>=2.4)", "pytest (>=6)", "pytest-cov (>=3)", "xdoctest (>=1)"] +test-extras = ["spark-parser", "uncompyle6"] + +[[package]] +name = "zipp" +version = "3.20.2" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zipp-3.20.2-py3-none-any.whl", hash = "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350"}, + {file = "zipp-3.20.2.tar.gz", hash = "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +type = ["pytest-mypy"] + +[metadata] +lock-version = "2.0" +python-versions = "~3.11.0" +content-hash = "b4148d83ed313e43a30b67d4f0f50d2e8cb0b5027198614b002a97c0c4dbdfd2" diff --git a/pyproject.toml b/pyproject.toml index 974033f1..2c19ff4e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,11 +25,11 @@ python = "~3.11.0" awkward = "2.5.2" fsspec = "2023.12.2" pyyaml = "6.0.1" -matplotlib = "3.8.2" +matplotlib = "3.9.2" mplhep = "0.3.31" numpy = "^1.23.0" pandas = "2.1.4" -progress = "1.6" +tqdm = "4.66.1" pyarrow = "14.0.2" scipy = "1.10.1" uproot = "5.0.4" @@ -43,6 +43,12 @@ flake8 = "^7.0.0" [tool.poetry.group.test.dependencies] pytest = "7.4.3" +[tool.poetry.scripts] +cache_objects = "menu_tools.caching.cache_objects:main" +object_performance = "menu_tools.object_performance.plotter:main" +rate_plots = "menu_tools.rate_plots.plotter:main" +rate_table = "menu_tools.rate_table.rate_table:main" + [tool.pytest.ini_options] filterwarnings = [ "error", @@ -55,13 +61,13 @@ pythonpath = [ testpaths = [ "tests", ] - [tool.mypy] files = [ "menu_tools" ] disable_error_code = [ "import-untyped", - "index" + "index", + "attr-defined" ] explicit_package_bases = true diff --git a/rates/README.md b/rates/README.md deleted file mode 100644 index 20a9e1e0..00000000 --- a/rates/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Rate studies for the Phase-2 L1 Trigger Menu - -The rate studies for the Phase-2 menu include running the general menu rate table (all seeds), as well as individual rate plots for each object. -The instructions of both steps are available at the respective directotires. - diff --git a/rates/plots/README.md b/rates/plots/README.md deleted file mode 100644 index 604bf663..00000000 --- a/rates/plots/README.md +++ /dev/null @@ -1,23 +0,0 @@ -To run the rates for firmware based emulators under 123x, do: - -``` -python rates_emulator_123x.py --outdir testRates -``` - -This creates a file rates.py under directory testRates - -To run the offline rate plots, do - -``` -python ratePlots_validation123x.py --indir testRates --outdir "your own directory" --tag "here a tag for the plots" -``` - -For online plots, add option --online. - -For testing the rate plotting, just do - -``` -python ratePlots_validation123x.py --indir ratesEmu_123x_2 --outdir "your own directory" --tag "here a tag for the plots" -``` - -The script `ratePlots_L1TDR.py` is used to compute the rates for L1 TDR results. This can be used to make a plot too, but personally I used this to fetch the rates (and saved them to `rates_L1TDR/rates.py`). diff --git a/rates/plots/compare_rates.ipynb b/rates/plots/compare_rates.ipynb deleted file mode 100644 index 305b432c..00000000 --- a/rates/plots/compare_rates.ipynb +++ /dev/null @@ -1,462 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "35a6e6b5", - "metadata": {}, - "outputs": [], - "source": [ - "import argparse \n", - "import os, sys \n", - " \n", - "import matplotlib.pyplot as plt \n", - "import mplhep as hep \n", - "plt.style.use(hep.style.CMS)\n", - "\n", - "import numpy as np \n", - "import pandas as pd\n", - "# from progress.bar import IncrementalBar \n", - "import yaml \n", - "import json " - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "4c1c5771", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['/cvmfs/sft.cern.ch/lcg/releases/condor/8.9.11-e1651/x86_64-centos7-gcc11-opt/lib/python3',\n", - " '/cvmfs/sft.cern.ch/lcg/views/LCG_102b_swan/x86_64-centos7-gcc11-opt/lib/python3.9/site-packages/itk',\n", - " '/cvmfs/sft.cern.ch/lcg/views/LCG_102b_swan/x86_64-centos7-gcc11-opt/python',\n", - " '/cvmfs/sft.cern.ch/lcg/views/LCG_102b_swan/x86_64-centos7-gcc11-opt/lib',\n", - " '',\n", - " '/cvmfs/sft.cern.ch/lcg/views/LCG_102b_swan/x86_64-centos7-gcc11-opt/lib/python3.9/site-packages',\n", - " '/cvmfs/sft.cern.ch/lcg/releases/Python/3.9.12-9a1bc/x86_64-centos7-gcc11-opt/lib/python39.zip',\n", - " '/cvmfs/sft.cern.ch/lcg/releases/Python/3.9.12-9a1bc/x86_64-centos7-gcc11-opt/lib/python3.9',\n", - " '/cvmfs/sft.cern.ch/lcg/releases/Python/3.9.12-9a1bc/x86_64-centos7-gcc11-opt/lib/python3.9/lib-dynload',\n", - " '/eos/user/a/alobanov/.local/lib/python3.9/site-packages',\n", - " '/eos/user/a/alobanov/.local/lib/python3.9/site-packages/python39_omsapi-0.0.0-py3.9.egg',\n", - " '/cvmfs/sft.cern.ch/lcg/releases/Python/3.9.12-9a1bc/x86_64-centos7-gcc11-opt/lib/python3.9/site-packages',\n", - " '/cvmfs/sft.cern.ch/lcg/views/LCG_102b_swan/x86_64-centos7-gcc11-opt/lib/python3.9/site-packages/IPython/extensions',\n", - " '/scratch/alobanov/.ipython']" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sys.path" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "9af04b3d", - "metadata": {}, - "outputs": [], - "source": [ - "fnames = {\n", - " \"123x\": \"/eos/home-a/alobanov/www/L1T/Phase2/menu/rates/test_123x/rates_123.py\",\n", - "# \"123x Jaana\": \"/eos/home-a/alobanov/www/L1T/Phase2/menu/rates/jaana_123x/rates_jaana_123x.py\",\n", - " \"125x\": \"/eos/home-a/alobanov/www/L1T/Phase2/menu/rates/test_125x/rates_125.py\",\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "9c921fc3", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0 123x /eos/home-a/alobanov/www/L1T/Phase2/menu/rates/test_123x/rates_123.py\n", - "import rates_123 as rates_v0\n", - "1 125x /eos/home-a/alobanov/www/L1T/Phase2/menu/rates/test_125x/rates_125.py\n", - "import rates_125 as rates_v1\n" - ] - } - ], - "source": [ - "for i,(key,fname) in enumerate(fnames.items()):\n", - " print(i,key,fname)\n", - " \n", - " sys.path.append(os.path.dirname(fname))\n", - " exec_cmd = \"import %s as rates_v%i\" %(os.path.basename(fname).replace(\".py\",\"\"), i)\n", - " print(exec_cmd)\n", - " exec(exec_cmd)\n", - " #rates_v0.offrate[\"gmtTkMuon\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "e7698795", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array('d', [28932.5, 28163.2, 3922.6, 364.0, 110.3, 47.7, 26.5, 17.8, 12.0, 8.5, 6.4, 5.4, 4.7, 3.8, 3.5, 3.4, 2.9, 2.4, 2.2, 2.1, 2.0, 2.0, 1.8, 1.7, 1.6, 1.6])" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rates_v0.offrate[\"gmtTkMuon\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "a2f7befa", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array('d', [17768.8, 16706.8, 1917.1, 326.7, 104.2, 47.5, 24.6, 15.0, 10.8, 7.6, 6.0, 4.5, 3.5, 3.0, 2.8, 2.4, 2.1, 2.1, 1.9, 1.7, 1.5, 1.3, 1.2, 1.2, 0.9, 0.8])" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rates_v1.offrate[\"gmtTkMuon\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "cae69aab", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['gmtTkMuon', 'gmtMuon', 'gmtMuonEndcap']" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "objs = list(rates_v1.offrate.keys())\n", - "objs[:3]" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "7fe5da2e", - "metadata": {}, - "outputs": [], - "source": [ - "labels = {\n", - " 'standaloneElectron' : 'calorimeter-only electron',\n", - " 'tkElectron' : 'track-matched electron',\n", - " 'tkIsoElectron' : 'track-matched + charged iso. electron',\n", - " 'tkPhotonIso' : 'charged iso. photon',\n", - " 'standaloneMuon' : 'standalone muon',\n", - " 'tkMuon' : 'track-matched muon (tkMuon)',\n", - " 'tkMuonStub' : 'track-matched muon (tkMuonStub)',\n", - " 'trackerJet' : 'tracker jet',\n", - " 'caloJet' : 'calo jet',\n", - " 'puppiPhase1Jet' : 'histogr. puppi jet',\n", - " 'seededConePuppiJet' : 'seeded cone puppi jet',\n", - " 'caloJetExt' : 'calo jet ($|\\eta|<5$)',\n", - " 'puppiPhase1JetExt' : 'histogr. puppi jet ($|\\eta|<5$)',\n", - " 'seededConePuppiJetExt' : 'seeded cone puppi jet ($|\\eta|<5$)',\n", - " 'puppiPhase1HT' : 'histogr. puppi jets $H_{T}$',\n", - " 'trackerHT' : 'tracker $H_{T}$',\n", - " 'caloHT' : 'calo $H_{T}$',\n", - " 'puppiPhase1MHT' : 'histogr. puppi jets $\\slash{H}_{T}$',\n", - " 'trackerMHT' : 'tracker $\\slash{H}_{T}$',\n", - " 'puppiMET' : 'puppi $\\slash{E}_{T}$',\n", - " 'trackerMET' : 'tracker $\\slash{E}_{T}$',\n", - " 'gmtMuon' : 'GMT standalone muon',\n", - " 'gmtTkMuon' : 'GMT track-matched muon',\n", - " 'CaloTau' : 'calo tau',\n", - " 'CaloTauEndcap' : 'calo tau, endcap',\n", - " 'CaloTauBarrel' : 'calo tau, barrel',\n", - " 'NNPuppiTauLoose' : 'nnPuppi tau (loose WP)',\n", - " 'NNPuppiTau2vtxLoose' : 'nnPuppi tau (loose WP, 2vtx)',\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "f41f90aa", - "metadata": {}, - "outputs": [], - "source": [ - "plots = {\n", - "# 0 : ['standaloneElectron'],\n", - " #0: ['standaloneMuonBarrel', 'standaloneMuonOverlap', 'standaloneMuonEndcap'] \n", - " ##0 : ['gmtMuonBarrel', 'gmtMuonOverlap', 'gmtMuonEndcap'], \n", - "# 0 : ['standaloneElectron', 'tkElectron', 'tkIsoElectron', 'tkPhotonIso'],\n", - "# 1 : ['trackerJet', 'puppiPhase1Jet', 'seededConePuppiJet', 'caloJet'],\n", - "# #9 : ['trackerJet', 'puppiPhase1Jet', 'seededConePuppiJet'], \n", - "# 2 : ['puppiPhase1JetExt', 'seededConePuppiJetExt', 'caloJetExt'],\n", - "# 10 : ['puppiPhase1JetExt', 'seededConePuppiJetExt'],\n", - "# 3 : ['puppiPhase1HT', 'trackerHT', 'caloHT'],\n", - "# #4 : ['puppiPhase1HT', 'trackerHT'], \n", - "# 5 : ['puppiPhase1MHT', 'trackerMHT'], \n", - "# 6 : ['puppiMET', 'trackerMET'], #'trackerMET_FBE'], \n", - "# # 6 : ['trackerMET'],\n", - "# #7 : ['standaloneMuon', 'tkMuon', 'tkMuonStub'], \n", - " 8 : ['gmtMuon', 'gmtTkMuon'],\n", - "# 11 : ['CaloTau', 'NNPuppiTauLoose'], #, 'NNPuppiTau2vtxLoose'], \n", - "# 12: ['CaloTau','CaloTauBarrel','CaloTauEndcap'],\n", - "# 15: ['CaloTau','CaloTauBarrel','CaloTauEndcap','NNPuppiTauLoose']\n", - "}\n" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "60b345dc", - "metadata": {}, - "outputs": [], - "source": [ - "outdir = \"/eos/user/a/alobanov/www/L1T/Phase2/menu/rates/123x_vs_125x/online/\"\n", - "# outdir = \"/eos/user/a/alobanov/www/L1T/Phase2/menu/rates/test_123x_mine_vs_jaana/online/\"\n", - "if not os.path.exists(outdir): os.makedirs(outdir)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "2631d6b8", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['standaloneElectron', 'tkElectron', 'tkIsoElectron', 'tkPhotonIso']\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# %%capture\n", - "\n", - "for _,items in plots.items():\n", - " \n", - " fig, axs = plt.subplots(\n", - " 2,1,figsize=(10, 10),\n", - " sharex = True,\n", - " gridspec_kw={'height_ratios': [3, 1]}) \n", - " hep.cms.label(ax=axs[0], llabel=\"Phase-2 Simulation\", rlabel = \"14 TeV\")\n", - " \n", - " print(items)\n", - " \n", - " for item in items:\n", - " if (item not in rates_v0.onl) or (item not in rates_v1.onl): \n", - " print(f\"{item} missing\")\n", - " items.remove(item)\n", - " \n", - " ax = axs[0]\n", - " \n", - " # make item labels for legend\n", - "# for item in items:\n", - "# ax.plot([], [], ' ', label = labels[item])\n", - " \n", - " v_labels = [\"123x\",\"125x\"]\n", - " v_markers = [\".--\",\"o-\"]\n", - " v_rates = [rates_v0,rates_v1]\n", - " \n", - " for i in range(2):\n", - " label = v_labels[i]\n", - " rates = v_rates[i]\n", - " markers = v_markers[i]\n", - " \n", - "# ax.plot([], [], ' ', label = label)\n", - "\n", - " for j,item in enumerate(items):\n", - " ax.plot(rates.onl[item],rates.onlrate[item],\n", - " markers, \n", - " color = f\"C{j}\",\n", - " label = f\"{label}\" if i == 0 else fr\"{label} | {labels[item]}\"\n", - "# label = f\"{label}\" if i == 0 else f\"{labels[item]}\"\n", - " )\n", - " \n", - " # make ratio\n", - " for j,item in enumerate(items):\n", - " ratio = np.array(v_rates[1].onlrate[item]) / np.array(v_rates[0].onlrate[item])\n", - " axs[1].plot(v_rates[0].onl[item], ratio, color = f\"C{j}\")\n", - " \n", - " ax.legend(ncol = 2, fontsize = \"x-small\", columnspacing=0.5)\n", - " ax.set_ylabel(\"Rate [kHz]\")\n", - " ax.set_yscale(\"log\")\n", - " \n", - " axs[1].set_xlabel(r\"Online $p_T$ [GeV]\")\n", - " axs[1].set_ylabel(f\"{v_labels[1]} / {v_labels[0]}\")\n", - " \n", - "# axs[0].set_ylim(1,1e5)\n", - " axs[1].set_ylim(.5,1.5)\n", - "\n", - " for ax in axs: ax.grid()\n", - " plt.tight_layout()\n", - " plt.subplots_adjust(wspace=0, hspace=0)\n", - " \n", - "# for ext in [\".png\",\".pdf\"]:\n", - " \n", - "# outfname = outdir + \"rates_online_\" + \"_\".join(items) + ext\n", - "# plt.savefig(outfname)\n", - " \n", - "# print(outfname)\n", - "\n", - " break" - ] - }, - { - "cell_type": "markdown", - "id": "812c21fe", - "metadata": {}, - "source": [ - "# OFFLINE" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "46b49a63", - "metadata": {}, - "outputs": [], - "source": [ - "outdir = \"/eos/user/a/alobanov/www/L1T/Phase2/menu/rates/test_123x_vs_125x/offline/\"\n", - "if not os.path.exists(outdir): os.makedirs(outdir)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "2cb28ad7", - "metadata": {}, - "outputs": [], - "source": [ - "%%capture\n", - "\n", - "for _,items in plots.items():\n", - " \n", - " fig, axs = plt.subplots(\n", - " 2,1,figsize=(10, 10),\n", - " sharex = True,\n", - " gridspec_kw={'height_ratios': [3, 1]}) \n", - " hep.cms.label(ax=axs[0], llabel=\"Phase-2 Simulation\", rlabel = \"14 TeV\")\n", - " \n", - " print(items)\n", - " \n", - " for item in items:\n", - " if (item not in rates_v0.off) or (item not in rates_v1.off): \n", - " print(f\"{item} missing\")\n", - " items.remove(item)\n", - " \n", - " ax = axs[0]\n", - " \n", - " # make item labels for legend\n", - "# for item in items:\n", - "# ax.plot([], [], ' ', label = labels[item])\n", - " \n", - " v_labels = [\"123x\",\"125x\"]\n", - " v_markers = [\".--\",\"o-\"]\n", - " v_rates = [rates_v0,rates_v1]\n", - " \n", - " for i in range(2):\n", - " label = v_labels[i]\n", - " rates = v_rates[i]\n", - " markers = v_markers[i]\n", - " \n", - "# ax.plot([], [], ' ', label = label)\n", - "\n", - " for j,item in enumerate(items):\n", - " ax.plot(rates.off[item],rates.offrate[item],\n", - " markers, \n", - " color = f\"C{j}\",\n", - " label = f\"{label}\" if i == 0 else fr\"{label} | {labels[item]}\"\n", - "# label = f\"{label}\" if i == 0 else f\"{labels[item]}\"\n", - " )\n", - " \n", - " # make ratio\n", - " for j,item in enumerate(items):\n", - " ratio = np.array(v_rates[1].offrate[item]) / np.array(v_rates[0].offrate[item])\n", - " axs[1].plot(v_rates[0].off[item], ratio, color = f\"C{j}\")\n", - " \n", - " ax.legend(ncol = 2, fontsize = \"x-small\", columnspacing=0.5)\n", - " ax.set_ylabel(\"Rate [kHz]\")\n", - " ax.set_yscale(\"log\")\n", - " \n", - " axs[1].set_xlabel(r\"Offline $p_T$ [GeV]\")\n", - " axs[1].set_ylabel(f\"{v_labels[1]} / {v_labels[0]}\")\n", - " \n", - "# axs[0].set_ylim(1,1e5)\n", - "\n", - " for ax in axs: ax.grid()\n", - " plt.tight_layout()\n", - " plt.subplots_adjust(wspace=0, hspace=0)\n", - " \n", - " for ext in [\".png\",\".pdf\"]:\n", - " \n", - " outfname = outdir + \"rates_offline_\" + \"_\".join(items) + ext\n", - " plt.savefig(outfname)\n", - " \n", - " print(outfname)\n", - "\n", - "# break" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.12" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/rates/plots/ratePlots_L1TDR.py b/rates/plots/ratePlots_L1TDR.py deleted file mode 100644 index 3748b869..00000000 --- a/rates/plots/ratePlots_L1TDR.py +++ /dev/null @@ -1,1375 +0,0 @@ -from ROOT import * -from array import * - -gStyle.SetOptStat(0) -TAxis().SetMoreLogLabels(1) - -#f = TFile("/eos/cms/store/group/cmst3/group/l1tr/cepeda/triggerntuples10X/NeutrinoGun_E_10GeV/NeutrinoGun_E_10GeV_V7_5_2_MERGED.root","READ") -#f = TFile("/eos/cms/store/cmst3/user/botta/NeutrinoGun_E_10GeV_V8_2_MERGED.root","READ") ### Maria reproduce the right one for photons: /eos/cms/store/group/cmst3/group/l1tr/cepeda/triggerntuples10X/NeutrinoGun_E_10GeV/NuGun_V8_5.root -#f = TFile("/eos/cms/store/cmst3/user/botta/NeutrinoGun_E_10GeV_V8_2_106X_MERGED.root","READ") -#f = TFile("/eos/cms/store/cmst3/user/botta/NeutrinoGun_E_10GeV_V9_MERGED.root","READ") -#f = TFile("/eos/cms/store/cmst3/user/botta/NeutrinoGun_E_10GeV_V10p3_MERGED.root","READ") -#f = TFile("/eos/cms/store/cmst3/user/botta/NeutrinoGun_E_10GeV_V10p4_MERGED.root","READ") -f = TFile("/eos/cms/store/cmst3/user/botta/NeutrinoGun_E_10GeV_V10p7_MERGED.root","READ") - - - -t = f.Get("l1PhaseIITree/L1PhaseIITree") - -ntot = t.GetEntriesFast() - -off = {} -offrate = {} -onl = {} -onlrate = {} -g_off = {} -g_onl = {} - - -h = {} - - - -###### SCALINGS - - - -## HT - -#function :: PuppiHTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-4.63573)/1.0087 -#function :: TTbarPuppiHTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+12.84)/1.03535 -#function :: PFPhase1HTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-7.00327)/1.01015 -#function :: TTbarPFPhase1HTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+5.29584)/1.03089 -#function :: TrackerHTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+2.47118)/1.95961 -#function :: TTbarTrackerHTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+46.31)/2.20021 -#function :: CaloHTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+73.8289)/0.923594 -#function :: TTbarCaloHTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+90.1537)/0.957146 -#function :: PuppiHT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-47.9233)/1.08345 -#function :: PFPhase1HT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-53.7549)/1.08834 -#function :: TrackerHT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-35.1578)/2.66569 -#function :: CaloHT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+1.30634)/0.997298 -#function :: TTbarPuppiHT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-42.6661)/1.0753 -#function :: TTbarPFPhase1HT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-53.7965)/1.07331 -#function :: TTbarTrackerHT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-15.5172)/2.76786 -#function :: TTbarCaloHT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+9.15257)/1.06462 - -#function :: HadronicTTbarPuppiHTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+6.18248)/1.03343 -#function :: HadronicTTbarPFPhase1HTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-2.19174)/1.03043 -#function :: HadronicTTbarTrackerHTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+38.7746)/2.13034 -#function :: HadronicTTbarCaloHTOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+88.5201)/0.93691 - -#function :: HadronicTTbarPuppiHT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-51.8588)/1.06447 -#function :: HadronicTTbarPFPhase1HT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-64.5616)/1.06039 -#function :: HadronicTTbarTrackerHT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-9.34255)/2.64851 -#function :: HadronicTTbarCaloHT090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+9.37574)/1.02455 - - -#choose ttbar 50% -#def PuppiHTOfflineEtCut(offline): return (offline+12.84)/1.03535 -#def PFPhase1HTOfflineEtCut(offline): return (offline+5.29584)/1.03089 -#def TrackerHTOfflineEtCut(offline): return (offline+46.31)/2.20021 -#def CaloHTOfflineEtCut(offline): return (offline+90.1537)/0.957146 - -#choose ttbar 90% --test on February 17 by Jaana -#def PuppiHTOfflineEtCut(offline): return (offline-42.6661)/1.0753 -#def PFPhase1HTOfflineEtCut(offline): return (offline-53.7965)/1.07331 -#def TrackerHTOfflineEtCut(offline): return (offline-15.5172)/2.76786 -#def CaloHTOfflineEtCut(offline): return (offline+9.15257)/1.06462 - -#choose ttbar hadronic 50% -#def PuppiHTOfflineEtCut(offline): return (offline+12.84)/1.03535 -#def PFPhase1HTOfflineEtCut(offline): return (offline+5.29584)/1.03089 -#def TrackerHTOfflineEtCut(offline): return (offline+46.31)/2.20021 -#def CaloHTOfflineEtCut(offline): return (offline+90.1537)/0.957146 - -#choose ttbar hadronic 90% #these were used for the L1 TDR table -def PuppiHTOfflineEtCut(offline): return (offline-51.8588)/1.06447 -def PFPhase1HTOfflineEtCut(offline): return (offline-64.5616)/1.06039 -def TrackerHTOfflineEtCut(offline): return (offline-9.34255)/2.64851 -def CaloHTOfflineEtCut(offline): return (offline+9.37574)/1.02455 - -#Update from Jaana on Feb17 for scalings, using the ttbar 90 instead now - -## MET - -## tracker MET high values for scaling -#function :: PuppiMETOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-19.1432)/1.07251 -#function :: TrackerMETOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-97.9892)/1.55151 -#function :: TTbarPuppiMETOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+6.79552)/1.23709 -#function :: TTbarTrackerMETOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-11.7906)/1.97972 -#function :: PuppiMET090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-87.0446)/1.1511 -#function :: TrackerMET090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-154.856)/3.71756 -#function :: TTbarPuppiMET090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-51.5627)/1.36698 -#function :: TTbarTrackerMET090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-186.324)/2.28745 - -## tracker MET low values for scaling -#function :: PuppiMETOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-19.1432)/1.07251 -#function :: TrackerMETOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+0.600811)/3.11669 -#function :: TTbarPuppiMETOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+6.79552)/1.23709 -#function :: TTbarTrackerMETOfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+104.886)/3.73323 -#function :: PuppiMET090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-87.0446)/1.1511 -#function :: TrackerMET090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-221.122)/2.74021 -#function :: TTbarPuppiMET090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline-51.5627)/1.36698 -#function :: TTbarTrackerMET090OfflineEtCut :: args:=(offline,Et); lambda:=Et>(offline+14.2411)/5.21706 - - -#choose VBFHinv 50% -#def PuppiMETOfflineEtCut(offline): return (offline-19.1432)/1.07251 -#def TrackerMETOfflineEtCut(offline): return (offline+0.600811)/3.11669 - -#choose VBFHinv 90% -#def PuppiMETOfflineEtCut(offline): return (offline-87.0446)/1.1511 -#def TrackerMETOfflineEtCut(offline): return (offline-221.122)/2.74021 - -#choose ttbar 50% -#def PuppiMETOfflineEtCut(offline): return (offline+6.79552)/1.23709 -#def TrackerMETOfflineEtCut(offline): return (offline+104.886)/3.73323 - -#choose ttbar 90% -def PuppiMETOfflineEtCut(offline): return (offline-51.5627)/1.36698 -def TrackerMETOfflineEtCut(offline): return (offline+14.2411)/5.21706 - - - - - - -## Taus V6HH - -#function :: PFTauOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+1.02859)/1.04655 if abs(Eta)<1.5 else Et>(offline+0.873734)/1.12528 -#function :: PFIsoTauOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+0.715016)/1.0354 if abs(Eta)<1.5 else Et>(offline-0.619152)/1.07797 -#function :: NNTauTightOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+1.22271)/1.02652 if abs(Eta)<1.5 else Et>(offline+4.45279)/1.12063 -#function :: NNTauLooseOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.0282565)/1.00757 if abs(Eta)<1.5 else Et>(offline+1.7323)/1.07902 -#function :: TkEGTauOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+0.200375)/1.01773 if abs(Eta)<1.5 else Et>(offline+1.68334)/1.22362 -#function :: CaloTauOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+6.604)/1.14519 if abs(Eta)<1.5 else Et>(offline+4.19867)/1.06606 -#function :: PFTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+11.5292)/2.08813 if abs(Eta)<1.5 else Et>(offline-2.45302)/1.85321 -#function :: PFIsoTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+4.72956)/1.80821 if abs(Eta)<1.5 else Et>(offline-11.0478)/1.55742 -#function :: NNTauTight090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+21.3166)/1.84293 if abs(Eta)<1.5 else Et>(offline+1.47361)/1.39273 -#function :: NNTauLoose090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+9.16702)/1.69784 if abs(Eta)<1.5 else Et>(offline-3.12516)/1.36535 -#function :: TkEGTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+91.7613)/5.12908 if abs(Eta)<1.5 else Et>(offline+13.6892)/3.89439 -#function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+0.937512)/1.38032 if abs(Eta)<1.5 else Et>(offline-1.92178)/1.26272 - - -#choose HH 50% -#def PFTauOfflineEtCutBarrel(offline): return (offline+1.02859)/1.04655 -#def PFTauOfflineEtCutEndcap(offline): return (offline+0.873734)/1.12528 - -#def PFIsoTauOfflineEtCutBarrel(offline): return (offline+0.715016)/1.0354 -#def PFIsoTauOfflineEtCutEndcap(offline): return (offline-0.619152)/1.07797 - -#def NNTauTightOfflineEtCutBarrel(offline): return (offline+1.22271)/1.02652 -#def NNTauTightOfflineEtCutEndcap(offline): return (offline+4.45279)/1.12063 - -#def NNTauLooseOfflineEtCutBarrel(offline): return (offline-0.0282565)/1.00757 -#def NNTauLooseOfflineEtCutEndcap(offline): return (offline+1.7323)/1.07902 - -#def TkEGTauOfflineEtCutBarrel(offline): return (offline+0.200375)/1.01773 -#def TkEGTauOfflineEtCutEndcap(offline): return (offline+1.68334)/1.22362 - -#def CaloTauOfflineEtCutBarrel(offline): return (offline+6.604)/1.14519 -#def CaloTauOfflineEtCutEndcap(offline): return (offline+4.19867)/1.06606 - - -#choose HH 90% -def PFTauOfflineEtCutBarrel(offline): return (offline+11.5292)/2.08813 -def PFTauOfflineEtCutEndcap(offline): return (offline-2.45302)/1.85321 - -def PFIsoTauOfflineEtCutBarrel(offline): return (offline+4.72956)/1.80821 -def PFIsoTauOfflineEtCutEndcap(offline): return (offline-11.0478)/1.55742 - -def NNTauTightOfflineEtCutBarrel(offline): return (offline+21.3166)/1.84293 -def NNTauTightOfflineEtCutEndcap(offline): return (offline+1.47361)/1.39273 - -def NNTauLooseOfflineEtCutBarrel(offline): return (offline+9.16702)/1.69784 -def NNTauLooseOfflineEtCutEndcap(offline): return (offline-3.12516)/1.36535 - -def TkEGTauOfflineEtCutBarrel(offline): return (offline+91.7613)/5.12908 -def TkEGTauOfflineEtCutEndcap(offline): return (offline+13.6892)/3.89439 - -def CaloTauOfflineEtCutBarrel(offline): return (offline+0.937512)/1.38032 -def CaloTauOfflineEtCutEndcap(offline): return (offline-1.92178)/1.26272 - - - -#V4 -# def PFTauOfflineEtCutBarrel(offline): return (offline+1.08865)/1.06336 -# def PFTauOfflineEtCutEndcap(offline): return (offline+0.267099)/1.11537 - -# def PFIsoTauOfflineEtCutBarrel(offline): return (offline+0.723147)/1.04974 -# def PFIsoTauOfflineEtCutEndcap(offline): return (offline-1.57412)/1.05859 - -# def NNTauTightOfflineEtCutBarrel(offline): return (offline+10.2033)/1.36891 -# def NNTauTightOfflineEtCutEndcap(offline): return (offline+9.02217)/1.34075 - -# def NNTauLooseOfflineEtCutBarrel(offline): return (offline+7.93117)/1.45874 -# def NNTauLooseOfflineEtCutEndcap(offline): return (offline+5.25829)/1.39801 - -# def TkEGTauOfflineEtCutBarrel(offline): return (offline-0.016095)/1.02482 -# def TkEGTauOfflineEtCutEndcap(offline): return (offline+2.21268)/1.27027 - -# def CaloTauOfflineEtCutBarrel(offline): return (offline+6.53017)/1.15518 -# def CaloTauOfflineEtCutEndcap(offline): return (offline+4.59066)/1.07214 - - - -# def HPSTauOfflineEtCutBarrel(offline): return (offline-1.99747)/0.990751 -# def HPSTauOfflineEtCutEndcap(offline): return (offline-1.401)/1.08257 -# def HPSIsoTauOfflineEtCutBarrel(offline): return (offline-1.02907)/1.00135 -# def HPSIsoTauOfflineEtCutEndcap(offline): return (offline-1.19503)/1.07426 - - -## Jets -# function :: PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-39.7621)/1.10472 if abs(Eta)<1.5 else (Et>(offline-59.4759)/1.05225 if abs(Eta)<2.4 else Et>(offline-6.47801)/1.99057) -# function :: PFPhase1JetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-35.6078)/1.2042 if abs(Eta)<1.5 else (Et>(offline-61.8214)/1.09898 if abs(Eta)<2.4 else Et>(offline-1.08496)/2.15502) -# function :: CaloJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-24.8298)/1.1863 if abs(Eta)<1.5 else (Et>(offline-26.8634)/1.17171 if abs(Eta)<2.4 else Et>(offline+31.0189)/2.16122) -# function :: TrackerJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-39.5772)/4.3296 if abs(Eta)<1.5 else Et>(offline-52.663)/5.63404 - -# function :: TTbarPuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-16.2875)/1.25257 if abs(Eta)<1.5 else (Et>(offline-25.8625)/1.24229 if abs(Eta)<2.4 else Et>(offline-9.68567)/1.94574) -# function :: TTbarPFPhase1JetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-12.7315)/1.37302 if abs(Eta)<1.5 else (Et>(offline-25.211)/1.35985 if abs(Eta)<2.4 else Et>(offline-15.711)/1.88226) -# function :: TTbarCaloJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-17.4134)/1.29985 if abs(Eta)<1.5 else (Et>(offline-49.7045)/1.09395 if abs(Eta)<2.4 else Et>(offline-3.99523)/1.68789) -# function :: TTbarTrackerJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-45.6922)/4.2229 if abs(Eta)<1.5 else Et>(offline-97.3989)/4.27346 - -##choose ttbar -def PuppiJetOfflineEtCutBarrel(offline): return (offline-16.2875)/1.25257 -def PuppiJetOfflineEtCutEndcap(offline): return (offline-25.8625)/1.24229 -def PuppiJetOfflineEtCutForward(offline): return (offline-9.68567)/1.94574 - -def PFPhase1JetOfflineEtCutBarrel(offline): return (offline-12.7315)/1.37302 -def PFPhase1JetOfflineEtCutEndcap(offline): return (offline-25.211)/1.35985 -def PFPhase1JetOfflineEtCutForward(offline): return (offline-15.711)/1.88226 - -def CaloJetOfflineEtCutBarrel(offline): return (offline-17.4134)/1.29985 -def CaloJetOfflineEtCutEndcap(offline): return (offline-49.7045)/1.09395 -def CaloJetOfflineEtCutForward(offline): return (offline-3.99523)/1.68789 - -def TrackerJetOfflineEtCutBarrel(offline): return (offline-45.6922)/4.2229 -def TrackerJetOfflineEtCutEndcap(offline): return (offline-97.3989)/4.27346 - - -### Muons -# function :: StandaloneMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-3.89083)/1.0142 if abs(Eta)<0.9 else (Et>(offline-0.712226)/1.09458 if abs(Eta)<1.2 else Et>(offline-2.72037)/0.993461) -# function :: TkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.485737)/1.05306 if abs(Eta)<0.9 else (Et>(offline-0.841831)/1.03697 if abs(Eta)<1.2 else Et>(offline-0.78699)/1.03252) -# function :: TkMuonStubOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.726357)/1.04175 if abs(Eta)<0.9 else (Et>(offline-0.735574)/1.04424 if abs(Eta)<1.2 else Et>(offline-0.543297)/1.04428) - -#Update with no quality a part from OverlapSta, and including forward Stubs -# function :: StandaloneMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-3.88566)/1.01712 if abs(Eta)<0.9 else (Et>(offline+1.16016)/1.31345 if abs(Eta)<1.2 else (Et>(offline-0.389879)/1.18579 if abs(Eta)<2.4 else Et>(offline+28.4221)/5.51244)) -# function :: TkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.480586)/1.05326 if abs(Eta)<0.9 else (Et>(offline-0.789258)/1.03509 if abs(Eta)<1.2 else Et>(offline-0.784553)/1.03251) -# function :: TkMuonStubOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.710744)/1.04185 if abs(Eta)<0.9 else (Et>(offline-0.805149)/1.04062 if abs(Eta)<1.2 else Et>(offline-0.554819)/1.04354) - - - -def StandaloneMuonOfflineEtCutBarrel(offline): return (offline-3.88566)/1.01712 -def TkMuonOfflineEtCutBarrel(offline): return (offline-0.480586)/1.05326 -def TkMuonStubOfflineEtCutBarrel(offline): return (offline-0.710744)/1.04185 - -def StandaloneMuonOfflineEtCutOverlap(offline): return (offline+1.16016)/1.31345 -def TkMuonOfflineEtCutOverlap(offline): return (offline-0.789258)/1.03509 -def TkMuonStubOfflineEtCutOverlap(offline): return (offline-0.805149)/1.04062 - -def StandaloneMuonOfflineEtCutEndcap(offline): return (offline-0.389879)/1.18579 -def TkMuonOfflineEtCutEndcap(offline): return (offline-0.784553)/1.03251 -def TkMuonStubOfflineEtCutEndcap(offline): return (offline-0.554819)/1.04354 - -def TkMuonStubOfflineEtCutForward(offline): return (offline+28.4221)/5.51244 - - -## EG -# function :: EGPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.80694)/0.979067 if abs(Eta)<1.5 else (Et>(offline-7.66012)/1.03665 if abs(Eta)<2.4 else Et>(offline-2.63103)/1.4081) -# function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.95953)/1.0434 if abs(Eta)<1.5 else (Et>(offline-7.79311)/1.10045 if abs(Eta)<2.4 else Et>(offline-5.43055)/1.28648) -# function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.252031)/1.09043 if abs(Eta)<1.5 else Et>(offline-5.27586)/1.16298 -# function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.315819)/1.08834 if abs(Eta)<1.5 else Et>(offline-4.62976)/1.16961 -# function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.92377)/1.01512 if abs(Eta)<1.5 else Et>(offline-5.92531)/1.05584 - - -def StandalonePhotonOfflineEtCutBarrel(offline): return (offline-2.80694)/0.979067 -def StandalonePhotonOfflineEtCutEndcap(offline): return (offline-7.66012)/1.03665 - -def StandaloneElectronOfflineEtCutBarrel(offline): return (offline-2.95953)/1.0434 -def StandaloneElectronOfflineEtCutEndcap(offline): return (offline-7.79311)/1.10045 -def StandaloneElectronOfflineEtCutForward(offline): return (offline-5.43055)/1.28648 - - - -def TkElectronOfflineEtCutBarrel(offline): return (offline-0.252031)/1.09043 -def TkElectronOfflineEtCutEndcap(offline): return (offline-5.27586)/1.16298 - -def TkIsoElectronOfflineEtCutBarrel(offline): return (offline-0.315819)/1.08834 -def TkIsoElectronOfflineEtCutEndcap(offline): return (offline-4.62976)/1.16961 - -def TkIsoPhotonOfflineEtCutBarrel(offline): return (offline-1.92377)/1.01512 -def TkIsoPhotonOfflineEtCutEndcap(offline): return (offline-5.92531)/1.05584 - - -cutrange = { - -#'tkMuon':[0.0,60.0,3.0], -#'tkMuonStub':[0.0,60.0,3.0], -#'tkMuonStubExt':[0.0,60.0,3.0], -#'standaloneMuon':[0.0,60.0,3.0], - -'tkMuon':[0.0,78.0,3.0], -'tkMuonStub':[0.0,78.0,3.0], -'standaloneMuon':[0.0,78.0,3.0], - -'tkMuonBarrel':[0.0,60.0,3.0], -'tkMuonStubBarrel':[0.0,60.0,3.0], -'standaloneMuonBarrel':[0.0,60.0,3.0], - -'tkMuonOverlap':[0.0,60.0,3.0], -'tkMuonStubOverlap':[0.0,60.0,3.0], -'standaloneMuonOverlap':[0.0,60.0,3.0], - -'tkMuonEndcap':[0.0,60.0,3.0], -'tkMuonStubEndcap':[0.0,60.0,3.0], -'standaloneMuonEndcap':[0.0,60.0,3.0], - -#'tkElectron':[10.0,70.0,3.0], -#'tkIsoElectron':[10.0,70.0,3.0], -#'standaloneElectron':[10.0,70.0,3.0], -#'standaloneElectronExt':[10.0,70.0,3.0], - -'tkElectron':[10.0,100.0,3.0], -'tkIsoElectron':[10.0,100.0,3.0], -'standaloneElectron':[10.0,100.0,3.0], -'standaloneElectronExt':[10.0,100.0,3.0], - -'tkElectronBarrel':[10.0,70.0,3.0], -'tkIsoElectronBarrel':[10.0,70.0,3.0], -'standaloneElectronBarrel':[10.0,70.0,4.0], - -'tkElectronEndcap':[10.0,70.0,3.0], -'tkIsoElectronEndcap':[10.0,70.0,3.0], -'standaloneElectronEndcap':[10.0,70.0,3.0], - -#'tkPhotonIso':[10.0,70.0,3.0], -'tkPhotonIso':[10.0,100.0,3.0], -'standalonePhoton':[10.0,70.0,3.0], - -'tkPhotonIsoBarrel':[10.0,70.0,3.0], -'standalonePhotonBarrel':[10.0,70.0,3.0], - -'tkPhotonIsoEndcap':[10.0,70.0,3.0], -'standalonePhotonEndcap':[10.0,70.0,3.0], - -'puppiHT':[50.0,500.0,25.0], -'puppiPhase1HT':[50.0,500.0,25.0], -'trackerHT':[50.0,500.0,25.0], -'caloHT':[50.0,500.0,25.0], - -'puppiHT':[50.0,1000.0,25.0], -'puppiPhase1HT':[50.0,1000.0,25.0], -'trackerHT':[50.0,1000.0,25.0], -'caloHT':[50.0,1000.0,25.0], - -'puppiMET':[50.0,500.0,25.0], -'trackerMET':[0.0,500.0,5.0], - -'puppiJet':[40.0,440.0,20.0], -'puppiJetExt':[40.0,440.0,20.0], -'puppiPhase1Jet':[40.0,440.0,20.0], -'puppiPhase1JetExt':[40.0,440.0,20.0], -'trackerJet':[40.0,440.0,20.0], -'caloJet':[40.0,440.0,20.0], -'caloJetExt':[40.0,440.0,20.0], - -'HPSPFTau1':[10.0,160.0,5.0], -'HPSPFTau1Medium':[10.0,160.0,5.0], -'HPSPFTau2':[10.0,160.0,5.0], -'HPSPFTau2Tight':[10.0,160.0,5.0], -'NNPuppiTauLoose':[10.0,160.0,5.0], -'NNPuppiTauTight':[10.0,160.0,5.0], -'TkEGTau':[10.0,160.0,5.0], -'CaloTau':[10.0,160.0,5.0], - -'DiHPSPFTau1':[10.0,80.0,5.0], -'DiHPSPFTau1Medium':[10.0,80.0,5.0], -'DiNNPuppiTauLoose':[10.0,80.0,5.0], -'DiNNPuppiTauTight':[10.0,80.0,5.0], -'DiTkEGTau':[10.0,80.0,5.0], -'DiCaloTau':[10.0,80.0,5.0], - - - - - -} - -list_calc = [ -# 'tkMuon', - #'tkMuonStub', - #'tkMuonStubExt', - #'standaloneMuon', - - # 'tkMuonBarrel', - # 'tkMuonStubBarrel', - # 'standaloneMuonBarrel', - - # 'tkMuonOverlap', - # 'tkMuonStubOverlap', - # 'standaloneMuonOverlap', - - # 'tkMuonEndcap', - # 'tkMuonStubEndcap', - # 'standaloneMuonEndcap', - - #'tkElectron', - #'tkIsoElectron', - # 'standaloneElectron', - # 'standaloneElectronExt', - - # 'tkElectronBarrel', - # 'tkIsoElectronBarrel', - # 'standaloneElectronBarrel', - - # 'tkElectronEndcap', - # 'tkIsoElectronEndcap', - # 'standaloneElectronEndcap', - - #'tkPhotonIso', - # 'standalonePhoton', - - # 'tkPhotonIsoBarrel', - # 'standalonePhotonBarrel', - - # 'tkPhotonIsoEndcap', - # 'standalonePhotonEndcap', - - # 'puppiHT', -# 'puppiPhase1HT', -# 'trackerHT', - # 'caloHT', - # 'puppiMET', - 'trackerMET', - - # 'puppiJet', - # 'puppiJetExt', - # 'puppiPhase1Jet', - # 'puppiPhase1JetExt', - # 'trackerJet', - # 'caloJet', - # 'caloJetExt', - - # 'HPSPFTau1', - # 'HPSPFTau1Medium', - ## 'HPSPFTau2', - ## 'HPSPFTau2Tight', -# 'NNPuppiTauLoose', - #'NNPuppiTauTight', - #'TkEGTau', -# 'CaloTau', - -] - - - - - -# off['tkMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuon'] = array('d', [11230.9, 9787.0, 1217.6, 270.7, 93.8, 42.2, 23.6, 13.9, 8.4, 5.1, 3.9, 3.2, 2.1, 1.8, 1.5, 1.3, 1.1, 1.0, 0.9, 0.9]) -# onl['tkMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuon'] = array('d', [11230.9, 5012.5, 719.7, 182.4, 65.6, 34.2, 19.0, 10.5, 6.7, 4.3, 3.3, 2.3, 1.9, 1.5, 1.4, 1.1, 1.0, 0.9, 0.9, 0.8]) -# off['tkMuonStub'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonStub'] = array('d', [28416.9, 21678.0, 1334.9, 300.1, 106.8, 49.0, 26.6, 16.2, 10.3, 6.9, 5.2, 4.3, 3.1, 2.8, 2.3, 2.1, 1.7, 1.4, 1.4, 1.3]) -# onl['tkMuonStub'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonStub'] = array('d', [28416.9, 9979.5, 806.4, 205.2, 74.4, 38.9, 21.5, 12.5, 8.5, 5.5, 4.4, 3.2, 2.8, 2.3, 2.2, 1.7, 1.4, 1.4, 1.3, 1.3]) -# off['tkMuonStubExt'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonStubExt'] = array('d', [29055.6, 23928.4, 8080.6, 6808.7, 6166.2, 5605.8, 5586.7, 5257.7, 5253.3, 4397.3, 4395.3, 4394.7, 3991.6, 3991.1, 3990.5, 3990.2, 3284.8, 3284.4, 3284.4, 3284.3]) -# onl['tkMuonStubExt'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonStubExt'] = array('d', [29156.2, 15608.4, 7672.1, 5412.1, 4050.8, 3316.5, 2713.0, 2704.7, 2384.3, 2381.7, 2380.7, 2379.5, 1763.1, 1762.6, 1762.4, 1761.9, 1761.7, 1761.7, 1761.6, 1761.6]) -# off['standaloneMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['standaloneMuon'] = array('d', [15048.8, 13635.6, 3007.3, 1247.1, 501.4, 225.8, 112.5, 76.6, 59.3, 48.7, 42.4, 33.6, 29.7, 25.1, 22.8, 21.5, 19.0, 18.1, 17.1, 15.8]) -# onl['standaloneMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['standaloneMuon'] = array('d', [15048.8, 5231.0, 1343.3, 405.0, 195.3, 97.2, 70.7, 50.9, 45.8, 34.3, 31.8, 25.2, 20.7, 20.1, 18.3, 17.8, 15.8, 13.7, 13.2, 12.8]) -# off['tkMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonBarrel'] = array('d', [864.9, 796.5, 344.6, 99.2, 36.7, 17.5, 10.8, 7.0, 4.2, 2.3, 1.9, 1.6, 1.1, 0.9, 0.9, 0.9, 0.7, 0.7, 0.6, 0.6]) -# onl['tkMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonBarrel'] = array('d', [864.9, 683.8, 247.0, 71.2, 25.9, 14.9, 8.9, 5.0, 3.2, 2.1, 1.7, 1.2, 0.9, 0.9, 0.9, 0.7, 0.7, 0.6, 0.6, 0.6]) -# off['tkMuonStubBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonStubBarrel'] = array('d', [589.2, 589.2, 306.7, 105.5, 40.2, 19.2, 11.8, 7.7, 4.8, 3.1, 2.7, 2.3, 1.6, 1.5, 1.3, 1.2, 0.9, 0.9, 0.8, 0.8]) -# onl['tkMuonStubBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonStubBarrel'] = array('d', [589.2, 589.2, 222.5, 73.2, 28.0, 15.9, 9.8, 5.5, 4.0, 2.8, 2.4, 1.6, 1.5, 1.3, 1.3, 0.9, 0.9, 0.8, 0.8, 0.8]) -# off['standaloneMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['standaloneMuonBarrel'] = array('d', [1513.2, 1513.2, 1513.2, 781.1, 289.9, 106.7, 52.4, 32.9, 26.2, 20.6, 16.3, 14.6, 12.1, 11.5, 10.0, 9.6, 8.8, 8.3, 8.1, 7.1]) -# onl['standaloneMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['standaloneMuonBarrel'] = array('d', [1513.2, 1513.2, 526.1, 170.8, 75.8, 39.9, 30.2, 22.3, 19.2, 15.1, 14.2, 11.8, 10.0, 9.8, 9.1, 8.8, 8.2, 7.1, 7.1, 7.0]) -# off['tkMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonOverlap'] = array('d', [836.5, 807.8, 181.6, 33.4, 10.2, 5.2, 3.2, 1.8, 1.4, 0.9, 0.6, 0.6, 0.4, 0.4, 0.4, 0.2, 0.2, 0.1, 0.1, 0.1]) -# onl['tkMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonOverlap'] = array('d', [836.5, 612.7, 97.0, 20.8, 7.1, 4.4, 2.4, 1.8, 1.1, 0.7, 0.6, 0.5, 0.4, 0.4, 0.3, 0.2, 0.1, 0.1, 0.1, 0.1]) -# off['tkMuonStubOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonStubOverlap'] = array('d', [766.2, 711.2, 155.2, 30.5, 9.7, 4.7, 3.1, 1.6, 1.3, 0.7, 0.5, 0.4, 0.3, 0.3, 0.3, 0.1, 0.1, 0.0, 0.0, 0.0]) -# onl['tkMuonStubOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonStubOverlap'] = array('d', [766.2, 492.4, 82.8, 19.0, 6.4, 3.8, 2.2, 1.6, 0.9, 0.5, 0.4, 0.4, 0.3, 0.3, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0]) -# off['standaloneMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['standaloneMuonOverlap'] = array('d', [559.9, 559.9, 320.6, 106.7, 72.4, 46.3, 22.0, 17.7, 14.8, 12.8, 12.8, 8.4, 8.4, 6.7, 6.7, 6.7, 5.5, 5.5, 4.7, 4.7]) -# onl['standaloneMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['standaloneMuonOverlap'] = array('d', [559.9, 559.9, 226.2, 72.6, 46.3, 21.9, 17.7, 12.8, 12.8, 8.4, 8.4, 6.7, 5.5, 5.5, 4.7, 4.7, 3.8, 3.0, 3.0, 3.0]) -# off['tkMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonEndcap'] = array('d', [10169.6, 8714.2, 709.8, 139.5, 47.1, 19.5, 9.5, 5.0, 2.8, 1.9, 1.4, 1.0, 0.6, 0.4, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]) -# onl['tkMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonEndcap'] = array('d', [10169.6, 3933.2, 382.2, 91.1, 32.7, 14.9, 7.7, 3.7, 2.4, 1.6, 1.0, 0.6, 0.5, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.1]) -# off['tkMuonStubEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonStubEndcap'] = array('d', [28315.9, 21317.2, 889.5, 165.9, 57.2, 25.1, 11.8, 6.8, 4.1, 3.1, 2.0, 1.6, 1.2, 1.0, 0.8, 0.8, 0.6, 0.6, 0.6, 0.5]) -# onl['tkMuonStubEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonStubEndcap'] = array('d', [28315.9, 9270.2, 507.2, 113.9, 40.2, 19.3, 9.6, 5.4, 3.5, 2.2, 1.6, 1.2, 1.0, 0.8, 0.8, 0.6, 0.6, 0.6, 0.5, 0.5]) -# off['standaloneMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['standaloneMuonEndcap'] = array('d', [13982.6, 12469.0, 1300.7, 385.0, 148.3, 76.1, 39.6, 27.3, 19.5, 16.1, 13.9, 10.6, 9.2, 6.9, 6.2, 5.2, 4.7, 4.4, 4.3, 4.0]) -# onl['standaloneMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['standaloneMuonEndcap'] = array('d', [13982.6, 3470.8, 630.4, 169.7, 76.1, 36.9, 24.1, 16.8, 14.4, 10.8, 9.2, 6.7, 5.2, 4.8, 4.5, 4.3, 3.8, 3.5, 3.1, 2.8]) - - -# off['puppiMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# offrate['puppiMET'] = array('d', [5249.8, 709.3, 125.2, 30.3, 10.7, 5.2, 3.2, 1.9, 1.6, 1.3, 0.9, 0.6, 0.5, 0.5, 0.3, 0.3, 0.2, 0.2]) -# onl['puppiMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# onlrate['puppiMET'] = array('d', [836.4, 128.2, 27.9, 9.8, 4.9, 2.8, 1.8, 1.5, 1.1, 0.7, 0.5, 0.5, 0.4, 0.3, 0.2, 0.2, 0.1, 0.1]) -# off['trackerMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# offrate['trackerMET'] = array('d', [31038.0, 31038.0, 27941.1, 7958.0, 1112.5, 169.7, 41.8, 15.0, 7.9, 5.5, 4.2, 3.2, 2.5, 2.3, 1.4, 0.4, 0.3, 0.2]) -# onl['trackerMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# onlrate['trackerMET'] = array('d', [162.6, 22.9, 7.9, 4.5, 3.0, 2.4, 0.9, 0.3, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.1, 0.1, 0.1]) -# off['tkMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuon'] = array('d', [11827.7, 9915.1, 1200.1, 272.2, 93.0, 40.3, 21.4, 12.0, 7.0, 4.1, 3.2, 2.4, 1.6, 1.4, 1.1, 1.0, 0.9, 0.7, 0.7, 0.7]) -# onl['tkMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuon'] = array('d', [11827.7, 4582.4, 715.4, 181.9, 64.1, 32.5, 17.1, 8.8, 5.4, 3.4, 2.5, 1.7, 1.4, 1.1, 1.1, 0.9, 0.7, 0.7, 0.7, 0.7]) -# off['tkMuonStub'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonStub'] = array('d', [28415.0, 21459.1, 1395.4, 303.0, 103.1, 45.9, 23.6, 14.0, 8.7, 5.4, 3.7, 2.9, 2.2, 1.9, 1.4, 1.3, 1.2, 1.0, 0.9, 0.8]) -# onl['tkMuonStub'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonStub'] = array('d', [28415.0, 9954.8, 835.8, 204.3, 71.3, 35.6, 18.8, 10.8, 7.0, 4.1, 3.1, 2.2, 1.9, 1.4, 1.4, 1.2, 1.0, 0.9, 0.8, 0.8]) -# off['standaloneMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['standaloneMuon'] = array('d', [9439.9, 9439.9, 4628.3, 1210.7, 447.8, 167.2, 81.5, 48.7, 36.8, 30.2, 21.7, 18.7, 14.3, 13.0, 10.9, 10.2, 9.2, 7.9, 7.4, 6.0]) -# onl['standaloneMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['standaloneMuon'] = array('d', [9439.9, 4733.4, 1078.7, 333.9, 152.0, 71.4, 48.7, 34.0, 28.9, 20.6, 18.3, 14.0, 11.5, 11.0, 9.6, 9.2, 7.9, 6.3, 6.0, 5.7]) -# off['tkMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonBarrel'] = array('d', [329.5, 329.5, 306.9, 94.2, 34.1, 16.3, 9.6, 5.9, 3.5, 1.9, 1.6, 1.2, 0.9, 0.7, 0.7, 0.7, 0.6, 0.6, 0.5, 0.5]) -# onl['tkMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonBarrel'] = array('d', [329.5, 329.4, 226.4, 67.1, 23.9, 13.8, 7.8, 4.2, 2.7, 1.6, 1.3, 0.9, 0.7, 0.7, 0.7, 0.6, 0.6, 0.5, 0.5, 0.5]) -# off['tkMuonStubBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonStubBarrel'] = array('d', [574.6, 574.6, 377.8, 108.9, 37.0, 16.6, 8.8, 5.7, 3.4, 1.7, 1.4, 1.0, 0.7, 0.6, 0.4, 0.4, 0.4, 0.4, 0.3, 0.3]) -# onl['tkMuonStubBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonStubBarrel'] = array('d', [574.6, 538.6, 252.2, 72.1, 25.0, 12.8, 7.2, 4.0, 2.7, 1.4, 1.1, 0.7, 0.6, 0.4, 0.4, 0.4, 0.4, 0.3, 0.3, 0.3]) -# off['standaloneMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['standaloneMuonBarrel'] = array('d', [1454.6, 1454.6, 1454.6, 732.3, 261.0, 86.3, 34.7, 19.3, 14.1, 9.4, 7.3, 5.6, 4.5, 3.9, 3.4, 3.0, 2.7, 2.7, 2.6, 2.2]) -# onl['standaloneMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['standaloneMuonBarrel'] = array('d', [1454.6, 1454.6, 486.8, 145.4, 55.5, 24.5, 16.5, 11.3, 8.0, 6.1, 5.2, 4.2, 3.6, 3.4, 3.0, 2.7, 2.7, 2.2, 2.2, 2.1]) -# off['tkMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonOverlap'] = array('d', [316.6, 285.4, 123.6, 28.5, 9.0, 4.1, 2.8, 1.5, 1.2, 0.7, 0.6, 0.4, 0.3, 0.3, 0.3, 0.2, 0.2, 0.1, 0.1, 0.1]) -# onl['tkMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonOverlap'] = array('d', [316.6, 216.1, 75.1, 17.8, 5.9, 3.5, 2.1, 1.4, 1.0, 0.6, 0.4, 0.4, 0.3, 0.3, 0.2, 0.2, 0.1, 0.1, 0.1, 0.1]) -# off['tkMuonStubOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonStubOverlap'] = array('d', [766.8, 682.5, 151.3, 29.7, 9.7, 4.6, 3.1, 1.7, 1.4, 0.7, 0.5, 0.4, 0.3, 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0]) -# onl['tkMuonStubOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonStubOverlap'] = array('d', [766.8, 493.1, 83.0, 19.1, 6.4, 3.9, 2.2, 1.6, 0.9, 0.5, 0.4, 0.4, 0.3, 0.2, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0]) -# off['standaloneMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['standaloneMuonOverlap'] = array('d', [560.8, 560.8, 432.3, 106.5, 72.0, 30.6, 21.7, 14.8, 12.8, 12.8, 8.5, 8.5, 6.5, 6.5, 5.4, 5.4, 4.7, 3.8, 3.8, 3.0]) -# onl['standaloneMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['standaloneMuonOverlap'] = array('d', [560.8, 560.8, 226.0, 72.3, 46.1, 21.9, 17.6, 12.8, 12.8, 8.5, 8.5, 6.5, 5.4, 5.4, 4.7, 4.7, 3.8, 3.0, 3.0, 3.0]) -# off['tkMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonEndcap'] = array('d', [11435.7, 9507.6, 783.8, 150.9, 50.1, 19.9, 9.0, 4.6, 2.2, 1.5, 1.1, 0.7, 0.4, 0.3, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]) -# onl['tkMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonEndcap'] = array('d', [11435.7, 4120.4, 419.6, 97.6, 34.3, 15.3, 7.3, 3.2, 1.7, 1.2, 0.7, 0.4, 0.4, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]) -# off['tkMuonStubEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['tkMuonStubEndcap'] = array('d', [28314.2, 21098.5, 885.8, 165.9, 56.6, 24.7, 11.6, 6.6, 4.0, 3.0, 1.9, 1.5, 1.1, 1.0, 0.7, 0.7, 0.6, 0.6, 0.6, 0.5]) -# onl['tkMuonStubEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['tkMuonStubEndcap'] = array('d', [28314.2, 9268.8, 508.2, 113.9, 39.9, 18.9, 9.3, 5.2, 3.4, 2.1, 1.5, 1.1, 1.0, 0.7, 0.7, 0.6, 0.6, 0.6, 0.5, 0.5]) -# off['standaloneMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# offrate['standaloneMuonEndcap'] = array('d', [8024.1, 8024.1, 2990.6, 399.2, 123.8, 53.3, 26.5, 16.0, 10.8, 8.7, 6.0, 4.6, 3.2, 2.5, 2.1, 1.8, 1.7, 1.3, 1.0, 0.8]) -# onl['standaloneMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -# onlrate['standaloneMuonEndcap'] = array('d', [8024.1, 2990.6, 399.2, 123.8, 53.3, 26.5, 16.0, 10.8, 8.7, 6.0, 4.6, 3.2, 2.5, 2.2, 1.9, 1.7, 1.4, 1.1, 0.8, 0.6]) - - -# off['tkElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['tkElectron'] = array('d', [884.8, 570.0, 332.7, 200.4, 112.2, 76.5, 54.9, 40.3, 27.1, 22.4, 17.4, 14.0, 11.8, 9.5, 7.4, 6.2, 5.3, 4.2, 3.6, 3.2]) -# onl['tkElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['tkElectron'] = array('d', [617.2, 330.0, 193.4, 113.7, 67.7, 47.6, 35.8, 23.7, 19.2, 14.3, 11.2, 9.5, 7.4, 5.6, 4.6, 4.2, 3.4, 2.9, 2.3, 2.2]) -# off['tkIsoElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['tkIsoElectron'] = array('d', [470.7, 280.3, 150.9, 92.2, 51.1, 35.3, 26.8, 20.2, 14.3, 12.1, 10.4, 8.5, 7.4, 6.3, 5.4, 4.6, 3.6, 3.0, 2.3, 1.9]) -# onl['tkIsoElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['tkIsoElectron'] = array('d', [301.2, 153.3, 86.5, 53.0, 32.0, 22.2, 17.6, 13.0, 10.8, 8.7, 6.8, 5.9, 4.9, 4.2, 3.4, 3.1, 2.4, 1.7, 1.4, 1.4]) -# off['standaloneElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['standaloneElectron'] = array('d', [21717.3, 19090.3, 5528.6, 1861.1, 886.8, 430.3, 263.6, 172.5, 113.9, 78.4, 58.3, 44.8, 34.5, 27.9, 22.7, 18.2, 14.0, 11.3, 8.7, 7.0]) -# onl['standaloneElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['standaloneElectron'] = array('d', [4286.7, 1887.6, 997.4, 535.5, 284.8, 182.4, 129.5, 80.3, 58.5, 44.6, 34.2, 27.5, 21.4, 16.6, 13.1, 10.8, 7.9, 6.4, 5.0, 4.5]) -# off['standaloneElectronExt'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['standaloneElectronExt'] = array('d', [24897.8, 21230.9, 6382.8, 2132.9, 1002.8, 490.5, 300.2, 196.0, 130.5, 90.7, 68.2, 53.0, 40.9, 33.5, 27.4, 22.1, 17.3, 13.8, 10.8, 9.1]) -# onl['standaloneElectronExt'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['standaloneElectronExt'] = array('d', [4605.5, 1994.6, 1046.2, 562.2, 301.8, 193.9, 138.4, 86.9, 63.9, 48.8, 37.7, 30.0, 23.5, 18.6, 14.5, 12.0, 8.9, 7.2, 5.8, 5.3]) -# off['tkElectronBarrel'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['tkElectronBarrel'] = array('d', [620.3, 364.7, 209.6, 133.7, 74.0, 51.0, 38.7, 28.8, 19.3, 15.8, 12.2, 10.2, 8.4, 6.9, 5.2, 4.5, 3.9, 3.5, 2.9, 2.6]) -# onl['tkElectronBarrel'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['tkElectronBarrel'] = array('d', [514.9, 279.3, 163.4, 95.8, 56.0, 39.9, 29.7, 19.3, 15.5, 11.6, 9.1, 7.9, 6.3, 5.0, 4.0, 3.7, 3.0, 2.6, 2.0, 1.9]) -# off['tkIsoElectronBarrel'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['tkIsoElectronBarrel'] = array('d', [301.0, 167.2, 89.9, 58.4, 32.7, 23.0, 17.7, 13.8, 10.0, 8.4, 7.2, 6.0, 5.2, 4.6, 4.1, 3.6, 2.9, 2.7, 2.0, 1.6]) -# onl['tkIsoElectronBarrel'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['tkIsoElectronBarrel'] = array('d', [244.2, 125.4, 70.3, 43.1, 25.3, 18.0, 14.0, 10.0, 8.4, 6.7, 5.4, 4.9, 4.4, 3.9, 3.1, 2.8, 2.2, 1.6, 1.3, 1.2]) -# off['standaloneElectronBarrel'] = array('d', [10.0, 14.0, 18.0, 22.0, 26.0, 30.0, 34.0, 38.0, 42.0, 46.0, 50.0, 54.0, 58.0, 62.0, 66.0]) -# offrate['standaloneElectronBarrel'] = array('d', [10009.0, 2844.5, 1158.1, 569.1, 237.8, 139.3, 81.9, 51.2, 36.3, 25.6, 19.6, 14.6, 11.0, 8.2, 6.0]) -# onl['standaloneElectronBarrel'] = array('d', [10.0, 14.0, 18.0, 22.0, 26.0, 30.0, 34.0, 38.0, 42.0, 46.0, 50.0, 54.0, 58.0, 62.0, 66.0]) -# onlrate['standaloneElectronBarrel'] = array('d', [3431.4, 1284.6, 603.4, 242.5, 138.8, 77.5, 49.0, 34.6, 24.7, 18.4, 13.3, 9.9, 7.0, 4.9, 4.1]) -# off['tkElectronEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['tkElectronEndcap'] = array('d', [271.7, 209.7, 124.9, 67.7, 38.3, 25.7, 16.3, 11.6, 7.9, 6.6, 5.2, 3.9, 3.4, 2.6, 2.1, 1.7, 1.4, 0.7, 0.6, 0.6]) -# onl['tkElectronEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['tkElectronEndcap'] = array('d', [105.2, 51.7, 30.5, 18.1, 11.8, 7.7, 6.1, 4.5, 3.7, 2.7, 2.1, 1.6, 1.1, 0.6, 0.6, 0.6, 0.4, 0.3, 0.3, 0.3]) -# off['tkIsoElectronEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['tkIsoElectronEndcap'] = array('d', [171.4, 113.6, 61.3, 34.0, 18.6, 12.5, 9.1, 6.4, 4.2, 3.7, 3.2, 2.5, 2.1, 1.7, 1.4, 1.0, 0.6, 0.3, 0.3, 0.3]) -# onl['tkIsoElectronEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['tkIsoElectronEndcap'] = array('d', [57.4, 28.1, 16.4, 10.1, 6.9, 4.3, 3.7, 3.0, 2.4, 1.9, 1.4, 1.0, 0.6, 0.3, 0.3, 0.2, 0.2, 0.1, 0.1, 0.1]) -# off['standaloneElectronEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['standaloneElectronEndcap'] = array('d', [17519.5, 17519.5, 3999.0, 917.6, 327.1, 152.4, 83.4, 50.2, 32.3, 22.9, 16.3, 11.5, 9.2, 7.2, 6.0, 4.7, 3.3, 2.6, 2.0, 1.5]) -# onl['standaloneElectronEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['standaloneElectronEndcap'] = array('d', [995.6, 317.0, 138.4, 74.2, 43.2, 27.7, 19.4, 13.4, 9.8, 7.6, 6.0, 4.7, 3.2, 2.3, 1.6, 1.3, 0.9, 0.6, 0.6, 0.6]) -# off['tkPhotonIso'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['tkPhotonIso'] = array('d', [8821.6, 3483.2, 977.4, 473.2, 242.3, 149.9, 104.3, 75.8, 51.7, 39.4, 31.0, 24.7, 20.5, 17.4, 13.5, 10.7, 8.3, 6.4, 5.2, 3.9]) -# onl['tkPhotonIso'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['tkPhotonIso'] = array('d', [1469.6, 685.3, 402.9, 235.3, 140.1, 95.3, 72.9, 49.4, 36.6, 29.4, 23.4, 18.9, 15.3, 12.1, 9.8, 7.8, 5.9, 4.7, 3.7, 3.3]) -# off['standalonePhoton'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['standalonePhoton'] = array('d', [19600.1, 16897.1, 3420.1, 1038.1, 425.7, 222.5, 132.7, 84.9, 55.6, 38.3, 28.2, 21.0, 16.6, 13.1, 10.3, 7.7, 6.2, 4.5, 3.1, 2.6]) -# onl['standalonePhoton'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['standalonePhoton'] = array('d', [2709.7, 1079.4, 554.3, 299.2, 161.0, 100.9, 69.9, 45.5, 32.4, 23.9, 18.4, 14.6, 11.3, 8.3, 6.6, 5.4, 3.8, 2.9, 2.2, 2.1]) -# off['tkPhotonIsoBarrel'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['tkPhotonIsoBarrel'] = array('d', [1867.0, 824.5, 462.7, 295.5, 158.1, 103.3, 74.2, 55.5, 37.1, 27.9, 23.0, 18.2, 15.3, 13.1, 10.2, 8.5, 6.9, 5.2, 4.2, 3.3]) -# onl['tkPhotonIsoBarrel'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['tkPhotonIsoBarrel'] = array('d', [1063.1, 539.5, 333.1, 194.9, 114.5, 77.8, 59.9, 39.6, 29.6, 23.6, 18.9, 15.5, 13.1, 10.5, 8.7, 6.9, 5.3, 4.3, 3.3, 2.9]) -# off['standalonePhotonBarrel'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['standalonePhotonBarrel'] = array('d', [4951.0, 1523.5, 690.3, 382.4, 186.4, 107.4, 67.7, 45.1, 29.1, 19.9, 15.1, 11.2, 9.0, 7.2, 5.4, 4.4, 3.6, 2.7, 1.7, 1.6]) -# onl['standalonePhotonBarrel'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['standalonePhotonBarrel'] = array('d', [1783.5, 774.8, 419.1, 226.1, 118.0, 73.2, 50.5, 32.1, 22.6, 16.3, 12.4, 9.8, 8.2, 6.0, 5.0, 4.1, 2.9, 2.2, 1.6, 1.5]) -# off['tkPhotonIsoEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['tkPhotonIsoEndcap'] = array('d', [7397.7, 2737.3, 524.1, 180.4, 85.2, 47.2, 30.3, 20.4, 14.7, 11.7, 8.2, 6.7, 5.4, 4.5, 3.4, 2.3, 1.6, 1.2, 0.9, 0.6]) -# onl['tkPhotonIsoEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['tkPhotonIsoEndcap'] = array('d', [423.2, 149.7, 71.2, 41.0, 25.9, 17.7, 13.2, 9.9, 7.2, 5.9, 4.6, 3.6, 2.4, 1.7, 1.2, 0.9, 0.6, 0.4, 0.4, 0.4]) -# off['standalonePhotonEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# offrate['standalonePhotonEndcap'] = array('d', [17519.5, 16192.1, 2800.5, 666.9, 241.7, 115.8, 65.2, 39.8, 26.5, 18.4, 13.1, 9.8, 7.6, 6.0, 4.9, 3.3, 2.6, 1.8, 1.3, 0.9]) -# onl['standalonePhotonEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -# onlrate['standalonePhotonEndcap'] = array('d', [995.6, 317.0, 138.4, 74.2, 43.2, 27.7, 19.4, 13.4, 9.8, 7.6, 6.0, 4.7, 3.2, 2.3, 1.6, 1.3, 0.9, 0.6, 0.6, 0.6]) - - - - -# off['puppiHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# offrate['puppiHT'] = array('d', [2224.7, 1198.3, 669.1, 382.6, 230.8, 142.4, 94.3, 64.7, 44.9, 32.5, 22.1, 16.1, 12.4, 10.2, 8.1, 6.2, 4.5, 3.4]) -# onl['puppiHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# onlrate['puppiHT'] = array('d', [2657.2, 1553.3, 830.6, 461.6, 268.8, 160.8, 103.4, 69.7, 47.9, 33.5, 23.1, 16.1, 12.4, 10.2, 8.1, 5.9, 4.3, 3.2]) -# off['puppiPhase1HT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# offrate['puppiPhase1HT'] = array('d', [1925.8, 1171.2, 657.2, 383.0, 227.9, 143.4, 93.0, 65.1, 45.8, 31.6, 22.3, 16.7, 13.1, 10.0, 8.2, 6.1, 4.5, 3.8]) -# onl['puppiPhase1HT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# onlrate['puppiPhase1HT'] = array('d', [2131.7, 1253.0, 691.9, 395.0, 231.7, 143.3, 91.7, 63.9, 44.2, 30.2, 21.2, 15.9, 12.2, 9.7, 7.6, 5.7, 4.4, 3.6]) -# off['trackerHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# offrate['trackerHT'] = array('d', [4445.5, 1961.5, 946.7, 500.9, 287.8, 177.7, 113.7, 77.7, 53.0, 38.0, 27.8, 21.1, 16.7, 13.6, 10.8, 8.1, 6.9, 5.5]) -# onl['trackerHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# onlrate['trackerHT'] = array('d', [2808.5, 586.2, 182.0, 73.2, 34.1, 18.9, 11.3, 7.0, 4.4, 2.6, 1.4, 1.1, 0.9, 0.6, 0.6, 0.5, 0.4, 0.4]) -# off['caloHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# offrate['caloHT'] = array('d', [7982.9, 6120.2, 4548.0, 3333.4, 2464.7, 1812.0, 1318.4, 956.4, 687.6, 484.5, 345.5, 242.8, 170.6, 118.2, 80.0, 53.7, 37.5, 24.7]) -# onl['caloHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -# onlrate['caloHT'] = array('d', [20441.3, 16137.6, 13490.9, 10284.4, 7663.8, 5925.7, 4486.2, 3324.9, 2492.0, 1855.7, 1371.8, 1009.5, 733.0, 530.8, 382.1, 273.7, 195.7, 138.2]) -# off['puppiJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# offrate['puppiJet'] = array('d', [27200.2, 6870.5, 1949.4, 751.7, 338.5, 170.4, 92.4, 54.6, 32.7, 21.2, 13.0, 8.3, 6.2, 4.6, 3.4, 2.5, 1.9, 1.4, 1.3, 1.0]) -# onl['puppiJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# onlrate['puppiJet'] = array('d', [3285.8, 938.8, 343.0, 148.9, 70.8, 37.9, 21.0, 12.3, 7.4, 5.2, 3.6, 2.3, 1.7, 1.4, 1.0, 0.7, 0.5, 0.4, 0.4, 0.4]) -# off['puppiJetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# offrate['puppiJetExt'] = array('d', [27568.9, 8450.2, 2939.7, 1331.0, 639.5, 330.6, 185.0, 111.3, 70.0, 46.1, 30.1, 21.1, 15.8, 12.5, 9.9, 7.8, 6.3, 4.9, 4.2, 3.4]) -# onl['puppiJetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# onlrate['puppiJetExt'] = array('d', [3982.4, 1150.0, 412.3, 177.2, 84.1, 45.1, 26.3, 16.3, 10.0, 6.9, 4.7, 3.2, 2.5, 1.9, 1.3, 0.7, 0.6, 0.4, 0.4, 0.4]) -# off['puppiPhase1Jet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# offrate['puppiPhase1Jet'] = array('d', [16323.8, 5363.9, 2084.7, 847.0, 393.1, 205.6, 115.5, 70.2, 45.9, 28.8, 18.3, 12.5, 8.2, 6.2, 4.9, 3.6, 2.6, 2.1, 1.8, 1.5]) -# onl['puppiPhase1Jet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# onlrate['puppiPhase1Jet'] = array('d', [2999.1, 890.8, 322.5, 140.0, 69.4, 37.1, 20.5, 11.6, 7.0, 5.2, 3.5, 2.2, 1.8, 1.3, 1.0, 0.8, 0.5, 0.4, 0.4, 0.4]) -# off['puppiPhase1JetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# offrate['puppiPhase1JetExt'] = array('d', [17492.9, 6543.3, 2936.6, 1401.4, 671.6, 346.3, 199.0, 120.6, 79.6, 51.6, 33.8, 24.1, 17.6, 13.9, 11.2, 8.9, 7.3, 6.2, 5.5, 5.0]) -# onl['puppiPhase1JetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# onlrate['puppiPhase1JetExt'] = array('d', [3597.3, 1068.3, 384.0, 166.7, 82.9, 44.9, 25.9, 16.2, 11.0, 8.2, 5.5, 3.9, 2.9, 2.2, 1.7, 1.2, 0.9, 0.5, 0.5, 0.5]) -# off['trackerJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# offrate['trackerJet'] = array('d', [31036.4, 31036.4, 30914.8, 30680.3, 22387.4, 8426.2, 3885.6, 2065.0, 1190.8, 731.9, 474.6, 320.8, 221.4, 155.7, 111.9, 83.7, 63.9, 50.0, 38.1, 30.7]) -# onl['trackerJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# onlrate['trackerJet'] = array('d', [501.6, 118.2, 37.6, 15.0, 7.8, 5.0, 3.9, 3.0, 1.6, 0.5, 0.5, 0.4, 0.4, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2]) -# off['caloJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# offrate['caloJet'] = array('d', [31038.0, 31038.0, 26158.9, 5042.5, 947.8, 340.0, 159.3, 83.6, 47.2, 29.4, 18.6, 12.2, 7.5, 5.8, 3.8, 2.8, 2.1, 1.6, 1.2, 1.1]) -# onl['caloJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# onlrate['caloJet'] = array('d', [12844.5, 1956.2, 538.8, 209.6, 92.5, 46.7, 27.0, 15.4, 8.6, 5.4, 3.7, 2.3, 1.5, 1.2, 1.1, 0.7, 0.5, 0.5, 0.3, 0.1]) -# off['caloJetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# offrate['caloJetExt'] = array('d', [31038.0, 31038.0, 26306.9, 5484.5, 1167.9, 448.8, 215.3, 112.9, 65.2, 39.2, 24.7, 16.0, 10.3, 7.7, 5.0, 3.5, 2.5, 2.1, 1.5, 1.4]) -# onl['caloJetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -# onlrate['caloJetExt'] = array('d', [14707.9, 2359.7, 643.8, 242.8, 105.6, 51.5, 29.3, 16.7, 8.8, 5.5, 4.0, 2.6, 1.5, 1.2, 1.1, 0.7, 0.5, 0.5, 0.3, 0.1]) -# off['HPSPFTau1'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# offrate['HPSPFTau1'] = array('d', [31031.0, 28203.3, 15063.7, 6260.3, 2730.0, 1392.9, 801.5, 504.9, 330.9, 227.4, 157.8, 117.2, 87.4, 67.1, 53.6, 41.9, 33.6, 26.4, 21.6, 17.8, 14.6, 12.3, 10.3, 8.8, 7.6, 6.5, 5.7, 4.4, 3.6, 3.1]) -# onl['HPSPFTau1'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# onlrate['HPSPFTau1'] = array('d', [31035.3, 28386.5, 13935.1, 5145.2, 2171.0, 1114.8, 644.8, 408.7, 267.7, 183.6, 129.1, 95.1, 70.2, 55.1, 43.9, 32.7, 26.3, 21.0, 17.1, 14.0, 11.7, 9.9, 8.3, 7.3, 6.2, 5.0, 4.0, 3.5, 2.8, 2.5]) -# off['HPSPFTau1Medium'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# offrate['HPSPFTau1Medium'] = array('d', [31034.4, 28625.1, 15003.9, 5611.4, 2280.6, 1130.5, 620.7, 391.8, 256.7, 177.5, 126.6, 96.6, 74.6, 59.3, 50.0, 39.3, 31.2, 24.6, 20.4, 16.9, 13.9, 11.5, 10.0, 8.3, 7.3, 6.3, 5.2, 3.9, 3.6, 2.8]) -# onl['HPSPFTau1Medium'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# onlrate['HPSPFTau1Medium'] = array('d', [31035.0, 28143.8, 12978.2, 4472.5, 1807.4, 903.6, 514.8, 327.4, 214.5, 150.6, 109.5, 83.6, 64.6, 52.9, 43.9, 32.7, 26.3, 21.0, 17.1, 14.0, 11.7, 9.9, 8.3, 7.3, 6.2, 5.0, 4.0, 3.5, 2.8, 2.5]) -# off['NNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# offrate['NNPuppiTauLoose'] = array('d', [2398.4, 1930.0, 1297.5, 744.4, 458.4, 301.2, 201.9, 140.6, 102.2, 78.1, 61.0, 48.8, 41.1, 33.6, 29.3, 25.6, 21.9, 18.6, 15.9, 14.6, 12.6, 11.2, 10.2, 9.4, 8.8, 8.2, 7.2, 6.4, 5.8, 5.2]) -# onl['NNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# onlrate['NNPuppiTauLoose'] = array('d', [2642.1, 2627.8, 2147.7, 1211.4, 626.7, 353.1, 216.8, 141.6, 93.3, 66.6, 50.3, 39.8, 31.7, 25.5, 22.1, 17.6, 14.7, 13.0, 10.4, 9.3, 7.7, 6.4, 5.4, 4.7, 4.0, 3.4, 2.9, 2.7, 2.3, 2.1]) -# off['NNPuppiTauTight'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# offrate['NNPuppiTauTight'] = array('d', [219.6, 219.6, 219.6, 218.1, 173.0, 119.6, 79.6, 57.0, 41.3, 31.7, 24.7, 18.8, 15.4, 12.0, 10.2, 8.8, 7.4, 6.2, 5.4, 5.0, 4.8, 4.7, 4.2, 4.0, 3.7, 3.7, 3.1, 2.6, 2.6, 2.4]) -# onl['NNPuppiTauTight'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# onlrate['NNPuppiTauTight'] = array('d', [219.6, 219.5, 212.5, 190.4, 153.6, 110.0, 74.5, 51.5, 34.5, 24.6, 18.8, 15.6, 12.3, 10.0, 8.8, 7.0, 5.9, 5.2, 4.1, 3.7, 3.4, 3.0, 2.9, 2.6, 2.2, 1.9, 1.5, 1.4, 1.4, 1.2]) -# off['TkEGTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# offrate['TkEGTau'] = array('d', [22722.2, 9511.6, 3934.6, 1701.9, 779.0, 391.1, 205.4, 118.8, 73.9, 47.4, 30.7, 20.4, 13.1, 9.5, 6.4, 4.7, 3.2, 1.9, 1.5, 1.1, 0.8, 0.7, 0.7, 0.6, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5]) -# onl['TkEGTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# onlrate['TkEGTau'] = array('d', [21763.8, 8251.6, 3250.4, 1347.1, 608.0, 297.5, 157.8, 90.6, 54.8, 35.6, 22.2, 14.2, 9.3, 6.4, 3.9, 2.7, 1.7, 1.1, 1.0, 0.9, 0.7, 0.6, 0.6, 0.5, 0.5, 0.4, 0.3, 0.3, 0.3, 0.3]) -# off['CaloTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# offrate['CaloTau'] = array('d', [30969.6, 27397.8, 16013.6, 7443.0, 3635.2, 1984.6, 1202.9, 782.2, 537.2, 387.0, 287.8, 212.9, 165.8, 130.5, 102.3, 82.1, 67.2, 55.3, 45.6, 38.5, 32.3, 27.4, 22.2, 18.3, 16.1, 14.0, 12.5, 10.8, 9.3, 8.0]) -# onl['CaloTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -# onlrate['CaloTau'] = array('d', [31037.9, 30775.5, 23728.5, 11433.2, 5007.4, 2421.7, 1341.6, 821.5, 539.3, 374.8, 268.8, 195.5, 147.8, 113.5, 88.8, 70.5, 56.5, 46.5, 37.9, 31.5, 25.2, 20.7, 16.8, 14.6, 12.8, 11.0, 9.3, 7.9, 6.9, 6.4]) - - - - - - - -# off['DiHPSPFTau1'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# #offrate['DiHPSPFTau1'] = array('d', [15961.6, 2444.7, 157.8, 25.1, 6.7, 2.6, 1.2, 0.7, 0.3, 0.2, 0.2, 0.1, 0.1, 0.0]) -# #novtx -# offrate['DiHPSPFTau1'] = array('d', [30924.1, 20045.5, 3943.7, 792.5, 261.7, 123.1, 63.9, 37.9, 23.7, 16.7, 11.3, 8.4, 6.4, 4.3]) - -# off['DiHPSPFTau1Medium'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# #offrate['DiHPSPFTau1Medium'] = array('d', [15731.8, 2522.2, 125.3, 16.3, 4.0, 1.4, 0.9, 0.3, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0]) -# #novtx -# offrate['DiHPSPFTau1Medium'] = array('d', [30953.7, 20770.8, 3549.5, 561.5, 155.5, 69.5, 33.8, 19.8, 12.3, 8.5, 6.3, 5.2, 4.3, 3.3]) - -# off['DiNNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# offrate['DiNNPuppiTauLoose'] = array('d', [135.0, 94.5, 53.2, 25.3, 13.1, 7.8, 4.7, 3.4, 2.6, 2.3, 2.1, 1.9, 1.8, 1.8]) - -# off['DiNNPuppiTauTight'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# offrate['DiNNPuppiTauTight'] = array('d', [2.2, 2.2, 2.2, 2.2, 1.7, 0.9, 0.7, 0.4, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2]) - -# off['DiTkEGTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# #offrate['DiTkEGTau'] = array('d', [3655.4, 569.9, 150.5, 44.6, 13.8, 5.0, 2.4, 1.1, 0.3, 0.2, 0.1, 0.0, 0.0, 0.0]) -# #novtx -# offrate['DiTkEGTau'] = array('d', [10327.2, 1613.6, 333.9, 77.2, 20.6, 6.7, 3.2, 1.2, 0.4, 0.3, 0.1, 0.0, 0.0, 0.0]) - -# off['DiCaloTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# offrate['DiCaloTau'] = array('d', [30492.9, 19387.7, 5443.8, 1393.7, 516.0, 271.3, 164.4, 107.7, 74.7, 53.7, 38.8, 29.4, 23.7, 17.9]) - - - - - - - - - -# onl['DiHPSPFTau1'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# onlrate['DiHPSPFTau1'] = array('d', [15961.6, 2444.7, 157.8, 25.1, 6.7, 2.6, 1.2, 0.7, 0.3, 0.2, 0.2, 0.1, 0.1, 0.0]) -# #novtx -# onlrate['DiHPSPFTau1'] = array('d', [30924.1, 20045.5, 3943.7, 792.5, 261.7, 123.1, 63.9, 37.9, 23.7, 16.7, 11.3, 8.4, 6.4, 4.3]) - - -# onl['DiHPSPFTau1Medium'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# #onlrate['DiHPSPFTau1Medium'] = array('d', [15731.8, 2522.2, 125.3, 16.3, 4.0, 1.4, 0.9, 0.3, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0]) -# #novtx -# onlrate['DiHPSPFTau1Medium'] = array('d', [30953.7, 20770.8, 3549.5, 561.5, 155.5, 69.5, 33.8, 19.8, 12.3, 8.5, 6.3, 5.2, 4.3, 3.3]) - -# onl['DiNNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# onlrate['DiNNPuppiTauLoose'] = array('d', [135.0, 94.5, 53.2, 25.3, 13.1, 7.8, 4.7, 3.4, 2.6, 2.3, 2.1, 1.9, 1.8, 1.8]) - -# onl['DiNNPuppiTauTight'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# onlrate['DiNNPuppiTauTight'] = array('d', [2.2, 2.2, 2.2, 2.2, 1.7, 0.9, 0.7, 0.4, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2]) - -# onl['DiTkEGTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# #onlrate['DiTkEGTau'] = array('d', [3655.4, 569.9, 150.5, 44.6, 13.8, 5.0, 2.4, 1.1, 0.3, 0.2, 0.1, 0.0, 0.0, 0.0]) -# #novtx -# onlrate['DiTkEGTau'] = array('d', [10327.2, 1613.6, 333.9, 77.2, 20.6, 6.7, 3.2, 1.2, 0.4, 0.3, 0.1, 0.0, 0.0, 0.0]) - - -# onl['DiCaloTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0]) -# onlrate['DiCaloTau'] = array('d', [30492.9, 19387.7, 5443.8, 1393.7, 516.0, 271.3, 164.4, 107.7, 74.7, 53.7, 38.8, 29.4, 23.7, 17.9]) - - - -############## For approval - - -off['tkMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['tkMuon'] = array('d', [11230.9, 9787.0, 1217.6, 270.7, 93.8, 42.2, 23.6, 13.9, 8.4, 5.1, 3.9, 3.2, 2.1, 1.8, 1.5, 1.3, 1.1, 1.0, 0.9, 0.9]) -onl['tkMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['tkMuon'] = array('d', [11230.9, 5012.5, 719.7, 182.4, 65.6, 34.2, 19.0, 10.5, 6.7, 4.3, 3.3, 2.3, 1.9, 1.5, 1.4, 1.1, 1.0, 0.9, 0.9, 0.8]) - -off['tkMuonStub'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['tkMuonStub'] = array('d', [28416.9, 21678.0, 1334.9, 300.1, 106.8, 49.0, 26.6, 16.2, 10.3, 6.9, 5.2, 4.3, 3.1, 2.8, 2.3, 2.1, 1.7, 1.4, 1.4, 1.3]) -onl['tkMuonStub'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['tkMuonStub'] = array('d', [28416.9, 9979.5, 806.4, 205.2, 74.4, 38.9, 21.5, 12.5, 8.5, 5.5, 4.4, 3.2, 2.8, 2.3, 2.2, 1.7, 1.4, 1.4, 1.3, 1.3]) -off['standaloneMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['standaloneMuon'] = array('d', [15048.8, 13635.6, 3007.3, 1247.1, 501.4, 225.8, 112.5, 76.6, 59.3, 48.7, 42.4, 33.6, 29.7, 25.1, 22.8, 21.5, 19.0, 18.1, 17.1, 15.8]) -onl['standaloneMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['standaloneMuon'] = array('d', [15048.8, 5231.0, 1343.3, 405.0, 195.3, 97.2, 70.7, 50.9, 45.8, 34.3, 31.8, 25.2, 20.7, 20.1, 18.3, 17.8, 15.8, 13.7, 13.2, 12.8]) -off['tkElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -offrate['tkElectron'] = array('d', [884.4, 570.6, 334.0, 201.8, 112.9, 76.9, 55.2, 40.5, 27.3, 22.5, 17.4, 14.0, 11.8, 9.5, 7.4, 6.2, 5.3, 4.2, 3.5, 3.2]) -onl['tkElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -onlrate['tkElectron'] = array('d', [618.0, 330.4, 194.2, 114.3, 68.1, 47.9, 35.9, 23.9, 19.2, 14.3, 11.3, 9.6, 7.4, 5.6, 4.6, 4.2, 3.3, 2.9, 2.3, 2.1]) -off['tkIsoElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -offrate['tkIsoElectron'] = array('d', [470.6, 281.0, 151.7, 92.9, 51.8, 35.7, 27.2, 20.5, 14.5, 12.3, 10.6, 8.6, 7.5, 6.4, 5.5, 4.7, 3.6, 3.0, 2.3, 2.0]) -onl['tkIsoElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -onlrate['tkIsoElectron'] = array('d', [301.4, 153.7, 87.0, 53.6, 32.3, 22.5, 17.9, 13.2, 11.0, 8.8, 6.9, 6.0, 5.0, 4.3, 3.5, 3.1, 2.4, 1.8, 1.4, 1.4]) -off['standaloneElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -offrate['standaloneElectron'] = array('d', [21719.7, 19089.8, 5527.7, 1862.3, 887.7, 431.0, 264.0, 173.0, 114.4, 78.7, 58.4, 44.8, 34.6, 28.0, 22.7, 18.2, 14.0, 11.3, 8.7, 7.0]) -onl['standaloneElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -onlrate['standaloneElectron'] = array('d', [4287.3, 1887.4, 998.8, 535.8, 285.0, 182.6, 130.1, 80.8, 58.7, 44.7, 34.3, 27.5, 21.3, 16.6, 13.1, 10.8, 7.9, 6.3, 4.9, 4.5]) -off['standaloneElectronExt'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -offrate['standaloneElectronExt'] = array('d', [25587.9, 21709.3, 6607.4, 2224.5, 1047.6, 514.7, 313.2, 204.0, 135.6, 94.0, 70.3, 54.5, 41.8, 34.3, 27.8, 22.5, 17.6, 14.1, 11.0, 9.1]) -onl['standaloneElectronExt'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -onlrate['standaloneElectronExt'] = array('d', [4706.1, 2035.2, 1065.7, 571.3, 306.8, 196.9, 140.6, 88.2, 64.8, 49.3, 38.2, 30.4, 23.7, 18.6, 14.5, 12.0, 8.9, 7.2, 5.7, 5.2]) -off['tkPhotonIso'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -offrate['tkPhotonIso'] = array('d', [8825.4, 3482.5, 978.1, 474.4, 243.0, 150.3, 104.5, 76.1, 52.0, 39.4, 31.0, 24.8, 20.5, 17.4, 13.4, 10.7, 8.3, 6.3, 5.1, 3.8]) -onl['tkPhotonIso'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -onlrate['tkPhotonIso'] = array('d', [1470.2, 686.1, 403.9, 235.8, 140.4, 95.7, 73.4, 49.7, 36.7, 29.4, 23.5, 19.0, 15.3, 12.0, 9.8, 7.7, 5.9, 4.7, 3.7, 3.2]) -off['puppiPhase1HT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -offrate['puppiPhase1HT'] = array('d', [31038.0, 5536.7, 4481.5, 1790.8, 1099.2, 629.6, 372.8, 226.0, 143.9, 94.2, 66.4, 47.5, 32.7, 23.5, 17.4, 13.8, 10.5, 8.5]) -onl['puppiPhase1HT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -onlrate['puppiPhase1HT'] = array('d', [2133.6, 1254.3, 692.4, 395.6, 232.4, 143.8, 91.7, 63.8, 44.1, 30.2, 21.2, 15.8, 12.2, 9.6, 7.6, 5.7, 4.3, 3.5]) -off['trackerHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -offrate['trackerHT'] = array('d', [27857.3, 17890.9, 9170.4, 4480.2, 2252.9, 1212.2, 693.2, 420.3, 266.3, 179.7, 123.8, 88.4, 64.4, 48.1, 36.7, 28.2, 22.2, 18.4]) -onl['trackerHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -onlrate['trackerHT'] = array('d', [2809.5, 586.8, 182.1, 73.1, 34.2, 18.8, 11.3, 7.0, 4.4, 2.6, 1.4, 1.1, 0.9, 0.6, 0.6, 0.5, 0.4, 0.4]) -off['caloHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -offrate['caloHT'] = array('d', [20275.1, 15173.6, 12163.9, 9764.8, 7278.0, 5558.7, 4265.6, 3188.0, 2398.7, 1801.8, 1339.2, 991.8, 726.1, 529.6, 383.7, 278.1, 200.6, 141.6]) -onl['caloHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -onlrate['caloHT'] = array('d', [20439.3, 16139.0, 13494.1, 10286.9, 7665.9, 5926.6, 4486.9, 3323.6, 2492.4, 1855.9, 1372.6, 1009.7, 732.9, 531.0, 381.5, 273.6, 195.6, 137.9]) -off['puppiMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -offrate['puppiMET'] = array('d', [31038.0, 13791.6, 2921.4, 620.2, 156.9, 48.3, 18.1, 9.2, 5.3, 3.4, 2.2, 1.8, 1.5, 1.3, 1.0, 0.7, 0.6, 0.5]) -onl['puppiMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -onlrate['puppiMET'] = array('d', [837.2, 127.7, 27.6, 9.7, 4.8, 2.8, 1.8, 1.5, 1.1, 0.7, 0.5, 0.5, 0.4, 0.3, 0.3, 0.2, 0.1, 0.1]) -off['trackerMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -offrate['trackerMET'] = array('d', [13268.1, 8221.6, 4763.9, 2641.6, 1442.3, 792.3, 439.4, 255.7, 152.8, 96.2, 63.0, 44.5, 30.9, 23.1, 16.9, 13.5, 11.0, 8.9]) -onl['trackerMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -onlrate['trackerMET'] = array('d', [162.4, 22.8, 7.7, 4.4, 3.0, 2.4, 0.9, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.1, 0.1, 0.1]) -off['puppiPhase1Jet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['puppiPhase1Jet'] = array('d', [16324.4, 5363.9, 2085.5, 847.5, 393.2, 205.5, 115.6, 70.1, 45.7, 28.8, 18.3, 12.5, 8.2, 6.2, 4.9, 3.6, 2.6, 2.1, 1.8, 1.5]) -onl['puppiPhase1Jet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['puppiPhase1Jet'] = array('d', [3001.4, 892.0, 322.6, 140.0, 69.1, 37.2, 20.5, 11.6, 7.1, 5.2, 3.5, 2.2, 1.8, 1.3, 1.0, 0.8, 0.5, 0.4, 0.4, 0.4]) -off['puppiPhase1JetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['puppiPhase1JetExt'] = array('d', [17492.9, 6541.9, 2936.1, 1401.1, 670.8, 345.8, 198.3, 119.9, 78.9, 51.1, 33.5, 23.9, 17.5, 13.8, 11.1, 8.9, 7.2, 6.2, 5.5, 5.0]) -onl['puppiPhase1JetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['puppiPhase1JetExt'] = array('d', [3599.0, 1068.7, 383.3, 166.2, 82.5, 44.8, 25.8, 16.2, 11.0, 8.2, 5.5, 4.0, 3.0, 2.2, 1.8, 1.3, 0.9, 0.5, 0.5, 0.5]) -off['trackerJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['trackerJet'] = array('d', [31036.5, 31036.5, 30915.7, 30680.9, 22388.0, 8428.3, 3884.0, 2065.0, 1190.5, 731.1, 474.2, 320.4, 221.5, 156.0, 112.2, 84.1, 64.2, 50.1, 38.1, 30.6]) -onl['trackerJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['trackerJet'] = array('d', [501.4, 118.3, 37.5, 15.1, 7.8, 5.0, 3.9, 3.0, 1.6, 0.5, 0.5, 0.4, 0.4, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]) -off['caloJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['caloJet'] = array('d', [31038.0, 31038.0, 26155.6, 5045.0, 948.3, 340.7, 159.3, 83.5, 47.2, 29.5, 18.6, 12.2, 7.5, 5.8, 3.8, 2.8, 2.1, 1.6, 1.2, 1.1]) -onl['caloJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['caloJet'] = array('d', [12842.3, 1955.9, 539.3, 209.7, 92.6, 46.7, 27.1, 15.5, 8.6, 5.4, 3.7, 2.3, 1.5, 1.2, 1.1, 0.8, 0.5, 0.5, 0.3, 0.1]) -off['caloJetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['caloJetExt'] = array('d', [31038.0, 31038.0, 26303.9, 5485.8, 1167.2, 449.1, 214.9, 112.4, 65.1, 39.4, 24.8, 16.1, 10.5, 7.7, 5.0, 3.5, 2.5, 2.1, 1.5, 1.4]) -onl['caloJetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['caloJetExt'] = array('d', [14705.0, 2358.7, 643.6, 242.6, 105.7, 51.5, 29.5, 16.9, 8.9, 5.5, 4.0, 2.6, 1.5, 1.2, 1.1, 0.8, 0.5, 0.5, 0.3, 0.1]) -off['HPSPFTau1'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['HPSPFTau1'] = array('d', [31035.9, 30959.8, 30256.7, 27248.2, 20953.9, 13612.0, 8332.0, 5186.0, 3274.6, 2132.8, 1468.2, 1070.7, 801.3, 619.1, 485.6, 390.2, 312.9, 257.0, 210.8, 174.5, 147.6, 124.3, 107.8, 92.9, 77.9, 68.0, 59.8, 54.0, 48.1, 43.0]) -onl['HPSPFTau1'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['HPSPFTau1'] = array('d', [31035.4, 28388.8, 13940.1, 5145.3, 2169.4, 1114.7, 645.0, 409.1, 268.3, 183.8, 129.2, 95.3, 70.3, 55.4, 44.1, 32.9, 26.6, 21.2, 17.3, 14.2, 11.8, 10.1, 8.5, 7.4, 6.3, 5.1, 4.0, 3.5, 2.8, 2.5]) -off['HPSPFTau1Medium'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['HPSPFTau1Medium'] = array('d', [31037.8, 31031.8, 30773.1, 29458.8, 25268.7, 17652.4, 9527.8, 4973.1, 2737.6, 1668.2, 1069.4, 727.1, 519.6, 392.0, 301.7, 235.3, 191.5, 153.6, 127.2, 105.7, 90.9, 78.7, 67.5, 59.3, 52.8, 47.6, 42.1, 35.1, 30.9, 27.0]) -onl['HPSPFTau1Medium'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['HPSPFTau1Medium'] = array('d', [31035.0, 28146.7, 12982.5, 4472.2, 1805.5, 903.4, 514.9, 327.8, 215.2, 150.8, 109.6, 83.8, 64.7, 53.2, 44.1, 32.9, 26.6, 21.2, 17.3, 14.2, 11.8, 10.1, 8.5, 7.4, 6.3, 5.1, 4.0, 3.5, 2.8, 2.5]) -off['NNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['NNPuppiTauLoose'] = array('d', [2406.3, 2182.7, 1846.7, 1449.3, 1049.6, 726.3, 525.7, 387.3, 294.1, 224.5, 179.0, 141.8, 115.2, 93.5, 79.0, 69.1, 58.7, 50.9, 44.7, 39.4, 35.3, 31.0, 28.4, 25.8, 23.4, 21.3, 19.1, 17.6, 16.3, 15.4]) -onl['NNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['NNPuppiTauLoose'] = array('d', [2644.3, 2629.9, 2150.0, 1213.0, 626.8, 353.2, 217.3, 142.1, 93.9, 66.9, 50.6, 40.0, 31.7, 25.7, 22.2, 17.8, 14.8, 13.1, 10.5, 9.3, 7.7, 6.5, 5.5, 4.8, 4.0, 3.5, 2.9, 2.7, 2.3, 2.1]) -off['NNPuppiTauTight'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['NNPuppiTauTight'] = array('d', [218.9, 218.9, 218.9, 218.9, 208.2, 187.4, 152.7, 120.6, 92.9, 73.6, 59.1, 48.3, 38.6, 34.3, 29.5, 24.9, 21.6, 18.5, 15.9, 13.4, 11.3, 10.3, 9.5, 8.5, 8.0, 7.3, 6.5, 6.2, 5.9, 5.5]) -onl['NNPuppiTauTight'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['NNPuppiTauTight'] = array('d', [218.9, 218.8, 211.7, 189.4, 153.0, 109.6, 74.4, 51.8, 34.6, 24.6, 18.9, 15.7, 12.4, 10.1, 8.9, 7.1, 5.9, 5.3, 4.2, 3.8, 3.4, 3.0, 2.9, 2.6, 2.2, 2.0, 1.5, 1.4, 1.4, 1.2]) -off['TkEGTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['TkEGTau'] = array('d', [29720.4, 26159.3, 20596.4, 15055.1, 10640.5, 7521.9, 5403.9, 3967.9, 2967.1, 2276.9, 1758.1, 1383.1, 1093.4, 870.2, 707.8, 579.2, 479.6, 404.8, 337.2, 285.8, 241.4, 206.4, 178.7, 156.8, 136.6, 120.7, 107.1, 95.9, 85.5, 76.0]) -onl['TkEGTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['TkEGTau'] = array('d', [21763.8, 8253.0, 3253.5, 1347.4, 608.1, 298.1, 158.1, 90.9, 55.0, 35.8, 22.4, 14.2, 9.3, 6.2, 3.8, 2.6, 1.6, 0.9, 0.9, 0.8, 0.6, 0.5, 0.5, 0.4, 0.4, 0.4, 0.3, 0.3, 0.3, 0.3]) -off['CaloTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['CaloTau'] = array('d', [31037.9, 31037.6, 30857.6, 27058.4, 17349.8, 9348.6, 5053.3, 2881.1, 1778.3, 1179.3, 826.7, 601.5, 450.0, 345.6, 271.4, 211.1, 171.7, 139.3, 114.4, 93.6, 78.7, 66.1, 56.7, 48.0, 41.4, 36.2, 31.0, 26.8, 22.7, 19.1]) -onl['CaloTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['CaloTau'] = array('d', [31037.9, 30775.8, 23729.0, 11431.6, 5007.3, 2421.8, 1342.8, 822.4, 540.0, 375.5, 269.2, 195.9, 147.9, 113.5, 88.8, 70.5, 56.4, 46.5, 37.8, 31.4, 25.1, 20.5, 16.6, 14.6, 12.8, 11.1, 9.3, 7.9, 6.9, 6.4]) - - - - - - -for obj in list_calc: - - off[obj] = array('d',[]) - offrate[obj] = array('d',[]) - onl[obj] = array('d',[]) - onlrate[obj] = array('d',[]) - - x = cutrange[obj][0] - while (x0.83 && tkMuonPt[]>("+str(TkMuonOfflineEtCutOverlap(x))+")) || (abs(tkMuonEta[])>1.24 && tkMuonPt[]>("+str(TkMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkMuonBx[]==0 && abs(tkMuonEta[])<2.4)>0" - onlinecut = "Sum$( tkMuonPt[]>"+str(x)+" && tkMuonBx[]==0 && abs(tkMuonEta[])<2.4)>0" - - if (obj=='tkMuonStub'): - offlinescalingcut = "( (abs(tkMuonStubsEta[])<0.83 && tkMuonStubsPt[]>("+str(TkMuonStubOfflineEtCutBarrel(x))+")) || (abs(tkMuonStubsEta[])<1.24 && abs(tkMuonStubsEta[])>0.83 && tkMuonStubsPt[]>("+str(TkMuonStubOfflineEtCutOverlap(x))+")) || (abs(tkMuonStubsEta[])>1.24 && tkMuonStubsPt[]>("+str(TkMuonStubOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkMuonStubsBx[]==0 && abs(tkMuonStubsEta[])<2.4)>0" - onlinecut = "Sum$( tkMuonStubsPt[]>"+str(x)+" && tkMuonStubsBx[]==0 && abs(tkMuonStubsEta[])<2.4)>0" - - - if (obj=='tkMuonStubExt'): - offlinescalingcut = "( (abs(tkMuonStubsEta[])<0.83 && tkMuonStubsPt[]>("+str(TkMuonStubOfflineEtCutBarrel(x))+")) || (abs(tkMuonStubsEta[])<1.24 && abs(tkMuonStubsEta[])>0.83 && tkMuonStubsPt[]>("+str(TkMuonStubOfflineEtCutOverlap(x))+")) || (abs(tkMuonStubsEta[])>1.24 && abs(tkMuonStubsEta[])<2.4 && tkMuonStubsPt[]>("+str(TkMuonStubOfflineEtCutEndcap(x))+")) || (abs(tkMuonStubsEta[])>2.4 && tkMuonStubsPt[]>("+str(TkMuonStubOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkMuonStubsBx[]==0 && abs(tkMuonStubsEta[])<2.8)>0" - onlinecut = "Sum$( tkMuonStubsPt[]>"+str(x)+" && tkMuonStubsBx[]==0 && abs(tkMuonStubsEta[])<2.8)>0" - - - if (obj=='standaloneMuon'): - offlinescalingcut = "( (abs(standaloneMuonEta[])<0.83 && standaloneMuonPt[]>("+str(StandaloneMuonOfflineEtCutBarrel(x))+")) || (abs(standaloneMuonEta[])<1.24 && abs(standaloneMuonEta[])>0.83 && standaloneMuonPt[]>("+str(StandaloneMuonOfflineEtCutOverlap(x))+")) || (abs(standaloneMuonEta[])>1.24 && standaloneMuonPt[]>("+str(StandaloneMuonOfflineEtCutEndcap(x))+")) )" - qualitycut = "( (abs(standaloneMuonEta[])<0.83 && standaloneMuonQual[]>=0 && standaloneMuonRegion[]==1) || (abs(standaloneMuonEta[])<1.24 && abs(standaloneMuonEta[])>0.83 && standaloneMuonQual[]>=12 && standaloneMuonRegion[]==2) || (abs(standaloneMuonEta[])>1.24 && standaloneMuonQual[]>=0 && standaloneMuonRegion[]==3))" - offlinecut = "Sum$( "+offlinescalingcut+" && "+qualitycut+" && standaloneMuonBx[]==0 && abs(standaloneMuonEta[])<2.4)>0" - onlinecut = "Sum$( "+qualitycut+" && standaloneMuonPt[]>"+str(x)+" && standaloneMuonBx[]==0 && abs(standaloneMuonEta[])<2.4)>0" - - - if (obj=='tkMuonBarrel'): - offlinescalingcut = "(tkMuonPt[]>("+str(TkMuonOfflineEtCutBarrel(x))+"))" - offlinecut = "Sum$( "+offlinescalingcut+" && tkMuonBx[]==0 && abs(tkMuonEta[])<0.83)>0" - onlinecut = "Sum$( tkMuonPt[]>"+str(x)+" && tkMuonBx[]==0 && abs(tkMuonEta[])<0.83)>0" - - if (obj=='tkMuonStubBarrel'): - offlinescalingcut = "(tkMuonStubsPt[]>("+str(TkMuonStubOfflineEtCutBarrel(x))+"))" - offlinecut = "Sum$( "+offlinescalingcut+" && tkMuonStubsBx[]==0 && abs(tkMuonStubsEta[])<0.83)>0" - onlinecut = "Sum$( tkMuonStubsPt[]>"+str(x)+" && tkMuonStubsBx[]==0 && abs(tkMuonStubsEta[])<0.83)>0" - - if (obj=='standaloneMuonBarrel'): - offlinescalingcut = "(standaloneMuonPt[]>("+str(StandaloneMuonOfflineEtCutBarrel(x))+"))" - offlinecut = "Sum$( "+offlinescalingcut+" && standaloneMuonBx[]==0 && abs(standaloneMuonEta[])<0.83)>0" - onlinecut = "Sum$( standaloneMuonPt[]>"+str(x)+" && standaloneMuonBx[]==0 && abs(standaloneMuonEta[])<0.83)>0" - - if (obj=='tkMuonOverlap'): - offlinescalingcut = "(tkMuonPt[]>("+str(TkMuonOfflineEtCutOverlap(x))+"))" - offlinecut = "Sum$( "+offlinescalingcut+" && tkMuonBx[]==0 && abs(tkMuonEta[])>0.83 && abs(tkMuonEta[])<1.24)>0" - onlinecut = "Sum$( tkMuonPt[]>"+str(x)+" && tkMuonBx[]==0 && abs(tkMuonEta[])>0.83 && abs(tkMuonEta[])<1.24)>0" - - if (obj=='tkMuonStubOverlap'): - offlinescalingcut = "(tkMuonStubsPt[]>("+str(TkMuonStubOfflineEtCutOverlap(x))+"))" - offlinecut = "Sum$( "+offlinescalingcut+" && tkMuonStubsBx[]==0 && abs(tkMuonStubsEta[])>0.83 && abs(tkMuonStubsEta[])<1.24)>0" - onlinecut = "Sum$( tkMuonStubsPt[]>"+str(x)+" && tkMuonStubsBx[]==0 && abs(tkMuonStubsEta[])>0.83 && abs(tkMuonStubsEta[])<1.24)>0" - - if (obj=='standaloneMuonOverlap'): - offlinescalingcut = "(standaloneMuonPt[]>("+str(StandaloneMuonOfflineEtCutOverlap(x))+"))" - offlinecut = "Sum$( "+offlinescalingcut+" && standaloneMuonBx[]==0 && standaloneMuonQual[]>=12 && abs(standaloneMuonEta[])>0.83 && abs(standaloneMuonEta[])<1.24)>0" - onlinecut = "Sum$( standaloneMuonPt[]>"+str(x)+" && standaloneMuonBx[]==0 && standaloneMuonQual[]>=12 && abs(standaloneMuonEta[])>0.83 && abs(standaloneMuonEta[])<1.24)>0" - - if (obj=='tkMuonEndcap'): - offlinescalingcut = "(tkMuonPt[]>("+str(TkMuonOfflineEtCutEndcap(x))+"))" - offlinecut = "Sum$( "+offlinescalingcut+" && tkMuonBx[]==0 && abs(tkMuonEta[])>1.24 && abs(tkMuonEta[])<2.4)>0" - onlinecut = "Sum$( tkMuonPt[]>"+str(x)+" && tkMuonBx[]==0 && abs(tkMuonEta[])>1.24 && abs(tkMuonEta[])<2.4)>0" - - if (obj=='tkMuonStubEndcap'): - offlinescalingcut = "(tkMuonStubsPt[]>("+str(TkMuonStubOfflineEtCutEndcap(x))+"))" - offlinecut = "Sum$( "+offlinescalingcut+" && tkMuonStubsBx[]==0 && abs(tkMuonStubsEta[])>1.24 && abs(tkMuonStubsEta[])<2.4)>0" - onlinecut = "Sum$( tkMuonStubsPt[]>"+str(x)+" && tkMuonStubsBx[]==0 && abs(tkMuonStubsEta[])>1.24 && abs(tkMuonStubsEta[])<2.4)>0" - - if (obj=='standaloneMuonEndcap'): - offlinescalingcut = "(standaloneMuonPt[]>("+str(StandaloneMuonOfflineEtCutEndcap(x))+"))" - offlinecut = "Sum$( "+offlinescalingcut+" && standaloneMuonBx[]==0 && abs(standaloneMuonEta[])>1.24 && abs(standaloneMuonEta[])<2.4)>0" - onlinecut = "Sum$( standaloneMuonPt[]>"+str(x)+" && standaloneMuonBx[]==0 && abs(standaloneMuonEta[])>1.24 && abs(standaloneMuonEta[])<2.4)>0" - - - #### Still displaced and extended Eta missing - - # if (obj=='displacedMuonBarrel'): - # offlinescalingcut = "(standaloneMuonPt2[]>("+str(StandaloneDisplacedMuonOfflineEtCut(x))+"))" - # offlinecut = "Sum$( "+offlinescalingcut+" && standaloneMuonBx[]==0 && abs(standaloneMuonEta[])<0.83)>0" - # onlinecut = "Sum$( standaloneMuonPt2[]>"+str(x)+" && standaloneMuonBx[]==0 && abs(standaloneMuonEta[])<0.83)>0" - - - -####################################### - - - if (obj=='tkElectron'): - offlinescalingcut = "( (abs(tkElectronV2Eta[])<1.479 && tkElectronV2Et[]>("+str(TkElectronOfflineEtCutBarrel(x))+")) || (abs(tkElectronV2Eta[])>1.479 && tkElectronV2Et[]>("+str(TkElectronOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronV2Bx[]==0 && tkElectronV2PassesLooseTrackID[] && abs(tkElectronV2Eta[])<2.4)>0" - onlinecut = "Sum$( tkElectronV2Et[]>"+str(x)+" && tkElectronV2Bx[]==0 && tkElectronV2PassesLooseTrackID[] && abs(tkElectronV2Eta[])<2.4)>0" - - if (obj=='tkIsoElectron'): - offlinescalingcut = "( (abs(tkElectronV2Eta[])<1.479 && tkElectronV2Et[]>("+str(TkIsoElectronOfflineEtCutBarrel(x))+") && tkElectronV2TrkIso[]<0.10) || (abs(tkElectronV2Eta[])>1.479 && tkElectronV2Et[]>("+str(TkIsoElectronOfflineEtCutEndcap(x))+") && tkElectronV2TrkIso[]<0.125 && tkElectronV2HwQual[]==5) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronV2Bx[]==0 && abs(tkElectronV2Eta[])<2.4)>0" - onlinecut = "Sum$( ((abs(tkElectronV2Eta[])<1.479 && tkElectronV2Et[]>("+str(x)+") && tkElectronV2TrkIso[]<0.10) || (abs(tkElectronV2Eta[])>1.479 && tkElectronV2Et[]>("+str(x)+") && tkElectronV2TrkIso[]<0.125 && tkElectronV2HwQual[]==5)) && tkElectronV2Bx[]==0 && abs(tkElectronV2Eta[])<2.4)>0" - - if (obj=='standaloneElectron'): - offlinescalingcut = "( (abs(EGEta[])<1.479 && EGEt[]>("+str(StandaloneElectronOfflineEtCutBarrel(x))+")) || (abs(EGEta[])>1.479 && EGEt[]>("+str(StandaloneElectronOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && EGPassesLooseTrackID[] && abs(EGEta[])<2.4)>0" - onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && EGPassesLooseTrackID[] && abs(EGEta[])<2.4)>0" - - if (obj=='standaloneElectronExt'): - offlinescalingcut = "( (abs(EGEta[])<1.479 && EGEt[]>("+str(StandaloneElectronOfflineEtCutBarrel(x))+")) || (abs(EGEta[])>1.479 && abs(EGEta[])<2.4 && EGEt[]>("+str(StandaloneElectronOfflineEtCutEndcap(x))+")) || (abs(EGEta[])>2.4 && EGEt[]>("+str(StandaloneElectronOfflineEtCutForward(x))+")))" - offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && EGPassesLooseTrackID[] && abs(EGEta[])<3)>0" - onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && EGPassesLooseTrackID[] && abs(EGEta[])<3)>0" - - - if (obj=='tkElectronBarrel'): - offlinescalingcut = "( (abs(tkElectronV2Eta[])<1.479 && tkElectronV2Et[]>("+str(TkElectronOfflineEtCutBarrel(x))+")) || (abs(tkElectronV2Eta[])>1.479 && tkElectronV2Et[]>("+str(TkElectronOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronV2Bx[]==0 && tkElectronV2PassesLooseTrackID[] && abs(tkElectronV2Eta[])<1.479)>0" - onlinecut = "Sum$( tkElectronV2Et[]>"+str(x)+" && tkElectronV2Bx[]==0 && tkElectronV2PassesLooseTrackID[] && abs(tkElectronV2Eta[])<1.479)>0" - - if (obj=='tkIsoElectronBarrel'): - offlinescalingcut = "( (abs(tkElectronV2Eta[])<1.479 && tkElectronV2Et[]>("+str(TkIsoElectronOfflineEtCutBarrel(x))+") && tkElectronV2TrkIso[]<0.10) || (abs(tkElectronV2Eta[])>1.479 && tkElectronV2Et[]>("+str(TkIsoElectronOfflineEtCutEndcap(x))+") && tkElectronV2TrkIso[]<0.125 && tkElectronV2HwQual[]==5) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronV2Bx[]==0 && abs(tkElectronV2Eta[])<1.479)>0" - onlinecut = "Sum$( ((abs(tkElectronV2Eta[])<1.479 && tkElectronV2Et[]>("+str(x)+") && tkElectronV2TrkIso[]<0.10) || (abs(tkElectronV2Eta[])>1.479 && tkElectronV2Et[]>("+str(x)+") && tkElectronV2TrkIso[]<0.125 && tkElectronV2HwQual[]==5)) && tkElectronV2Bx[]==0 && abs(tkElectronV2Eta[])<1.479)>0" - - if (obj=='standaloneElectronBarrel'): - offlinescalingcut = "( (abs(EGEta[])<1.479 && EGEt[]>("+str(StandaloneElectronOfflineEtCutBarrel(x))+")) || (abs(EGEta[])>1.479 && EGEt[]>("+str(StandaloneElectronOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && EGPassesLooseTrackID[] && abs(EGEta[])<1.479)>0" - onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && EGPassesLooseTrackID[] && abs(EGEta[])<1.479)>0" - - - if (obj=='tkElectronEndcap'): - offlinescalingcut = "( (abs(tkElectronV2Eta[])<1.479 && tkElectronV2Et[]>("+str(TkElectronOfflineEtCutBarrel(x))+")) || (abs(tkElectronV2Eta[])>1.479 && tkElectronV2Et[]>("+str(TkElectronOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronV2Bx[]==0 && tkElectronV2PassesLooseTrackID[] && abs(tkElectronV2Eta[])>1.479 && abs(tkElectronV2Eta[])<2.4)>0" - onlinecut = "Sum$( tkElectronV2Et[]>"+str(x)+" && tkElectronV2Bx[]==0 && tkElectronV2PassesLooseTrackID[] && abs(tkElectronV2Eta[])>1.479 && abs(tkElectronV2Eta[])<2.4)>0" - - if (obj=='tkIsoElectronEndcap'): - offlinescalingcut = "( (abs(tkElectronV2Eta[])<1.479 && tkElectronV2Et[]>("+str(TkIsoElectronOfflineEtCutBarrel(x))+") && tkElectronV2TrkIso[]<0.10) || (abs(tkElectronV2Eta[])>1.479 && tkElectronV2Et[]>("+str(TkIsoElectronOfflineEtCutEndcap(x))+") && tkElectronV2TrkIso[]<0.125 && tkElectronV2HwQual[]==5) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronV2Bx[]==0 && abs(tkElectronV2Eta[])>1.479 && abs(tkElectronV2Eta[])<2.4)>0" - onlinecut = "Sum$( ((abs(tkElectronV2Eta[])<1.479 && tkElectronV2Et[]>("+str(x)+") && tkElectronV2TrkIso[]<0.10) || (abs(tkElectronV2Eta[])>1.479 && tkElectronV2Et[]>("+str(x)+") && tkElectronV2TrkIso[]<0.125 && tkElectronV2HwQual[]==5)) && tkElectronV2Bx[]==0 && abs(tkElectronV2Eta[])>1.479 && abs(tkElectronV2Eta[])<2.4)>0" - - if (obj=='standaloneElectronEndcap'): - offlinescalingcut = "( (abs(EGEta[])<1.479 && EGEt[]>("+str(StandaloneElectronOfflineEtCutBarrel(x))+")) || (abs(EGEta[])>1.479 && EGEt[]>("+str(StandaloneElectronOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && EGPassesLooseTrackID[] && abs(EGEta[])>1.479 && abs(EGEta[])<2.4)>0" - onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && EGPassesLooseTrackID[] && abs(EGEta[])>1.479 && abs(EGEta[])<2.4)>0" - - - if (obj=='tkPhotonIso'): - offlinescalingcut = "( (abs(tkPhotonEta[])<1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutBarrel(x))+")) || (abs(tkPhotonEta[])>1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<0.29) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<0.39) ) && tkPhotonBx[]==0 && tkPhotonPassesLooseTrackID[] && abs(tkPhotonEta[])<2.4)>0" - onlinecut = "Sum$( tkPhotonEt[]>"+str(x)+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<0.29) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<0.39) ) && tkPhotonBx[]==0 && tkPhotonPassesLooseTrackID[] && abs(tkPhotonEta[])<2.4)>0" - - - if (obj=='standalonePhoton'): - offlinescalingcut = "( (abs(EGEta[])<1.479 && EGEt[]>("+str(StandalonePhotonOfflineEtCutBarrel(x))+")) || (abs(EGEta[])>1.479 && EGEt[]>("+str(StandalonePhotonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && EGPassesPhotonID[] && abs(EGEta[])<2.4)>0" - onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && EGPassesPhotonID[] && abs(EGEta[])<2.4)>0" - - - if (obj=='tkPhotonIsoBarrel'): - offlinescalingcut = "( (abs(tkPhotonEta[])<1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutBarrel(x))+")) || (abs(tkPhotonEta[])>1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<0.29) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<0.39) ) && tkPhotonBx[]==0 && tkPhotonPassesLooseTrackID[] && abs(tkPhotonEta[])<1.479)>0" - onlinecut = "Sum$( tkPhotonEt[]>"+str(x)+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<0.29) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<0.39) ) && tkPhotonBx[]==0 && tkPhotonPassesLooseTrackID[] && abs(tkPhotonEta[])<1.479)>0" - - - if (obj=='standalonePhotonBarrel'): - offlinescalingcut = "( (abs(EGEta[])<1.479 && EGEt[]>("+str(StandalonePhotonOfflineEtCutBarrel(x))+")) || (abs(EGEta[])>1.479 && EGEt[]>("+str(StandalonePhotonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && EGPassesPhotonID[] && abs(EGEta[])<1.479)>0" - onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && EGPassesPhotonID[] && abs(EGEta[])<1.479)>0" - - - if (obj=='tkPhotonIsoEndcap'): - offlinescalingcut = "( (abs(tkPhotonEta[])<1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutBarrel(x))+")) || (abs(tkPhotonEta[])>1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<0.29) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<0.39) ) && tkPhotonBx[]==0 && tkPhotonPassesLooseTrackID[] && abs(tkPhotonEta[])<2.4 && abs(tkPhotonEta[])>1.479)>0" - onlinecut = "Sum$( tkPhotonEt[]>"+str(x)+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<0.29) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<0.39) ) && tkPhotonBx[]==0 && tkPhotonPassesLooseTrackID[] && abs(tkPhotonEta[])<2.4 && abs(tkPhotonEta[])>1.479)>0" - - - if (obj=='standalonePhotonEndcap'): - offlinescalingcut = "( (abs(EGEta[])<1.479 && EGEt[]>("+str(StandalonePhotonOfflineEtCutBarrel(x))+")) || (abs(EGEta[])>1.479 && EGEt[]>("+str(StandalonePhotonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && EGPassesPhotonID[] && abs(EGEta[])<2.4 && abs(EGEta[])>1.479)>0" - onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && EGPassesPhotonID[] && abs(EGEta[])<2.4 && abs(EGEta[])>1.479)>0" - - -################################ - - - - if (obj=='HPSPFTau1'): - offlinescalingcut = "( (abs(pfTauEta[])<1.5 && pfTauEt[]>("+str(PFTauOfflineEtCutBarrel(x))+")) || (abs(pfTauEta[])>1.5 && pfTauEt[]>("+str(PFTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(pfTauEta[])<2.4)>0" - onlinecut = "Sum$( pfTauEt[]>"+str(x)+" && abs(pfTauEta[])<2.4)>0" - - - if (obj=='HPSPFTau1Medium'): - offlinescalingcut = "( (abs(pfTauEta[])<1.5 && pfTauEt[]>("+str(PFIsoTauOfflineEtCutBarrel(x))+")) || (abs(pfTauEta[])>1.5 && pfTauEt[]>("+str(PFIsoTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && pfTauPassesMediumIso[]>0 && abs(pfTauEta[])<2.4)>0" - onlinecut = "Sum$( pfTauEt[]>"+str(x)+" && pfTauPassesMediumIso[]>0 && abs(pfTauEta[])<2.4)>0" - - - if (obj=='HPSPFTau2'): - offlinescalingcut = "( (abs(hpsTauEta[])<1.5 && hpsTauEt[]>("+str(HPSTauOfflineEtCutBarrel(x))+")) || (abs(hpsTauEta[])>1.5 && hpsTauEt[]>("+str(HPSTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(hpsTauEta[])<2.4)>0" - onlinecut = "Sum$( hpsTauEt[]>"+str(x)+" && abs(hpsTauEta[])<2.4)>0" - - - if (obj=='HPSPFTau2Tight'): - offlinescalingcut = "( (abs(hpsTauEta[])<1.5 && hpsTauEt[]>("+str(HPSIsoTauOfflineEtCutBarrel(x))+")) || (abs(hpsTauEta[])>1.5 && hpsTauEt[]>("+str(HPSIsoTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && hpsTauPassTightRelIso[]>0 && abs(hpsTauEta[])<2.4)>0" - onlinecut = "Sum$( hpsTauEt[]>"+str(x)+" && hpsTauPassTightRelIso[]>0 && abs(hpsTauEta[])<2.4)>0" - - - if (obj=='NNPuppiTauLoose'): - offlinescalingcut = "( (abs(nnTauEta[])<1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutBarrel(x))+")) || (abs(nnTauEta[])>1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<2.4)>0" - onlinecut = "Sum$( nnTauEt[]>"+str(x)+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<2.4)>0" - - - if (obj=='NNPuppiTauTight'): - offlinescalingcut = "( (abs(nnTauEta[])<1.5 && nnTauEt[]>("+str(NNTauTightOfflineEtCutBarrel(x))+")) || (abs(nnTauEta[])>1.5 && nnTauEt[]>("+str(NNTauTightOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTauPassTightNN[]>0 && abs(nnTauEta[])<2.4)>0" - onlinecut = "Sum$( pfTauEt[]>"+str(x)+" && nnTauPassTightNN[]>0 && abs(nnTauEta[])<2.4)>0" - - - if (obj=='CaloTau'): - offlinescalingcut = "( (abs(caloTauEta[])<1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutBarrel(x))+")) || (abs(caloTauEta[])>1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloTauEta[])<2.4)>0" - onlinecut = "Sum$( caloTauEt[]>"+str(x)+" && abs(caloTauEta[])<2.4)>0" - - - if (obj=='TkEGTau'): - offlinescalingcut = "( (abs(tkEGTauEta[])<1.5 && tkEGTauEt[]>("+str(TkEGTauOfflineEtCutBarrel(x))+")) || (abs(tkEGTauEta[])>1.5 && tkEGTauEt[]>("+str(TkEGTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(tkEGTauEta[])<2.4)>0" - onlinecut = "Sum$( tkEGTauEt[]>"+str(x)+" && abs(tkEGTauEta[])<2.4)>0" - - - - - - -################################ - - - if (obj=='puppiJet'): - offlinescalingcut = "( (abs(puppiJetEta[])<1.5 && puppiJetEt[]>("+str(PuppiJetOfflineEtCutBarrel(x))+")) || (abs(puppiJetEta[])>1.5 && abs(puppiJetEta[])<2.4 && puppiJetEt[]>("+str(PuppiJetOfflineEtCutEndcap(x))+")) || (abs(puppiJetEta[])>2.4 && puppiJetEt[]>("+str(PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(puppiJetEta[])<2.4)>0" - onlinecut = "Sum$( puppiJetEt[]>"+str(x)+" && abs(puppiJetEta[])<2.4)>0" - - if (obj=='puppiJetExt'): - offlinescalingcut = "( (abs(puppiJetEta[])<1.5 && puppiJetEt[]>("+str(PuppiJetOfflineEtCutBarrel(x))+")) || (abs(puppiJetEta[])>1.5 && abs(puppiJetEta[])<2.4 && puppiJetEt[]>("+str(PuppiJetOfflineEtCutEndcap(x))+")) || (abs(puppiJetEta[])>2.4 && puppiJetEt[]>("+str(PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(puppiJetEta[])<5)>0" - onlinecut = "Sum$( puppiJetEt[]>"+str(x)+" && abs(puppiJetEta[])<5)>0" - - if (obj=='puppiPhase1Jet'): - offlinescalingcut = "( (abs(pfPhase1L1JetEta[])<1.5 && pfPhase1L1JetEt[]>("+str(PFPhase1JetOfflineEtCutBarrel(x))+")) || (abs(pfPhase1L1JetEta[])>1.5 && abs(pfPhase1L1JetEta[])<2.4 && pfPhase1L1JetEt[]>("+str(PFPhase1JetOfflineEtCutEndcap(x))+")) || (abs(pfPhase1L1JetEta[])>2.4 && pfPhase1L1JetEt[]>("+str(PFPhase1JetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(pfPhase1L1JetEta[])<2.4)>0" - onlinecut = "Sum$( pfPhase1L1JetEt[]>"+str(x)+" && abs(pfPhase1L1JetEta[])<2.4)>0" - - if (obj=='puppiPhase1JetExt'): - offlinescalingcut = "( (abs(pfPhase1L1JetEta[])<1.5 && pfPhase1L1JetEt[]>("+str(PFPhase1JetOfflineEtCutBarrel(x))+")) || (abs(pfPhase1L1JetEta[])>1.5 && abs(pfPhase1L1JetEta[])<2.4 && pfPhase1L1JetEt[]>("+str(PFPhase1JetOfflineEtCutEndcap(x))+")) || (abs(pfPhase1L1JetEta[])>2.4 && pfPhase1L1JetEt[]>("+str(PFPhase1JetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(pfPhase1L1JetEta[])<5)>0" - onlinecut = "Sum$( pfPhase1L1JetEt[]>"+str(x)+" && abs(pfPhase1L1JetEta[])<5)>0" - - if (obj=='trackerJet'): - offlinescalingcut = "( (abs(trackerJetEta[])<1.5 && trackerJetEt[]>("+str(TrackerJetOfflineEtCutBarrel(x))+")) || (abs(trackerJetEta[])>1.5 && trackerJetEt[]>("+str(TrackerJetOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(trackerJetEta[])<2.4)>0" - onlinecut = "Sum$( trackerJetEt[]>"+str(x)+" && abs(trackerJetEta[])<2.4)>0" - - if (obj=='caloJet'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])<2.4)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])<2.4)>0" - - if (obj=='caloJetExt'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])<5)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])<5)>0" - - -########################### - - - if (obj=='puppiHT'): - offlinescalingcut = "(puppiHT[0]>("+str(PuppiHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " puppiHT[0]>"+str(x) - - if (obj=='puppiPhase1HT'): - offlinescalingcut = "(pfPhase1L1HT[0]>("+str(PFPhase1HTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " pfPhase1L1HT[0]>"+str(x) - - if (obj=='trackerHT'): - offlinescalingcut = "(trackerHT[0]>("+str(TrackerHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerHT[0]>"+str(x) - - - if (obj=='caloHT'): - offlinescalingcut = "(caloJetHT[0]>("+str(CaloHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " caloJetHT[0]>"+str(x) - - - if (obj=='puppiMET'): - offlinescalingcut = "(puppiMETEt>("+str(PuppiMETOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " puppiMETEt>"+str(x) - - if (obj=='trackerMET'): - offlinescalingcut = "(trackerMetEt>("+str(TrackerMETOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerMetEt>"+str(x) - - - npass = t.GetEntries(offlinecut) - off[obj].append(x) - offrate[obj].append(round(float(npass)/float(ntot)*31038.,1)) - - print x,round(float(npass)/float(ntot)*31038.,1) - - npass = t.GetEntries(onlinecut) - onl[obj].append(x) - onlrate[obj].append(round(float(npass)/float(ntot)*31038.,1)) - - x+=cutrange[obj][2] - - - - print "" - print "" - print obj - print "off['"+obj+"'] = ",off[obj] - print "offrate['"+obj+"'] = ",offrate[obj] - print "onl['"+obj+"'] = ",onl[obj] - print "onlrate['"+obj+"'] = ",onlrate[obj] - - -plots = { - - - # 0 : ['tkMuon', 'tkMuonStub' , 'standaloneMuon'], - #0 : ['tkMuonStub'], - # 1 : ['tkMuon', 'tkMuonStub' , 'tkMuonStubExt', 'standaloneMuon'], - # 2 : ['tkMuonBarrel', 'tkMuonStubBarrel', 'standaloneMuonBarrel'], - # 3 : ['tkMuonOverlap', 'tkMuonStubOverlap', 'standaloneMuonOverlap'], - # 4 : ['tkMuonEndcap', 'tkMuonStubEndcap', 'standaloneMuonEndcap'], - - #2 : ['standaloneMuonBarrel', 'tkMuonStubBarrel', 'tkMuonBarrel' ], - #3 : ['standaloneMuonOverlap','tkMuonStubOverlap', 'tkMuonOverlap'], - #4 : ['standaloneMuonEndcap', 'tkMuonStubEndcap', 'tkMuonEndcap' ], - - # 4 : ['tkElectron', 'tkIsoElectron', 'standaloneElectron', 'standaloneElectronExt' ], - # 4 : ['tkElectron', 'tkIsoElectron', 'standaloneElectron', 'standaloneElectronExt', 'tkPhotonIso'] - #4 : ['tkElectron'], - # 5 : ['tkElectronBarrel', 'tkIsoElectronBarrel', 'standaloneElectronBarrel'], - # 6 : ['tkElectronEndcap', 'tkIsoElectronEndcap', 'standaloneElectronEndcap'], - # 7 : ['tkPhotonIso', 'standalonePhoton'], - # 8 : ['tkPhotonIsoBarrel', 'standalonePhotonBarrel'], - # 9 : ['tkPhotonIsoEndcap', 'standalonePhotonEndcap'], - - #10 : ['HPSPFTau1', 'HPSPFTau1Medium', 'NNPuppiTauLoose', 'NNPuppiTauTight', 'TkEGTau', 'CaloTau'], - #11 : ['puppiPhase1Jet', 'trackerJet', 'caloJet'], #removed 'puppiJet' - #12 : ['puppiPhase1JetExt', 'caloJetExt'], #removed 'puppiJetExt' - #13 : ['caloHT', 'puppiPhase1HT', 'trackerHT'], #removed 'puppiHT' - #14 : ['puppiMET', 'trackerMET'], - - - # 1 : ['DiHPSPFTau1', 'DiHPSPFTau1Medium', 'DiNNPuppiTauLoose', 'DiNNPuppiTauTight', 'DiTkEGTau', 'DiCaloTau'], - -## 4 : ['standaloneMuonBarrel', 'displacedMuonBarrel'], -## 11 : ['HPSPFTau1', 'HPSPFTau1Medium', 'HPSPFTau2', 'HPSPFTau2Tight', 'NNPuppiTauLoose', 'NNPuppiTauTight', 'TkEGTau', 'CaloTau'], -## 12 : ['HPSPFTau1', 'HPSPFTau1Medium', 'HPSPFTau2', 'HPSPFTau2Tight', 'TkEGTau', 'CaloTau'], -## 11 : ['doublePFTau', 'doublePFIsoTau'], -## 12 : ['doublePFTauBarrel', 'doublePFIsoTauBarrel', 'doubleTkTauBarrel', 'doubleCaloTkTauBarrel', 'doubleTkEGTauBarrel'], -## 12 : ['PFTauBarrel', 'PFIsoTauBarrel', 'TkTauBarrel', 'CaloTkTauBarrel', 'TkEGTauBarrel'], -## 13 : ['pfJet', 'caloJet'], -## 14 : ['pfJetCentral', 'caloJetCentral'] -## 13 : ['puppiJet', 'puppiJetExt', 'puppiPhase1Jet', 'puppiPhase1JetExt', 'trackerJet', 'caloJet', 'caloJetExt'], - - - - -} - -for key,list_plot in plots.iteritems(): - color=1 - name='' - for obj in list_plot: - - name+=obj+'_' - if (color==3): color+=1 - if (color==5): color+=1 - if (color==10): color+=1 - - g_off[obj] = TGraph(len(off[obj])-1,off[obj],offrate[obj]); - g_off[obj].SetMarkerColor(color) - g_off[obj].SetMarkerStyle(20) - g_off[obj].SetMarkerSize(1.2) - g_off[obj].SetLineColor(color) - - g_onl[obj] = TGraph(len(onl[obj])-1,onl[obj],onlrate[obj]); - g_onl[obj].SetMarkerColor(color) - g_onl[obj].SetMarkerStyle(20) - g_onl[obj].SetMarkerSize(1.2) - g_onl[obj].SetLineColor(color) - g_onl[obj].SetLineStyle(2) - - - if (obj==list_plot[0]): - h = TH1F("","",1,0.0,max(off[obj])*1.05) - #h = TH1F("","",1,10.0,max(off[obj])*1.05) - h.SetBinContent(1,0.0001) - h.SetMaximum(500000.0) - h.SetMinimum(1.0); - c1 = TCanvas("c1","",800,800) - c1.SetLeftMargin(0.11) #0.15 David - c1.SetLogy() - c1.SetGridx() - c1.SetGridy() - c1.SetTickx() - c1.SetTicky() - h.GetXaxis().SetTitle("Online or Offline p_{T} [GeV]") - h.GetYaxis().SetTitle("Rate [kHz]") - h.Draw("hist") - - g_onl[obj].Draw("lpsame") - g_off[obj].Draw("lpsame") - - if (obj==list_plot[0]): - leg = TLegend(0.45,0.65,0.85,0.85) - #leg = TLegend(0.35,0.55,0.85,0.85) - - leg.AddEntry(g_onl[obj],obj+" (Online)","lp") - leg.AddEntry(g_off[obj],obj+" (Offline)","lp") - - if (obj==list_plot[len(list_plot)-1]): - leg.Draw("same") - - color+=1 - - tex = TLatex() - tex.SetTextSize(0.03) - tex.DrawLatexNDC(0.11,0.91,"#scale[1.5]{CMS} Phase-2 Simulation") - tex.Draw("same") - - tex2 = TLatex() - tex2.SetTextSize(0.035) - tex2.SetTextAlign(31) - toDisplay = TString("#scale[0.8]{14 TeV, 7.5x10^{34}cm^{-2}s^{-1}, 200 PU}") - tex2.DrawLatexNDC(0.90,0.91,toDisplay.Data()) - tex2.Draw("same") - - - #c1.SaveAs("/afs/cern.ch/work/d/dsperka/www/private/L1/Mar25_v7p5p2/"+name+"_rate_vs_threshold.pdf") - #c1.SaveAs("/afs/cern.ch/work/d/dsperka/www/private/L1/Mar25_v7p5p2/"+name+"_rate_vs_threshold.png") - - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v7p5_Madrid_corr/"+name+"_rate_vs_threshold.pdf") - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v7p5_Madrid_corr/"+name+"_rate_vs_threshold.png") - - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v8p2_oldScalingEG/"+name+"_rate_vs_threshold.pdf") - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v8p2_oldScalingEG/"+name+"_rate_vs_threshold.png") - - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v8p2/"+name+"_rate_vs_threshold.pdf") - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v8p2/"+name+"_rate_vs_threshold.png") - - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v8p2_NewRelease/"+name+"_rate_vs_threshold.pdf") - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v8p2_NewRelease/"+name+"_rate_vs_threshold.png") - - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v9/"+name+"_rate_vs_threshold.pdf") - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v9/"+name+"_rate_vs_threshold.png") - - - c1.SaveAs(name+"_AnnualReview_caloCheck.pdf") - c1.SaveAs(name+"_AnnualReview_caloCheck.png") - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v10p7_ApprovalExt/"+name+"_rate_vs_threshold.pdf") - #c1.SaveAs("/afs/cern.ch/user/b/botta/www/L1Trigger/TDR/v10p7_ApprovalExt/"+name+"_rate_vs_threshold.png") - - - - - - - - - diff --git a/rates/plots/ratePlots_v29.py b/rates/plots/ratePlots_v29.py deleted file mode 100644 index 18e05992..00000000 --- a/rates/plots/ratePlots_v29.py +++ /dev/null @@ -1,246 +0,0 @@ -import sys, os -import argparse - -# set BATCH mode for ROOT -#sys.argv.append( '-b' ) -import ROOT -ROOT.gROOT.SetBatch(True) - -from ROOT import * -from array import * - -import time -timestr = time.strftime("%Y%m%d") - -parser = argparse.ArgumentParser() -parser.add_argument("--outdir", default="~/eoswww/L1T/Phase2/menu/rates/test_125x/", help="Choose the output directory. Default='%(default)s'") -parser.add_argument("--indir", default="testOutput", help="Choose the input directory. Default='%(default)s'") -parser.add_argument("--online", dest='runOnline', action='store_true') -parser.add_argument("--tag", default="", help="Choose tag for the legend. Default='%(default)s'") -parser.add_argument('-b',"--batch", dest='batch', action='store_true') - - -args = parser.parse_args() - -runOnline = args.runOnline - -outDir = args.outdir -inDir = args.indir -tag = args.tag - -if not os.path.isdir(inDir): - print("The input directory doesn't exist!") - exit() - -outPath = outDir+"/"+inDir+"_"+timestr -if not os.path.isdir(outPath): - print("The out directory doesn't exist, creating it!") - os.mkdir(outPath) - command='cp '+outDir+'/index.php '+outPath - print command - os.system(command) - -sys.path.append(inDir) -from rates import * - -gStyle.SetOptStat(0) -TAxis().SetMoreLogLabels(1) - -#runOnline = False - -#off = {} -#offrate = {} -#onl = {} -#onlrate = {} - -g_off = {} -g_onl = {} - -h = {} - - -plots = { - #0: ['standaloneMuonBarrel', 'standaloneMuonOverlap', 'standaloneMuonEndcap'] - ##0 : ['gmtMuonBarrel', 'gmtMuonOverlap', 'gmtMuonEndcap'], - 0 : ['standaloneElectron', 'tkElectron', 'tkIsoElectron', 'tkPhotonIso'], - 1 : ['trackerJet', 'puppiPhase1Jet', 'seededConePuppiJet'], - #9 : ['trackerJet', 'puppiPhase1Jet', 'seededConePuppiJet'], - 2 : ['puppiPhase1JetExt', 'seededConePuppiJetExt'], - 10 : ['puppiPhase1JetExt', 'seededConePuppiJetExt'], - 3 : ['puppiPhase1HT', 'trackerHT', 'seededConePuppiHT'], - #4 : ['puppiPhase1HT', 'trackerHT'], - #5 : ['puppiPhase1MHT', 'trackerMHT'], - 6 : ['puppiMET', 'trackerMET'], #'trackerMET_FBE'], - 7: ['puppiMET'], - 9: ['trackerMET'], - #7 : ['standaloneMuon', 'tkMuon', 'tkMuonStub'], - 8 : ['gmtMuon', 'gmtTkMuon'], - 11 : ['CaloTau', 'NNPuppiTauLoose'], #, 'NNPuppiTau2vtxLoose'], - 12: ['CaloTau','CaloTauBarrel','CaloTauEndcap'], - 14: ['NNPuppiTauLoose','NNPuppiTauLooseBarrel','NNPuppiTauLooseEndcap'], - 15: ['CaloTau','CaloTauBarrel','CaloTauEndcap','NNPuppiTauLoose','NNPuppiTauLooseBarrel','NNPuppiTauLooseEndcap'], - 100: ["seededConePuppiJet_Barrel","seededConePuppiJet_Endcap"], - 101: ["puppiPhase1Jet_Barrel","puppiPhase1Jet_Endcap"], - 102: ["seededConePuppiJet_Barrel","seededConePuppiJet_Endcap","puppiPhase1Jet_Barrel","puppiPhase1Jet_Endcap"], - #100: ["seededConePuppiJet_Barrel","seededConePuppiJet_Endcap"] -} - -labels = { - 'standaloneElectron' : 'calorimeter-only electron', - 'tkElectron' : 'track-matched electron', - 'tkIsoElectron' : 'track-matched + charged iso. electron', - 'tkPhotonIso' : 'charged iso. photon', - 'standaloneMuon' : 'standalone muon', - 'tkMuon' : 'track-matched muon (tkMuon)', - 'tkMuonStub' : 'track-matched muon (tkMuonStub)', - 'trackerJet' : 'tracker jet', - 'caloJet' : 'calo jet', - 'puppiPhase1Jet' : 'histogr. puppi jet', - 'seededConePuppiJet' : 'seeded cone puppi jet', - 'seededConePuppiJet_Barrel': 'seeded cone puppi jet, barrel', - 'seededConePuppiJet_Endcap': 'seeded cone puppi jet, endcap', - 'caloJetExt' : 'calo jet (|#eta|<5)', - 'puppiPhase1JetExt' : 'histogr. puppi jet (|#eta|<5)', - 'puppiPhase1Jet_Barrel': 'histogr. puppi jet, barrel', - 'puppiPhase1Jet_Endcap': 'histogr. puppi jet, endcap', - 'seededConePuppiJetExt' : 'seeded cone puppi jet (|#eta|<5)', - 'puppiPhase1HT' : 'histogr. puppi jets H_{T}', - 'trackerHT' : 'tracker H_{T}', - 'caloHT' : 'calo H_{T}', - 'seededConePuppiHT' : 'seeded cone H_{T}', - 'puppiPhase1MHT' : 'histogr. puppi jets #slash{H}_{T}', - 'trackerMHT' : 'tracker #slash{H}_{T}', - 'puppiMET' : 'puppi #slash{E}_{T}', - 'trackerMET' : 'tracker #slash{E}_{T}', - 'gmtMuon' : 'GMT standalone muon', - 'gmtTkMuon' : 'GMT track-matched muon', - 'CaloTau' : 'calo tau', - 'CaloTauEndcap' : 'calo tau, endcap', - 'CaloTauBarrel' : 'calo tau, barrel', - 'NNPuppiTauLoose' : 'nnPuppi tau', - 'NNPuppiTauLooseBarrel' : 'nnPuppi tau, barrel', - 'NNPuppiTauLooseEndcap' : 'nnPuppi tau, endcap', - 'NNPuppiTau2vtxLoose' : 'nnPuppi tau (loose WP, 2vtx)', -} - - -for key,list_plot in plots.iteritems(): - name='' - color=0 - label='' - for obj in list_plot: - -# print obj - name+=obj+'_' - - color+=1 - - if "JetExt" in obj and obj==list_plot[0]: - color+=1 - if (color==3): color+=1 - if (color==5): color+=1 - if (color==10): color+=1 - - if (obj==list_plot[0]): - maxVal = 10e5 - minVal = 0 - print(obj) - if runOnline==False and (obj in off): - maxVal = max(off[obj]) - minVal = min(off[obj]) - elif runOnline==True and (obj in onl): - maxVal = max(onl[obj]) - minVal = min(onl[obj]) - if "MHT" in obj: - maxVal = 340 - h = TH1F("","",1,minVal,maxVal*1.05) - #h = TH1F("","",1,10.0,max(onl[obj])*1.05) - h.SetBinContent(1,0.0001) - if "MHT" in obj: - h.SetMaximum(10000) - else: - h.SetMaximum(500000.0) - h.SetMinimum(1.0); - c1 = TCanvas("c1","",800,800) - c1.SetLeftMargin(0.11) #0.15 David - c1.SetLogy() - c1.SetGridx() - c1.SetGridy() - c1.SetTickx() - c1.SetTicky() - if runOnline == True: - h.GetXaxis().SetTitle("Online p_{T} [GeV]") - else: - h.GetXaxis().SetTitle("Offline p_{T} [GeV]") - h.GetYaxis().SetTitle("Rate [kHz]") - h.Draw("hist") - - leg = TLegend(0.35,0.65,0.85,0.85) - if tag: - leg.SetHeader(tag,"C"); - - if (obj==list_plot[len(list_plot)-1]): - leg.Draw("same") - - if (obj in off): - g_off[obj]= TGraph(len(off[obj])-1,off[obj],offrate[obj]) - - g_off[obj].SetMarkerColor(color) - g_off[obj].SetLineColor(color) - - g_off[obj].SetMarkerStyle(20) - g_off[obj].SetMarkerSize(1.2) - - elif runOnline == False: - continue - - if (obj in onl): - g_onl[obj]= TGraph(len(onl[obj])-1,onl[obj],onlrate[obj]) - - g_onl[obj].SetMarkerColor(color) - g_onl[obj].SetLineColor(color) - - g_onl[obj].SetMarkerStyle(20) - g_onl[obj].SetMarkerSize(1.2) - - - elif runOnline == True: - - continue - - - if runOnline == True: - g_onl[obj].Draw("lpsame") - else: - g_off[obj].Draw("lpsame") - - - if obj in labels: - label = labels[obj] - else: - label = obj - - if runOnline == True: - leg.AddEntry(g_onl[obj],label,"lp") - else: - leg.AddEntry(g_off[obj],label,"lp") - - - tex = TLatex() - tex.SetTextSize(0.03) - tex.DrawLatexNDC(0.11,0.91,"#scale[1.5]{CMS} Phase-2 Simulation") - tex.Draw("same") - - tex2 = TLatex() - tex2.SetTextSize(0.035) - tex2.SetTextAlign(31) - toDisplay = TString("#scale[0.8]{14 TeV, 7.5x10^{34}cm^{-2}s^{-1}, 200 PU}") - tex2.DrawLatexNDC(0.90,0.91,toDisplay.Data()) - tex2.Draw("same") - - if runOnline == True: - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_onl.pdf") - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_onl.png") - else: - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_off.pdf") - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_off.png") \ No newline at end of file diff --git a/rates/plots/ratePlots_validation123x.py b/rates/plots/ratePlots_validation123x.py deleted file mode 100644 index 871738ca..00000000 --- a/rates/plots/ratePlots_validation123x.py +++ /dev/null @@ -1,232 +0,0 @@ -import sys, os -import argparse - -from ROOT import * -gROOT.SetBatch(True) -from array import * - -import time -timestr = time.strftime("%Y%m%d") - -parser = argparse.ArgumentParser() -parser.add_argument("--outdir", default="/eos/user/j/jheikkil/www/", help="Choose the output directory. Default='%(default)s'") -parser.add_argument("--indir", default="testOutput", help="Choose the input directory. Default='%(default)s'") -parser.add_argument("--online", dest='runOnline', action='store_true') -parser.add_argument("--tag", default="", help="Choose tag for the legend. Default='%(default)s'") -parser.add_argument('-b',"--batch", dest='batch', action='store_true') - - -args = parser.parse_args() - -runOnline = args.runOnline - -outDir = args.outdir -inDir = args.indir -tag = args.tag - -if not os.path.isdir(inDir): - print("The input directory doesn't exist!") - exit() - -outPath = outDir+"/"+inDir+"_"+timestr -if not os.path.isdir(outPath): - print("The out directory doesn't exist, creating it!") - os.mkdir(outPath) - command='cp '+outDir+'/index.php '+outPath - print command - os.system(command) - -sys.path.append(inDir) -from rates import * - -gStyle.SetOptStat(0) -TAxis().SetMoreLogLabels(1) - -#runOnline = False - -#off = {} -#offrate = {} -#onl = {} -#onlrate = {} - -g_off = {} -g_onl = {} - -h = {} - - -plots = { - - # #0: ['standaloneMuonBarrel', 'standaloneMuonOverlap', 'standaloneMuonEndcap'] - # ##0 : ['gmtMuonBarrel', 'gmtMuonOverlap', 'gmtMuonEndcap'], - # 0 : ['standaloneElectron', 'tkElectron', 'tkIsoElectron', 'tkPhotonIso'], - # 1 : ['trackerJet', 'puppiPhase1Jet', 'seededConePuppiJet', 'caloJet'], - # #9 : ['trackerJet', 'puppiPhase1Jet', 'seededConePuppiJet'], - # 2 : ['puppiPhase1JetExt', 'seededConePuppiJetExt', 'caloJetExt'], - # 10 : ['puppiPhase1JetExt', 'seededConePuppiJetExt'], - # 3 : ['puppiPhase1HT', 'trackerHT', 'caloHT'], - # #4 : ['puppiPhase1HT', 'trackerHT'], - # #5 : ['puppiPhase1MHT', 'trackerMHT'], - # 6 : ['puppiMET', 'trackerMET'], #'trackerMET_FBE'], - # 6 : ['trackerMET'], - # #7 : ['standaloneMuon', 'tkMuon', 'tkMuonStub'], - # 8 : ['gmtMuon', 'gmtTkMuon'], - # 11 : ['CaloTau', 'NNPuppiTauLoose'], #, 'NNPuppiTau2vtxLoose'], - #12: ['CaloTau','CaloTauBarrel','CaloTauEndcap'] - - 15: ['CaloTau','CaloTauBarrel','CaloTauEndcap','NNPuppiTauLoose'] -} - -labels = { - -'standaloneElectron' : 'calorimeter-only electron', -'tkElectron' : 'track-matched electron', -'tkIsoElectron' : 'track-matched + charged iso. electron', -'tkPhotonIso' : 'charged iso. photon', -'standaloneMuon' : 'standalone muon', -'tkMuon' : 'track-matched muon (tkMuon)', -'tkMuonStub' : 'track-matched muon (tkMuonStub)', -'trackerJet' : 'tracker jet', -'caloJet' : 'calo jet', -'puppiPhase1Jet' : 'histogr. puppi jet', -'seededConePuppiJet' : 'seeded cone puppi jet', -'caloJetExt' : 'calo jet (|#eta|<5)', -'puppiPhase1JetExt' : 'histogr. puppi jet (|#eta|<5)', -'seededConePuppiJetExt' : 'seeded cone puppi jet (|#eta|<5)', -'puppiPhase1HT' : 'histogr. puppi jets H_{T}', -'trackerHT' : 'tracker H_{T}', -'caloHT' : 'calo H_{T}', -'puppiPhase1MHT' : 'histogr. puppi jets #slash{H}_{T}', -'trackerMHT' : 'tracker #slash{H}_{T}', -'puppiMET' : 'puppi #slash{E}_{T}', -'trackerMET' : 'tracker #slash{E}_{T}', -'gmtMuon' : 'GMT standalone muon', -'gmtTkMuon' : 'GMT track-matched muon', -'CaloTau' : 'calo tau', -'CaloTauEndcap' : 'calo tau, endcap', -'CaloTauBarrel' : 'calo tau, barrel', -'NNPuppiTauLoose' : 'nnPuppi tau (loose WP)', -'NNPuppiTau2vtxLoose' : 'nnPuppi tau (loose WP, 2vtx)', - -} - - -for key,list_plot in plots.iteritems(): - name='' - color=0 - label='' - for obj in list_plot: - -# print obj - name+=obj+'_' - - color+=1 - - if "JetExt" in obj and obj==list_plot[0]: - color+=1 - if (color==3): color+=1 - if (color==5): color+=1 - if (color==10): color+=1 - - if (obj==list_plot[0]): - maxVal = 200 - minVal = 0 - if runOnline==False and (obj in off): - maxVal = max(off[obj]) - minVal = min(off[obj]) - elif runOnline==True and (obj in onl): - maxVal = max(onl[obj]) - minVal = min(onl[obj]) - if "MHT" in obj: - maxVal = 340 - h = TH1F("","",1,minVal,maxVal*1.05) - #h = TH1F("","",1,10.0,max(onl[obj])*1.05) - h.SetBinContent(1,0.0001) - if "MHT" in obj: - h.SetMaximum(10000) - else: - h.SetMaximum(500000.0) - h.SetMinimum(1.0); - c1 = TCanvas("c1","",800,800) - c1.SetLeftMargin(0.11) #0.15 David - c1.SetLogy() - c1.SetGridx() - c1.SetGridy() - c1.SetTickx() - c1.SetTicky() - if runOnline == True: - h.GetXaxis().SetTitle("Online p_{T} [GeV]") - else: - h.GetXaxis().SetTitle("Offline p_{T} [GeV]") - h.GetYaxis().SetTitle("Rate [kHz]") - h.Draw("hist") - - leg = TLegend(0.35,0.65,0.85,0.85) - if tag: - leg.SetHeader(tag,"C"); - - if (obj==list_plot[len(list_plot)-1]): - leg.Draw("same") - - if (obj in off): - g_off[obj]= TGraph(len(off[obj])-1,off[obj],offrate[obj]) - - g_off[obj].SetMarkerColor(color) - g_off[obj].SetLineColor(color) - - g_off[obj].SetMarkerStyle(20) - g_off[obj].SetMarkerSize(1.2) - - elif runOnline == False: - continue - - if (obj in onl): - g_onl[obj]= TGraph(len(onl[obj])-1,onl[obj],onlrate[obj]) - - g_onl[obj].SetMarkerColor(color) - g_onl[obj].SetLineColor(color) - - g_onl[obj].SetMarkerStyle(20) - g_onl[obj].SetMarkerSize(1.2) - - - elif runOnline == True: - - continue - - - if runOnline == True: - g_onl[obj].Draw("lpsame") - else: - g_off[obj].Draw("lpsame") - - - if obj in labels: - label = labels[obj] - else: - label = obj - - if runOnline == True: - leg.AddEntry(g_onl[obj],label,"lp") - else: - leg.AddEntry(g_off[obj],label,"lp") - - - tex = TLatex() - tex.SetTextSize(0.03) - tex.DrawLatexNDC(0.11,0.91,"#scale[1.5]{CMS} Phase-2 Simulation") - tex.Draw("same") - - tex2 = TLatex() - tex2.SetTextSize(0.035) - tex2.SetTextAlign(31) - toDisplay = TString("#scale[0.8]{14 TeV, 7.5x10^{34}cm^{-2}s^{-1}, 200 PU}") - tex2.DrawLatexNDC(0.90,0.91,toDisplay.Data()) - tex2.Draw("same") - - if runOnline == True: - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_onl.pdf") - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_onl.png") - else: - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_off.pdf") - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_off.png") diff --git a/rates/plots/ratePlots_validation125x.py b/rates/plots/ratePlots_validation125x.py deleted file mode 100644 index b486a43f..00000000 --- a/rates/plots/ratePlots_validation125x.py +++ /dev/null @@ -1,237 +0,0 @@ -import sys, os -import argparse - -# set BATCH mode for ROOT -#sys.argv.append( '-b' ) -import ROOT -ROOT.gROOT.SetBatch(True) - -from ROOT import * -from array import * - -import time -timestr = time.strftime("%Y%m%d") - -parser = argparse.ArgumentParser() -parser.add_argument("--outdir", default="~/eoswww/L1T/Phase2/menu/rates/test_125x/", help="Choose the output directory. Default='%(default)s'") -parser.add_argument("--indir", default="testOutput", help="Choose the input directory. Default='%(default)s'") -parser.add_argument("--online", dest='runOnline', action='store_true') -parser.add_argument("--tag", default="", help="Choose tag for the legend. Default='%(default)s'") -parser.add_argument('-b',"--batch", dest='batch', action='store_true') - - -args = parser.parse_args() - -runOnline = args.runOnline - -outDir = args.outdir -inDir = args.indir -tag = args.tag - -if not os.path.isdir(inDir): - print("The input directory doesn't exist!") - exit() - -outPath = outDir+"/"+inDir+"_"+timestr -if not os.path.isdir(outPath): - print("The out directory doesn't exist, creating it!") - os.mkdir(outPath) - command='cp '+outDir+'/index.php '+outPath - print command - os.system(command) - -sys.path.append(inDir) -from rates import * - -gStyle.SetOptStat(0) -TAxis().SetMoreLogLabels(1) - -#runOnline = False - -#off = {} -#offrate = {} -#onl = {} -#onlrate = {} - -g_off = {} -g_onl = {} - -h = {} - - -plots = { - # #0: ['standaloneMuonBarrel', 'standaloneMuonOverlap', 'standaloneMuonEndcap'] - # ##0 : ['gmtMuonBarrel', 'gmtMuonOverlap', 'gmtMuonEndcap'], - # 0 : ['standaloneElectron', 'tkElectron', 'tkIsoElectron', 'tkPhotonIso'], - # 1 : ['trackerJet', 'puppiPhase1Jet', 'seededConePuppiJet', 'caloJet'], - # #9 : ['trackerJet', 'puppiPhase1Jet', 'seededConePuppiJet'], - # 2 : ['puppiPhase1JetExt', 'seededConePuppiJetExt', 'caloJetExt'], - # 10 : ['puppiPhase1JetExt', 'seededConePuppiJetExt'], - # 3 : ['puppiPhase1HT', 'trackerHT', 'caloHT'], - # #4 : ['puppiPhase1HT', 'trackerHT'], - # #5 : ['puppiPhase1MHT', 'trackerMHT'], - # 6 : ['puppiMET', 'trackerMET'], #'trackerMET_FBE'], - # 6 : ['trackerMET'], - # #7 : ['standaloneMuon', 'tkMuon', 'tkMuonStub'], - # 8 : ['gmtMuon', 'gmtTkMuon'], - # 11 : ['CaloTau', 'NNPuppiTauLoose'], #, 'NNPuppiTau2vtxLoose'], - # 12: ['CaloTau','CaloTauBarrel','CaloTauEndcap'] - #15: ['CaloTau','CaloTauBarrel','CaloTauEndcap','NNPuppiTauLoose'] - 100: ["seededConePuppiJet_Barrel","seededConePuppiJet_Endcap"], - 101: ["puppiPhase1Jet_Barrel","puppiPhase1Jet_Endcap"], - 102: ["seededConePuppiJet_Barrel","seededConePuppiJet_Endcap","puppiPhase1Jet_Barrel","puppiPhase1Jet_Endcap"], - #100: ["seededConePuppiJet_Barrel","seededConePuppiJet_Endcap"] -} - -labels = { - 'standaloneElectron' : 'calorimeter-only electron', - 'tkElectron' : 'track-matched electron', - 'tkIsoElectron' : 'track-matched + charged iso. electron', - 'tkPhotonIso' : 'charged iso. photon', - 'standaloneMuon' : 'standalone muon', - 'tkMuon' : 'track-matched muon (tkMuon)', - 'tkMuonStub' : 'track-matched muon (tkMuonStub)', - 'trackerJet' : 'tracker jet', - 'caloJet' : 'calo jet', - 'puppiPhase1Jet' : 'histogr. puppi jet', - 'seededConePuppiJet' : 'seeded cone puppi jet', - 'caloJetExt' : 'calo jet (|#eta|<5)', - 'puppiPhase1JetExt' : 'histogr. puppi jet (|#eta|<5)', - 'seededConePuppiJetExt' : 'seeded cone puppi jet (|#eta|<5)', - 'puppiPhase1HT' : 'histogr. puppi jets H_{T}', - 'trackerHT' : 'tracker H_{T}', - 'caloHT' : 'calo H_{T}', - 'puppiPhase1MHT' : 'histogr. puppi jets #slash{H}_{T}', - 'trackerMHT' : 'tracker #slash{H}_{T}', - 'puppiMET' : 'puppi #slash{E}_{T}', - 'trackerMET' : 'tracker #slash{E}_{T}', - 'gmtMuon' : 'GMT standalone muon', - 'gmtTkMuon' : 'GMT track-matched muon', - 'CaloTau' : 'calo tau', - 'CaloTauEndcap' : 'calo tau, endcap', - 'CaloTauBarrel' : 'calo tau, barrel', - 'NNPuppiTauLoose' : 'nnPuppi tau (loose WP)', - 'NNPuppiTau2vtxLoose' : 'nnPuppi tau (loose WP, 2vtx)', -} - - -for key,list_plot in plots.iteritems(): - name='' - color=0 - label='' - for obj in list_plot: - -# print obj - name+=obj+'_' - - color+=1 - - if "JetExt" in obj and obj==list_plot[0]: - color+=1 - if (color==3): color+=1 - if (color==5): color+=1 - if (color==10): color+=1 - - if (obj==list_plot[0]): - maxVal = 10e5 - minVal = 0 - print(obj) - if runOnline==False and (obj in off): - maxVal = max(off[obj]) - minVal = min(off[obj]) - elif runOnline==True and (obj in onl): - maxVal = max(onl[obj]) - minVal = min(onl[obj]) - if "MHT" in obj: - maxVal = 340 - h = TH1F("","",1,minVal,maxVal*1.05) - #h = TH1F("","",1,10.0,max(onl[obj])*1.05) - h.SetBinContent(1,0.0001) - if "MHT" in obj: - h.SetMaximum(10000) - else: - h.SetMaximum(500000.0) - h.SetMinimum(1.0); - c1 = TCanvas("c1","",800,800) - c1.SetLeftMargin(0.11) #0.15 David - c1.SetLogy() - c1.SetGridx() - c1.SetGridy() - c1.SetTickx() - c1.SetTicky() - if runOnline == True: - h.GetXaxis().SetTitle("Online p_{T} [GeV]") - else: - h.GetXaxis().SetTitle("Offline p_{T} [GeV]") - h.GetYaxis().SetTitle("Rate [kHz]") - h.Draw("hist") - - leg = TLegend(0.35,0.65,0.85,0.85) - if tag: - leg.SetHeader(tag,"C"); - - if (obj==list_plot[len(list_plot)-1]): - leg.Draw("same") - - if (obj in off): - g_off[obj]= TGraph(len(off[obj])-1,off[obj],offrate[obj]) - - g_off[obj].SetMarkerColor(color) - g_off[obj].SetLineColor(color) - - g_off[obj].SetMarkerStyle(20) - g_off[obj].SetMarkerSize(1.2) - - elif runOnline == False: - continue - - if (obj in onl): - g_onl[obj]= TGraph(len(onl[obj])-1,onl[obj],onlrate[obj]) - - g_onl[obj].SetMarkerColor(color) - g_onl[obj].SetLineColor(color) - - g_onl[obj].SetMarkerStyle(20) - g_onl[obj].SetMarkerSize(1.2) - - - elif runOnline == True: - - continue - - - if runOnline == True: - g_onl[obj].Draw("lpsame") - else: - g_off[obj].Draw("lpsame") - - - if obj in labels: - label = labels[obj] - else: - label = obj - - if runOnline == True: - leg.AddEntry(g_onl[obj],label,"lp") - else: - leg.AddEntry(g_off[obj],label,"lp") - - - tex = TLatex() - tex.SetTextSize(0.03) - tex.DrawLatexNDC(0.11,0.91,"#scale[1.5]{CMS} Phase-2 Simulation") - tex.Draw("same") - - tex2 = TLatex() - tex2.SetTextSize(0.035) - tex2.SetTextAlign(31) - toDisplay = TString("#scale[0.8]{14 TeV, 7.5x10^{34}cm^{-2}s^{-1}, 200 PU}") - tex2.DrawLatexNDC(0.90,0.91,toDisplay.Data()) - tex2.Draw("same") - - if runOnline == True: - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_onl.pdf") - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_onl.png") - else: - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_off.pdf") - c1.SaveAs(outPath+"/"+name+"_rate_vs_threshold_test_off.png") diff --git a/rates/plots/ratesEmu_123x_2/rates.py b/rates/plots/ratesEmu_123x_2/rates.py deleted file mode 100644 index f01ba4ac..00000000 --- a/rates/plots/ratesEmu_123x_2/rates.py +++ /dev/null @@ -1,118 +0,0 @@ -from array import * - -off = {} -offrate = {} -onl = {} -onlrate = {} - -off['CaloTauBarrel'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['CaloTauBarrel'] = array('d', [27779.7, 26858.8, 23279.4, 16272.4, 9260.1, 5116.1, 2846.2, 1717.6, 1091.5, 739.1, 531.7, 394.3, 296.3, 228.7, 181.5, 147.2, 120.6, 100.2, 82.4, 69.5, 58.2, 49.7, 43.8, 37.9, 33.0, 28.4, 24.6, 21.2, 18.9, 17.3]) -onl['CaloTauBarrel'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['CaloTauBarrel'] = array('d', [27804.7, 26474.3, 18502.3, 8215.0, 3344.5, 1538.6, 815.4, 490.6, 317.0, 214.8, 154.0, 114.9, 85.4, 66.1, 51.2, 41.9, 33.6, 26.8, 21.7, 18.3, 15.9, 13.1, 11.0, 9.8, 8.6, 7.4, 6.4, 5.2, 4.4, 3.9]) - -off['CaloTauEndcap'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['CaloTauEndcap'] = array('d', [31038.0, 31038.0, 31037.8, 31025.1, 30771.8, 29272.3, 24694.8, 17851.0, 10852.4, 6188.5, 3184.0, 1841.3, 1027.7, 644.5, 441.2, 315.1, 239.1, 184.9, 147.6, 118.7, 97.3, 80.4, 68.9, 58.6, 48.8, 40.7, 35.5, 30.7, 26.3, 23.0]) -onl['CaloTauEndcap'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['CaloTauEndcap'] = array('d', [31038.0, 31035.8, 30345.6, 22404.9, 9208.7, 2820.0, 990.8, 443.5, 245.1, 154.1, 103.6, 73.9, 54.5, 38.8, 29.4, 22.4, 16.5, 12.4, 9.6, 7.5, 6.4, 5.4, 4.3, 3.7, 3.2, 2.8, 2.3, 2.1, 1.7, 1.4]) - - -off['gmtTkMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0]) -offrate['gmtTkMuon'] = array('d', [28932.5, 28163.2, 3922.6, 364.0, 110.3, 47.7, 26.5, 17.8, 12.0, 8.5, 6.4, 5.4, 4.7, 3.8, 3.5, 3.4, 2.9, 2.4, 2.2, 2.1, 2.0, 2.0, 1.8, 1.7, 1.6, 1.6]) -onl['gmtTkMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0]) -onlrate['gmtTkMuon'] = array('d', [28932.5, 17724.6, 1754.9, 202.9, 73.1, 33.6, 20.3, 13.8, 9.5, 6.8, 6.0, 5.1, 4.0, 3.5, 3.4, 2.9, 2.4, 2.2, 2.1, 2.0, 2.0, 1.8, 1.7, 1.6, 1.6, 1.5]) - -off['gmtMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0]) -offrate['gmtMuon'] = array('d', [10651.9, 10651.9, 10434.8, 9349.3, 1519.7, 443.7, 231.5, 124.7, 84.9, 64.4, 54.4, 43.7, 38.5, 31.7, 27.3, 24.2, 21.1, 19.4, 17.1, 16.0, 14.6, 13.4, 12.3, 11.6, 11.3, 10.5]) -onl['gmtMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0]) -onlrate['gmtMuon'] = array('d', [10651.9, 5450.0, 1260.6, 482.8, 233.2, 137.6, 90.8, 70.2, 57.9, 46.9, 38.5, 34.5, 29.2, 25.5, 22.7, 20.2, 18.7, 16.6, 15.6, 14.6, 13.6, 12.9, 12.0, 11.1, 10.5, 9.9]) - -off['tkElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -offrate['tkElectron'] = array('d', [851.2, 548.8, 331.9, 181.5, 122.1, 84.3, 59.8, 43.7, 34.2, 27.7, 22.4, 17.5, 14.3, 11.8, 9.9, 8.1, 6.6, 5.6, 4.6, 3.9, 3.1, 2.9, 2.5, 2.3, 2.1, 1.8, 1.6, 1.5, 1.4, 1.4]) -onl['tkElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -onlrate['tkElectron'] = array('d', [573.8, 324.0, 157.2, 98.1, 66.2, 44.0, 32.5, 25.8, 19.1, 14.8, 11.6, 9.2, 7.4, 5.8, 4.8, 3.7, 3.1, 2.6, 2.4, 2.1, 1.8, 1.5, 1.4, 1.4, 1.3, 1.2, 1.1, 1.1, 1.0, 1.0]) - -off['tkIsoElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -offrate['tkIsoElectron'] = array('d', [433.9, 277.7, 172.0, 94.2, 62.9, 44.6, 32.2, 23.8, 19.5, 16.7, 14.1, 11.5, 9.6, 8.4, 7.1, 6.1, 5.3, 4.3, 3.3, 2.8, 2.5, 2.3, 2.1, 2.0, 1.8, 1.7, 1.5, 1.3, 1.2, 1.1]) -onl['tkIsoElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -onlrate['tkIsoElectron'] = array('d', [299.8, 162.2, 80.0, 51.7, 34.8, 23.7, 18.8, 15.6, 12.1, 9.9, 8.2, 6.7, 5.5, 4.3, 3.2, 2.7, 2.4, 2.2, 2.0, 1.8, 1.6, 1.3, 1.3, 1.1, 1.0, 0.9, 0.8, 0.8, 0.7, 0.6]) - -off['standaloneElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -offrate['standaloneElectron'] = array('d', [13063.0, 5900.0, 2882.6, 1468.9, 696.8, 414.3, 263.4, 165.3, 114.5, 84.4, 64.4, 47.0, 36.4, 29.0, 23.5, 18.6, 15.5, 12.8, 10.2, 8.4, 6.9, 6.1, 5.1, 4.3, 3.9, 3.3, 2.7, 2.4, 2.3, 2.1]) -onl['standaloneElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -onlrate['standaloneElectron'] = array('d', [3909.0, 1726.4, 705.7, 388.5, 232.4, 136.4, 92.8, 66.7, 45.9, 34.1, 26.5, 20.6, 15.9, 12.5, 9.8, 7.8, 6.5, 5.4, 4.4, 3.6, 3.3, 2.5, 2.2, 2.2, 2.0, 1.8, 1.7, 1.5, 1.4, 1.4]) - -off['tkPhotonIso'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -offrate['tkPhotonIso'] = array('d', [2340.8, 1310.0, 732.3, 354.0, 200.2, 128.1, 82.1, 59.9, 44.9, 34.6, 26.1, 21.6, 17.7, 14.5, 12.3, 10.6, 8.5, 6.8, 5.8, 4.9, 4.3, 3.5, 3.0, 2.7, 2.2, 1.9, 1.8, 1.8, 1.6, 1.6]) -onl['tkPhotonIso'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -onlrate['tkPhotonIso'] = array('d', [1075.6, 522.3, 238.8, 147.6, 97.2, 63.7, 46.3, 34.8, 25.4, 20.8, 16.8, 13.8, 11.5, 9.5, 7.5, 6.1, 5.1, 4.6, 3.5, 2.9, 2.7, 2.1, 1.9, 1.8, 1.7, 1.6, 1.5, 1.3, 1.2, 1.2]) - -off['seededConePuppiJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['seededConePuppiJet'] = array('d', [30655.4, 9669.9, 2710.2, 1016.4, 470.7, 239.3, 135.2, 79.2, 48.6, 30.4, 20.9, 14.3, 10.3, 7.4, 5.6, 4.4, 3.4, 2.5, 2.0, 1.8]) -onl['seededConePuppiJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['seededConePuppiJet'] = array('d', [3620.8, 1007.5, 374.5, 165.2, 82.3, 42.9, 24.1, 14.7, 9.3, 6.1, 4.4, 3.1, 2.3, 1.6, 1.5, 1.1, 1.0, 0.8, 0.6, 0.5]) - -off['seededConePuppiJetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['seededConePuppiJetExt'] = array('d', [30750.3, 12886.4, 5099.8, 1977.7, 836.8, 371.0, 189.0, 104.7, 61.7, 38.0, 25.3, 17.1, 12.1, 8.4, 6.2, 4.7, 3.7, 2.8, 2.1, 1.9]) -onl['seededConePuppiJetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['seededConePuppiJetExt'] = array('d', [4475.8, 1316.2, 472.8, 203.3, 99.9, 52.0, 29.1, 17.7, 11.1, 7.0, 4.9, 3.4, 2.5, 1.8, 1.6, 1.2, 1.1, 0.8, 0.6, 0.5]) - -off['puppiPhase1Jet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['puppiPhase1Jet'] = array('d', [17614.7, 6262.8, 2267.2, 959.4, 441.1, 225.3, 125.4, 73.1, 44.8, 28.0, 19.1, 12.7, 9.4, 6.4, 5.0, 3.8, 3.1, 2.6, 2.0, 1.5]) -onl['puppiPhase1Jet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['puppiPhase1Jet'] = array('d', [3611.9, 1045.5, 384.4, 162.3, 77.9, 41.1, 22.9, 13.4, 8.6, 5.5, 4.0, 3.0, 2.3, 1.6, 1.3, 1.0, 0.8, 0.5, 0.3, 0.2]) - -off['puppiPhase1JetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['puppiPhase1JetExt'] = array('d', [19939.7, 9202.9, 4141.3, 1951.4, 910.5, 466.0, 246.6, 131.6, 76.5, 46.7, 30.0, 19.1, 13.5, 9.0, 6.7, 5.0, 3.8, 3.0, 2.2, 1.7]) -onl['puppiPhase1JetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['puppiPhase1JetExt'] = array('d', [4595.0, 1403.6, 512.6, 207.4, 97.9, 50.2, 27.2, 15.6, 9.6, 5.9, 4.2, 3.1, 2.4, 1.7, 1.3, 1.0, 0.8, 0.5, 0.3, 0.2]) - -off['trackerJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['trackerJet'] = array('d', [16309.8, 12150.3, 9076.2, 6927.7, 5449.0, 4296.2, 3425.4, 2779.1, 2265.1, 1855.5, 1540.8, 1278.0, 1068.3, 904.2, 766.8, 650.3, 558.2, 478.4, 413.6, 362.8]) -onl['trackerJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['trackerJet'] = array('d', [443.5, 107.4, 37.3, 17.3, 10.5, 3.2, 1.6, 0.9, 0.4, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) - -off['puppiPhase1HT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -offrate['puppiPhase1HT'] = array('d', [6971.6, 6971.6, 2865.9, 1694.0, 958.9, 560.3, 339.6, 213.1, 138.8, 94.6, 66.0, 47.1, 34.8, 25.8, 19.7, 15.4, 11.1, 7.9, 6.2, 5.0, 4.3, 3.9, 3.2, 2.6, 2.0, 1.7, 1.5, 1.2, 1.2, 1.1, 0.9, 0.8, 0.8, 0.6, 0.6, 0.6, 0.5, 0.4]) -onl['puppiPhase1HT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -onlrate['puppiPhase1HT'] = array('d', [2626.4, 1508.6, 803.7, 445.5, 261.2, 159.6, 102.5, 68.7, 47.0, 33.6, 24.1, 18.3, 13.2, 9.1, 6.7, 5.2, 4.4, 3.8, 3.2, 2.4, 1.9, 1.6, 1.3, 1.2, 1.1, 0.9, 0.8, 0.7, 0.6, 0.6, 0.5, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4]) - -off['trackerHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -offrate['trackerHT'] = array('d', [21540.0, 16010.3, 10825.1, 7071.5, 4444.2, 2838.9, 1791.5, 1165.6, 773.3, 530.4, 366.4, 266.7, 196.5, 146.6, 112.4, 86.6, 69.6, 55.2, 45.1, 36.2, 29.4, 23.7, 19.0, 16.4, 14.1, 11.6, 9.9, 8.6, 7.3, 6.6, 5.8, 5.0, 4.6, 4.1, 3.7, 3.4, 3.1, 2.7]) -onl['trackerHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -onlrate['trackerHT'] = array('d', [2308.5, 486.5, 146.6, 58.6, 25.8, 13.1, 7.2, 4.6, 3.1, 1.9, 1.3, 0.8, 0.5, 0.4, 0.3, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) - -off['puppiPhase1MHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -offrate['puppiPhase1MHT'] = array('d', [849.5, 197.7, 53.3, 18.2, 7.4, 2.7, 1.5, 0.8, 0.4, 0.3, 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) -onl['puppiPhase1MHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -onlrate['puppiPhase1MHT'] = array('d', [1347.2, 290.5, 71.2, 21.4, 8.2, 3.1, 1.5, 0.8, 0.4, 0.3, 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) - -off['trackerMHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -offrate['trackerMHT'] = array('d', [484.2, 212.2, 103.6, 56.2, 33.6, 20.6, 13.5, 8.8, 6.5, 4.8, 3.3, 2.5, 2.1, 1.4, 1.1, 0.7, 0.4, 0.2, 0.2, 0.2, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) -onl['trackerMHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -onlrate['trackerMHT'] = array('d', [104.9, 18.1, 5.0, 1.9, 0.5, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) - -off['puppiMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -offrate['puppiMET'] = array('d', [31038.0, 24958.4, 7588.3, 1921.2, 540.6, 166.3, 50.8, 17.1, 6.6, 2.8, 1.2, 0.7, 0.3, 0.2, 0.1, 0.1, 0.1, 0.1]) -onl['puppiMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -onlrate['puppiMET'] = array('d', [1376.3, 256.8, 50.0, 11.2, 3.3, 1.1, 0.4, 0.2, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) - -#off['trackerMET'] = array('d', [0.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0, 160.0, 165.0, 170.0, 175.0, 180.0, 185.0, 190.0, 195.0, 200.0, 205.0, 210.0, 215.0, 220.0, 225.0, 230.0, 235.0, 240.0, 245.0, 250.0, 255.0, 260.0, 265.0, 270.0, 275.0, 280.0, 285.0, 290.0, 295.0, 300.0, 305.0, 310.0, 315.0, 320.0, 325.0, 330.0, 335.0, 340.0, 345.0, 350.0, 355.0, 360.0, 365.0, 370.0, 375.0, 380.0, 385.0, 390.0, 395.0, 400.0, 405.0, 410.0, 415.0, 420.0, 425.0, 430.0, 435.0, 440.0, 445.0, 450.0, 455.0, 460.0, 465.0, 470.0, 475.0, 480.0, 485.0, 490.0, 495.0]) -#offrate['trackerMET'] = array('d', [30746.0, 30550.6, 30200.3, 29758.9, 29156.8, 28443.8, 27771.7, 26885.5, 26071.4, 25041.8, 23966.3, 23032.3, 21880.3, 20910.2, 19727.3, 18557.0, 17580.3, 16431.9, 15488.8, 14394.4, 13336.0, 12491.2, 11501.1, 10726.0, 9840.9, 8995.6, 8334.1, 7593.2, 7019.0, 6381.3, 5789.4, 5334.6, 4837.1, 4445.9, 4013.6, 3620.2, 3328.2, 2992.3, 2743.4, 2472.4, 2223.3, 2037.0, 1831.7, 1675.7, 1508.4, 1359.8, 1243.4, 1121.7, 1029.8, 929.1, 841.5, 773.3, 701.2, 646.2, 586.3, 532.7, 492.2, 448.3, 414.6, 379.0, 345.5, 320.8, 292.9, 274.0, 250.2, 230.7, 216.1, 198.6, 185.2, 171.7, 158.6, 149.8, 138.4, 130.5, 121.8, 114.2, 107.8, 101.2, 96.9, 91.0, 85.3, 81.4, 76.3, 71.9, 69.2, 66.1, 63.5, 59.9, 56.5, 54.1, 51.2, 48.7, 46.5, 44.2, 42.1, 40.0, 38.6, 36.9, 35.7, 34.7]) -#onl['trackerMET'] = array('d', [0.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0, 160.0, 165.0, 170.0, 175.0, 180.0, 185.0, 190.0, 195.0, 200.0, 205.0, 210.0, 215.0, 220.0, 225.0, 230.0, 235.0, 240.0, 245.0, 250.0, 255.0, 260.0, 265.0, 270.0, 275.0, 280.0, 285.0, 290.0, 295.0, 300.0, 305.0, 310.0, 315.0, 320.0, 325.0, 330.0, 335.0, 340.0, 345.0, 350.0, 355.0, 360.0, 365.0, 370.0, 375.0, 380.0, 385.0, 390.0, 395.0, 400.0, 405.0, 410.0, 415.0, 420.0, 425.0, 430.0, 435.0, 440.0, 445.0, 450.0, 455.0, 460.0, 465.0, 470.0, 475.0, 480.0, 485.0, 490.0, 495.0]) -#onlrate['trackerMET'] = array('d', [30794.3, 27485.3, 20313.5, 12818.3, 7137.7, 3687.3, 1831.7, 913.4, 478.0, 261.6, 153.4, 97.4, 66.5, 46.5, 34.4, 26.5, 20.8, 16.4, 13.5, 11.7, 10.6, 9.1, 7.8, 6.6, 6.0, 4.7, 2.7, 1.9, 1.4, 1.0, 0.9, 0.7, 0.5, 0.4, 0.3, 0.2, 0.2, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) - -off['trackerMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -offrate['trackerMET'] = array('d', [23966.3, 18557.0, 13336.0, 8995.6, 5789.4, 3620.2, 2223.3, 1359.8, 841.5, 532.7, 345.5, 230.7, 158.6, 114.2, 85.3, 66.1, 51.2, 40.0]) -onl['trackerMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -onlrate['trackerMET'] = array('d', [153.4, 26.5, 10.6, 4.7, 0.9, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) - -off['NNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['NNPuppiTauLoose'] = array('d', [4586.4, 4586.4, 4586.4, 3350.7, 2735.0, 1817.7, 1217.7, 832.6, 574.1, 416.9, 301.7, 226.1, 175.3, 135.3, 108.8, 89.4, 73.5, 62.7, 53.8, 46.9, 41.0, 36.2, 31.6, 28.8, 25.8, 23.0, 20.5, 18.9, 17.4, 15.7]) -onl['NNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['NNPuppiTauLoose'] = array('d', [4380.8, 1979.6, 1011.7, 556.5, 322.9, 201.4, 134.4, 95.7, 71.5, 53.8, 43.4, 35.0, 28.6, 23.9, 20.3, 17.7, 15.6, 12.9, 11.3, 10.1, 9.2, 8.0, 7.2, 6.0, 5.5, 5.3, 4.7, 4.3, 3.9, 3.4]) - -off['CaloTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['CaloTau'] = array('d', [31038.0, 31038.0, 31037.9, 31028.4, 30815.0, 29443.7, 25079.2, 18375.1, 11389.3, 6651.9, 3567.8, 2141.9, 1262.9, 827.8, 589.0, 435.3, 338.9, 267.9, 216.2, 177.2, 146.1, 121.7, 105.3, 90.4, 76.9, 65.2, 56.6, 49.3, 42.9, 38.3]) -onl['CaloTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['CaloTau'] = array('d', [31038.0, 31037.8, 30683.7, 24181.2, 11196.2, 4048.2, 1689.3, 871.1, 523.2, 342.6, 239.2, 175.4, 130.2, 97.8, 75.0, 59.9, 47.1, 36.7, 29.5, 24.5, 21.1, 17.4, 14.5, 12.7, 11.0, 9.6, 8.1, 6.6, 5.6, 4.9]) - diff --git a/rates/plots/ratesEmu_123x_2/rates.pyc b/rates/plots/ratesEmu_123x_2/rates.pyc deleted file mode 100644 index 28467fd4..00000000 Binary files a/rates/plots/ratesEmu_123x_2/rates.pyc and /dev/null differ diff --git a/rates/plots/rates_L1TDR/rates.py b/rates/plots/rates_L1TDR/rates.py deleted file mode 100644 index 48e25a56..00000000 --- a/rates/plots/rates_L1TDR/rates.py +++ /dev/null @@ -1,197 +0,0 @@ -from array import * - -off = {} -offrate = {} -onl = {} -onlrate = {} - - -off['tkMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0]) -offrate['tkMuon'] = array('d', [11230.9, 9820.3, 1230.6, 272.4, 94.2, 42.4, 23.6, 13.9, 8.4, 5.1, 3.9, 3.2, 2.1, 1.8, 1.5, 1.3, 1.1, 1.0, 0.9, 0.9, 0.8, 0.8, 0.8, 0.6, 0.5, 0.5]) - -onl['tkMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0]) -onlrate['tkMuon'] = array('d', [11230.9, 5012.5, 719.7, 182.4, 65.6, 34.2, 19.0, 10.5, 6.7, 4.3, 3.3, 2.3, 1.9, 1.5, 1.4, 1.1, 1.0, 0.9, 0.9, 0.8, 0.8, 0.8, 0.5, 0.5, 0.4, 0.4]) - -off['tkMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['tkMuonBarrel'] = array('d', [677.1, 661.1, 314.8, 91.6, 32.9, 15.6, 9.7, 6.4, 3.8, 2.1, 1.6, 1.4, 1.0, 0.8, 0.8, 0.8, 0.6, 0.6, 0.6, 0.6]) - -onl['tkMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['tkMuonBarrel'] = array('d', [677.1, 538.6, 221.1, 65.0, 23.2, 13.0, 8.2, 4.7, 2.8, 1.8, 1.4, 1.1, 0.8, 0.8, 0.8, 0.6, 0.6, 0.6, 0.6, 0.6]) - -off['tkMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['tkMuonOverlap'] = array('d', [1137.6, 1099.2, 250.3, 48.3, 15.7, 7.7, 4.5, 2.5, 1.8, 1.1, 0.9, 0.8, 0.6, 0.6, 0.5, 0.3, 0.3, 0.1, 0.1, 0.1]) - -onl['tkMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['tkMuonOverlap'] = array('d', [1137.6, 843.8, 139.2, 30.3, 10.7, 6.5, 3.3, 2.1, 1.5, 0.9, 0.8, 0.6, 0.6, 0.5, 0.4, 0.3, 0.1, 0.1, 0.1, 0.1]) - -off['tkMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['tkMuonEndcap'] = array('d', [10094.5, 8637.5, 685.7, 134.2, 45.7, 19.1, 9.3, 5.0, 2.8, 1.9, 1.4, 1.0, 0.6, 0.4, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]) - -onl['tkMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['tkMuonEndcap'] = array('d', [10094.5, 3859.3, 366.7, 88.0, 31.7, 14.6, 7.5, 3.7, 2.4, 1.6, 1.0, 0.6, 0.5, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.1]) - -off['standaloneMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0]) -offrate['standaloneMuon'] = array('d', [14991.8, 13574.9, 2648.7, 1089.7, 445.8, 190.8, 86.3, 56.5, 42.1, 33.4, 29.3, 21.2, 19.0, 15.1, 14.0, 13.4, 11.3, 11.0, 9.8, 9.3, 7.9, 7.4, 6.4, 6.0, 5.9, 5.8]) - -onl['standaloneMuon'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0]) -onlrate['standaloneMuon'] = array('d', [14991.8, 5101.2, 1156.7, 361.7, 160.2, 73.9, 50.5, 35.6, 30.5, 21.8, 19.3, 15.2, 12.5, 11.9, 10.4, 10.0, 8.6, 7.0, 6.5, 6.2, 6.1, 5.4, 5.2, 5.1, 4.3, 4.3]) - -off['standaloneMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['standaloneMuonBarrel'] = array('d', [1281.9, 1281.9, 1271.3, 618.0, 220.9, 72.6, 28.7, 16.2, 12.2, 8.4, 6.4, 4.8, 4.1, 3.5, 3.2, 2.9, 2.6, 2.6, 2.4, 2.1]) - -onl['standaloneMuonBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['standaloneMuonBarrel'] = array('d', [1281.9, 1281.9, 414.9, 123.3, 46.0, 20.3, 14.1, 9.9, 7.0, 5.4, 4.4, 3.7, 3.3, 3.0, 2.8, 2.5, 2.5, 2.1, 2.1, 2.0]) - -off['standaloneMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['standaloneMuonOverlap'] = array('d', [780.0, 780.0, 464.5, 191.0, 109.3, 62.1, 28.0, 21.2, 17.0, 14.0, 13.9, 9.4, 9.4, 7.3, 7.2, 7.2, 5.9, 5.9, 5.0, 5.0]) - -onl['standaloneMuonOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['standaloneMuonOverlap'] = array('d', [780.0, 777.8, 313.2, 98.8, 57.4, 26.9, 20.6, 14.2, 14.0, 9.4, 9.4, 7.3, 5.9, 5.9, 5.0, 5.0, 4.1, 3.2, 3.2, 3.2]) - -off['standaloneMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['standaloneMuonEndcap'] = array('d', [13936.3, 12419.1, 1032.7, 305.3, 125.1, 60.6, 31.7, 20.8, 14.4, 11.7, 9.6, 7.1, 5.7, 4.4, 3.7, 3.4, 2.8, 2.6, 2.5, 2.2]) - -onl['standaloneMuonEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['standaloneMuonEndcap'] = array('d', [13936.3, 3359.9, 467.9, 148.1, 60.6, 28.8, 17.6, 12.3, 10.2, 7.2, 5.7, 4.3, 3.4, 3.0, 2.6, 2.5, 2.1, 1.8, 1.3, 1.1]) - -off['tkMuonStub'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0]) -offrate['tkMuonStub'] = array('d', [28416.9, 21838.3, 1338.7, 300.9, 107.2, 49.1, 26.6, 16.2, 10.3, 6.9, 5.2, 4.3, 3.1, 2.8, 2.3, 2.1, 1.7, 1.4, 1.4, 1.3, 1.3, 1.3, 1.3, 0.9, 0.9, 0.9]) - -onl['tkMuonStub'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0]) -onlrate['tkMuonStub'] = array('d', [28416.9, 9979.5, 806.4, 205.2, 74.4, 38.9, 21.5, 12.5, 8.5, 5.5, 4.4, 3.2, 2.8, 2.3, 2.2, 1.7, 1.4, 1.4, 1.3, 1.3, 1.3, 1.3, 0.9, 0.9, 0.9, 0.9]) - -off['tkMuonStubBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['tkMuonStubBarrel'] = array('d', [530.9, 530.9, 282.8, 97.4, 36.7, 17.1, 10.4, 6.9, 4.3, 2.7, 2.4, 2.0, 1.4, 1.3, 1.1, 1.0, 0.8, 0.8, 0.8, 0.8]) - -onl['tkMuonStubBarrel'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['tkMuonStubBarrel'] = array('d', [530.9, 530.9, 205.1, 67.4, 25.3, 13.9, 8.8, 5.0, 3.5, 2.5, 2.1, 1.4, 1.3, 1.1, 1.1, 0.8, 0.8, 0.8, 0.8, 0.8]) - -off['tkMuonStubOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['tkMuonStubOverlap'] = array('d', [2705.2, 1972.1, 204.2, 43.8, 14.9, 7.2, 4.6, 2.5, 1.9, 1.1, 0.8, 0.7, 0.5, 0.5, 0.4, 0.3, 0.3, 0.1, 0.1, 0.1]) - -onl['tkMuonStubOverlap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['tkMuonStubOverlap'] = array('d', [2705.2, 708.3, 114.5, 27.5, 10.0, 6.0, 3.3, 2.1, 1.5, 0.9, 0.8, 0.6, 0.5, 0.4, 0.4, 0.3, 0.1, 0.1, 0.1, 0.1]) - -off['tkMuonStubEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -offrate['tkMuonStubEndcap'] = array('d', [28187.9, 21167.1, 869.7, 161.7, 55.9, 24.9, 11.7, 6.8, 4.1, 3.1, 2.0, 1.6, 1.2, 1.0, 0.8, 0.8, 0.6, 0.6, 0.6, 0.5]) - -onl['tkMuonStubEndcap'] = array('d', [0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0]) -onlrate['tkMuonStubEndcap'] = array('d', [28187.9, 9162.9, 494.1, 111.3, 39.3, 19.1, 9.4, 5.4, 3.5, 2.2, 1.6, 1.2, 1.0, 0.8, 0.8, 0.6, 0.6, 0.6, 0.5, 0.5]) - - -##EG rates - -off['tkElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -offrate['tkElectron'] = array('d', [884.4, 570.6, 334.0, 201.8, 112.9, 76.9, 55.2, 40.5, 27.3, 22.5, 17.4, 14.0, 11.8, 9.5, 7.4, 6.2, 5.3, 4.2, 3.5, 3.2, 2.4, 2.2, 2.1, 1.8, 1.7, 1.6, 1.4, 1.2, 1.1, 1.0]) - -off['tkElectronBarrel'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -offrate['tkElectronBarrel'] = array('d', [620.1, 364.9, 210.0, 134.5, 74.4, 51.1, 38.9, 28.8, 19.3, 15.9, 12.2, 10.1, 8.4, 6.9, 5.2, 4.5, 3.8, 3.5, 2.9, 2.6]) - -off['tkElectronEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0]) -offrate['tkElectronEndcap'] = array('d', [271.6, 210.2, 125.8, 68.3, 38.7, 25.9, 16.5, 11.7, 7.9, 6.7, 5.3, 3.9, 3.4, 2.6, 2.1, 1.7, 1.4, 0.7, 0.6, 0.6]) - -off['tkIsoElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -offrate['tkIsoElectron'] = array('d', [470.6, 281.0, 151.7, 92.9, 51.8, 35.7, 27.2, 20.5, 14.5, 12.3, 10.6, 8.6, 7.5, 6.4, 5.5, 4.7, 3.6, 3.0, 2.3, 2.0, 1.6, 1.4, 1.4, 1.3, 1.1, 1.1, 0.9, 0.8, 0.6, 0.5]) - -off['standaloneElectron'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -offrate['standaloneElectron'] = array('d', [21719.7, 19089.8, 5527.7, 1862.3, 887.7, 431.0, 264.0, 173.0, 114.4, 78.7, 58.4, 44.8, 34.6, 28.0, 22.7, 18.2, 14.0, 11.3, 8.7, 7.0, 5.4, 4.7, 4.2, 3.6, 3.3, 3.1, 2.7, 2.3, 1.9, 1.4]) - -off['tkPhotonIso'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -offrate['tkPhotonIso'] = array('d', [8825.4, 3482.5, 978.1, 474.4, 243.0, 150.3, 104.5, 76.1, 52.0, 39.4, 31.0, 24.8, 20.5, 17.4, 13.4, 10.7, 8.3, 6.3, 5.1, 3.8, 3.2, 3.0, 2.7, 2.6, 2.4, 2.0, 1.6, 1.3, 0.9, 0.8]) - -off['tkPhotonIsoBarrel'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -offrate['tkPhotonIsoBarrel'] = array('d', [1868.9, 825.1, 463.4, 296.4, 158.6, 103.5, 74.4, 55.8, 37.3, 27.9, 23.0, 18.3, 15.3, 13.1, 10.1, 8.6, 6.9, 5.2, 4.2, 3.3, 2.8, 2.6, 2.3, 2.3, 2.0, 1.6, 1.4, 1.0, 0.6, 0.6]) - -off['tkPhotonIsoEndcap'] = array('d', [10.0, 13.0, 16.0, 19.0, 22.0, 25.0, 28.0, 31.0, 34.0, 37.0, 40.0, 43.0, 46.0, 49.0, 52.0, 55.0, 58.0, 61.0, 64.0, 67.0, 70.0, 73.0, 76.0, 79.0, 82.0, 85.0, 88.0, 91.0, 94.0, 97.0]) -offrate['tkPhotonIsoEndcap'] = array('d', [7400.1, 2736.2, 524.2, 180.7, 85.5, 47.2, 30.4, 20.5, 14.8, 11.7, 8.2, 6.7, 5.4, 4.5, 3.4, 2.3, 1.5, 1.1, 0.9, 0.6, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.3, 0.3, 0.3, 0.3]) - -###hadronic ttbar -#off['puppiPhase1HT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -#offrate['puppiPhase1HT'] = array('d', [31038.0, 5536.7, 4481.5, 1790.8, 1099.2, 629.6, 372.8, 226.0, 143.9, 94.2, 66.4, 47.5, 32.7, 23.5, 17.4, 13.8, 10.5, 8.5, 6.9, 4.8, 4.0, 3.3, 2.6, 2.0, 1.8, 1.4, 1.3, 1.1, 0.8, 0.6, 0.6, 0.6, 0.6, 0.5, 0.4, 0.4, 0.3, 0.3]) - - -off['puppiMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -offrate['puppiMET'] = array('d', [31038.0, 13791.6, 2921.4, 620.2, 156.9, 48.3, 18.1, 9.2, 5.3, 3.4, 2.2, 1.8, 1.5, 1.3, 1.0, 0.7, 0.6, 0.5]) - -off['puppiPhase1Jet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['puppiPhase1Jet'] = array('d', [16324.4, 5363.9, 2085.5, 847.5, 393.2, 205.5, 115.6, 70.1, 45.7, 28.8, 18.3, 12.5, 8.2, 6.2, 4.9, 3.6, 2.6, 2.1, 1.8, 1.5]) - -off['puppiPhase1JetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['puppiPhase1JetExt'] = array('d', [17492.9, 6541.9, 2936.1, 1401.1, 670.8, 345.8, 198.3, 119.9, 78.9, 51.1, 33.5, 23.9, 17.5, 13.8, 11.1, 8.9, 7.2, 6.2, 5.5, 5.0]) - -#taueta 2.4 -off['NNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['NNPuppiTauLoose'] = array('d', [2406.3, 2182.7, 1846.7, 1449.3, 1049.6, 726.3, 525.7, 387.3, 294.1, 224.5, 179.0, 141.8, 115.2, 93.5, 79.0, 69.1, 58.7, 50.9, 44.7, 39.4, 35.3, 31.0, 28.4, 25.8, 23.4, 21.3, 19.1, 17.6, 16.3, 15.4]) - -#2.1 #these aresomehow faulty? -#off['NNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -#offrate['NNPuppiTauLoose'] = array('d', [2162.6, 1950.4, 1638.8, 1278.8, 924.7, 644.1, 471.0, 349.4, 266.4, 204.1, 163.3, 130.0, 106.4, 87.0, 73.1, 64.7, 54.9, 47.2, 41.5, 36.6, 32.9, 29.2, 26.8, 24.4, 22.4, 20.4, 18.3, 17.1, 15.8, 14.9]) - -off['NNPuppiTauLoose21'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['NNPuppiTauLoose21'] = array('d', [2095.7, 1888.7, 1583.8, 1234.8, 891.5, 621.9, 456.3, 339.7, 259.8, 199.5, 160.1, 127.2, 104.1, 84.8, 71.2, 62.9, 53.3, 45.8, 40.1, 35.2, 31.9, 28.2, 25.9, 23.5, 21.7, 19.8, 17.8, 16.5, 15.2, 14.4]) - -off['NNPuppiTauLooseBarrel'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['NNPuppiTauLooseBarrel'] = array('d', [1599.6, 1413.7, 1152.2, 878.1, 623.3, 451.1, 342.8, 259.7, 202.3, 156.9, 127.7, 101.4, 84.5, 69.7, 59.0, 52.7, 44.3, 38.4, 33.8, 29.9, 26.9, 23.9, 22.0, 20.3, 18.9, 17.3, 15.5, 14.3, 13.3, 12.6]) - -#hadronic ttbar -#off['trackerHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -#offrate['trackerHT'] = array('d', [27857.3, 17890.9, 9170.4, 4480.2, 2252.9, 1212.2, 693.2, 420.3, 266.3, 179.7, 123.8, 88.4, 64.4, 48.1, 36.7, 28.2, 22.2, 18.4, 15.1, 12.4, 10.3, 8.2, 7.4, 5.9, 5.0, 4.2, 3.3, 2.8, 2.5, 1.8, 1.4, 1.3, 1.2, 1.1, 1.1, 0.9, 0.9, 0.7]) -#onl['trackerHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -#onlrate['trackerHT'] = array('d', [2809.5, 586.8, 182.1, 73.1, 34.2, 18.8, 11.3, 7.0, 4.4, 2.6, 1.4, 1.1, 0.9, 0.6, 0.6, 0.5, 0.4, 0.4, 0.4, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.1]) - -off['caloHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -offrate['caloHT'] = array('d', [20275.1, 15173.6, 12163.9, 9764.8, 7278.0, 5558.7, 4265.6, 3188.0, 2398.7, 1801.8, 1339.2, 991.8, 726.1, 529.6, 383.7, 278.1, 200.6, 141.6, 99.9, 68.6, 49.0, 34.2, 23.1, 16.4, 10.6, 8.1, 5.5, 4.0, 2.9, 2.3, 1.6, 1.3, 0.9, 0.8, 0.7, 0.6, 0.6, 0.5]) -onl['caloHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -onlrate['caloHT'] = array('d', [20439.3, 16139.0, 13494.1, 10286.9, 7665.9, 5926.6, 4486.9, 3323.6, 2492.4, 1855.9, 1372.6, 1009.7, 732.9, 531.0, 381.5, 273.6, 195.6, 137.9, 95.8, 64.7, 46.4, 31.1, 21.7, 14.9, 9.7, 7.4, 5.0, 3.5, 2.7, 2.0, 1.4, 1.1, 0.8, 0.7, 0.7, 0.6, 0.6, 0.4]) - -#off['trackerMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -#offrate['trackerMET'] = array('d', [13268.1, 8221.6, 4763.9, 2641.6, 1442.3, 792.3, 439.4, 255.7, 152.8, 96.2, 63.0, 44.5, 30.9, 23.1, 16.9, 13.5, 11.0, 8.9]) -#onl['trackerMET'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0]) -#onlrate['trackerMET'] = array('d', [162.4, 22.8, 7.7, 4.4, 3.0, 2.4, 0.9, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.1, 0.1, 0.1]) - -off['trackerMET'] = array('d', [0.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0, 160.0, 165.0, 170.0, 175.0, 180.0, 185.0, 190.0, 195.0, 200.0, 205.0, 210.0, 215.0, 220.0, 225.0, 230.0, 235.0, 240.0, 245.0, 250.0, 255.0, 260.0, 265.0, 270.0, 275.0, 280.0, 285.0, 290.0, 295.0, 300.0, 305.0, 310.0, 315.0, 320.0, 325.0, 330.0, 335.0, 340.0, 345.0, 350.0, 355.0, 360.0, 365.0, 370.0, 375.0, 380.0, 385.0, 390.0, 395.0, 400.0, 405.0, 410.0, 415.0, 420.0, 425.0, 430.0, 435.0, 440.0, 445.0, 450.0, 455.0, 460.0, 465.0, 470.0, 475.0, 480.0, 485.0, 490.0, 495.0]) -offrate['trackerMET'] = array('d', [26259.8, 25030.5, 23749.2, 22389.2, 21047.6, 19697.7, 18342.4, 17018.3, 15722.9, 14473.4, 13268.1, 12134.5, 11055.6, 10047.1, 9103.1, 8221.6, 7395.4, 6641.8, 5944.8, 5328.9, 4763.9, 4244.5, 3768.4, 3345.3, 2970.2, 2641.6, 2342.7, 2075.6, 1844.6, 1630.8, 1442.3, 1273.2, 1128.9, 1005.2, 890.2, 792.3, 705.8, 623.2, 553.1, 494.3, 439.4, 393.5, 353.4, 316.0, 285.2, 255.7, 232.2, 209.2, 188.7, 167.7, 152.8, 140.1, 126.6, 117.0, 104.9, 96.2, 88.4, 81.3, 73.2, 67.9, 63.0, 58.1, 54.4, 51.2, 47.4, 44.5, 41.3, 38.6, 35.7, 33.3, 30.9, 28.5, 26.8, 25.4, 23.9, 23.1, 21.9, 20.2, 19.0, 17.8, 16.9, 15.9, 14.9, 14.5, 14.2, 13.5, 13.1, 12.6, 12.0, 11.1, 11.0, 10.5, 10.3, 9.6, 9.3, 8.9, 8.7, 8.5, 8.3, 8.1]) -onl['trackerMET'] = array('d', [0.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0, 160.0, 165.0, 170.0, 175.0, 180.0, 185.0, 190.0, 195.0, 200.0, 205.0, 210.0, 215.0, 220.0, 225.0, 230.0, 235.0, 240.0, 245.0, 250.0, 255.0, 260.0, 265.0, 270.0, 275.0, 280.0, 285.0, 290.0, 295.0, 300.0, 305.0, 310.0, 315.0, 320.0, 325.0, 330.0, 335.0, 340.0, 345.0, 350.0, 355.0, 360.0, 365.0, 370.0, 375.0, 380.0, 385.0, 390.0, 395.0, 400.0, 405.0, 410.0, 415.0, 420.0, 425.0, 430.0, 435.0, 440.0, 445.0, 450.0, 455.0, 460.0, 465.0, 470.0, 475.0, 480.0, 485.0, 490.0, 495.0]) -onlrate['trackerMET'] = array('d', [28284.6, 23248.7, 16255.6, 10240.4, 5930.4, 3253.3, 1743.2, 927.3, 500.2, 281.4, 162.4, 100.1, 64.0, 44.7, 30.4, 22.8, 16.1, 13.2, 10.5, 8.7, 7.7, 7.2, 6.1, 5.4, 4.7, 4.4, 4.2, 3.8, 3.5, 3.1, 3.0, 2.8, 2.5, 2.5, 2.4, 2.4, 2.2, 2.0, 1.9, 1.3, 0.9, 0.6, 0.5, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]) - -onl['trackerMET_FBE'] = array('d', [0.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0, 160.0, 165.0, 170.0, 175.0, 180.0, 185.0, 190.0, 195.0, 200.0, 205.0, 210.0, 215.0, 220.0, 225.0, 230.0, 235.0, 240.0, 245.0, 250.0, 255.0, 260.0, 265.0, 270.0, 275.0, 280.0, 285.0, 290.0, 295.0, 300.0, 305.0, 310.0, 315.0, 320.0, 325.0, 330.0, 335.0, 340.0, 345.0, 350.0, 355.0, 360.0, 365.0, 370.0, 375.0, 380.0, 385.0, 390.0, 395.0, 400.0, 405.0, 410.0, 415.0, 420.0, 425.0, 430.0, 435.0, 440.0, 445.0, 450.0, 455.0, 460.0, 465.0, 470.0, 475.0, 480.0, 485.0, 490.0, 495.0]) -onlrate['trackerMET_FBE'] = array('d', [30655.7, 27369.0, 20398.5, 13074.0, 7426.3, 3881.7, 1965.9, 998.2, 522.0, 293.7, 174.0, 111.2, 76.2, 55.4, 40.8, 31.7, 25.8, 21.0, 17.7, 15.6, 14.1, 12.2, 10.8, 9.4, 8.2, 6.6, 3.3, 2.2, 1.7, 1.2, 1.0, 0.8, 0.7, 0.7, 0.6, 0.6, 0.6, 0.6, 0.5, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.3, 0.3, 0.3, 0.2, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) - - -off['trackerJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['trackerJet'] = array('d', [31036.5, 31036.5, 30915.7, 30680.9, 22388.0, 8428.3, 3884.0, 2065.0, 1190.5, 731.1, 474.2, 320.4, 221.5, 156.0, 112.2, 84.1, 64.2, 50.1, 38.1, 30.6]) -onl['trackerJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['trackerJet'] = array('d', [501.4, 118.3, 37.5, 15.1, 7.8, 5.0, 3.9, 3.0, 1.6, 0.5, 0.5, 0.4, 0.4, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]) - -off['caloJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['caloJet'] = array('d', [31038.0, 31038.0, 26155.6, 5045.0, 948.3, 340.7, 159.3, 83.5, 47.2, 29.5, 18.6, 12.2, 7.5, 5.8, 3.8, 2.8, 2.1, 1.6, 1.2, 1.1]) -onl['caloJet'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['caloJet'] = array('d', [12842.3, 1955.9, 539.3, 209.7, 92.6, 46.7, 27.1, 15.5, 8.6, 5.4, 3.7, 2.3, 1.5, 1.2, 1.1, 0.8, 0.5, 0.5, 0.3, 0.1]) - -off['caloJetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -offrate['caloJetExt'] = array('d', [31038.0, 31038.0, 26303.9, 5485.8, 1167.2, 449.1, 214.9, 112.4, 65.1, 39.4, 24.8, 16.1, 10.5, 7.7, 5.0, 3.5, 2.5, 2.1, 1.5, 1.4]) -onl['caloJetExt'] = array('d', [40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0]) -onlrate['caloJetExt'] = array('d', [14705.0, 2358.7, 643.6, 242.6, 105.7, 51.5, 29.5, 16.9, 8.9, 5.5, 4.0, 2.6, 1.5, 1.2, 1.1, 0.8, 0.5, 0.5, 0.3, 0.1]) - -off['NNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['NNPuppiTauLoose'] = array('d', [2406.3, 2182.7, 1846.7, 1449.3, 1049.6, 726.3, 525.7, 387.3, 294.1, 224.5, 179.0, 141.8, 115.2, 93.5, 79.0, 69.1, 58.7, 50.9, 44.7, 39.4, 35.3, 31.0, 28.4, 25.8, 23.4, 21.3, 19.1, 17.6, 16.3, 15.4]) -onl['NNPuppiTauLoose'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['NNPuppiTauLoose'] = array('d', [2402.4, 1934.4, 1278.2, 725.6, 438.7, 284.4, 190.6, 132.9, 96.0, 74.8, 57.1, 46.3, 38.3, 31.8, 27.7, 24.1, 19.9, 17.2, 14.9, 13.5, 12.0, 10.6, 9.5, 9.0, 8.3, 7.4, 6.5, 6.0, 5.3, 4.8]) - -off['CaloTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -offrate['CaloTau'] = array('d', [31037.9, 31037.6, 30857.6, 27058.4, 17349.8, 9348.6, 5053.3, 2881.1, 1778.3, 1179.3, 826.7, 601.5, 450.0, 345.6, 271.4, 211.1, 171.7, 139.3, 114.4, 93.6, 78.7, 66.1, 56.7, 48.0, 41.4, 36.2, 31.0, 26.8, 22.7, 19.1]) -onl['CaloTau'] = array('d', [10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0, 130.0, 135.0, 140.0, 145.0, 150.0, 155.0]) -onlrate['CaloTau'] = array('d', [31037.9, 30775.8, 23729.0, 11431.6, 5007.3, 2421.8, 1342.8, 822.4, 540.0, 375.5, 269.2, 195.9, 147.9, 113.5, 88.8, 70.5, 56.4, 46.5, 37.8, 31.4, 25.1, 20.5, 16.6, 14.6, 12.8, 11.1, 9.3, 7.9, 6.9, 6.4]) - -##these are inclusive ttbar -off['puppiPhase1HT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -offrate['puppiPhase1HT'] = array('d', [31038.0, 5536.7, 2769.4, 1507.1, 887.9, 518.6, 313.3, 193.6, 123.4, 84.0, 60.1, 42.3, 29.8, 21.5, 16.2, 12.7, 10.0, 8.1, 6.2, 4.7, 4.0, 3.2, 2.5, 2.0, 1.8, 1.4, 1.2, 1.1, 0.8, 0.6, 0.6, 0.6, 0.6, 0.5, 0.4, 0.4, 0.3, 0.3]) -onl['puppiPhase1HT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -onlrate['puppiPhase1HT'] = array('d', [2133.6, 1254.3, 692.4, 395.6, 232.4, 143.8, 91.7, 63.8, 44.1, 30.2, 21.2, 15.8, 12.2, 9.6, 7.6, 5.7, 4.3, 3.5, 2.6, 2.0, 1.8, 1.4, 1.2, 1.1, 0.8, 0.6, 0.6, 0.6, 0.6, 0.5, 0.4, 0.4, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]) - - -off['trackerHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -offrate['trackerHT'] = array('d', [29767.4, 21615.9, 12100.4, 6120.9, 3106.2, 1659.0, 940.2, 566.0, 358.2, 234.9, 164.3, 114.5, 83.6, 62.0, 47.0, 36.0, 28.2, 22.3, 18.8, 15.4, 12.9, 11.0, 8.9, 7.6, 6.6, 5.5, 4.6, 3.9, 2.9, 2.6, 2.2, 1.5, 1.4, 1.3, 1.2, 1.1, 1.1, 0.9]) -onl['trackerHT'] = array('d', [50.0, 75.0, 100.0, 125.0, 150.0, 175.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 350.0, 375.0, 400.0, 425.0, 450.0, 475.0, 500.0, 525.0, 550.0, 575.0, 600.0, 625.0, 650.0, 675.0, 700.0, 725.0, 750.0, 775.0, 800.0, 825.0, 850.0, 875.0, 900.0, 925.0, 950.0, 975.0]) -onlrate['trackerHT'] = array('d', [2809.5, 586.8, 182.1, 73.1, 34.2, 18.8, 11.3, 7.0, 4.4, 2.6, 1.4, 1.1, 0.9, 0.6, 0.6, 0.5, 0.4, 0.4, 0.4, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.1]) - diff --git a/rates/plots/rates_L1TDR/rates.pyc b/rates/plots/rates_L1TDR/rates.pyc deleted file mode 100644 index f6bc565d..00000000 Binary files a/rates/plots/rates_L1TDR/rates.pyc and /dev/null differ diff --git a/rates/plots/rates_emulator_123x.py b/rates/plots/rates_emulator_123x.py deleted file mode 100644 index c2aad757..00000000 --- a/rates/plots/rates_emulator_123x.py +++ /dev/null @@ -1,499 +0,0 @@ -import sys, os -import argparse - -from ROOT import * -from array import * - -gStyle.SetOptStat(0) -TAxis().SetMoreLogLabels(1) - -parser = argparse.ArgumentParser() -parser.add_argument("--outdir", default="testOutput", help="Choose the output directory. Default='%(default)s'") - -args = parser.parse_args() - -outDir = args.outdir -if not os.path.isdir(outDir): - os.mkdir(outDir) -pathToRates = outDir+"/rates.py" - -rates_file = open(pathToRates, 'w') - - -rates_file.write("from array import *\n\n") - -rates_file.write("off = {}\n") -rates_file.write("offrate = {}\n") -rates_file.write("onl = {}\n") -rates_file.write("onlrate = {}\n\n") - - -f = TFile("/eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/minbias_merged_nTuplesEmu_v22_2.root","READ") - -t = f.Get("l1PhaseIITree/L1PhaseIITree") - -ntot = t.GetEntriesFast() - -off = {} -offrate = {} -onl = {} -onlrate = {} -g_off = {} -g_onl = {} - -h = {} - -#isolation WPs - -iso_EG_barrel = 0.13 -iso_EG_endcap = 0.28 - -iso_gamma_barrel = 0.24 -iso_gamma_endcap = 0.205 - -#tk EG hwQual -tkEG_hwQual = 3 - -#scalings - - -### Muons EMU - -#function :: GMTTkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.903751)/1.039495 if abs(Eta)<0.83 else (Et>(offline-0.894300)/1.044889 if abs(Eta)<1.24 else (Et>(offline-0.796396)/1.040808)) -#function :: GMTMuonQualOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.827822)/0.994950 if abs(Eta)<0.83 else (Et>(offline-0.228463)/1.280758 if abs(Eta)<1.24 else (Et>(offline-7.261232)/0.895232)) - -def gmtMuonOfflineEtCutBarrel(offline) : return (offline-2.827822)/0.994950 -def gmtMuonOfflineEtCutOverlap(offline) : return (offline-0.228463)/1.280758 -def gmtMuonOfflineEtCutEndcap(offline) : return (offline-7.261232)/0.895232 - -def gmtTkMuonOfflineEtCutBarrel(offline) : return (offline-0.903751)/1.039495 -def gmtTkMuonOfflineEtCutOverlap(offline) : return (offline-0.894300)/1.044889 -def gmtTkMuonOfflineEtCutEndcap(offline) : return (offline-0.796396)/1.040808 - - -##New scalings by Yi in December 2021 - -#function :: Phase1PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-12.381481)/1.331251 if abs(Eta)<1.5 else (Et>(offline-21.649515)/1.372602 if abs(Eta)<2.4 else (Et>(offline-35.609357)/1.493540)) -def Phase1PuppiJetOfflineEtCutBarrel(offline) : return (offline-12.381481)/1.331251 -def Phase1PuppiJetOfflineEtCutEndcap(offline) : return (offline-21.649515)/1.372602 -def Phase1PuppiJetOfflineEtCutForward(offline) : return (offline-35.609357)/1.493540 - -#function :: Phase1PuppiMHTOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+9.724987)/1.037459 -#function :: Phase1PuppiHT090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-46.674588)/1.113875 -def Phase1PuppiHTOfflineEtCut(offline) : return (offline-46.674588)/1.113875 -def Phase1PuppiMHTOfflineEtCut(offline) : return (offline+9.724987)/1.037459 - -#function :: PuppiMET090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-62.120627)/1.382451 -def PuppiMETOfflineEtCut(offline) : return (offline-62.120627)/1.382451 - -#function :: CaloJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+15.342718)/1.568946 if abs(Eta)<1.5 else (Et>(offline+2.230990)/1.561868 if abs(Eta)<2.4 else (Et>(offline-107.928530)/1.181014)) -def CaloJetOfflineEtCutBarrel(offline) : return (offline+15.342718)/1.568946 -def CaloJetOfflineEtCutEndcap(offline) : return (offline+2.230990)/1.561868 -def CaloJetOfflineEtCutForward(offline) : return (offline-107.928530)/1.181014 - -#THESE ARE WRONG!!! -#function :: CaloHT090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+51.666047)/1.027086 -#function :: CaloHTOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+212.262823)/1.038718 -def CaloHTOfflineEtCut(offline) : return (offline+51.666047)/1.027086 - -#function :: SeededConePuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-14.869526)/1.291966 if abs(Eta)<1.5 else (Et>(offline-24.500087)/1.449829 if abs(Eta)<2.4 else (Et>(offline-53.029951)/1.140808)) -def SeededConePuppiJetOfflineEtCutBarrel(offline) : return (offline-14.869526)/1.291966 -def SeededConePuppiJetOfflineEtCutEndcap(offline) : return (offline-24.500087)/1.449829 -def SeededConePuppiJetOfflineEtCutForward(offline) : return (offline-53.029951)/1.140808 - -#function :: TrackerJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+52.278067)/10.213742 if abs(Eta)<1.5 else (Et>(offline+93.926334)/14.412352) -def TrackerJetOfflineEtCutBarrel(offline) : return (offline+52.278067)/10.213742 -def TrackerJetOfflineEtCutEndcap(offline) : return (offline+93.926334)/14.412352 - -#function :: TrackerMHTOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+72.185871)/3.431230 -#function :: TrackerHT090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+3.448948)/3.780727 -#function :: TrackerMET090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+4.460475)/7.139687 -def TrackerHTOfflineEtCut(offline) : return (offline+3.448948)/3.780727 -def TrackerMHTOfflineEtCut(offline) : return (offline+72.185871)/3.431230 -def TrackerMETOfflineEtCut(offline) : return (offline+4.460475)/7.139687 - - -#function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.870789)/1.165597 if abs(Eta)<1.5 else (Et>(offline-2.720773)/1.228424) -#function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.617835)/1.182946 if abs(Eta)<1.5 else (Et>(offline-0.336402)/1.275834) -#function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.189054)/1.211045 if abs(Eta)<1.5 else (Et>(offline-0.822056)/1.239274) -#function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.330926)/1.093568 if abs(Eta)<1.5 else (Et>(offline-4.565565)/1.077261) -def EGElectronOfflineEtCutBarrel(offline) : return (offline-2.870789)/1.165597 -def EGElectronOfflineEtCutEndcap(offline) : return (offline-2.720773)/1.228424 - -def TkElectronOfflineEtCutBarrel(offline) : return (offline-0.617835)/1.182946 -def TkElectronOfflineEtCutEndcap(offline) : return (offline-0.336402)/1.275834 - -def TkIsoElectronOfflineEtCutBarrel(offline) : return (offline-0.189054)/1.211045 -def TkIsoElectronOfflineEtCutEndcap(offline) : return (offline-0.822056)/1.239274 - -def TkIsoPhotonOfflineEtCutBarrel(offline) : return (offline-2.330926)/1.093568 -def TkIsoPhotonOfflineEtCutEndcap(offline) : return (offline-4.565565)/1.077261 - - -#TAUS -#function :: CaloTau050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+12.754931)/1.247281 if abs(Eta)<1.5 else (Et>(offline+18.755528)/1.373550) -#function :: NNPuppiTau050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+3.439358)/1.141044 if abs(Eta)<1.5 else (Et>(offline+0.756022)/1.146415) -#function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+6.720396)/1.510317 if abs(Eta)<1.5 else (Et>(offline+5.499322)/1.898208) -#function :: NNPuppiTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-3.778738)/1.642246 if abs(Eta)<1.5 else (Et>(offline-14.808886)/1.716542) - -def CaloTauOfflineEtCutBarrel(offline) : return (offline+6.720396)/1.510317 -def CaloTauOfflineEtCutEndcap(offline) : return (offline+5.499322)/1.898208 - -def NNTauLooseOfflineEtCutBarrel(offline) : return (offline-3.778738)/1.642246 -def NNTauLooseOfflineEtCutEndcap(offline) : return (offline-14.808886)/1.716542 - -#def NNTau2vtxLooseOfflineEtCutBarrel(offline) : return (offline-3.430488)/1.644274 -#def NNTau2vtxLooseOfflineEtCutEndcap(offline) : return (offline-14.530580)/1.728148 - - -cutrange = { - - -'tkMuon':[0.0,78.0,3.0], -'tkMuonBarrel':[0.0,60.0,3.0], -'tkMuonOverlap':[0.0,60.0,3.0], -'tkMuonEndcap':[0.0,60.0,3.0], - -'standaloneMuonBarrel':[0.0,60.0,3.0], -'standaloneMuonOverlap':[0.0,60.0,3.0], -'standaloneMuonEndcap':[0.0,60.0,3.0], -'standaloneMuon':[0.0,78.0,3.0], - -'gmtTkMuon':[0.0,78.0,3.0], -'gmtTkMuonBarrel':[0.0,60.0,3.0], -'gmtTkMuonOverlap':[0.0,60.0,3.0], -'gmtTkMuonEndcap':[0.0,60.0,3.0], - -'gmtMuon':[0.0,78.0,3.0], -'gmtMuonBarrel':[0.0,60.0,3.0], -'gmtMuonOverlap':[0.0,60.0,3.0], -'gmtMuonEndcap':[0.0,60.0,3.0], - -'tkElectron':[10.0,100.0,3.0], -'tkIsoElectron':[10.0,100.0,3.0], -'standaloneElectron':[10.0,100.0,3.0], -'standaloneElectronExt':[10.0,100.0,3.0], - -'tkElectronBarrel':[10.0,70.0,3.0], -'tkIsoElectronBarrel':[10.0,70.0,3.0], -'standaloneElectronBarrel':[10.0,70.0,4.0], - -'tkElectronEndcap':[10.0,70.0,3.0], -'tkIsoElectronEndcap':[10.0,70.0,3.0], -'standaloneElectronEndcap':[10.0,70.0,3.0], - -'tkPhotonIso':[10.0,100.0,3.0], -'standalonePhoton':[10.0,70.0,3.0], - -'tkPhotonIsoBarrel':[10.0,70.0,3.0], -'standalonePhotonBarrel':[10.0,70.0,3.0], - -'tkPhotonIsoEndcap':[10.0,70.0,3.0], -'standalonePhotonEndcap':[10.0,70.0,3.0], - -'puppiPhase1HT':[50.0,1000.0,25.0], -'trackerHT':[50.0,1000.0,25.0], -'caloHT':[50.0,1000.0,25.0], - -'puppiPhase1MHT':[50.0,1000.0,25.0], -'trackerMHT':[50.0,1000.0,25.0], - -'puppiMET':[50.0,500.0,25.0], -'trackerMET':[50.0,500.0,25.0], -#'trackerMET':[0.0,500.0,5.0], - - -'seededConePuppiJet':[40.0,440.0,20.0], -'seededConePuppiJetExt':[40.0,440.0,20.0], -'puppiPhase1Jet':[40.0,440.0,20.0], -'puppiPhase1JetExt':[40.0,440.0,20.0], -'trackerJet':[40.0,440.0,20.0], -'caloJet':[40.0,440.0,20.0], -'caloJetExt':[40.0,440.0,20.0], - - -'NNPuppiTauLoose':[10.0,160.0,5.0], -'NNPuppiTau2vtxLoose':[10.0,160.0,5.0], -'CaloTau':[10.0,160.0,5.0], -'CaloTauBarrel':[10.0,160.0,5.0], -'CaloTauEndcap':[10.0,160.0,5.0], - - -} - -list_calc = [ - # 'gmtTkMuon', - # 'gmtMuon', - # # 'gmtMuonEndcap', - # # 'gmtMuonBarrel', - # # 'gmtMuonOverlap', - # 'tkElectron', - # 'tkIsoElectron', - # 'standaloneElectron', - # 'tkPhotonIso', - # 'seededConePuppiJet', - # 'seededConePuppiJetExt', - # 'puppiPhase1Jet', - # 'puppiPhase1JetExt', - # 'trackerJet', - # 'caloJet', - # 'caloJetExt', - # 'puppiPhase1HT', - # 'trackerHT', - # 'caloHT', - # 'puppiPhase1MHT', - # 'trackerMHT', - # 'puppiMET', - # 'trackerMET', - # 'NNPuppiTauLoose', - # # 'NNPuppiTau2vtxLoose', - 'CaloTau', - #'CaloTauBarrel', - #'CaloTauEndcap', -] - - - - -for obj in list_calc: - - off[obj] = array('d',[]) - offrate[obj] = array('d',[]) - onl[obj] = array('d',[]) - onlrate[obj] = array('d',[]) - - x = cutrange[obj][0] - while (x0.83 && abs(gmtTkMuonEta[])<1.24 && gmtTkMuonPt[]>("+str(gmtTkMuonOfflineEtCutOverlap(x))+")) || (abs(gmtTkMuonEta[])>1.24 && abs(gmtTkMuonEta[])<2.4 && gmtTkMuonPt[]>("+str(gmtTkMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtTkMuonEta[])<2.4)>0" - onlinecut = "Sum$( gmtTkMuonPt[]>"+str(x)+" && gmtTkMuonBx[]==0 && abs(gmtTkMuonEta[])<2.4)>0" - - - if (obj=='gmtMuon'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 && gmtMuonQual[]>=12 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])<2.4)>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && abs(gmtMuonEta[])<2.4 && ( ( abs(gmtMuonEta[])<0.83 ) || (abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 && gmtMuonQual[]>=12 ) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4) ) )>0" - - if (obj=='gmtMuonOverlap'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 && gmtMuonQual[]>=12 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24)>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && gmtMuonQual[]>=12 && abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 )>0" - - if (obj=='gmtMuonBarrel'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && gmtMuonQual[]>=12 && abs(gmtMuonEta[])<1.24 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])<0.83 )>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && abs(gmtMuonEta[])<0.83)>0" - - if (obj=='gmtMuonEndcap'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && gmtMuonQual[]>=12 && abs(gmtMuonEta[])<1.24 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4)>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 )>0" - - -#---------------eg----------------- - - - if (obj=='tkElectron'): - offlinescalingcut = "( (abs(tkElectronEta[])<1.479 && tkElectronEt[]>("+str(TkElectronOfflineEtCutBarrel(x))+")) || (abs(tkElectronEta[])>1.479 && tkElectronEt[]>("+str(TkElectronOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronBx[]==0 && tkElectronPassesLooseTrackID[] && abs(tkElectronEta[])<2.4)>0" - onlinecut = "Sum$( tkElectronEt[]>"+str(x)+" && tkElectronBx[]==0 && tkElectronPassesLooseTrackID[] && abs(tkElectronEta[])<2.4)>0" - - if (obj=='tkIsoElectron'): - offlinescalingcut = "( (abs(tkElectronEta[])<1.479 && tkElectronEt[]>("+str(TkIsoElectronOfflineEtCutBarrel(x))+") && tkElectronTrkIso[]<("+str(iso_EG_barrel)+") ) || (abs(tkElectronEta[])>1.479 && tkElectronEt[]>("+str(TkIsoElectronOfflineEtCutEndcap(x))+") && tkElectronTrkIso[]<("+str(iso_EG_endcap)+") && tkElectronHwQual[]=="+str(tkEG_hwQual)+" ) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronBx[]==0 && abs(tkElectronEta[])<2.4)>0" - onlinecut = "Sum$( ((abs(tkElectronEta[])<1.479 && tkElectronEt[]>("+str(x)+") && tkElectronTrkIso[]<("+str(iso_EG_barrel)+")) || (abs(tkElectronEta[])>1.479 && tkElectronEt[]>("+str(x)+") && tkElectronTrkIso[]<("+str(iso_EG_endcap)+") && tkElectronHwQual[]=="+str(tkEG_hwQual)+")) && tkElectronBx[]==0 && abs(tkElectronEta[])<2.4)>0" - - if (obj=='standaloneElectron'): - offlinescalingcut = "( (abs(EGEta[])<1.479 && EGEt[]>("+str(EGElectronOfflineEtCutBarrel(x))+")) || (abs(EGEta[])>1.479 && EGEt[]>("+str(EGElectronOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && EGPassesLooseTrackID[] && abs(EGEta[])<2.4)>0" - onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && EGPassesLooseTrackID[] && abs(EGEta[])<2.4)>0" - - - if (obj=='tkPhotonIso'): - offlinescalingcut = "( (abs(tkPhotonEta[])<1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutBarrel(x))+")) || (abs(tkPhotonEta[])>1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_barrel)+" ) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_endcap)+") ) && tkPhotonBx[]==0 && tkPhotonPassesLooseTrackID[] && abs(tkPhotonEta[])<2.4)>0" - onlinecut = "Sum$( tkPhotonEt[]>"+str(x)+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_barrel)+" ) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_endcap)+") ) && tkPhotonBx[]==0 && tkPhotonPassesLooseTrackID[] && abs(tkPhotonEta[])<2.4)>0" - - - -#---------------taus----------------TO BE FILLED - - if (obj=='NNPuppiTauLoose'): - offlinescalingcut = "( (abs(nnTauEta[])<1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutBarrel(x))+")) || (abs(nnTauEta[])>1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<2.4)>0" - onlinecut = "Sum$( nnTauEt[]>"+str(x)+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<2.4)>0" - - if (obj=='NNPuppiTau2vtxLoose'): - offlinescalingcut = "( (abs(nnTau2vtxEta[])<1.5 && nnTau2vtxEt[]>("+str(NNTau2vtxLooseOfflineEtCutBarrel(x))+")) || (abs(nnTau2vtxEta[])>1.5 && nnTau2vtxEt[]>("+str(NNTau2vtxLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTau2vtxPassLooseNN[]>0 && abs(nnTau2vtxEta[])<2.4)>0" - onlinecut = "Sum$( nnTau2vtxEt[]>"+str(x)+" && nnTau2vtxPassLooseNN[]>0 && abs(nnTau2vtxEta[])<2.4)>0" - - if (obj=='CaloTau'): - offlinescalingcut = "( (abs(caloTauEta[])<1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutBarrel(x))+")) || (abs(caloTauEta[])>1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloTauEta[])<2.4)>0" - onlinecut = "Sum$( caloTauEt[]>"+str(x)+" && abs(caloTauEta[])<2.4)>0" - - if (obj=='CaloTauBarrel'): - offlinescalingcut = "( (abs(caloTauEta[])<1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutBarrel(x))+")) || (abs(caloTauEta[])>1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloTauEta[])<1.5)>0" - onlinecut = "Sum$( caloTauEt[]>"+str(x)+" && abs(caloTauEta[])<1.5)>0" - - if (obj=='CaloTauEndcap'): - offlinescalingcut = "( (abs(caloTauEta[])<1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutBarrel(x))+")) || (abs(caloTauEta[])>1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloTauEta[])>1.5 && abs(caloTauEta[])<2.4)>0" - onlinecut = "Sum$( caloTauEt[]>"+str(x)+" && abs(caloTauEta[])>1.5 && abs(caloTauEta[])<2.4)>0" - - -#----------------jets--------------- - - if (obj=='seededConePuppiJet'): - offlinescalingcut = "( (abs(seededConePuppiJetEta[])<1.5 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutBarrel(x))+")) || (abs(seededConePuppiJetEta[])>1.5 && abs(seededConePuppiJetEta[])<2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutEndcap(x))+")) || (abs(seededConePuppiJetEta[])>2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(seededConePuppiJetEta[])<2.4)>0" - onlinecut = "Sum$( seededConePuppiJetEt[]>"+str(x)+" && abs(seededConePuppiJetEta[])<2.4)>0" - - if (obj=='seededConePuppiJetExt'): - offlinescalingcut = "( (abs(seededConePuppiJetEta[])<1.5 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutBarrel(x))+")) || (abs(seededConePuppiJetEta[])>1.5 && abs(seededConePuppiJetEta[])<2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutEndcap(x))+")) || (abs(seededConePuppiJetEta[])>2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(seededConePuppiJetEta[])<5)>0" - onlinecut = "Sum$( seededConePuppiJetEt[]>"+str(x)+" && abs(seededConePuppiJetEta[])<5)>0" - - if (obj=='puppiPhase1Jet'): - offlinescalingcut = "( (abs(phase1PuppiJetEta[])<1.5 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutBarrel(x))+")) || (abs(phase1PuppiJetEta[])>1.5 && abs(phase1PuppiJetEta[])<2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutEndcap(x))+")) || (abs(phase1PuppiJetEta[])>2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(phase1PuppiJetEta[])<2.4)>0" - onlinecut = "Sum$( phase1PuppiJetEt[]>"+str(x)+" && abs(phase1PuppiJetEta[])<2.4)>0" - - if (obj=='puppiPhase1JetExt'): - offlinescalingcut = "( (abs(phase1PuppiJetEta[])<1.5 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutBarrel(x))+")) || (abs(phase1PuppiJetEta[])>1.5 && abs(phase1PuppiJetEta[])<2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutEndcap(x))+")) || (abs(phase1PuppiJetEta[])>2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(phase1PuppiJetEta[])<5)>0" - onlinecut = "Sum$( phase1PuppiJetEt[]>"+str(x)+" && abs(phase1PuppiJetEta[])<5)>0" - - if (obj=='trackerJet'): - offlinescalingcut = "( (abs(trackerJetEta[])<1.5 && trackerJetPt[]>("+str(TrackerJetOfflineEtCutBarrel(x))+")) || (abs(trackerJetEta[])>1.5 && trackerJetPt[]>("+str(TrackerJetOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(trackerJetEta[])<2.4)>0" - onlinecut = "Sum$( trackerJetPt[]>"+str(x)+" && abs(trackerJetEta[])<2.4)>0" - - if (obj=='caloJet'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])<2.4)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])<2.4)>0" - - if (obj=='caloJetExt'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])<5)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])<5)>0" - - - - -#--------------------HT-------------------- - - #if (obj=='seededConePuppiHT'): - #Not available - # offlinescalingcut = "(seededConePuppiHT[0]>("+str(seededConePuppiHTOfflineEtCut(x))+"))" - # offlinecut = offlinescalingcut - # onlinecut = " seededConePuppiHT[0]>"+str(x) - - if (obj=='puppiPhase1HT'): - offlinescalingcut = "(phase1PuppiHT[0]>("+str(Phase1PuppiHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " phase1PuppiHT[0]>"+str(x) - - if (obj=='trackerHT'): - offlinescalingcut = "(trackerHT[0]>("+str(TrackerHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerHT[0]>"+str(x) - - if (obj=='caloHT'): - offlinescalingcut = "(caloJetHT[0]>("+str(CaloHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " caloJetHT[0]>"+str(x) - -#--------------------MHT----------------- - - #if (obj=='seededConePuppiMHT'): - #Not available - # offlinescalingcut = "(seededConePuppiMHT[0]>("+str(seededConePuppiMHTOfflineEtCut(x))+"))" - # offlinecut = offlinescalingcut - # onlinecut = " seededConePuppiMHT[0]>"+str(x) - - if (obj=='puppiPhase1MHT'): - offlinescalingcut = "(phase1PuppiMHTEt[0]>("+str(Phase1PuppiMHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " phase1PuppiMHTEt[0]>"+str(x) - - if (obj=='trackerMHT'): - offlinescalingcut = "(trackerMHT[0]>("+str(TrackerMHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerMHT[0]>"+str(x) - - #if (obj=='caloMHT'): - # Not available - # offlinescalingcut = "(caloJetMHT[0]>("+str(CaloMHTOfflineEtCut(x))+"))" - # offlinecut = offlinescalingcut - # onlinecut = " caloJetMHT[0]>"+str(x) - - -#--------------------MET-------------- - - if (obj=='puppiMET'): - offlinescalingcut = "(puppiMETEt>("+str(PuppiMETOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " puppiMETEt>"+str(x) - - if (obj=='trackerMET'): - offlinescalingcut = "(trackerMET>("+str(TrackerMETOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerMET>"+str(x) - - - - - npass = t.GetEntries(offlinecut) - off[obj].append(x) - offrate[obj].append(round(float(npass)/float(ntot)*31038.,1)) - - #print x,round(float(npass)/float(ntot)*31038.,1) - - npass = t.GetEntries(onlinecut) - onl[obj].append(x) - onlrate[obj].append(round(float(npass)/float(ntot)*31038.,1)) - - - x+=cutrange[obj][2] - - - - print "" - print "" - print obj - print "off['"+obj+"'] = ",off[obj] - print "offrate['"+obj+"'] = ",offrate[obj] - print "onl['"+obj+"'] = ",onl[obj] - print "onlrate['"+obj+"'] = ",onlrate[obj] - - rates_file.write("off['"+obj+"'] = "+str(off[obj])) - rates_file.write("\n") - rates_file.write("offrate['"+obj+"'] = "+str(offrate[obj])) - rates_file.write("\n") - rates_file.write("onl['"+obj+"'] = "+str(onl[obj])) - rates_file.write("\n") - rates_file.write("onlrate['"+obj+"'] = "+str(onlrate[obj])) - rates_file.write("\n") - rates_file.write("\n") - rates_file.flush() - os.fsync(rates_file.fileno()) - -rates_file.close() -f.Close() - - - - - diff --git a/rates/plots/rates_emulator_125x.py b/rates/plots/rates_emulator_125x.py deleted file mode 100644 index 4970a211..00000000 --- a/rates/plots/rates_emulator_125x.py +++ /dev/null @@ -1,559 +0,0 @@ -import sys, os -import argparse - -from ROOT import * -from array import * - -gStyle.SetOptStat(0) -TAxis().SetMoreLogLabels(1) - -parser = argparse.ArgumentParser() -parser.add_argument("--outdir", default="testOutput", help="Choose the output directory. Default='%(default)s'") - -args = parser.parse_args() - -outDir = args.outdir -if not os.path.isdir(outDir): - os.mkdir(outDir) -pathToRates = outDir+"/rates.py" - -rates_file = open(pathToRates, 'w') - - -rates_file.write("from array import *\n\n") - -rates_file.write("off = {}\n") -rates_file.write("offrate = {}\n") -rates_file.write("onl = {}\n") -rates_file.write("onlrate = {}\n\n") - - -#f = TFile("/eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/minbias_merged_nTuplesEmu_v22_2.root","READ") -f = TFile("/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/MinBias_TuneCP5_14TeV-pythia8/MinBias_1252_200PU_crb_v27_PU200/230213_192753/L1NtuplePhaseII_Step1_2x.root","READ") - -t = f.Get("l1PhaseIITree/L1PhaseIITree") - -ntot = t.GetEntriesFast() - -off = {} -offrate = {} -onl = {} -onlrate = {} -g_off = {} -g_onl = {} - -h = {} - -#isolation WPs - -iso_EG_barrel = 0.13 -iso_EG_endcap = 0.28 - -iso_gamma_barrel = 0.24 -iso_gamma_endcap = 0.205 - -#tk EG hwQual -tkEG_hwQual = 3 - -#scalings -## Updated on 17/04 using V29 scalings obtained with new menu tools - -### Muons EMU - -#function :: GMTTkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.903751)/1.039495 if abs(Eta)<0.83 else (Et>(offline-0.894300)/1.044889 if abs(Eta)<1.24 else (Et>(offline-0.796396)/1.040808)) -#function :: GMTMuonQualOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.827822)/0.994950 if abs(Eta)<0.83 else (Et>(offline-0.228463)/1.280758 if abs(Eta)<1.24 else (Et>(offline-7.261232)/0.895232)) - -def gmtMuonOfflineEtCutBarrel(offline) : return (offline+0.198)/1.136 -def gmtMuonOfflineEtCutOverlap(offline) : return (offline+2.36)/1.33 -def gmtMuonOfflineEtCutEndcap(offline) : return (offline-11.419)/1.08 - -def gmtTkMuonOfflineEtCutBarrel(offline) : return (offline-0.96)/1.046 -def gmtTkMuonOfflineEtCutOverlap(offline) : return (offline-0.936)/1.052 -def gmtTkMuonOfflineEtCutEndcap(offline) : return (offline-1.024)/1.08 - -#function :: Phase1PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-12.381481)/1.331251 if abs(Eta)<1.5 else (Et>(offline-21.649515)/1.372602 if abs(Eta)<2.4 else (Et>(offline-35.609357)/1.493540)) -def Phase1PuppiJetOfflineEtCutBarrel(offline) : return (offline-15.633)/1.296 -def Phase1PuppiJetOfflineEtCutEndcap(offline) : return (offline-9.644)/1.943 -def Phase1PuppiJetOfflineEtCutForward(offline) : return (offline-72.901)/1.368 - -#function :: Phase1PuppiMHTOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+9.724987)/1.037459 -#function :: Phase1PuppiHT090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-46.674588)/1.113875 -def Phase1PuppiHTOfflineEtCut(offline) : return (offline-52.523)/1.158 -def Phase1PuppiMHTOfflineEtCut(offline) : return (offline-34.33)/1.367 -# Not updated: V27 has slope = 0 -# Cf. https://alobanov.web.cern.ch/L1T/Phase2/menu/plots/tools/V27/scalings/HT.png -def seededConePuppiHTOfflineEtCut(offline) : return (offline-45.124)/1.086 - -#function :: PuppiMET090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-62.120627)/1.382451 -def PuppiMETOfflineEtCut(offline) : return (offline-59.251)/1.499 - -#function :: CaloJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+15.342718)/1.568946 if abs(Eta)<1.5 else (Et>(offline+2.230990)/1.561868 if abs(Eta)<2.4 else (Et>(offline-107.928530)/1.181014)) -def CaloJetOfflineEtCutBarrel(offline) : return (offline-5.569)/1.418 -def CaloJetOfflineEtCutEndcap(offline) : return (offline-11.341)/2.056 -def CaloJetOfflineEtCutForward(offline) : return (offline-66.786)/1.677 - -#THESE ARE WRONG!!! -#function :: CaloHT090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+51.666047)/1.027086 -#function :: CaloHTOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+212.262823)/1.038718 -def CaloHTOfflineEtCut(offline) : return (offline+51.666047)/1.027086 - -#function :: SeededConePuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-14.869526)/1.291966 if abs(Eta)<1.5 else (Et>(offline-24.500087)/1.449829 if abs(Eta)<2.4 else (Et>(offline-53.029951)/1.140808)) -def SeededConePuppiJetOfflineEtCutBarrel(offline) : return (offline-18.869)/1.254 -def SeededConePuppiJetOfflineEtCutEndcap(offline) : return (offline-11.341)/2.056 -def SeededConePuppiJetOfflineEtCutForward(offline) : return (offline-72.901)/1.295 - -#function :: TrackerJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+52.278067)/10.213742 if abs(Eta)<1.5 else (Et>(offline+93.926334)/14.412352) -def TrackerJetOfflineEtCutBarrel(offline) : return (offline+52.278067)/10.213742 -def TrackerJetOfflineEtCutEndcap(offline) : return (offline+93.926334)/14.412352 - -#function :: TrackerMHTOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+72.185871)/3.431230 -#function :: TrackerHT090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+3.448948)/3.780727 -#function :: TrackerMET090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+4.460475)/7.139687 -def TrackerHTOfflineEtCut(offline) : return (offline+25.357)/3.623 -def TrackerMHTOfflineEtCut(offline) : return (offline+72.185871)/3.431230 -def TrackerMETOfflineEtCut(offline) : return (offline+4.460475)/7.139687 - - -#function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.870789)/1.165597 if abs(Eta)<1.5 else (Et>(offline-2.720773)/1.228424) -#function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.617835)/1.182946 if abs(Eta)<1.5 else (Et>(offline-0.336402)/1.275834) -#function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.189054)/1.211045 if abs(Eta)<1.5 else (Et>(offline-0.822056)/1.239274) -#function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.330926)/1.093568 if abs(Eta)<1.5 else (Et>(offline-4.565565)/1.077261) -def EGElectronOfflineEtCutBarrel(offline) : return (offline-2.94)/1.178 -def EGElectronOfflineEtCutEndcap(offline) : return (offline-1.391)/1.253 - -def TkElectronOfflineEtCutBarrel(offline) : return (offline-0.971)/1.185 -def TkElectronOfflineEtCutEndcap(offline) : return (offline+0.318)/1.294 - -def TkIsoElectronOfflineEtCutBarrel(offline) : return (offline-1.063)/1.174 -def TkIsoElectronOfflineEtCutEndcap(offline) : return (offline+0.356)/1.28 - -def TkIsoPhotonOfflineEtCutBarrel(offline) : return (offline-2.36)/1.106 -def TkIsoPhotonOfflineEtCutEndcap(offline) : return (offline-5.017)/1.065 - - -#TAUS -#function :: CaloTau050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+12.754931)/1.247281 if abs(Eta)<1.5 else (Et>(offline+18.755528)/1.373550) -#function :: NNPuppiTau050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+3.439358)/1.141044 if abs(Eta)<1.5 else (Et>(offline+0.756022)/1.146415) -#function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+6.720396)/1.510317 if abs(Eta)<1.5 else (Et>(offline+5.499322)/1.898208) -#function :: NNPuppiTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-3.778738)/1.642246 if abs(Eta)<1.5 else (Et>(offline-14.808886)/1.716542) - -def CaloTauOfflineEtCutBarrel(offline) : return (offline+1.621)/1.497 -def CaloTauOfflineEtCutEndcap(offline) : return (offline+0.391)/1.941 - -def NNTauLooseOfflineEtCutBarrel(offline) : return (offline+5.385)/1.759 -def NNTauLooseOfflineEtCutEndcap(offline) : return (offline-8.553)/1.7 - -#def NNTau2vtxLooseOfflineEtCutBarrel(offline) : return (offline-3.430488)/1.644274 -#def NNTau2vtxLooseOfflineEtCutEndcap(offline) : return (offline-14.530580)/1.728148 - - -cutrange = { - - -'tkMuon':[0.0,78.0,3.0], -'tkMuonBarrel':[0.0,60.0,3.0], -'tkMuonOverlap':[0.0,60.0,3.0], -'tkMuonEndcap':[0.0,60.0,3.0], - -'standaloneMuonBarrel':[0.0,60.0,3.0], -'standaloneMuonOverlap':[0.0,60.0,3.0], -'standaloneMuonEndcap':[0.0,60.0,3.0], -'standaloneMuon':[0.0,78.0,3.0], - -'gmtTkMuon':[0.0,78.0,3.0], -'gmtTkMuonBarrel':[0.0,60.0,3.0], -'gmtTkMuonOverlap':[0.0,60.0,3.0], -'gmtTkMuonEndcap':[0.0,60.0,3.0], - -'gmtMuon':[0.0,78.0,3.0], -'gmtMuonBarrel':[0.0,60.0,3.0], -'gmtMuonOverlap':[0.0,60.0,3.0], -'gmtMuonEndcap':[0.0,60.0,3.0], - -'tkElectron':[10.0,100.0,3.0], -'tkIsoElectron':[10.0,100.0,3.0], -'standaloneElectron':[10.0,100.0,3.0], -'standaloneElectronExt':[10.0,100.0,3.0], - -'tkElectronBarrel':[10.0,70.0,3.0], -'tkIsoElectronBarrel':[10.0,70.0,3.0], -'standaloneElectronBarrel':[10.0,70.0,4.0], - -'tkElectronEndcap':[10.0,70.0,3.0], -'tkIsoElectronEndcap':[10.0,70.0,3.0], -'standaloneElectronEndcap':[10.0,70.0,3.0], - -'tkPhotonIso':[10.0,100.0,3.0], -'standalonePhoton':[10.0,70.0,3.0], - -'tkPhotonIsoBarrel':[10.0,70.0,3.0], -'standalonePhotonBarrel':[10.0,70.0,3.0], - -'tkPhotonIsoEndcap':[10.0,70.0,3.0], -'standalonePhotonEndcap':[10.0,70.0,3.0], - -'puppiPhase1HT':[50.0,1000.0,25.0], -'trackerHT':[50.0,1000.0,25.0], -'caloHT':[50.0,1000.0,25.0], -'seededConePuppiHT':[50.0,1000.0,25.0], - -'puppiPhase1MHT':[50.0,1000.0,25.0], -'trackerMHT':[50.0,1000.0,25.0], - -'puppiMET':[50.0,500.0,25.0], -'trackerMET':[50.0,500.0,25.0], -#'trackerMET':[0.0,500.0,5.0], - - -'seededConePuppiJet':[40.0,440.0,20.0], -'seededConePuppiJetExt':[40.0,440.0,20.0], -'puppiPhase1Jet':[40.0,440.0,20.0], -'puppiPhase1JetExt':[40.0,440.0,20.0], -'trackerJet':[40.0,440.0,20.0], -'caloJet':[40.0,440.0,20.0], -'caloJetExt':[40.0,440.0,20.0], - -'seededConePuppiJet_Barrel':[40.0,440.0,20.0], -'seededConePuppiJet_Endcap':[40.0,440.0,20.0], -'puppiPhase1Jet_Barrel':[40.0,440.0,20.0], -'puppiPhase1Jet_Endcap':[40.0,440.0,20.0], -'caloJet_Barrel':[40.0,440.0,20.0], -'caloJet_Endcap':[40.0,440.0,20.0], - - -'NNPuppiTauLoose':[10.0,160.0,5.0], -'NNPuppiTauLooseBarrel':[10.0,160.0,5.0], -'NNPuppiTauLooseEndcap':[10.0,160.0,5.0], -'NNPuppiTau2vtxLoose':[10.0,160.0,5.0], -'CaloTau':[10.0,160.0,5.0], -'CaloTauBarrel':[10.0,160.0,5.0], -'CaloTauEndcap':[10.0,160.0,5.0], - - -} - -list_calc = [ - 'gmtTkMuon', - 'gmtMuon', - 'gmtMuonEndcap', - 'gmtMuonBarrel', - 'gmtMuonOverlap', - 'tkElectron', - 'tkIsoElectron', - 'standaloneElectron', - 'tkPhotonIso', - 'seededConePuppiJet', - 'seededConePuppiJetExt', - 'puppiPhase1Jet', - 'puppiPhase1JetExt', - 'trackerJet', - 'caloJet', - 'caloJetExt', - 'puppiPhase1HT', - 'trackerHT', - 'caloHT', - 'seededConePuppiHT', - 'puppiPhase1MHT', - 'trackerMHT', - 'puppiMET', - 'trackerMET', - 'NNPuppiTauLoose', - 'NNPuppiTauLooseBarrel', - 'NNPuppiTauLooseEndcap', - # 'NNPuppiTau2vtxLoose', - 'CaloTau', - 'CaloTauBarrel', - 'CaloTauEndcap', - 'seededConePuppiJet_Barrel', - 'seededConePuppiJet_Endcap', - 'puppiPhase1Jet_Barrel', - 'puppiPhase1Jet_Endcap', - 'caloJet_Barrel', - 'caloJet_Endcap', -] - - - - -for obj in list_calc: - - off[obj] = array('d',[]) - offrate[obj] = array('d',[]) - onl[obj] = array('d',[]) - onlrate[obj] = array('d',[]) - - x = cutrange[obj][0] - while (x0.83 && abs(gmtTkMuonEta[])<1.24 && gmtTkMuonPt[]>("+str(gmtTkMuonOfflineEtCutOverlap(x))+")) || (abs(gmtTkMuonEta[])>1.24 && abs(gmtTkMuonEta[])<2.4 && gmtTkMuonPt[]>("+str(gmtTkMuonOfflineEtCutEndcap(x))+")) ))" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtTkMuonEta[])<2.4)>0" - onlinecut = "Sum$(((gmtTkMuonPt[] < 8 && gmtTkMuonQual > 0) || (gmtTkMuonPt[] > 8)) && ((gmtTkMuonPt[]>"+str(x)+" && gmtTkMuonBx[]==0 && abs(gmtTkMuonEta[])<2.4)))>0" - - if (obj=='gmtMuon'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 && gmtMuonQual[]>=12 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])<2.4)>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && abs(gmtMuonEta[])<2.4 && ( ( abs(gmtMuonEta[])<0.83 ) || (abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 && gmtMuonQual[]>=12 ) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4) ) )>0" - - if (obj=='gmtMuonOverlap'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 && gmtMuonQual[]>=12 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24)>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && gmtMuonQual[]>=12 && abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 )>0" - - if (obj=='gmtMuonBarrel'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && gmtMuonQual[]>=12 && abs(gmtMuonEta[])<1.24 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])<0.83 )>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && abs(gmtMuonEta[])<0.83)>0" - - if (obj=='gmtMuonEndcap'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && gmtMuonQual[]>=12 && abs(gmtMuonEta[])<1.24 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4)>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 )>0" - - -#---------------eg----------------- - - - if (obj=='tkElectron'): - offlinescalingcut = "( (abs(tkElectronEta[])<1.479 && tkElectronEt[]>("+str(TkElectronOfflineEtCutBarrel(x))+")) || (abs(tkElectronEta[])>1.479 && tkElectronEt[]>("+str(TkElectronOfflineEtCutEndcap(x))+")) )" - - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronBx[]==0 && tkElectronPassesEleID[] && abs(tkElectronEta[])<2.4)>0" - onlinecut = "Sum$( tkElectronEt[]>"+str(x)+" && tkElectronBx[]==0 && tkElectronPassesEleID[] && abs(tkElectronEta[])<2.4)>0" - - if (obj=='tkIsoElectron'): - offlinescalingcut = "( (abs(tkElectronEta[])<1.479 && tkElectronEt[]>("+str(TkIsoElectronOfflineEtCutBarrel(x))+") && tkElectronTrkIso[]<("+str(iso_EG_barrel)+") ) || (abs(tkElectronEta[])>1.479 && tkElectronEt[]>("+str(TkIsoElectronOfflineEtCutEndcap(x))+") && tkElectronTrkIso[]<("+str(iso_EG_endcap)+") && tkElectronPassesEleID[] ) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronBx[]==0 && abs(tkElectronEta[])<2.4)>0" - onlinecut = "Sum$( ((abs(tkElectronEta[])<1.479 && tkElectronEt[]>("+str(x)+") && tkElectronTrkIso[]<("+str(iso_EG_barrel)+")) || (abs(tkElectronEta[])>1.479 && tkElectronEt[]>("+str(x)+") && tkElectronTrkIso[]<("+str(iso_EG_endcap)+") && tkElectronPassesEleID)) && tkElectronBx[]==0 && abs(tkElectronEta[])<2.4)>0" - - if (obj=='standaloneElectron'): - offlinescalingcut = "( (abs(EGEta[])<1.479 && EGEt[]>("+str(EGElectronOfflineEtCutBarrel(x))+")) || (abs(EGEta[])>1.479 && EGEt[]>("+str(EGElectronOfflineEtCutEndcap(x))+")) )" - # offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && EGPassesEleID[] && abs(EGEta[])<2.4)>0" - # onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && EGPassesEleID[] && abs(EGEta[])<2.4)>0" - - IDcut = "(!EGHGC[] && EGPassesEleID[]) || (EGHGC[] && EGPassesSaID[])" - #IDcut = "(abs(EGEta[])<1.479 && EGPassesEleID[]) || (abs(EGEta[])>=1.479 && EGPassesSaID[])" - offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && (" + IDcut + ") && abs(EGEta[])<2.4)>0" - onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && ("+ IDcut +") && abs(EGEta[])<2.4)>0" - - - if (obj=='tkPhotonIso'): - offlinescalingcut = "( (abs(tkPhotonEta[])<1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutBarrel(x))+")) || (abs(tkPhotonEta[])>1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutEndcap(x))+")) )" - IDcut = "(!tkPhotonHGC[] && tkPhotonPassesEleID[]) || (tkPhotonHGC[] && tkPhotonPassesPhoID[])" - - - offlinecut = "Sum$( "+offlinescalingcut+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_barrel)+ " ) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_endcap)+") ) && tkPhotonBx[]==0 && (" + IDcut + ") && abs(tkPhotonEta[])<2.4)>0" - onlinecut = "Sum$( tkPhotonEt[]>"+str(x)+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_barrel)+" ) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_endcap)+") ) && tkPhotonBx[]==0 && (" + IDcut + ") && abs(tkPhotonEta[])<2.4)>0" - - - -#---------------taus----------------TO BE FILLED - - if (obj=='NNPuppiTauLoose'): - offlinescalingcut = "( (abs(nnTauEta[])<1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutBarrel(x))+")) || (abs(nnTauEta[])>1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<2.4)>0" - onlinecut = "Sum$( nnTauEt[]>"+str(x)+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<2.4)>0" - - if (obj=='NNPuppiTauLooseBarrel'): - offlinescalingcut = "( (abs(nnTauEta[])<1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutBarrel(x))+")) || (abs(nnTauEta[])>1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<1.5)>0" - onlinecut = "Sum$( nnTauEt[]>"+str(x)+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<1.5)>0" - - if (obj=='NNPuppiTauLooseEndcap'): - offlinescalingcut = "( (abs(nnTauEta[])<1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutBarrel(x))+")) || (abs(nnTauEta[])>1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])>1.5)>0" - onlinecut = "Sum$( nnTauEt[]>"+str(x)+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])>1.5)>0" - - if (obj=='NNPuppiTau2vtxLoose'): - offlinescalingcut = "( (abs(nnTau2vtxEta[])<1.5 && nnTau2vtxEt[]>("+str(NNTau2vtxLooseOfflineEtCutBarrel(x))+")) || (abs(nnTau2vtxEta[])>1.5 && nnTau2vtxEt[]>("+str(NNTau2vtxLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTau2vtxPassLooseNN[]>0 && abs(nnTau2vtxEta[])<2.4)>0" - onlinecut = "Sum$( nnTau2vtxEt[]>"+str(x)+" && nnTau2vtxPassLooseNN[]>0 && abs(nnTau2vtxEta[])<2.4)>0" - - if (obj=='CaloTau'): - offlinescalingcut = "( (abs(caloTauEta[])<1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutBarrel(x))+")) || (abs(caloTauEta[])>1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloTauEta[])<2.4)>0" - onlinecut = "Sum$( caloTauEt[]>"+str(x)+" && abs(caloTauEta[])<2.4)>0" - - if (obj=='CaloTauBarrel'): - offlinescalingcut = "( (abs(caloTauEta[])<1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutBarrel(x))+")) || (abs(caloTauEta[])>1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloTauEta[])<1.5)>0" - onlinecut = "Sum$( caloTauEt[]>"+str(x)+" && abs(caloTauEta[])<1.5)>0" - - if (obj=='CaloTauEndcap'): - offlinescalingcut = "( (abs(caloTauEta[])<1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutBarrel(x))+")) || (abs(caloTauEta[])>1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloTauEta[])>1.5 && abs(caloTauEta[])<2.4)>0" - onlinecut = "Sum$( caloTauEt[]>"+str(x)+" && abs(caloTauEta[])>1.5 && abs(caloTauEta[])<2.4)>0" - - -#----------------jets--------------- - - if (obj=='seededConePuppiJet'): - offlinescalingcut = "( (abs(seededConePuppiJetEta[])<1.5 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutBarrel(x))+")) || (abs(seededConePuppiJetEta[])>1.5 && abs(seededConePuppiJetEta[])<2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutEndcap(x))+")) || (abs(seededConePuppiJetEta[])>2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(seededConePuppiJetEta[])<2.4)>0" - onlinecut = "Sum$( seededConePuppiJetEt[]>"+str(x)+" && abs(seededConePuppiJetEta[])<2.4)>0" - - if (obj=='seededConePuppiJetExt'): - offlinescalingcut = "( (abs(seededConePuppiJetEta[])<1.5 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutBarrel(x))+")) || (abs(seededConePuppiJetEta[])>1.5 && abs(seededConePuppiJetEta[])<2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutEndcap(x))+")) || (abs(seededConePuppiJetEta[])>2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(seededConePuppiJetEta[])<5)>0" - onlinecut = "Sum$( seededConePuppiJetEt[]>"+str(x)+" && abs(seededConePuppiJetEta[])<5)>0" - - if (obj=='puppiPhase1Jet'): - offlinescalingcut = "( (abs(phase1PuppiJetEta[])<1.5 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutBarrel(x))+")) || (abs(phase1PuppiJetEta[])>1.5 && abs(phase1PuppiJetEta[])<2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutEndcap(x))+")) || (abs(phase1PuppiJetEta[])>2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(phase1PuppiJetEta[])<2.4)>0" - onlinecut = "Sum$( phase1PuppiJetEt[]>"+str(x)+" && abs(phase1PuppiJetEta[])<2.4)>0" - - if (obj=='puppiPhase1JetExt'): - offlinescalingcut = "( (abs(phase1PuppiJetEta[])<1.5 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutBarrel(x))+")) || (abs(phase1PuppiJetEta[])>1.5 && abs(phase1PuppiJetEta[])<2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutEndcap(x))+")) || (abs(phase1PuppiJetEta[])>2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(phase1PuppiJetEta[])<5)>0" - onlinecut = "Sum$( phase1PuppiJetEt[]>"+str(x)+" && abs(phase1PuppiJetEta[])<5)>0" - - if (obj=='trackerJet'): - offlinescalingcut = "( (abs(trackerJetEta[])<1.5 && trackerJetPt[]>("+str(TrackerJetOfflineEtCutBarrel(x))+")) || (abs(trackerJetEta[])>1.5 && trackerJetPt[]>("+str(TrackerJetOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(trackerJetEta[])<2.4)>0" - onlinecut = "Sum$( trackerJetPt[]>"+str(x)+" && abs(trackerJetEta[])<2.4)>0" - - if (obj=='caloJet'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])<2.4)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])<2.4)>0" - - if (obj=='caloJetExt'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])<5)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])<5)>0" - -### SPLIT JET IN BARREL AND ENDCAP - if (obj=='seededConePuppiJet_Barrel'): - offlinescalingcut = "( (abs(seededConePuppiJetEta[])<1.5 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutBarrel(x))+")) || (abs(seededConePuppiJetEta[])>1.5 && abs(seededConePuppiJetEta[])<2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutEndcap(x))+")) || (abs(seededConePuppiJetEta[])>2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(seededConePuppiJetEta[])<1.5)>0" - onlinecut = "Sum$( seededConePuppiJetEt[]>"+str(x)+" && abs(seededConePuppiJetEta[])<1.5)>0" - - if (obj=='seededConePuppiJet_Endcap'): - offlinescalingcut = "( (abs(seededConePuppiJetEta[])<1.5 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutBarrel(x))+")) || (abs(seededConePuppiJetEta[])>1.5 && abs(seededConePuppiJetEta[])<2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutEndcap(x))+")) || (abs(seededConePuppiJetEta[])>2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(seededConePuppiJetEta[])>1.5)>0" - onlinecut = "Sum$( seededConePuppiJetEt[]>"+str(x)+" && abs(seededConePuppiJetEta[])>1.5)>0" - - if (obj=='puppiPhase1Jet_Barrel'): - offlinescalingcut = "( (abs(phase1PuppiJetEta[])<1.5 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutBarrel(x))+")) || (abs(phase1PuppiJetEta[])>1.5 && abs(phase1PuppiJetEta[])<2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutEndcap(x))+")) || (abs(phase1PuppiJetEta[])>2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(phase1PuppiJetEta[])<1.5)>0" - onlinecut = "Sum$( phase1PuppiJetEt[]>"+str(x)+" && abs(phase1PuppiJetEta[])<1.5)>0" - - if (obj=='puppiPhase1Jet_Endcap'): - offlinescalingcut = "( (abs(phase1PuppiJetEta[])<1.5 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutBarrel(x))+")) || (abs(phase1PuppiJetEta[])>1.5 && abs(phase1PuppiJetEta[])<2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutEndcap(x))+")) || (abs(phase1PuppiJetEta[])>2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(phase1PuppiJetEta[])>1.5)>0" - onlinecut = "Sum$( phase1PuppiJetEt[]>"+str(x)+" && abs(phase1PuppiJetEta[])>1.5)>0" - - if (obj=='caloJet_Barrel'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])<1.5)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])<1.5)>0" - if (obj=='caloJet_Endcap'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])>1.5)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])>1.5)>0" - -#--------------------HT-------------------- - - if (obj=='seededConePuppiHT'): - #Not available - offlinescalingcut = "(seededConePuppiHT[0]>("+str(seededConePuppiHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " seededConePuppiHT[0]>"+str(x) - - if (obj=='puppiPhase1HT'): - offlinescalingcut = "(phase1PuppiHT[0]>("+str(Phase1PuppiHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " phase1PuppiHT[0]>"+str(x) - - if (obj=='trackerHT'): - offlinescalingcut = "(trackerHT[0]>("+str(TrackerHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerHT[0]>"+str(x) - - if (obj=='caloHT'): - offlinescalingcut = "(caloJetHT[0]>("+str(CaloHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " caloJetHT[0]>"+str(x) - -#--------------------MHT----------------- - - #if (obj=='seededConePuppiMHT'): - #Not available - # offlinescalingcut = "(seededConePuppiMHT[0]>("+str(seededConePuppiMHTOfflineEtCut(x))+"))" - # offlinecut = offlinescalingcut - # onlinecut = " seededConePuppiMHT[0]>"+str(x) - - if (obj=='puppiPhase1MHT'): - offlinescalingcut = "(phase1PuppiMHTEt[0]>("+str(Phase1PuppiMHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " phase1PuppiMHTEt[0]>"+str(x) - - if (obj=='trackerMHT'): - offlinescalingcut = "(trackerMHT[0]>("+str(TrackerMHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerMHT[0]>"+str(x) - - #if (obj=='caloMHT'): - # Not available - # offlinescalingcut = "(caloJetMHT[0]>("+str(CaloMHTOfflineEtCut(x))+"))" - # offlinecut = offlinescalingcut - # onlinecut = " caloJetMHT[0]>"+str(x) - - -#--------------------MET-------------- - - if (obj=='puppiMET'): - offlinescalingcut = "(puppiMETEt>("+str(PuppiMETOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " puppiMETEt>"+str(x) - - if (obj=='trackerMET'): - offlinescalingcut = "(trackerMET>("+str(TrackerMETOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerMET>"+str(x) - - - - - npass = t.GetEntries(offlinecut) - off[obj].append(x) - offrate[obj].append(round(float(npass)/float(ntot)*31038.,1)) - - #print x,round(float(npass)/float(ntot)*31038.,1) - - npass = t.GetEntries(onlinecut) - onl[obj].append(x) - onlrate[obj].append(round(float(npass)/float(ntot)*31038.,1)) - - - x+=cutrange[obj][2] - - - - print "" - print "" - print obj - print "off['"+obj+"'] = ",off[obj] - print "offrate['"+obj+"'] = ",offrate[obj] - print "onl['"+obj+"'] = ",onl[obj] - print "onlrate['"+obj+"'] = ",onlrate[obj] - - rates_file.write("off['"+obj+"'] = "+str(off[obj])) - rates_file.write("\n") - rates_file.write("offrate['"+obj+"'] = "+str(offrate[obj])) - rates_file.write("\n") - rates_file.write("onl['"+obj+"'] = "+str(onl[obj])) - rates_file.write("\n") - rates_file.write("onlrate['"+obj+"'] = "+str(onlrate[obj])) - rates_file.write("\n") - rates_file.write("\n") - rates_file.flush() - os.fsync(rates_file.fileno()) - -rates_file.close() -f.Close() \ No newline at end of file diff --git a/rates/plots/rates_emulator_125x_v29.py b/rates/plots/rates_emulator_125x_v29.py deleted file mode 100644 index b63c4ceb..00000000 --- a/rates/plots/rates_emulator_125x_v29.py +++ /dev/null @@ -1,557 +0,0 @@ -import sys, os -import argparse - -from ROOT import * -from array import * - -gStyle.SetOptStat(0) -TAxis().SetMoreLogLabels(1) - -parser = argparse.ArgumentParser() -parser.add_argument("--outdir", default="testOutput", help="Choose the output directory. Default='%(default)s'") - -args = parser.parse_args() - -outDir = args.outdir -if not os.path.isdir(outDir): - os.mkdir(outDir) -pathToRates = outDir+"/rates.py" - -rates_file = open(pathToRates, 'w') - - -rates_file.write("from array import *\n\n") - -rates_file.write("off = {}\n") -rates_file.write("offrate = {}\n") -rates_file.write("onl = {}\n") -rates_file.write("onlrate = {}\n\n") - - -#f = TFile("/eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/minbias_merged_nTuplesEmu_v22_2.root","READ") -#f = TFile("/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/MinBias_TuneCP5_14TeV-pythia8/MinBias_1252_200PU_crb_v27_PU200/230213_192753/L1NtuplePhaseII_Step1_2x.root","READ") -f = TFile("/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_9x.root","READ") -t = f.Get("l1PhaseIITree/L1PhaseIITree") - -ntot = t.GetEntriesFast() - -off = {} -offrate = {} -onl = {} -onlrate = {} -g_off = {} -g_onl = {} - -h = {} - -#isolation WPs - -iso_EG_barrel = 0.13 -iso_EG_endcap = 0.28 - -iso_gamma_barrel = 0.24 -iso_gamma_endcap = 0.205 - -#tk EG hwQual -tkEG_hwQual = 3 - -#scalings -## Updated on 17/04 using V29 scalings obtained with new menu tools - -### Muons EMU - -#function :: GMTTkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.903751)/1.039495 if abs(Eta)<0.83 else (Et>(offline-0.894300)/1.044889 if abs(Eta)<1.24 else (Et>(offline-0.796396)/1.040808)) -#function :: GMTMuonQualOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.827822)/0.994950 if abs(Eta)<0.83 else (Et>(offline-0.228463)/1.280758 if abs(Eta)<1.24 else (Et>(offline-7.261232)/0.895232)) - -def gmtMuonOfflineEtCutBarrel(offline) : return (offline+0.238)/1.137 -def gmtMuonOfflineEtCutOverlap(offline) : return (offline+2.569)/1.346 -def gmtMuonOfflineEtCutEndcap(offline) : return (offline-11.219)/1.503 - -def gmtTkMuonOfflineEtCutBarrel(offline) : return (offline-0.988)/1.049 -def gmtTkMuonOfflineEtCutOverlap(offline) : return (offline-1.075)/1.052 -def gmtTkMuonOfflineEtCutEndcap(offline) : return (offline-1.333)/1.07 - -#function :: Phase1PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-12.381481)/1.331251 if abs(Eta)<1.5 else (Et>(offline-21.649515)/1.372602 if abs(Eta)<2.4 else (Et>(offline-35.609357)/1.493540)) -def Phase1PuppiJetOfflineEtCutBarrel(offline) : return (offline-15.497)/1.383 -def Phase1PuppiJetOfflineEtCutEndcap(offline) : return (offline-9.362)/1.959 -def Phase1PuppiJetOfflineEtCutForward(offline) : return (offline-75.542)/1.41 - -#function :: Phase1PuppiMHTOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+9.724987)/1.037459 -#function :: Phase1PuppiHT090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-46.674588)/1.113875 -def Phase1PuppiHTOfflineEtCut(offline) : return (offline-51.672)/1.099 -def Phase1PuppiMHTOfflineEtCut(offline) : return (offline-48.725)/1.324 -def seededConePuppiHTOfflineEtCut(offline) : return (offline-45.124)/1.086 - -#function :: PuppiMET090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-62.120627)/1.382451 -def PuppiMETOfflineEtCut(offline) : return (offline-64.337)/1.461 - -#function :: CaloJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+15.342718)/1.568946 if abs(Eta)<1.5 else (Et>(offline+2.230990)/1.561868 if abs(Eta)<2.4 else (Et>(offline-107.928530)/1.181014)) -def CaloJetOfflineEtCutBarrel(offline) : return (offline+0.141)/1.511 -def CaloJetOfflineEtCutEndcap(offline) : return (offline+12.63)/2.291 -def CaloJetOfflineEtCutForward(offline) : return (offline-81.505)/1.587 - -#THESE ARE WRONG!!! -#function :: CaloHT090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+51.666047)/1.027086 -#function :: CaloHTOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+212.262823)/1.038718 -def CaloHTOfflineEtCut(offline) : return (offline+51.666047)/1.027086 - -#function :: SeededConePuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-14.869526)/1.291966 if abs(Eta)<1.5 else (Et>(offline-24.500087)/1.449829 if abs(Eta)<2.4 else (Et>(offline-53.029951)/1.140808)) -def SeededConePuppiJetOfflineEtCutBarrel(offline) : return (offline-20.108)/1.308 -def SeededConePuppiJetOfflineEtCutEndcap(offline) : return (offline-7.971)/2.05 -def SeededConePuppiJetOfflineEtCutForward(offline) : return (offline-72.567)/1.418 - -#function :: TrackerJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+52.278067)/10.213742 if abs(Eta)<1.5 else (Et>(offline+93.926334)/14.412352) -def TrackerJetOfflineEtCutBarrel(offline) : return (offline+52.278067)/10.213742 -def TrackerJetOfflineEtCutEndcap(offline) : return (offline+93.926334)/14.412352 - -#function :: TrackerMHTOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+72.185871)/3.431230 -#function :: TrackerHT090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+3.448948)/3.780727 -#function :: TrackerMET090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+4.460475)/7.139687 -def TrackerHTOfflineEtCut(offline) : return (offline+25.357)/3.623 -def TrackerMHTOfflineEtCut(offline) : return (offline+72.185871)/3.431230 -def TrackerMETOfflineEtCut(offline) : return (offline+4.460475)/7.139687 - - -#function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.870789)/1.165597 if abs(Eta)<1.5 else (Et>(offline-2.720773)/1.228424) -#function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.617835)/1.182946 if abs(Eta)<1.5 else (Et>(offline-0.336402)/1.275834) -#function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.189054)/1.211045 if abs(Eta)<1.5 else (Et>(offline-0.822056)/1.239274) -#function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.330926)/1.093568 if abs(Eta)<1.5 else (Et>(offline-4.565565)/1.077261) -def EGElectronOfflineEtCutBarrel(offline) : return (offline-2.707)/1.188 -def EGElectronOfflineEtCutEndcap(offline) : return (offline-1.572)/1.249 - -def TkElectronOfflineEtCutBarrel(offline) : return (offline-1.441)/1.159 -def TkElectronOfflineEtCutEndcap(offline) : return (offline-1.256)/1.217 - -def TkIsoElectronOfflineEtCutBarrel(offline) : return (offline-1.638)/1.144 -def TkIsoElectronOfflineEtCutEndcap(offline) : return (offline-1.219)/1.214 - -def TkIsoPhotonOfflineEtCutBarrel(offline) : return (offline-2.697)/1.096 -def TkIsoPhotonOfflineEtCutEndcap(offline) : return (offline-5.038)/1.067 - - -#TAUS -#function :: CaloTau050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+12.754931)/1.247281 if abs(Eta)<1.5 else (Et>(offline+18.755528)/1.373550) -#function :: NNPuppiTau050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+3.439358)/1.141044 if abs(Eta)<1.5 else (Et>(offline+0.756022)/1.146415) -#function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+6.720396)/1.510317 if abs(Eta)<1.5 else (Et>(offline+5.499322)/1.898208) -#function :: NNPuppiTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-3.778738)/1.642246 if abs(Eta)<1.5 else (Et>(offline-14.808886)/1.716542) - -def CaloTauOfflineEtCutBarrel(offline) : return (offline+2.381)/1.521 -def CaloTauOfflineEtCutEndcap(offline) : return (offline-0.045)/1.937 - -def NNTauLooseOfflineEtCutBarrel(offline) : return (offline+2.871)/1.92 -def NNTauLooseOfflineEtCutEndcap(offline) : return (offline-21.639)/1.551 - -#def NNTau2vtxLooseOfflineEtCutBarrel(offline) : return (offline-3.430488)/1.644274 -#def NNTau2vtxLooseOfflineEtCutEndcap(offline) : return (offline-14.530580)/1.728148 - - -cutrange = { - - -'tkMuon':[0.0,78.0,3.0], -'tkMuonBarrel':[0.0,60.0,3.0], -'tkMuonOverlap':[0.0,60.0,3.0], -'tkMuonEndcap':[0.0,60.0,3.0], - -'standaloneMuonBarrel':[0.0,60.0,3.0], -'standaloneMuonOverlap':[0.0,60.0,3.0], -'standaloneMuonEndcap':[0.0,60.0,3.0], -'standaloneMuon':[0.0,78.0,3.0], - -'gmtTkMuon':[0.0,78.0,3.0], -'gmtTkMuonBarrel':[0.0,60.0,3.0], -'gmtTkMuonOverlap':[0.0,60.0,3.0], -'gmtTkMuonEndcap':[0.0,60.0,3.0], - -'gmtMuon':[0.0,78.0,3.0], -'gmtMuonBarrel':[0.0,60.0,3.0], -'gmtMuonOverlap':[0.0,60.0,3.0], -'gmtMuonEndcap':[0.0,60.0,3.0], - -'tkElectron':[10.0,100.0,3.0], -'tkIsoElectron':[10.0,100.0,3.0], -'standaloneElectron':[10.0,100.0,3.0], -'standaloneElectronExt':[10.0,100.0,3.0], - -'tkElectronBarrel':[10.0,70.0,3.0], -'tkIsoElectronBarrel':[10.0,70.0,3.0], -'standaloneElectronBarrel':[10.0,70.0,4.0], - -'tkElectronEndcap':[10.0,70.0,3.0], -'tkIsoElectronEndcap':[10.0,70.0,3.0], -'standaloneElectronEndcap':[10.0,70.0,3.0], - -'tkPhotonIso':[10.0,100.0,3.0], -'standalonePhoton':[10.0,70.0,3.0], - -'tkPhotonIsoBarrel':[10.0,70.0,3.0], -'standalonePhotonBarrel':[10.0,70.0,3.0], - -'tkPhotonIsoEndcap':[10.0,70.0,3.0], -'standalonePhotonEndcap':[10.0,70.0,3.0], - -'puppiPhase1HT':[50.0,1000.0,25.0], -'trackerHT':[50.0,1000.0,25.0], -'caloHT':[50.0,1000.0,25.0], -'seededConePuppiHT':[50.0,1000.0,25.0], - -'puppiPhase1MHT':[50.0,1000.0,25.0], -'trackerMHT':[50.0,1000.0,25.0], - -'puppiMET':[50.0,500.0,25.0], -'trackerMET':[50.0,500.0,25.0], -#'trackerMET':[0.0,500.0,5.0], - - -'seededConePuppiJet':[40.0,440.0,20.0], -'seededConePuppiJetExt':[40.0,440.0,20.0], -'puppiPhase1Jet':[40.0,440.0,20.0], -'puppiPhase1JetExt':[40.0,440.0,20.0], -'trackerJet':[40.0,440.0,20.0], -'caloJet':[40.0,440.0,20.0], -'caloJetExt':[40.0,440.0,20.0], - -'seededConePuppiJet_Barrel':[40.0,440.0,20.0], -'seededConePuppiJet_Endcap':[40.0,440.0,20.0], -'puppiPhase1Jet_Barrel':[40.0,440.0,20.0], -'puppiPhase1Jet_Endcap':[40.0,440.0,20.0], -'caloJet_Barrel':[40.0,440.0,20.0], -'caloJet_Endcap':[40.0,440.0,20.0], - - -'NNPuppiTauLoose':[10.0,160.0,5.0], -'NNPuppiTauLooseBarrel':[10.0,160.0,5.0], -'NNPuppiTauLooseEndcap':[10.0,160.0,5.0], -'NNPuppiTau2vtxLoose':[10.0,160.0,5.0], -'CaloTau':[10.0,160.0,5.0], -'CaloTauBarrel':[10.0,160.0,5.0], -'CaloTauEndcap':[10.0,160.0,5.0], - - -} - -list_calc = [ - 'gmtTkMuon', - 'gmtMuon', - 'gmtMuonEndcap', - 'gmtMuonBarrel', - 'gmtMuonOverlap', - 'tkElectron', - 'tkIsoElectron', - 'standaloneElectron', - 'tkPhotonIso', - 'seededConePuppiJet', - 'seededConePuppiJetExt', - 'puppiPhase1Jet', - 'puppiPhase1JetExt', - 'trackerJet', - 'caloJet', - 'caloJetExt', - 'puppiPhase1HT', - 'trackerHT', - 'caloHT', - 'seededConePuppiHT', - 'puppiPhase1MHT', - 'trackerMHT', - 'puppiMET', - 'trackerMET', - 'NNPuppiTauLoose', - 'NNPuppiTauLooseBarrel', - 'NNPuppiTauLooseEndcap', - # 'NNPuppiTau2vtxLoose', - 'CaloTau', - 'CaloTauBarrel', - 'CaloTauEndcap', - 'seededConePuppiJet_Barrel', - 'seededConePuppiJet_Endcap', - 'puppiPhase1Jet_Barrel', - 'puppiPhase1Jet_Endcap', - 'caloJet_Barrel', - 'caloJet_Endcap', -] - - - - -for obj in list_calc: - - off[obj] = array('d',[]) - offrate[obj] = array('d',[]) - onl[obj] = array('d',[]) - onlrate[obj] = array('d',[]) - - x = cutrange[obj][0] - while (x0.83 && abs(gmtTkMuonEta[])<1.24 && gmtTkMuonPt[]>("+str(gmtTkMuonOfflineEtCutOverlap(x))+")) || (abs(gmtTkMuonEta[])>1.24 && abs(gmtTkMuonEta[])<2.4 && gmtTkMuonPt[]>("+str(gmtTkMuonOfflineEtCutEndcap(x))+")) ))" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtTkMuonEta[])<2.4)>0" - onlinecut = "Sum$(((gmtTkMuonPt[] < 8 && gmtTkMuonQual > 0) || (gmtTkMuonPt[] > 8)) && ((gmtTkMuonPt[]>"+str(x)+" && gmtTkMuonBx[]==0 && abs(gmtTkMuonEta[])<2.4)))>0" - - if (obj=='gmtMuon'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 && gmtMuonQual[]>=12 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])<2.4)>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && abs(gmtMuonEta[])<2.4 && ( ( abs(gmtMuonEta[])<0.83 ) || (abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 && gmtMuonQual[]>=12 ) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4) ) )>0" - - if (obj=='gmtMuonOverlap'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 && gmtMuonQual[]>=12 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24)>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && gmtMuonQual[]>=12 && abs(gmtMuonEta[])>0.83 && abs(gmtMuonEta[])<1.24 )>0" - - if (obj=='gmtMuonBarrel'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && gmtMuonQual[]>=12 && abs(gmtMuonEta[])<1.24 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])<0.83 )>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && abs(gmtMuonEta[])<0.83)>0" - - if (obj=='gmtMuonEndcap'): - offlinescalingcut = "( ( abs(gmtMuonEta[])<0.83 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutBarrel(x))+")) || (abs(gmtMuonEta[])>0.83 && gmtMuonQual[]>=12 && abs(gmtMuonEta[])<1.24 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutOverlap(x))+")) || (abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 && gmtMuonPt[]>("+str(gmtMuonOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4)>0" - onlinecut = "Sum$( gmtMuonPt[]>"+str(x)+" && gmtMuonBx[]==0 && abs(gmtMuonEta[])>1.24 && abs(gmtMuonEta[])<2.4 )>0" - - -#---------------eg----------------- - - - if (obj=='tkElectron'): - offlinescalingcut = "( (abs(tkElectronEta[])<1.479 && tkElectronEt[]>("+str(TkElectronOfflineEtCutBarrel(x))+")) || (abs(tkElectronEta[])>1.479 && tkElectronEt[]>("+str(TkElectronOfflineEtCutEndcap(x))+")) )" - - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronBx[]==0 && tkElectronPassesEleID[] && abs(tkElectronEta[])<2.4)>0" - onlinecut = "Sum$( tkElectronEt[]>"+str(x)+" && tkElectronBx[]==0 && tkElectronPassesEleID[] && abs(tkElectronEta[])<2.4)>0" - - if (obj=='tkIsoElectron'): - offlinescalingcut = "( (abs(tkElectronEta[])<1.479 && tkElectronEt[]>("+str(TkIsoElectronOfflineEtCutBarrel(x))+") && tkElectronTrkIso[]<("+str(iso_EG_barrel)+") ) || (abs(tkElectronEta[])>1.479 && tkElectronEt[]>("+str(TkIsoElectronOfflineEtCutEndcap(x))+") && tkElectronTrkIso[]<("+str(iso_EG_endcap)+") && tkElectronPassesEleID[] ) )" - offlinecut = "Sum$( "+offlinescalingcut+" && tkElectronBx[]==0 && abs(tkElectronEta[])<2.4)>0" - onlinecut = "Sum$( ((abs(tkElectronEta[])<1.479 && tkElectronEt[]>("+str(x)+") && tkElectronTrkIso[]<("+str(iso_EG_barrel)+")) || (abs(tkElectronEta[])>1.479 && tkElectronEt[]>("+str(x)+") && tkElectronTrkIso[]<("+str(iso_EG_endcap)+") && tkElectronPassesEleID)) && tkElectronBx[]==0 && abs(tkElectronEta[])<2.4)>0" - - if (obj=='standaloneElectron'): - offlinescalingcut = "( (abs(EGEta[])<1.479 && EGEt[]>("+str(EGElectronOfflineEtCutBarrel(x))+")) || (abs(EGEta[])>1.479 && EGEt[]>("+str(EGElectronOfflineEtCutEndcap(x))+")) )" - # offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && EGPassesEleID[] && abs(EGEta[])<2.4)>0" - # onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && EGPassesEleID[] && abs(EGEta[])<2.4)>0" - - IDcut = "(!EGHGC[] && EGPassesEleID[]) || (EGHGC[] && EGPassesSaID[])" - #IDcut = "(abs(EGEta[])<1.479 && EGPassesEleID[]) || (abs(EGEta[])>=1.479 && EGPassesSaID[])" - offlinecut = "Sum$( "+offlinescalingcut+" && EGBx[]==0 && (" + IDcut + ") && abs(EGEta[])<2.4)>0" - onlinecut = "Sum$( EGEt[]>"+str(x)+" && EGBx[]==0 && ("+ IDcut +") && abs(EGEta[])<2.4)>0" - - - if (obj=='tkPhotonIso'): - offlinescalingcut = "( (abs(tkPhotonEta[])<1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutBarrel(x))+")) || (abs(tkPhotonEta[])>1.479 && tkPhotonEt[]>("+str(TkIsoPhotonOfflineEtCutEndcap(x))+")) )" - IDcut = "(!tkPhotonHGC[] && tkPhotonPassesEleID[]) || (tkPhotonHGC[] && tkPhotonPassesPhoID[])" - - - offlinecut = "Sum$( "+offlinescalingcut+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_barrel)+ " ) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_endcap)+") ) && tkPhotonBx[]==0 && (" + IDcut + ") && abs(tkPhotonEta[])<2.4)>0" - onlinecut = "Sum$( tkPhotonEt[]>"+str(x)+" && ( (abs(tkPhotonEta[])<1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_barrel)+" ) || (abs(tkPhotonEta[])>1.479 && tkPhotonTrkIso[]<"+str(iso_gamma_endcap)+") ) && tkPhotonBx[]==0 && (" + IDcut + ") && abs(tkPhotonEta[])<2.4)>0" - - - -#---------------taus----------------TO BE FILLED - - if (obj=='NNPuppiTauLoose'): - offlinescalingcut = "( (abs(nnTauEta[])<1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutBarrel(x))+")) || (abs(nnTauEta[])>1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<2.4)>0" - onlinecut = "Sum$( nnTauEt[]>"+str(x)+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<2.4)>0" - - if (obj=='NNPuppiTauLooseBarrel'): - offlinescalingcut = "( (abs(nnTauEta[])<1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutBarrel(x))+")) || (abs(nnTauEta[])>1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<1.5)>0" - onlinecut = "Sum$( nnTauEt[]>"+str(x)+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])<1.5)>0" - - if (obj=='NNPuppiTauLooseEndcap'): - offlinescalingcut = "( (abs(nnTauEta[])<1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutBarrel(x))+")) || (abs(nnTauEta[])>1.5 && nnTauEt[]>("+str(NNTauLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])>1.5)>0" - onlinecut = "Sum$( nnTauEt[]>"+str(x)+" && nnTauPassLooseNN[]>0 && abs(nnTauEta[])>1.5)>0" - - if (obj=='NNPuppiTau2vtxLoose'): - offlinescalingcut = "( (abs(nnTau2vtxEta[])<1.5 && nnTau2vtxEt[]>("+str(NNTau2vtxLooseOfflineEtCutBarrel(x))+")) || (abs(nnTau2vtxEta[])>1.5 && nnTau2vtxEt[]>("+str(NNTau2vtxLooseOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && nnTau2vtxPassLooseNN[]>0 && abs(nnTau2vtxEta[])<2.4)>0" - onlinecut = "Sum$( nnTau2vtxEt[]>"+str(x)+" && nnTau2vtxPassLooseNN[]>0 && abs(nnTau2vtxEta[])<2.4)>0" - - if (obj=='CaloTau'): - offlinescalingcut = "( (abs(caloTauEta[])<1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutBarrel(x))+")) || (abs(caloTauEta[])>1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloTauEta[])<2.4)>0" - onlinecut = "Sum$( caloTauEt[]>"+str(x)+" && abs(caloTauEta[])<2.4)>0" - - if (obj=='CaloTauBarrel'): - offlinescalingcut = "( (abs(caloTauEta[])<1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutBarrel(x))+")) || (abs(caloTauEta[])>1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloTauEta[])<1.5)>0" - onlinecut = "Sum$( caloTauEt[]>"+str(x)+" && abs(caloTauEta[])<1.5)>0" - - if (obj=='CaloTauEndcap'): - offlinescalingcut = "( (abs(caloTauEta[])<1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutBarrel(x))+")) || (abs(caloTauEta[])>1.5 && caloTauEt[]>("+str(CaloTauOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloTauEta[])>1.5 && abs(caloTauEta[])<2.4)>0" - onlinecut = "Sum$( caloTauEt[]>"+str(x)+" && abs(caloTauEta[])>1.5 && abs(caloTauEta[])<2.4)>0" - - -#----------------jets--------------- - - if (obj=='seededConePuppiJet'): - offlinescalingcut = "( (abs(seededConePuppiJetEta[])<1.5 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutBarrel(x))+")) || (abs(seededConePuppiJetEta[])>1.5 && abs(seededConePuppiJetEta[])<2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutEndcap(x))+")) || (abs(seededConePuppiJetEta[])>2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(seededConePuppiJetEta[])<2.4)>0" - onlinecut = "Sum$( seededConePuppiJetEt[]>"+str(x)+" && abs(seededConePuppiJetEta[])<2.4)>0" - - if (obj=='seededConePuppiJetExt'): - offlinescalingcut = "( (abs(seededConePuppiJetEta[])<1.5 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutBarrel(x))+")) || (abs(seededConePuppiJetEta[])>1.5 && abs(seededConePuppiJetEta[])<2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutEndcap(x))+")) || (abs(seededConePuppiJetEta[])>2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(seededConePuppiJetEta[])<5)>0" - onlinecut = "Sum$( seededConePuppiJetEt[]>"+str(x)+" && abs(seededConePuppiJetEta[])<5)>0" - - if (obj=='puppiPhase1Jet'): - offlinescalingcut = "( (abs(phase1PuppiJetEta[])<1.5 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutBarrel(x))+")) || (abs(phase1PuppiJetEta[])>1.5 && abs(phase1PuppiJetEta[])<2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutEndcap(x))+")) || (abs(phase1PuppiJetEta[])>2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(phase1PuppiJetEta[])<2.4)>0" - onlinecut = "Sum$( phase1PuppiJetEt[]>"+str(x)+" && abs(phase1PuppiJetEta[])<2.4)>0" - - if (obj=='puppiPhase1JetExt'): - offlinescalingcut = "( (abs(phase1PuppiJetEta[])<1.5 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutBarrel(x))+")) || (abs(phase1PuppiJetEta[])>1.5 && abs(phase1PuppiJetEta[])<2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutEndcap(x))+")) || (abs(phase1PuppiJetEta[])>2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(phase1PuppiJetEta[])<5)>0" - onlinecut = "Sum$( phase1PuppiJetEt[]>"+str(x)+" && abs(phase1PuppiJetEta[])<5)>0" - - if (obj=='trackerJet'): - offlinescalingcut = "( (abs(trackerJetEta[])<1.5 && trackerJetPt[]>("+str(TrackerJetOfflineEtCutBarrel(x))+")) || (abs(trackerJetEta[])>1.5 && trackerJetPt[]>("+str(TrackerJetOfflineEtCutEndcap(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(trackerJetEta[])<2.4)>0" - onlinecut = "Sum$( trackerJetPt[]>"+str(x)+" && abs(trackerJetEta[])<2.4)>0" - - if (obj=='caloJet'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])<2.4)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])<2.4)>0" - - if (obj=='caloJetExt'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])<5)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])<5)>0" - -### SPLIT JET IN BARREL AND ENDCAP - if (obj=='seededConePuppiJet_Barrel'): - offlinescalingcut = "( (abs(seededConePuppiJetEta[])<1.5 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutBarrel(x))+")) || (abs(seededConePuppiJetEta[])>1.5 && abs(seededConePuppiJetEta[])<2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutEndcap(x))+")) || (abs(seededConePuppiJetEta[])>2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(seededConePuppiJetEta[])<1.5)>0" - onlinecut = "Sum$( seededConePuppiJetEt[]>"+str(x)+" && abs(seededConePuppiJetEta[])<1.5)>0" - - if (obj=='seededConePuppiJet_Endcap'): - offlinescalingcut = "( (abs(seededConePuppiJetEta[])<1.5 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutBarrel(x))+")) || (abs(seededConePuppiJetEta[])>1.5 && abs(seededConePuppiJetEta[])<2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutEndcap(x))+")) || (abs(seededConePuppiJetEta[])>2.4 && seededConePuppiJetEt[]>("+str(SeededConePuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(seededConePuppiJetEta[])>1.5)>0" - onlinecut = "Sum$( seededConePuppiJetEt[]>"+str(x)+" && abs(seededConePuppiJetEta[])>1.5)>0" - - if (obj=='puppiPhase1Jet_Barrel'): - offlinescalingcut = "( (abs(phase1PuppiJetEta[])<1.5 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutBarrel(x))+")) || (abs(phase1PuppiJetEta[])>1.5 && abs(phase1PuppiJetEta[])<2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutEndcap(x))+")) || (abs(phase1PuppiJetEta[])>2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(phase1PuppiJetEta[])<1.5)>0" - onlinecut = "Sum$( phase1PuppiJetEt[]>"+str(x)+" && abs(phase1PuppiJetEta[])<1.5)>0" - - if (obj=='puppiPhase1Jet_Endcap'): - offlinescalingcut = "( (abs(phase1PuppiJetEta[])<1.5 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutBarrel(x))+")) || (abs(phase1PuppiJetEta[])>1.5 && abs(phase1PuppiJetEta[])<2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutEndcap(x))+")) || (abs(phase1PuppiJetEta[])>2.4 && phase1PuppiJetEt[]>("+str(Phase1PuppiJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(phase1PuppiJetEta[])>1.5)>0" - onlinecut = "Sum$( phase1PuppiJetEt[]>"+str(x)+" && abs(phase1PuppiJetEta[])>1.5)>0" - - if (obj=='caloJet_Barrel'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])<1.5)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])<1.5)>0" - if (obj=='caloJet_Endcap'): - offlinescalingcut = "( (abs(caloJetEta[])<1.5 && caloJetEt[]>("+str(CaloJetOfflineEtCutBarrel(x))+")) || (abs(caloJetEta[])>1.5 && abs(caloJetEta[])<2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutEndcap(x))+")) || (abs(caloJetEta[])>2.4 && caloJetEt[]>("+str(CaloJetOfflineEtCutForward(x))+")) )" - offlinecut = "Sum$( "+offlinescalingcut+" && abs(caloJetEta[])>1.5)>0" - onlinecut = "Sum$( caloJetEt[]>"+str(x)+" && abs(caloJetEta[])>1.5)>0" - -#--------------------HT-------------------- - - if (obj=='seededConePuppiHT'): - #Not available - offlinescalingcut = "(seededConePuppiHT[0]>("+str(seededConePuppiHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " seededConePuppiHT[0]>"+str(x) - - if (obj=='puppiPhase1HT'): - offlinescalingcut = "(phase1PuppiHT[0]>("+str(Phase1PuppiHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " phase1PuppiHT[0]>"+str(x) - - if (obj=='trackerHT'): - offlinescalingcut = "(trackerHT[0]>("+str(TrackerHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerHT[0]>"+str(x) - - if (obj=='caloHT'): - offlinescalingcut = "(caloJetHT[0]>("+str(CaloHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " caloJetHT[0]>"+str(x) - -#--------------------MHT----------------- - - #if (obj=='seededConePuppiMHT'): - #Not available - # offlinescalingcut = "(seededConePuppiMHT[0]>("+str(seededConePuppiMHTOfflineEtCut(x))+"))" - # offlinecut = offlinescalingcut - # onlinecut = " seededConePuppiMHT[0]>"+str(x) - - if (obj=='puppiPhase1MHT'): - offlinescalingcut = "(phase1PuppiMHTEt[0]>("+str(Phase1PuppiMHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " phase1PuppiMHTEt[0]>"+str(x) - - if (obj=='trackerMHT'): - offlinescalingcut = "(trackerMHT[0]>("+str(TrackerMHTOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerMHT[0]>"+str(x) - - #if (obj=='caloMHT'): - # Not available - # offlinescalingcut = "(caloJetMHT[0]>("+str(CaloMHTOfflineEtCut(x))+"))" - # offlinecut = offlinescalingcut - # onlinecut = " caloJetMHT[0]>"+str(x) - - -#--------------------MET-------------- - - if (obj=='puppiMET'): - offlinescalingcut = "(puppiMETEt>("+str(PuppiMETOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " puppiMETEt>"+str(x) - - if (obj=='trackerMET'): - offlinescalingcut = "(trackerMET>("+str(TrackerMETOfflineEtCut(x))+"))" - offlinecut = offlinescalingcut - onlinecut = " trackerMET>"+str(x) - - - - - npass = t.GetEntries(offlinecut) - off[obj].append(x) - offrate[obj].append(round(float(npass)/float(ntot)*31038.,1)) - - #print x,round(float(npass)/float(ntot)*31038.,1) - - npass = t.GetEntries(onlinecut) - onl[obj].append(x) - onlrate[obj].append(round(float(npass)/float(ntot)*31038.,1)) - - - x+=cutrange[obj][2] - - - - print "" - print "" - print obj - print "off['"+obj+"'] = ",off[obj] - print "offrate['"+obj+"'] = ",offrate[obj] - print "onl['"+obj+"'] = ",onl[obj] - print "onlrate['"+obj+"'] = ",onlrate[obj] - - rates_file.write("off['"+obj+"'] = "+str(off[obj])) - rates_file.write("\n") - rates_file.write("offrate['"+obj+"'] = "+str(offrate[obj])) - rates_file.write("\n") - rates_file.write("onl['"+obj+"'] = "+str(onl[obj])) - rates_file.write("\n") - rates_file.write("onlrate['"+obj+"'] = "+str(onlrate[obj])) - rates_file.write("\n") - rates_file.write("\n") - rates_file.flush() - os.fsync(rates_file.fileno()) - -rates_file.close() -f.Close() \ No newline at end of file diff --git a/rates/table/README.md b/rates/table/README.md deleted file mode 100644 index afdd252c..00000000 --- a/rates/table/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Rate table for the Phase-2 L1 Trigger Menu -To run the rate table, for example for the L1 TDR results, do -``` -python run.py cfg/v10_TRIDAS_newThresholds_LHCCReview -``` - -For the firmware-based emulators under 123x, utilise `FBE_noMu_L1TDRMET_mhtSeed_123x` (`FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5` only includes forward region for the singleJet seed). - -To display the rates in an easy-to-read format, run -``` -python3 printRateTable.py -c cfg/v10_TRIDAS_newThresholds_LHCCReview -r out/2020-05-26-MENU-LHCCReview-BugFix_v10_TRIDAS_newThresholds_LHCCReview/thresholds/menu.csv -``` -You can also edit the `CFG_RATE_COMBOS` dictionary at the top of -the file and run the script without any arguments `python3 printRateTable.py`. -This way multiple rate tables can be compared quickly. - diff --git a/rates/table/cfg/v10/v10_TRIDAS_newThresholds_LHCCReview b/rates/table/cfg/v10/v10_TRIDAS_newThresholds_LHCCReview deleted file mode 100644 index d51c885c..00000000 --- a/rates/table/cfg/v10/v10_TRIDAS_newThresholds_LHCCReview +++ /dev/null @@ -1,350 +0,0 @@ -#format is like this: -#typeOfParameter :: parameterOrObjectName :: option1=value2; option2=(this,is,a,list) - - -## general options -## ----------------------------------------------------------- -variable :: bundledate :: 2020-05-26-MENU-LHCCReview-BugFix -variable :: nBunches :: 2760 -variable :: revFreq :: 11246 - -#variable :: tiers :: (variations) -variable :: tiers :: (thresholds) - -variable :: varBins :: (30,50) -#variable :: varBins :: (10,20,30,40,50,60,70,80,90,100) -##variable :: varBins :: (100,140,275,425,575,700,850,1000) -variable :: varError :: 0.2 -variable :: varInterpol :: linear -variable :: varLeg :: 1 -variable :: varCut :: 1 -variable :: varPrecision :: 2 -variable :: varIterations :: 5 -variable :: useNominalBwF :: False - - - -## samples (always all samples are used!) -## ----------------------------------------------------------- - -sample :: neutrinos :: path:=/eos/cms/store/cmst3/user/botta/NeutrinoGun_E_10GeV_V10p7_MERGED.root; tree:=l1PhaseIITree/L1PhaseIITree -#sample :: neutrinos :: path:=/eos/cms/store/cmst3/user/botta/NeutrinoGun_E_10GeV_V10p7_MERGED_140.root; tree:=l1PhaseIITree/L1PhaseIITree -#sample :: neutrinos :: path:=/eos/cms/store/cmst3/user/botta/NeutrinoGun_E_10GeV_V10p7_MERGED_250.root; tree:=l1PhaseIITree/L1PhaseIITree -#sample :: neutrinos :: path:=/eos/cms/store/cmst3/user/botta/NeutrinoGun_E_10GeV_V10p7_MERGED_300.root; tree:=l1PhaseIITree/L1PhaseIITree - - - -## physics objects at trigger level -## ----------------------------------------------------------- - -## Electrons and Photons -object :: EG :: basebranch:=EG ; variables:=(Et,Eta,Phi,Iso,zVtx,PassesLooseTrackID,PassesPhotonID,HwQual); \ - leading:=Et; lengthbranch:=nEG; onToOff:=0 -object :: tkElectron :: basebranch:=tkElectronV2 ; variables:=(Et,Eta,Phi,TrkIso,zVtx,PassesLooseTrackID,PassesPhotonID,HwQual); \ - leading:=Et; lengthbranch:=nTkElectronsV2; onToOff:=0 -object :: tkPhoton :: basebranch:=tkPhoton ; variables:=(Et,Eta,Phi,TrkIso,TrkIsoPV,zVtx,PassesLooseTrackID,passesPhotonID,HwQual); \ - leading:=Et; lengthbranch:=nTkPhotons; onToOff:=0 - -## Muons -object :: mu :: basebranch:=standaloneMuon ; variables:=(Pt,Pt2,Eta,Phi,Chg,Qual,DXY); \ - leading:=Pt; lengthbranch:=nStandaloneMuons; onToOff:=0 -object :: tkMu :: basebranch:=tkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,TrkIso,Qual,zVtx,MuRefPt,Region); \ - leading:=Pt; lengthbranch:=nTkMuons; onToOff:=0 -object :: tkMuStub :: basebranch:=tkMuonStubs ; variables:=(Pt,Eta,Phi,Chg,Iso,TrkIso,Qual,zVtx,Region); \ - leading:=Pt; lengthbranch:=nTkMuonStubs; onToOff:=0 - -## Taus -object :: pfTau :: basebranch:=pfTau ; variables:=(Et,Eta,Phi,PassesMediumIso,Z0); \ - leading:=Et; lengthbranch:=nPFTaus; onToOff:=0 -object :: puppiTau :: basebranch:=nnTau ; variables:=(Et,Eta,Phi,PassLooseNN,PassTightNN); \ - leading:=Et; lengthbranch:=nNNTaus; onToOff:=0 -object :: tkEGTau :: basebranch:=tkEGTau ; variables:=(Et,Eta,Phi,zVtx); \ - leading:=Et; lengthbranch:=nTkEGTau; onToOff:=0 -object :: caloTau :: basebranch:=caloTau ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nCaloTaus; onToOff:=0 - -## Jets -object :: puppiJet :: basebranch:=pfPhase1L1Jet ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nPfPhase1L1Jets; onToOff:=0 -object :: caloJet :: basebranch:=caloJet ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nCaloJets; onToOff:=0 -object :: trackerJet :: basebranch:=trackerJet; variables:=(Et,Eta,Phi,zVtx); \ - leading:=Et; lengthbranch:=nTrackerJets; onToOff:=0 - -## HT -object :: trackerHt :: basebranch:=trackerHT ; variables:=(Et=); \ - leading:=Et; isFlat:=True; fixedIndex:=0; onToOff:=0 -object :: puppiHt :: basebranch:=pfPhase1L1HT ; variables:=(Et=); \ - leading:=Et; isFlat:=True; fixedIndex:=0; onToOff:=0 -object :: caloHt :: basebranch:=caloJetHT ; variables:=(Et=); \ - leading:=Et; isFlat:=True; fixedIndex:=0; onToOff:=0 - -## MET -object :: trackerMet :: basebranch:=trackerMet ; variables:=(Et,Phi,SumEt); \ - leading:=Et; isFlat:=True; onToOff:=0 -object :: puppiMet :: basebranch:=puppiMET ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## zVtx -object :: puppiVtx :: basebranch:=z0Puppi ; variables:=(Et=); \ - leading:=Et; isFlat:=True; onToOff:=0 - - - -## function aliases -## ----------------------------------------------------------- -function :: notMatched :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(abs(eta1)-abs(eta2)),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2))>0.1 -function :: deltaR :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(eta1-eta2),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2)) -function :: deltaEta :: args:=(eta1,eta2); lambda:= abs(eta1-eta2) -function :: etaRangeCutLess :: args:=(x,eta,etaRange,cutInRange,cutOutRange); lambda:= xcutInRange if abs(eta)cutOutRange -function :: pairInvMass :: args:=(pt1,pt2,eta1,eta2,phi1,phi2); lambda:= math.sqrt(2.0*pt1*pt2*(math.cosh(eta1-eta2)-math.cos(phi1-phi2))) -function :: pfJetEtaVeto :: args:=(Eta); lambda:= abs(Eta)<2.5 or abs(Eta)>3.0 - -# For V10p7 Scalings -function :: MuonStaQualCut :: args:=(Qual,Eta); lambda:=Qual>=0 if abs(Eta)<0.9 else (Qual>=12 if abs(Eta)<1.2 else Qual>=0) -function :: TkElectronIsoQualCut :: args:=(HwQual,Eta); lambda:=HwQual==5 if abs(Eta)>1.479 else HwQual>=0 - -function :: PuppiHTOfflineEtCut :: args:=(offline); lambda:=(offline-4.63573)/1.0087 -function :: TTbarPuppiHTOfflineEtCut :: args:=(offline); lambda:=(offline+12.84)/1.03535 -function :: HadronicTTbarPuppiHTOfflineEtCut :: args:=(offline); lambda:=(offline+6.18248)/1.03343 -function :: PFPhase1HTOfflineEtCut :: args:=(offline); lambda:=(offline-7.00327)/1.01015 -function :: TTbarPFPhase1HTOfflineEtCut :: args:=(offline); lambda:=(offline+5.29584)/1.03089 -function :: HadronicTTbarPFPhase1HTOfflineEtCut :: args:=(offline); lambda:=(offline-2.19174)/1.03043 -function :: TrackerHTOfflineEtCut :: args:=(offline); lambda:=(offline+2.47118)/1.95961 -function :: TTbarTrackerHTOfflineEtCut :: args:=(offline); lambda:=(offline+46.31)/2.20021 -function :: HadronicTTbarTrackerHTOfflineEtCut :: args:=(offline); lambda:=(offline+38.7746)/2.13034 -function :: CaloHTOfflineEtCut :: args:=(offline); lambda:=(offline+73.8289)/0.923594 -function :: TTbarCaloHTOfflineEtCut :: args:=(offline); lambda:=(offline+90.1537)/0.957146 -function :: HadronicTTbarCaloHTOfflineEtCut :: args:=(offline); lambda:=(offline+88.5201)/0.93691 -function :: PuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-47.9233)/1.08345 -function :: PFPhase1HT090OfflineEtCut :: args:=(offline); lambda:=(offline-53.7549)/1.08834 -function :: TrackerHT090OfflineEtCut :: args:=(offline); lambda:=(offline-35.1578)/2.66569 -function :: CaloHT090OfflineEtCut :: args:=(offline); lambda:=(offline+1.30634)/0.997298 -function :: TTbarPuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-42.6661)/1.0753 -function :: TTbarPFPhase1HT090OfflineEtCut :: args:=(offline); lambda:=(offline-53.7965)/1.07331 -function :: TTbarTrackerHT090OfflineEtCut :: args:=(offline); lambda:=(offline-15.5172)/2.76786 -function :: TTbarCaloHT090OfflineEtCut :: args:=(offline); lambda:=(offline+9.15257)/1.06462 -function :: HadronicTTbarPuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-51.8588)/1.06447 -function :: HadronicTTbarPFPhase1HT090OfflineEtCut :: args:=(offline); lambda:=(offline-64.5616)/1.06039 -function :: HadronicTTbarTrackerHT090OfflineEtCut :: args:=(offline); lambda:=(offline-9.34255)/2.64851 -function :: HadronicTTbarCaloHT090OfflineEtCut :: args:=(offline); lambda:=(offline+9.37574)/1.02455 -function :: PuppiMETOfflineEtCut :: args:=(offline); lambda:=(offline-19.1432)/1.07251 -function :: TrackerMETOfflineEtCut :: args:=(offline); lambda:=(offline+0.600811)/3.11669 -function :: TTbarPuppiMETOfflineEtCut :: args:=(offline); lambda:=(offline+6.79552)/1.23709 -function :: TTbarTrackerMETOfflineEtCut :: args:=(offline); lambda:=(offline+104.886)/3.73323 -function :: PuppiMET090OfflineEtCut :: args:=(offline); lambda:=(offline-87.0446)/1.1511 -function :: TrackerMET090OfflineEtCut :: args:=(offline); lambda:=(offline-221.122)/2.74021 -function :: TTbarPuppiMET090OfflineEtCut :: args:=(offline); lambda:=(offline-51.5627)/1.36698 -function :: TTbarTrackerMET090OfflineEtCut :: args:=(offline); lambda:=(offline+14.2411)/5.21706 - - -function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.252031)/1.09043 if abs(Eta)<1.5 else Et>(offline-5.27586)/1.16298 -function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.315819)/1.08834 if abs(Eta)<1.5 else Et>(offline-4.62976)/1.16961 -function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.92377)/1.01512 if abs(Eta)<1.5 else Et>(offline-5.92531)/1.05584 -function :: PFTauOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+1.02859)/1.04655 if abs(Eta)<1.5 else Et>(offline+0.873734)/1.12528 -function :: PFIsoTauOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+0.715016)/1.0354 if abs(Eta)<1.5 else Et>(offline-0.619152)/1.07797 -function :: NNTauTightOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+1.22271)/1.02652 if abs(Eta)<1.5 else Et>(offline+4.45279)/1.12063 -function :: NNTauLooseOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.0282565)/1.00757 if abs(Eta)<1.5 else Et>(offline+1.7323)/1.07902 -function :: TkEGTauOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+0.200375)/1.01773 if abs(Eta)<1.5 else Et>(offline+1.68334)/1.22362 -function :: CaloTauOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+6.604)/1.14519 if abs(Eta)<1.5 else Et>(offline+4.19867)/1.06606 -function :: PFTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+11.5292)/2.08813 if abs(Eta)<1.5 else Et>(offline-2.45302)/1.85321 -function :: PFIsoTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+4.72956)/1.80821 if abs(Eta)<1.5 else Et>(offline-11.0478)/1.55742 -function :: NNTauTight090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+21.3166)/1.84293 if abs(Eta)<1.5 else Et>(offline+1.47361)/1.39273 -function :: NNTauLoose090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+9.16702)/1.69784 if abs(Eta)<1.5 else Et>(offline-3.12516)/1.36535 -function :: TkEGTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+91.7613)/5.12908 if abs(Eta)<1.5 else Et>(offline+13.6892)/3.89439 -function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+0.937512)/1.38032 if abs(Eta)<1.5 else Et>(offline-1.92178)/1.26272 -function :: TrackerJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-39.5772)/4.3296 if abs(Eta)<1.5 else Et>(offline-52.663)/5.63404 -function :: TTbarTrackerJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-45.6922)/4.2229 if abs(Eta)<1.5 else Et>(offline-97.3989)/4.27346 -function :: EGPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.80694)/0.979067 if abs(Eta)<1.5 else (Et>(offline-7.66012)/1.03665 if abs(Eta)<2.4 else Et>(offline-2.63103)/1.4081) -function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.95953)/1.0434 if abs(Eta)<1.5 else (Et>(offline-7.79311)/1.10045 if abs(Eta)<2.4 else Et>(offline-5.43055)/1.28648) -function :: PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-39.7621)/1.10472 if abs(Eta)<1.5 else (Et>(offline-59.4759)/1.05225 if abs(Eta)<2.4 else Et>(offline-6.47801)/1.99057) -function :: PFPhase1JetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-35.6078)/1.2042 if abs(Eta)<1.5 else (Et>(offline-61.8214)/1.09898 if abs(Eta)<2.4 else Et>(offline-1.08496)/2.15502) -function :: CaloJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-24.8298)/1.1863 if abs(Eta)<1.5 else (Et>(offline-26.8634)/1.17171 if abs(Eta)<2.4 else Et>(offline+31.0189)/2.16122) -function :: TTbarPuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-16.2875)/1.25257 if abs(Eta)<1.5 else (Et>(offline-25.8625)/1.24229 if abs(Eta)<2.4 else Et>(offline-9.68567)/1.94574) -function :: TTbarPFPhase1JetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-12.7315)/1.37302 if abs(Eta)<1.5 else (Et>(offline-25.211)/1.35985 if abs(Eta)<2.4 else Et>(offline-15.711)/1.88226) -function :: TTbarCaloJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-17.4134)/1.29985 if abs(Eta)<1.5 else (Et>(offline-49.7045)/1.09395 if abs(Eta)<2.4 else Et>(offline-3.99523)/1.68789) -function :: TkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.480586)/1.05326 if abs(Eta)<0.9 else (Et>(offline-0.789258)/1.03509 if abs(Eta)<1.2 else Et>(offline-0.784553)/1.03251) -function :: TkMuonStubOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.710744)/1.04185 if abs(Eta)<0.9 else (Et>(offline-0.805149)/1.04062 if abs(Eta)<1.2 else Et>(offline-0.554819)/1.04354) -function :: StandaloneMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-3.88566)/1.01712 if abs(Eta)<0.9 else (Et>(offline+1.16016)/1.31345 if abs(Eta)<1.2 else (Et>(offline-0.389879)/1.18579 if abs(Eta)<2.4 else Et>(offline+28.4221)/5.51244)) - - - - - - -## trigger paths -## ----------------------------------------------------------- - -## muon - -trigger :: L1_SingleTkMu :: leg1:=(tkMu , TkMuonOfflineEtCut(22.0,Pt,Eta), abs(Eta)<2.4); \ - -trigger :: L1_DoubleTkMu :: leg1:=(tkMu , TkMuonOfflineEtCut(15.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkMu , TkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4, abs(leg1.zVtx-zVtx)<1); \ - -trigger :: L1_TripleTkMu :: leg1:=(tkMu, TkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkMu, TkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.zVtx)<1); \ - leg3:=(tkMu, TkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.zVtx)<1); \ - -# e/gamma - -trigger :: L1_SingleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - -trigger :: L1_SingleTkEleIso :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(28.0,Et,Eta), TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.10,0.125)); \ - -trigger :: L1_SingleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, etaRangeCutLess(TrkIso,Eta,1.479,0.29,0.39)); \ - -trigger :: L1_TkEleIso_EG :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.10,0.125)); \ - leg2:=(EG , EGElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - -trigger :: L1_DoubleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(25.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_DoubleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, etaRangeCutLess(TrkIso,Eta,1.479,0.29,0.39)); \ - leg2:=(tkPhoton , TkIsoPhotonOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, etaRangeCutLess(TrkIso,Eta,1.479,0.29,0.39)); \ - - - -# tau stuff - - -trigger :: L1_SinglePFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(150.0,Et,Eta), abs(Eta)<2.172); \ - -trigger :: L1_PFTau_PFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172); \ - leg2:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - - -trigger :: L1_PFIsoTau_PFIsoTau :: leg1:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - -trigger :: L1_PFIsoTau_TkMu :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(tkMu , TkMuonOfflineEtCut(18.0,Pt,Eta), abs(Eta)<2.1, abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiTau , NNTauLoose090OfflineEtCut(42.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - -trigger :: L1_TkEleIso_PFIsoTau :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.1, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.10,0.125), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiTau, NNTauLoose090OfflineEtCut(45.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - -trigger :: L1_PFIsoTau_PFMet :: leg1:=(puppiTau, NNTauLoose090OfflineEtCut(55.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiMet, Et>TTbarPuppiMET090OfflineEtCut(190.0)); \ - - -# Jets -trigger :: L1_SinglePfJet :: leg1:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(180.0,Et,Eta), abs(Eta)<2.4); \ - -trigger :: L1_DoublePFJet_dEtaMax :: leg1:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(112.0,Et,Eta), abs(Eta)<2.4); \ - leg2:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(112.0,Et,Eta), abs(Eta)<2.4, deltaEta(Eta,leg1.Eta)<1.6); \ - -# HT, MET -trigger :: L1_PFHTT :: leg1:=(puppiHt , leading>HadronicTTbarPFPhase1HT090OfflineEtCut(450.0)); \ - -trigger :: L1_PFMet :: leg1:=(puppiMet, Et>TTbarPuppiMET090OfflineEtCut(200.0)); \ - -trigger :: L1_PFHTT_QuadJet :: leg1:=(puppiHt , leading>HadronicTTbarPFPhase1HT090OfflineEtCut(400.0)); \ - leg2:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(70.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg3:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(55.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg4:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg5:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - -# EG+Mu -trigger :: L1_TkMu_TkEleIso :: leg1:=(tkMu, TkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(20.0,Et,Eta), abs(Eta)<2.4, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.10,0.125), abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_TkMu_TkEle :: leg1:=(tkMu, TkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkElectron, TkElectronOfflineEtCut(23.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_TkEle_TkMu :: leg1:=(tkElectron , TkElectronOfflineEtCut(10.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - leg2:=(tkMu , TkMuonOfflineEtCut(20.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_TkMu_DoubleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, abs(zVtx-leg1.zVtx)<1); \ - leg3:=(tkMu , TkMuonOfflineEtCut(6.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_DoubleTkMu_TkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(9.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - leg2:=(tkMu , TkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.zVtx)<1); \ - leg3:=(tkMu , TkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.zVtx)<1); \ - - -# Lep+Jet/HT -trigger :: L1_TkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkMu, TkMuonOfflineEtCut(6.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiHt, leading>HadronicTTbarPFPhase1HT090OfflineEtCut(320.0)); \ - -trigger :: L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkMu, TkMuonOfflineEtCut(12.0,Pt,Eta), Qual>=8, abs(Eta)<2.4, abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaR(Eta,leg2.Eta,Phi,leg2.Phi)<0.4); \ - leg4:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4); \ - leg5:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaEta(Eta,leg4.Eta)<1.6); \ - -trigger :: L1_TkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkMu, TkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.1, abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(110.0,Et,Eta), abs(Eta)<2.5); \ - leg4:=(puppiMet, Et>TTbarPuppiMET090OfflineEtCut(120.0)); \ - -trigger :: L1_DoubleTkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkMu, TkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.Et)<1); \ - leg3:=(tkMu, TkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.Et)<1); \ - leg4:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(60.0,Et,Eta), abs(Eta)<2.4); \ - leg5:=(puppiMet, Et>TTbarPuppiMET090OfflineEtCut(130.0)); - -trigger :: L1_DoubleTkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkMu, TkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.Et)<1); \ - leg3:=(tkMu, TkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.Et)<1); \ - leg4:=(puppiHt, leading>HadronicTTbarPFPhase1HT090OfflineEtCut(300.0)); - -trigger :: L1_DoubleTkEle_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, PassesLooseTrackID, abs(zVtx-leg1.Et)<1); \ - leg3:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, PassesLooseTrackID, abs(zVtx-leg1.Et)<1); \ - leg4:=(puppiHt, leading>HadronicTTbarPFPhase1HT090OfflineEtCut(390.0)); - - -trigger :: L1_TkEleIso_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkIsoElectronOfflineEtCut(26.0,Et,Eta), abs(Eta)<2.1, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.10,0.125), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiHt , leading>HadronicTTbarPFPhase1HT090OfflineEtCut(190.0)); - -trigger :: L1_TkEle_PFJet_dRMin :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(28.0,Et,Eta), abs(Eta)<2.1, PassesLooseTrackID, abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaR(Eta, leg2.Eta, Phi, leg2.Phi)>0.3); \ - - - - -# VBF -trigger :: L1_DoublePFJet_MassMin :: leg1:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(160.0,Et,Eta)); \ - leg2:=(puppiJet, TTbarPFPhase1JetOfflineEtCut(35.0,Et,Eta), pairInvMass(Et,leg1.Et,Eta,leg1.Eta,Phi,leg1.Phi)>620.0); \ - - - -# BPH -trigger :: L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4 :: leg1:=(tkMu, abs(Eta)<1.5); \ - leg2:=(tkMu, abs(Eta)<1.5, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.4, leg1.Chg*Chg<0.0, abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_DoubleTkMu4_SQ_OS_dR_Max1p2 :: leg1:=(tkMu, TkMuonOfflineEtCut(4.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkMu, TkMuonOfflineEtCut(4.0,Pt,Eta), abs(Eta)<2.4, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.2, leg1.Chg*Chg<0.0, abs(zVtx-leg1.zVtx)<1); \ - - -trigger :: L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18 :: leg1:=(tkMu, TkMuonOfflineEtCut(4.5,Pt,Eta), abs(Eta)<2.0); \ - leg2:=(tkMu, TkMuonOfflineEtCut(4.5,Pt,Eta), abs(Eta)<2.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>7.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<18.0, leg1.Chg*Chg<0.0, abs(zVtx-leg1.zVtx)<1); \ - - -#trigger :: L1_DoubleTkMu9_SQ :: leg1:=(tkMu, TkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4); \ -# leg2:=(tkMu, TkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9 :: leg1:=(tkMu, TkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkMu, TkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<9.0, leg1.Chg*Chg<0.0, abs(zVtx-leg1.zVtx)<1); \ - leg3:=(tkMu, Pt>0.0, abs(Eta)<2.4, abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17 :: leg1:=(tkMu, TkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkMu, TkMuonOfflineEtCut(3.5,Pt,Eta), abs(Eta)<2.4, abs(zVtx-leg1.zVtx)<1); \ - leg3:=(tkMu, TkMuonOfflineEtCut(2.5,Pt,Eta), abs(Eta)<2.4, leg1.Chg*Chg<0.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>5.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<17.0, abs(zVtx-leg1.zVtx)<1); \ - - - -# Standalone path: recover efficiency and robustness - -trigger :: L1_SingleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(51.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - -trigger :: L1_DoubleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(37.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID ); \ - leg2:=(EG , EGElectronOfflineEtCut(24.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - diff --git a/rates/table/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x b/rates/table/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x deleted file mode 100644 index 87076b0d..00000000 --- a/rates/table/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x +++ /dev/null @@ -1,308 +0,0 @@ -#format is like this: -#typeOfParameter :: parameterOrObjectName :: option1=value2; option2=(this,is,a,list) - - -## general options -## ----------------------------------------------------------- -variable :: bundledate :: 2022-Apr20-v5-baseline-noMu_with3tkMu -variable :: nBunches :: 2760 -variable :: revFreq :: 11246 - -#variable :: tiers :: (variations) -variable :: tiers :: (thresholds) - -variable :: varBins :: (30,50) -#variable :: varBins :: (10,20,30,40,50,60,70,80,90,100) -##variable :: varBins :: (100,140,275,425,575,700,850,1000) -variable :: varError :: 0.2 -variable :: varInterpol :: linear -variable :: varLeg :: 1 -variable :: varCut :: 1 -variable :: varPrecision :: 2 -variable :: varIterations :: 5 -variable :: useNominalBwF :: False - - - -## samples (always all samples are used!) -## ----------------------------------------------------------- - -sample :: neutrinos :: path:=/eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/minbias_merged_nTuplesEmu_v22_2.root; tree:=l1PhaseIITree/L1PhaseIITree - - - -## physics objects at trigger level -## ----------------------------------------------------------- - -## Electrons and Photons -object :: EG :: basebranch:=EG ; variables:=(Et,Eta,Phi,Iso,zVtx,PassesLooseTrackID,PassesPhotonID,HwQual); \ - leading:=Et; lengthbranch:=nEG; onToOff:=0 - -object :: tkElectron :: basebranch:=tkElectron ; variables:=(Et,Eta,Phi,TrkIso,zVtx,PassesLooseTrackID,PassesPhotonID,HwQual); \ - leading:=Et; lengthbranch:=nTkElectrons; onToOff:=0 - -object :: tkPhoton :: basebranch:=tkPhoton ; variables:=(Et,Eta,Phi,TrkIso,TrkIsoPV,zVtx,PassesLooseTrackID,passesPhotonID,HwQual); \ - leading:=Et; lengthbranch:=nTkPhotons; onToOff:=0 - -## Muons -#object :: tkMu :: basebranch:=tkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,TrkIso,Qual,zVtx,MuRefPt,MuRefEta,MuRefPhi,Region,Qual); \ -# leading:=Pt; lengthbranch:=nTkMuons; onToOff:=0 - -object :: tkGmtMu :: basebranch:=gmtTkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,Qual,Z0); \ - leading:=Pt; lengthbranch:=nGmtTkMuons; onToOff:=0 - -## Taus -object :: puppiTau :: basebranch:=nnTau ; variables:=(Et,Eta,Phi,PassLooseNN,PassTightNN); \ - leading:=Et; lengthbranch:=nNNTaus; onToOff:=0 - -object :: caloTau :: basebranch:=caloTau ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nCaloTaus; onToOff:=0 - -## Jets -object :: puppiJet :: basebranch:=phase1PuppiJet ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nPhase1PuppiJets; onToOff:=0 - -## HT -object :: puppiHt :: basebranch:=phase1PuppiHT ; variables:=(Et=); \ - leading:=Et; isFlat:=True; fixedIndex:=0; onToOff:=0 - -object :: puppiMHt :: basebranch:=phase1PuppiMHT ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## MET -object :: puppiMet :: basebranch:=puppiMET ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## zVtx -object :: puppiVtx :: basebranch:=z0L1TkPV ; variables:=(Et=); \ - leading:=Et; isFlat:=True; onToOff:=0 - - - - -## function aliases -## ----------------------------------------------------------- -function :: notMatched :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(abs(eta1)-abs(eta2)),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2))>0.1 -function :: deltaR :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(eta1-eta2),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2)) -function :: deltaEta :: args:=(eta1,eta2); lambda:= abs(eta1-eta2) -function :: etaRangeCutLess :: args:=(x,eta,etaRange,cutInRange,cutOutRange); lambda:= xcutInRange if abs(eta)cutOutRange -function :: pairInvMass :: args:=(pt1,pt2,eta1,eta2,phi1,phi2); lambda:= math.sqrt(2.0*pt1*pt2*(math.cosh(eta1-eta2)-math.cos(phi1-phi2))) -function :: pfJetEtaVeto :: args:=(Eta); lambda:= abs(Eta)<2.5 or abs(Eta)>3.0 - -function :: muonQual :: args:=(Region,Qual); lambda:= 1 if (Region==3 and (Qual == 11 or Qual == 13 or Qual == 14 or Qual == 15)) else (1 if Region<3 else 0) - -function :: cleanMuons :: args:=(Region,Eta); lambda:= Region==1 if abs(Eta)<0.9 else (Region==2 if abs(Eta)<1.2 else Region==3) - - -# Quality requirements for muons and tkelectrons -function :: MuonStaQualCut :: args:=(Qual,Eta); lambda:=Qual>=0 if abs(Eta)<0.9 else (Qual>=12 if abs(Eta)<1.2 else Qual>=0) -function :: TkElectronIsoQualCut :: args:=(HwQual,Eta); lambda:=HwQual==3 if abs(Eta)>1.479 else HwQual>=0 - -#Scalings - -#HT -function :: Phase1PuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-46.674588)/1.113875 - -#MHT -function :: Phase1PuppiMHTOfflineEtCut :: args:=(offline); lambda:=(offline+9.724987)/1.037459 - -#puppimet -function :: PuppiMET090OfflineEtCut :: args:=(offline); lambda:=(offline-62.120627)/1.382451 - -#EG -function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.870789)/1.165597 if abs(Eta)<1.5 else (Et>(offline-2.720773)/1.228424) -function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.617835)/1.182946 if abs(Eta)<1.5 else (Et>(offline-0.336402)/1.275834) -function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.189054)/1.211045 if abs(Eta)<1.5 else (Et>(offline-0.822056)/1.239274) -function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.330926)/1.093568 if abs(Eta)<1.5 else (Et>(offline-4.565565)/1.077261) - -#taus -function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+6.720396)/1.510317 if abs(Eta)<1.5 else (Et>(offline+5.499322)/1.898208) -function :: NNTauLoose090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-3.778738)/1.642246 if abs(Eta)<1.5 else (Et>(offline-14.808886)/1.716542) - -#puppijet -function :: Phase1PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-12.381481)/1.331251 if abs(Eta)<1.5 else (Et>(offline-21.649515)/1.372602 if abs(Eta)<2.4 else (Et>(offline-35.609357)/1.493540)) - -#tkmuons -function :: GMTTkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.903751)/1.039495 if abs(Eta)<0.83 else (Et>(offline-0.894300)/1.044889 if abs(Eta)<1.24 else (Et>(offline-0.796396)/1.040808)) - - -## trigger paths -## ----------------------------------------------------------- - -## muon - -trigger :: L1_SingleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(22.0,Pt,Eta), abs(Eta)<2.4 ); \ - -trigger :: L1_DoubleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(15.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4, abs(leg1.Z0-Z0)<1 ); \ - -#trigger :: L1_TripleTkMu :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ - -# e/gamma - -trigger :: L1_SingleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - -trigger :: L1_SingleTkEleIso :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(28.0,Et,Eta), TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - -trigger :: L1_SingleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - -trigger :: L1_TkEleIso_EG :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - leg2:=(EG , EGElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - -trigger :: L1_DoubleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(25.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_DoubleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - leg2:=(tkPhoton , TkIsoPhotonOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - - - -# tau stuff - -trigger :: L1_SinglePFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(150.0,Et,Eta), abs(Eta)<2.172); \ - -trigger :: L1_PFTau_PFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172); \ - leg2:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - - - -trigger :: L1_PFIsoTau_PFIsoTau :: leg1:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - -trigger :: L1_PFIsoTau_TkMu :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(18.0,Pt,Eta), abs(Eta)<2.1, abs(Z0-leg1.Et)<1); \ - leg3:=(puppiTau , NNTauLoose090OfflineEtCut(42.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - -trigger :: L1_TkEleIso_PFIsoTau :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.1, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiTau, NNTauLoose090OfflineEtCut(45.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - -trigger :: L1_PFIsoTau_PFMet :: leg1:=(puppiTau, NNTauLoose090OfflineEtCut(55.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiMet, Et>PuppiMET090OfflineEtCut(190.0)); \ - - -# Jets -trigger :: L1_SinglePfJet :: leg1:=(puppiJet, Phase1PuppiJetOfflineEtCut(230.0,Et,Eta), abs(Eta)<2.4); \ - -trigger :: L1_DoublePFJet_dEtaMax :: leg1:=(puppiJet, Phase1PuppiJetOfflineEtCut(112.0,Et,Eta), abs(Eta)<2.4); \ - leg2:=(puppiJet, Phase1PuppiJetOfflineEtCut(112.0,Et,Eta), abs(Eta)<2.4, deltaEta(Eta,leg1.Eta)<1.6); \ - -# HT, MET -trigger :: L1_PFHTT :: leg1:=(puppiHt , leading>Phase1PuppiHT090OfflineEtCut(450.0)); \ - -trigger :: L1_PFMHTT :: leg1:=(puppiMHt , Et>Phase1PuppiMHTOfflineEtCut(135.5)); \ - -trigger :: L1_PFMet :: leg1:=(puppiMet, Et>PuppiMET090OfflineEtCut(200.0)); \ - -trigger :: L1_PFHTT_QuadJet :: leg1:=(puppiHt , leading>Phase1PuppiHT090OfflineEtCut(400.0)); \ - leg2:=(puppiJet, Phase1PuppiJetOfflineEtCut(70.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(55.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg4:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg5:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - -# EG+Mu -trigger :: L1_TkMu_TkEleIso :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(20.0,Et,Eta), abs(Eta)<2.4, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_TkMu_TkEle :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkElectron, TkElectronOfflineEtCut(23.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_TkEle_TkMu :: leg1:=(tkElectron , TkElectronOfflineEtCut(10.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(20.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ - -trigger :: L1_TkMu_DoubleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, abs(zVtx-leg1.zVtx)<1); \ - leg3:=(tkGmtMu , GMTTkMuonOfflineEtCut(6.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ - -#trigger :: L1_DoubleTkMu_TkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(9.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ -# leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ -# leg3:=(tkGmtMu , GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ - - -# Lep+Jet/HT -trigger :: L1_TkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(6.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ - leg3:=(puppiHt, leading>Phase1PuppiHT090OfflineEtCut(320.0)); \ - -trigger :: L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(12.0,Pt,Eta), Qual>=8, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ - leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaR(Eta,leg2.Eta,Phi,leg2.Phi)<0.4); \ - leg4:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4); \ - leg5:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaEta(Eta,leg4.Eta)<1.6); \ - -#trigger :: L1_TkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.1, abs(Z0-leg1.Et)<1 ); \ -# leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(110.0,Et,Eta), abs(Eta)<2.5); \ -# leg4:=(puppiMet, Et>PuppiMET090OfflineEtCut(120.0)); \ - -#trigger :: L1_DoubleTkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg4:=(puppiJet, Phase1PuppiJetOfflineEtCut(60.0,Et,Eta), abs(Eta)<2.4); \ -# leg5:=(puppiMet, Et>PuppiMET090OfflineEtCut(130.0)); - -#trigger :: L1_DoubleTkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg4:=(puppiHt, leading>Phase1PuppiHT090OfflineEtCut(300.0)); - -trigger :: L1_DoubleTkEle_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, PassesLooseTrackID, abs(zVtx-leg1.Et)<1); \ - leg3:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, PassesLooseTrackID, abs(zVtx-leg1.Et)<1); \ - leg4:=(puppiHt, leading>Phase1PuppiHT090OfflineEtCut(390.0)); - - -trigger :: L1_TkEleIso_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkIsoElectronOfflineEtCut(26.0,Et,Eta), abs(Eta)<2.1, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiHt , leading>Phase1PuppiHT090OfflineEtCut(190.0)); - -trigger :: L1_TkEle_PFJet_dRMin :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(28.0,Et,Eta), abs(Eta)<2.1, PassesLooseTrackID, abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaR(Eta, leg2.Eta, Phi, leg2.Phi)>0.3); \ - - - - -# VBF -trigger :: L1_DoublePFJet_MassMin :: leg1:=(puppiJet, Phase1PuppiJetOfflineEtCut(160.0,Et,Eta)); \ - leg2:=(puppiJet, Phase1PuppiJetOfflineEtCut(35.0,Et,Eta), pairInvMass(Et,leg1.Et,Eta,leg1.Eta,Phi,leg1.Phi)>620.0); \ - - - -# BPH -#trigger :: L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4 :: leg1:=(tkGmtMu, abs(Eta)<1.5 ); \ -# leg2:=(tkGmtMu, abs(Eta)<1.5, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.4, pow(-1,leg1.Chg)*pow(-1,Chg)<0.0, abs(Z0-leg1.Z0)<1 ); \ - -#trigger :: L1_DoubleTkMu4_SQ_OS_dR_Max1p2 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.0,Pt,Eta), abs(Eta)<2.4, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.2, pow(-1,leg1.Chg)*pow(-1,Chg)<0.0, abs(Z0-leg1.Z0)<1 ); \ - - -#trigger :: L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.5,Pt,Eta), abs(Eta)<2.0 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.5,Pt,Eta), abs(Eta)<2.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>7.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<18.0, pow(-1,leg1.Chg)*pow(-1,Chg)<0.0, abs(Z0-leg1.Z0)<1 ); \ - - -#trigger :: L1_DoubleTkMu9_SQ :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1); \ - -#trigger :: L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<9.0, pow(-1,leg1.Chg)*pow(-1,Chg)<0.0, abs(Z0-leg1.Z0)<1 ); \ -# leg3:=(tkGmtMu, Pt>0.0, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ - -#trigger :: L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.5,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(2.5,Pt,Eta), abs(Eta)<2.4, pow(-1,leg1.Chg)*pow(-1,Chg)<0.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>5.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<17.0, abs(Z0-leg1.Z0)<1 ); \ - - - - -# Standalone path: recover efficiency and robustness - -trigger :: L1_SingleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(51.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - -trigger :: L1_DoubleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(37.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID ); \ - leg2:=(EG , EGElectronOfflineEtCut(24.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - - diff --git a/rates/table/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5 b/rates/table/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5 deleted file mode 100644 index d842b00e..00000000 --- a/rates/table/cfg/v22/FBE_noMu_L1TDRMET_mhtSeed_123x_singleJetEta5 +++ /dev/null @@ -1,308 +0,0 @@ -#format is like this: -#typeOfParameter :: parameterOrObjectName :: option1=value2; option2=(this,is,a,list) - - -## general options -## ----------------------------------------------------------- -variable :: bundledate :: 2022-Apr20-v6-baseline-noMu -variable :: nBunches :: 2760 -variable :: revFreq :: 11246 - -#variable :: tiers :: (variations) -variable :: tiers :: (thresholds) - -variable :: varBins :: (30,50) -#variable :: varBins :: (10,20,30,40,50,60,70,80,90,100) -##variable :: varBins :: (100,140,275,425,575,700,850,1000) -variable :: varError :: 0.2 -variable :: varInterpol :: linear -variable :: varLeg :: 1 -variable :: varCut :: 1 -variable :: varPrecision :: 2 -variable :: varIterations :: 5 -variable :: useNominalBwF :: False - - - -## samples (always all samples are used!) -## ----------------------------------------------------------- - -sample :: neutrinos :: path:=/eos/cms/store/cmst3/group/l1tr/phase2Menu/EmuDev/minbias_merged_nTuplesEmu_v22_2.root; tree:=l1PhaseIITree/L1PhaseIITree - - - -## physics objects at trigger level -## ----------------------------------------------------------- - -## Electrons and Photons -object :: EG :: basebranch:=EG ; variables:=(Et,Eta,Phi,Iso,zVtx,PassesLooseTrackID,PassesPhotonID,HwQual); \ - leading:=Et; lengthbranch:=nEG; onToOff:=0 - -object :: tkElectron :: basebranch:=tkElectron ; variables:=(Et,Eta,Phi,TrkIso,zVtx,PassesLooseTrackID,PassesPhotonID,HwQual); \ - leading:=Et; lengthbranch:=nTkElectrons; onToOff:=0 - -object :: tkPhoton :: basebranch:=tkPhoton ; variables:=(Et,Eta,Phi,TrkIso,TrkIsoPV,zVtx,PassesLooseTrackID,passesPhotonID,HwQual); \ - leading:=Et; lengthbranch:=nTkPhotons; onToOff:=0 - -## Muons -#object :: tkMu :: basebranch:=tkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,TrkIso,Qual,zVtx,MuRefPt,MuRefEta,MuRefPhi,Region,Qual); \ -# leading:=Pt; lengthbranch:=nTkMuons; onToOff:=0 - -object :: tkGmtMu :: basebranch:=gmtTkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,Qual,Z0); \ - leading:=Pt; lengthbranch:=nGmtTkMuons; onToOff:=0 - -## Taus -object :: puppiTau :: basebranch:=nnTau ; variables:=(Et,Eta,Phi,PassLooseNN,PassTightNN); \ - leading:=Et; lengthbranch:=nNNTaus; onToOff:=0 - -object :: caloTau :: basebranch:=caloTau ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nCaloTaus; onToOff:=0 - -## Jets -object :: puppiJet :: basebranch:=phase1PuppiJet ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nPhase1PuppiJets; onToOff:=0 - -## HT -object :: puppiHt :: basebranch:=phase1PuppiHT ; variables:=(Et=); \ - leading:=Et; isFlat:=True; fixedIndex:=0; onToOff:=0 - -object :: puppiMHt :: basebranch:=phase1PuppiMHT ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## MET -object :: puppiMet :: basebranch:=puppiMET ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## zVtx -object :: puppiVtx :: basebranch:=z0L1TkPV ; variables:=(Et=); \ - leading:=Et; isFlat:=True; onToOff:=0 - - - - -## function aliases -## ----------------------------------------------------------- -function :: notMatched :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(abs(eta1)-abs(eta2)),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2))>0.1 -function :: deltaR :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(eta1-eta2),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2)) -function :: deltaEta :: args:=(eta1,eta2); lambda:= abs(eta1-eta2) -function :: etaRangeCutLess :: args:=(x,eta,etaRange,cutInRange,cutOutRange); lambda:= xcutInRange if abs(eta)cutOutRange -function :: pairInvMass :: args:=(pt1,pt2,eta1,eta2,phi1,phi2); lambda:= math.sqrt(2.0*pt1*pt2*(math.cosh(eta1-eta2)-math.cos(phi1-phi2))) -function :: pfJetEtaVeto :: args:=(Eta); lambda:= abs(Eta)<2.5 or abs(Eta)>3.0 - -function :: muonQual :: args:=(Region,Qual); lambda:= 1 if (Region==3 and (Qual == 11 or Qual == 13 or Qual == 14 or Qual == 15)) else (1 if Region<3 else 0) - -function :: cleanMuons :: args:=(Region,Eta); lambda:= Region==1 if abs(Eta)<0.9 else (Region==2 if abs(Eta)<1.2 else Region==3) - - -# Quality requirements for muons and tkelectrons -function :: MuonStaQualCut :: args:=(Qual,Eta); lambda:=Qual>=0 if abs(Eta)<0.9 else (Qual>=12 if abs(Eta)<1.2 else Qual>=0) -function :: TkElectronIsoQualCut :: args:=(HwQual,Eta); lambda:=HwQual==3 if abs(Eta)>1.479 else HwQual>=0 - -#Scalings - -#HT -function :: Phase1PuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-46.674588)/1.113875 - -#MHT -function :: Phase1PuppiMHTOfflineEtCut :: args:=(offline); lambda:=(offline+9.724987)/1.037459 - -#puppimet -function :: PuppiMET090OfflineEtCut :: args:=(offline); lambda:=(offline-62.120627)/1.382451 - -#EG -function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.870789)/1.165597 if abs(Eta)<1.5 else (Et>(offline-2.720773)/1.228424) -function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.617835)/1.182946 if abs(Eta)<1.5 else (Et>(offline-0.336402)/1.275834) -function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.189054)/1.211045 if abs(Eta)<1.5 else (Et>(offline-0.822056)/1.239274) -function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.330926)/1.093568 if abs(Eta)<1.5 else (Et>(offline-4.565565)/1.077261) - -#taus -function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+6.720396)/1.510317 if abs(Eta)<1.5 else (Et>(offline+5.499322)/1.898208) -function :: NNTauLoose090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-3.778738)/1.642246 if abs(Eta)<1.5 else (Et>(offline-14.808886)/1.716542) - -#puppijet -function :: Phase1PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-12.381481)/1.331251 if abs(Eta)<1.5 else (Et>(offline-21.649515)/1.372602 if abs(Eta)<2.4 else (Et>(offline-35.609357)/1.493540)) - -#tkmuons -function :: GMTTkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.903751)/1.039495 if abs(Eta)<0.83 else (Et>(offline-0.894300)/1.044889 if abs(Eta)<1.24 else (Et>(offline-0.796396)/1.040808)) - - -## trigger paths -## ----------------------------------------------------------- - -## muon - -trigger :: L1_SingleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(22.0,Pt,Eta), abs(Eta)<2.4 ); \ - -trigger :: L1_DoubleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(15.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4, abs(leg1.Z0-Z0)<1 ); \ - -#trigger :: L1_TripleTkMu :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ - -# e/gamma - -trigger :: L1_SingleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - -trigger :: L1_SingleTkEleIso :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(28.0,Et,Eta), TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - -trigger :: L1_SingleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - -trigger :: L1_TkEleIso_EG :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - leg2:=(EG , EGElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - -trigger :: L1_DoubleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(25.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_DoubleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - leg2:=(tkPhoton , TkIsoPhotonOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - - - -# tau stuff - -trigger :: L1_SinglePFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(150.0,Et,Eta), abs(Eta)<2.172); \ - -trigger :: L1_PFTau_PFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172); \ - leg2:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - - - -trigger :: L1_PFIsoTau_PFIsoTau :: leg1:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - -trigger :: L1_PFIsoTau_TkMu :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(18.0,Pt,Eta), abs(Eta)<2.1, abs(Z0-leg1.Et)<1); \ - leg3:=(puppiTau , NNTauLoose090OfflineEtCut(42.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - -trigger :: L1_TkEleIso_PFIsoTau :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.1, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiTau, NNTauLoose090OfflineEtCut(45.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - -trigger :: L1_PFIsoTau_PFMet :: leg1:=(puppiTau, NNTauLoose090OfflineEtCut(55.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiMet, Et>PuppiMET090OfflineEtCut(190.0)); \ - - -# Jets -trigger :: L1_SinglePfJet :: leg1:=(puppiJet, Phase1PuppiJetOfflineEtCut(230.0,Et,Eta), abs(Eta)<5.0); \ - -trigger :: L1_DoublePFJet_dEtaMax :: leg1:=(puppiJet, Phase1PuppiJetOfflineEtCut(112.0,Et,Eta), abs(Eta)<2.4); \ - leg2:=(puppiJet, Phase1PuppiJetOfflineEtCut(112.0,Et,Eta), abs(Eta)<2.4, deltaEta(Eta,leg1.Eta)<1.6); \ - -# HT, MET -trigger :: L1_PFHTT :: leg1:=(puppiHt , leading>Phase1PuppiHT090OfflineEtCut(450.0)); \ - -trigger :: L1_PFMHTT :: leg1:=(puppiMHt , Et>Phase1PuppiMHTOfflineEtCut(135.5)); \ - -trigger :: L1_PFMet :: leg1:=(puppiMet, Et>PuppiMET090OfflineEtCut(200.0)); \ - -trigger :: L1_PFHTT_QuadJet :: leg1:=(puppiHt , leading>Phase1PuppiHT090OfflineEtCut(400.0)); \ - leg2:=(puppiJet, Phase1PuppiJetOfflineEtCut(70.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(55.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg4:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg5:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - -# EG+Mu -trigger :: L1_TkMu_TkEleIso :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(20.0,Et,Eta), abs(Eta)<2.4, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_TkMu_TkEle :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkElectron, TkElectronOfflineEtCut(23.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_TkEle_TkMu :: leg1:=(tkElectron , TkElectronOfflineEtCut(10.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(20.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ - -trigger :: L1_TkMu_DoubleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, abs(zVtx-leg1.zVtx)<1); \ - leg3:=(tkGmtMu , GMTTkMuonOfflineEtCut(6.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ - -#trigger :: L1_DoubleTkMu_TkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(9.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ -# leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ -# leg3:=(tkGmtMu , GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ - - -# Lep+Jet/HT -trigger :: L1_TkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(6.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ - leg3:=(puppiHt, leading>Phase1PuppiHT090OfflineEtCut(320.0)); \ - -trigger :: L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(12.0,Pt,Eta), Qual>=8, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ - leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaR(Eta,leg2.Eta,Phi,leg2.Phi)<0.4); \ - leg4:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4); \ - leg5:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaEta(Eta,leg4.Eta)<1.6); \ - -#trigger :: L1_TkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.1, abs(Z0-leg1.Et)<1 ); \ -# leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(110.0,Et,Eta), abs(Eta)<2.5); \ -# leg4:=(puppiMet, Et>PuppiMET090OfflineEtCut(120.0)); \ - -#trigger :: L1_DoubleTkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg4:=(puppiJet, Phase1PuppiJetOfflineEtCut(60.0,Et,Eta), abs(Eta)<2.4); \ -# leg5:=(puppiMet, Et>PuppiMET090OfflineEtCut(130.0)); - -#trigger :: L1_DoubleTkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg4:=(puppiHt, leading>Phase1PuppiHT090OfflineEtCut(300.0)); - -trigger :: L1_DoubleTkEle_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, PassesLooseTrackID, abs(zVtx-leg1.Et)<1); \ - leg3:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, PassesLooseTrackID, abs(zVtx-leg1.Et)<1); \ - leg4:=(puppiHt, leading>Phase1PuppiHT090OfflineEtCut(390.0)); - - -trigger :: L1_TkEleIso_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkIsoElectronOfflineEtCut(26.0,Et,Eta), abs(Eta)<2.1, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiHt , leading>Phase1PuppiHT090OfflineEtCut(190.0)); - -trigger :: L1_TkEle_PFJet_dRMin :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(28.0,Et,Eta), abs(Eta)<2.1, PassesLooseTrackID, abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaR(Eta, leg2.Eta, Phi, leg2.Phi)>0.3); \ - - - - -# VBF -trigger :: L1_DoublePFJet_MassMin :: leg1:=(puppiJet, Phase1PuppiJetOfflineEtCut(160.0,Et,Eta)); \ - leg2:=(puppiJet, Phase1PuppiJetOfflineEtCut(35.0,Et,Eta), pairInvMass(Et,leg1.Et,Eta,leg1.Eta,Phi,leg1.Phi)>620.0); \ - - - -# BPH -#trigger :: L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4 :: leg1:=(tkGmtMu, abs(Eta)<1.5 ); \ -# leg2:=(tkGmtMu, abs(Eta)<1.5, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.4, pow(-1,leg1.Chg)*pow(-1,Chg)<0.0, abs(Z0-leg1.Z0)<1 ); \ - -#trigger :: L1_DoubleTkMu4_SQ_OS_dR_Max1p2 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.0,Pt,Eta), abs(Eta)<2.4, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.2, pow(-1,leg1.Chg)*pow(-1,Chg)<0.0, abs(Z0-leg1.Z0)<1 ); \ - - -#trigger :: L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.5,Pt,Eta), abs(Eta)<2.0 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.5,Pt,Eta), abs(Eta)<2.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>7.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<18.0, pow(-1,leg1.Chg)*pow(-1,Chg)<0.0, abs(Z0-leg1.Z0)<1 ); \ - - -#trigger :: L1_DoubleTkMu9_SQ :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1); \ - -#trigger :: L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<9.0, pow(-1,leg1.Chg)*pow(-1,Chg)<0.0, abs(Z0-leg1.Z0)<1 ); \ -# leg3:=(tkGmtMu, Pt>0.0, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ - -#trigger :: L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.5,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(2.5,Pt,Eta), abs(Eta)<2.4, pow(-1,leg1.Chg)*pow(-1,Chg)<0.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>5.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<17.0, abs(Z0-leg1.Z0)<1 ); \ - - - - -# Standalone path: recover efficiency and robustness - -trigger :: L1_SingleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(51.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID); \ - -trigger :: L1_DoubleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(37.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID ); \ - leg2:=(EG , EGElectronOfflineEtCut(24.0,Et,Eta), abs(Eta)<2.4, PassesLooseTrackID, notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - - diff --git a/rates/table/cfg/v27/v27_1252_noSoftMu b/rates/table/cfg/v27/v27_1252_noSoftMu deleted file mode 100644 index cb9c699e..00000000 --- a/rates/table/cfg/v27/v27_1252_noSoftMu +++ /dev/null @@ -1,352 +0,0 @@ -#format is like this: -#typeOfParameter :: parameterOrObjectName :: option1=value2; option2=(this,is,a,list) - - -## general options -## ----------------------------------------------------------- -variable :: bundledate :: v27_May23_NewScalingAll_1x2x3x_NoLowPtMu_MHT_50perc -#variable :: bundledate :: v27_May23_NewScalingAll_NoLowPtMu_MHT_50perc_test1 -variable :: nBunches :: 2760 -variable :: revFreq :: 11246 - -#variable :: tiers :: (variations) -variable :: tiers :: (thresholds) - -variable :: varBins :: (30,50) -#variable :: varBins :: (10,20,30,40,50,60,70,80,90,100) -##variable :: varBins :: (100,140,275,425,575,700,850,1000) -variable :: varError :: 0.2 -variable :: varInterpol :: linear -variable :: varLeg :: 1 -variable :: varCut :: 1 -variable :: varPrecision :: 2 -variable :: varIterations :: 5 -variable :: useNominalBwF :: False - - - -## samples (always all samples are used!) -## ----------------------------------------------------------- - -## SMALL STAT FOR TEST -#sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/MinBias_TuneCP5_14TeV-pythia8/MinBias_1252_200PU_crb_v27_PU200/230213_192753/0000/L1NtuplePhaseII_Step1_10.root; tree:=l1PhaseIITree/L1PhaseIITree - -## LARGE STAT -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/MinBias_TuneCP5_14TeV-pythia8/MinBias_1252_200PU_crb_v27_PU200/230213_192753/L1NtuplePhaseII_Step1_3x.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/MinBias_TuneCP5_14TeV-pythia8/MinBias_1252_200PU_crb_v27_PU200/230213_192753/L1NtuplePhaseII_Step1_2x.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/MinBias_TuneCP5_14TeV-pythia8/MinBias_1252_200PU_crb_v27_PU200/230213_192753/L1NtuplePhaseII_Step1_1x.root; tree:=l1PhaseIITree/L1PhaseIITree - - -## physics objects at trigger level -## ----------------------------------------------------------- - -## Electrons and Photons -object :: EG :: basebranch:=EG ; variables:=(Et,Eta,Phi,Iso,zVtx,PassesEleID,PassesSaID,HwQual); \ - leading:=Et; lengthbranch:=nEG; onToOff:=0 - -object :: tkElectron :: basebranch:=tkElectron ; variables:=(Et,Eta,Phi,TrkIso,zVtx,PassesEleID,HwQual); \ - leading:=Et; lengthbranch:=nTkElectrons; onToOff:=0 - -object :: tkPhoton :: basebranch:=tkPhoton ; variables:=(Et,Eta,Phi,TrkIso,TrkIsoPV,zVtx,PassesEleID,PassesPhoID,HwQual); \ - leading:=Et; lengthbranch:=nTkPhotons; onToOff:=0 - -## Muons -#object :: tkMu :: basebranch:=tkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,TrkIso,Qual,zVtx,MuRefPt,MuRefEta,MuRefPhi,Region,Qual); \ -# leading:=Pt; lengthbranch:=nTkMuons; onToOff:=0 - -object :: tkGmtMu :: basebranch:=gmtTkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,Qual,Z0); \ - leading:=Pt; lengthbranch:=nGmtTkMuons; onToOff:=0 - -## Taus -object :: puppiTau :: basebranch:=nnTau ; variables:=(Et,Eta,Phi,PassLooseNN,PassTightNN); \ - leading:=Et; lengthbranch:=nNNTaus; onToOff:=0 - -object :: caloTau :: basebranch:=caloTau ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nCaloTaus; onToOff:=0 - -## Jets -object :: puppiJet :: basebranch:=phase1PuppiJet ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nPhase1PuppiJets; onToOff:=0 - -## HT -object :: puppiHt :: basebranch:=phase1PuppiHT ; variables:=(Et=); \ - leading:=Et; isFlat:=True; fixedIndex:=0; onToOff:=0 - -object :: puppiMHt :: basebranch:=phase1PuppiMHT ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## MET -object :: puppiMet :: basebranch:=puppiMET ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## zVtx -object :: puppiVtx :: basebranch:=z0L1TkPV ; variables:=(Et=); \ - leading:=Et; isFlat:=True; onToOff:=0 - - - - -## function aliases -## ----------------------------------------------------------- -function :: notMatched :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(abs(eta1)-abs(eta2)),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2))>0.1 -function :: deltaR :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(eta1-eta2),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2)) -function :: deltaEta :: args:=(eta1,eta2); lambda:= abs(eta1-eta2) -function :: etaRangeCutLess :: args:=(x,eta,etaRange,cutInRange,cutOutRange); lambda:= xcutInRange if abs(eta)cutOutRange -function :: pairInvMass :: args:=(pt1,pt2,eta1,eta2,phi1,phi2); lambda:= math.sqrt(2.0*pt1*pt2*(math.cosh(eta1-eta2)-math.cos(phi1-phi2))) -function :: pfJetEtaVeto :: args:=(Eta); lambda:= abs(Eta)<2.5 or abs(Eta)>3.0 - -function :: muonQual :: args:=(Region,Qual); lambda:= 1 if (Region==3 and (Qual == 11 or Qual == 13 or Qual == 14 or Qual == 15)) else (1 if Region<3 else 0) - -function :: cleanMuons :: args:=(Region,Eta); lambda:= Region==1 if abs(Eta)<0.9 else (Region==2 if abs(Eta)<1.2 else Region==3) - - -# Quality requirements for muons and tkelectrons -function :: MuonStaQualCut :: args:=(Qual,Eta); lambda:=Qual>=0 if abs(Eta)<0.9 else (Qual>=12 if abs(Eta)<1.2 else Qual>=0) -function :: TkElectronIsoQualCut :: args:=(HwQual,Eta); lambda:=HwQual==3 if abs(Eta)>1.479 else HwQual>=0 - -#Scalings - -## HT -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V27/scalings/?match=HT_*perc&depth=1 -## 90% -function :: Phase1PuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-57.788)/1.121 -## 50% -function :: Phase1PuppiHT050OfflineEtCut :: args:=(offline); lambda:=(offline+5.616)/1.056 - -##MHT -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V27/scalings/?match=MHT_*perc&depth=1 -## 90% -function :: Phase1PuppiMHT90OfflineEtCut :: args:=(offline); lambda:=(offline-34.330)/1.367 -## 50% -function :: Phase1PuppiMHT50OfflineEtCut :: args:=(offline); lambda:=(offline+9.431)/1.124 - -##puppimet -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V27/scalings/?match=MET_*perc&depth=1 -## 90% -function :: PuppiMET090OfflineEtCut :: args:=(offline); lambda:=(offline-59.251)/1.499 -## 50% -function :: PuppiMET050OfflineEtCut :: args:=(offline); lambda:=(offline-6.707)/1.148 - -#EG -function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.94)/1.178 if abs(Eta)<1.5 else (Et>(offline-1.391)/1.253) -function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.971)/1.185 if abs(Eta)<1.5 else (Et>(offline+0.318)/1.294) -function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.063)/1.174 if abs(Eta)<1.5 else (Et>(offline+0.356)/1.28) -function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.36)/1.106 if abs(Eta)<1.5 else (Et>(offline-5.017)/1.065) - -## taus -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V27/scalings/?match=Tau*perc&depth=1 - -### BARREL -## 50 % -#function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-0.694)/1.050 -#function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+8.419)/1.245 -## 90% -##function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline+5.385)/1.759 -##function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+1.621)/1.497 - -### ENDCAP -## 50% -##function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-1.535)/1.076 -##function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+12.875)/1.464 - -## 90% -##function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-8.553)/1.700 -##function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+0.391)/1.941 - -function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+1.621)/1.497 if abs(Eta)<1.5 else (Et>(offline+0.391)/1.941) -function :: CaloTau050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+8.419)/1.245 if abs(Eta)<1.5 else (Et>(offline+12.875)/1.464) - -function :: NNTauLoose090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+5.385)/1.759 if abs(Eta)<1.5 else (Et>(offline-8.553)/1.7) -function :: NNTauLoose050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.694)/1.050 if abs(Eta)<1.5 else (Et>(offline-1.535)/1.076) - -#puppijet -function :: Phase1PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-15.633)/1.296 if abs(Eta)<1.5 else (Et>(offline-9.644)/1.943 if abs(Eta)<2.4 else (Et>(offline-72.901)/1.368)) - -#tkmuons -function :: GMTTkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-0.96)/1.046 if abs(Eta)<0.83 else (Et>(offline-0.936)/1.052 if abs(Eta)<1.24 else (Et>(offline-1.024)/1.08)) - -## IDs -function :: EGID :: args:=(EleID, SaID, Eta); lambda:=EleID if abs(Eta)<1.5 else SaID -function :: PhoID :: args:=(EleID, PhoID, Eta); lambda:=EleID if abs(Eta)<1.5 else PhoID - - -## trigger paths -## ----------------------------------------------------------- - -## muon - -trigger :: L1_SingleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(22.0,Pt,Eta), abs(Eta)<2.4 ); \ - -trigger :: L1_DoubleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(15.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4, abs(leg1.Z0-Z0)<1 ); \ - -# trigger :: L1_TripleTkMu :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ - -# e/gamma - -trigger :: L1_SingleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PassesEleID); \ - -trigger :: L1_SingleTkEleIso :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(28.0,Et,Eta), TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - -trigger :: L1_DoubleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(25.0,Et,Eta), abs(Eta)<2.4, PassesEleID); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PassesEleID, abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_SingleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - -trigger :: L1_TkEleIso_EG :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - leg2:=(EG , EGElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta), notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - -trigger :: L1_DoubleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - leg2:=(tkPhoton , TkIsoPhotonOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - - -# tau stuff - -trigger :: L1_SinglePFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(150.0,Et,Eta), abs(Eta)<2.172); \ - -trigger :: L1_PFTau_PFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172); \ - leg2:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - - - -trigger :: L1_PFIsoTau_PFIsoTau :: leg1:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - -trigger :: L1_PFIsoTau_TkMu :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(puppiTau , NNTauLoose090OfflineEtCut(42.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg3:=(tkGmtMu , GMTTkMuonOfflineEtCut(18.0,Pt,Eta), abs(Eta)<2.1, abs(Z0-leg1.Et)<1); \ - -trigger :: L1_TkEleIso_PFIsoTau :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.1, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiTau, NNTauLoose090OfflineEtCut(45.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - -trigger :: L1_PFIsoTau_PFMet :: leg1:=(puppiTau, NNTauLoose090OfflineEtCut(55.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiMet, Et>PuppiMET090OfflineEtCut(190.0)); \ - - -# Jets -trigger :: L1_SinglePfJet :: leg1:=(puppiJet, Phase1PuppiJetOfflineEtCut(230.0,Et,Eta), abs(Eta)<2.4); \ - -trigger :: L1_DoublePFJet_dEtaMax :: leg1:=(puppiJet, Phase1PuppiJetOfflineEtCut(112.0,Et,Eta), abs(Eta)<2.4); \ - leg2:=(puppiJet, Phase1PuppiJetOfflineEtCut(112.0,Et,Eta), abs(Eta)<2.4, deltaEta(Eta,leg1.Eta)<1.6); \ - -# HT, MET -trigger :: L1_PFHTT :: leg1:=(puppiHt , leading>Phase1PuppiHT090OfflineEtCut(450.0)); \ - -#trigger :: L1_PFMHTT_90sc :: leg1:=(puppiMHt , Et> Phase1PuppiMHT90OfflineEtCut(135.5)); \ -trigger :: L1_PFMHTT :: leg1:=(puppiMHt , Et> Phase1PuppiMHT50OfflineEtCut(135.5)); \ - -trigger :: L1_PFMet :: leg1:=(puppiMet, Et>PuppiMET090OfflineEtCut(200.0)); \ - -trigger :: L1_PFHTT_QuadJet :: leg1:=(puppiHt , leading>Phase1PuppiHT090OfflineEtCut(400.0)); \ - leg2:=(puppiJet, Phase1PuppiJetOfflineEtCut(70.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(55.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg4:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg5:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - -# EG+Mu -trigger :: L1_TkMu_TkEleIso :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(20.0,Et,Eta), abs(Eta)<2.4, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_TkMu_TkEle :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkElectron, TkElectronOfflineEtCut(23.0,Et,Eta), abs(Eta)<2.4, PassesEleID, abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_TkEle_TkMu :: leg1:=(tkElectron , TkElectronOfflineEtCut(10.0,Et,Eta), abs(Eta)<2.4, PassesEleID); \ - leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(20.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ - -trigger :: L1_TkMu_DoubleTkEle :: \ - leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(6.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, PassesEleID, abs(zVtx-leg1.Z0)<1 ); \ - leg3:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, PassesEleID, abs(zVtx-leg1.Z0)<1); \ - -# trigger :: L1_DoubleTkMu_TkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(9.0,Et,Eta), abs(Eta)<2.4, PassesEleID); \ -# leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ -# leg3:=(tkGmtMu , GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ - - -# Lep+Jet/HT -trigger :: L1_TkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(6.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ - leg3:=(puppiHt, leading>Phase1PuppiHT090OfflineEtCut(320.0)); \ - -trigger :: L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(12.0,Pt,Eta), Qual>=8, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ - leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaR(Eta,leg2.Eta,Phi,leg2.Phi)<0.4); \ - leg4:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4); \ - leg5:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaEta(Eta,leg4.Eta)<1.6); \ - -# trigger :: L1_TkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.1, abs(Z0-leg1.Et)<1 ); \ -# leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(110.0,Et,Eta), abs(Eta)<2.5); \ -# leg4:=(puppiMet, Et>PuppiMET090OfflineEtCut(120.0)); \ - -# trigger :: L1_DoubleTkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg4:=(puppiJet, Phase1PuppiJetOfflineEtCut(60.0,Et,Eta), abs(Eta)<2.4); \ -# leg5:=(puppiMet, Et>PuppiMET090OfflineEtCut(130.0)); - -# trigger :: L1_DoubleTkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 ); \ -# leg4:=(puppiHt, leading>Phase1PuppiHT090OfflineEtCut(300.0)); - -trigger :: L1_DoubleTkEle_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, PassesEleID, abs(zVtx-leg1.Et)<1); \ - leg3:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, PassesEleID, abs(zVtx-leg1.Et)<1); \ - leg4:=(puppiHt, leading>Phase1PuppiHT090OfflineEtCut(390.0)); - - -trigger :: L1_TkEleIso_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkIsoElectronOfflineEtCut(26.0,Et,Eta), abs(Eta)<2.1, TkElectronIsoQualCut(HwQual,Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiHt , leading>Phase1PuppiHT090OfflineEtCut(190.0)); - -trigger :: L1_TkEle_PFJet_dRMin :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(28.0,Et,Eta), abs(Eta)<2.1, PassesEleID, abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiJet, Phase1PuppiJetOfflineEtCut(40.0,Et,Eta), abs(Eta)<2.4, deltaR(Eta, leg2.Eta, Phi, leg2.Phi)>0.3); \ - - - - -# VBF -trigger :: L1_DoublePFJet_MassMin :: leg1:=(puppiJet, Phase1PuppiJetOfflineEtCut(160.0,Et,Eta)); \ - leg2:=(puppiJet, Phase1PuppiJetOfflineEtCut(35.0,Et,Eta), pairInvMass(Et,leg1.Et,Eta,leg1.Eta,Phi,leg1.Phi)>620.0); \ - - - -# BPH -# trigger :: L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4 :: leg1:=(tkGmtMu, abs(Eta)<1.5 ); \ -# leg2:=(tkGmtMu, abs(Eta)<1.5, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.4, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1 ); \ - -# trigger :: L1_DoubleTkMu4_SQ_OS_dR_Max1p2 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.0,Pt,Eta), abs(Eta)<2.4, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.2, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1 ); \ - - -# trigger :: L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.5,Pt,Eta), abs(Eta)<2.0 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(4.5,Pt,Eta), abs(Eta)<2.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>7.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<18.0, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1 ); \ - - -# trigger :: L1_DoubleTkMu9_SQ :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1); \ - -# trigger :: L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.0,Pt,Eta), abs(Eta)<2.4, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<9.0, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1 ); \ -# leg3:=(tkGmtMu, Pt>0.0, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ - -# trigger :: L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17 :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(5.0,Pt,Eta), abs(Eta)<2.4 ); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(3.5,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 ); \ -# leg3:=(tkGmtMu, GMTTkMuonOfflineEtCut(2.5,Pt,Eta), abs(Eta)<2.4, leg1.Chg*Chg<0.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>5.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<17.0, abs(Z0-leg1.Z0)<1 ); \ - - - - -# Standalone path: recover efficiency and robustness - -trigger :: L1_SingleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(51.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta)); \ - -trigger :: L1_DoubleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(37.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta) ); \ - leg2:=(EG , EGElectronOfflineEtCut(24.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta), notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - diff --git a/rates/table/cfg/v29/v29_16Seeds_Final b/rates/table/cfg/v29/v29_16Seeds_Final deleted file mode 100644 index 609a7f5e..00000000 --- a/rates/table/cfg/v29/v29_16Seeds_Final +++ /dev/null @@ -1,244 +0,0 @@ -#format is like this: -#typeOfParameter :: parameterOrObjectName :: option1=value2; option2=(this,is,a,list) - - -## general options -## ----------------------------------------------------------- -variable :: bundledate :: v29_16Seeds -variable :: nBunches :: 2760 -variable :: revFreq :: 11246 - -#variable :: tiers :: (variations) -variable :: tiers :: (thresholds) - -variable :: varBins :: (30,50) -#variable :: varBins :: (10,20,30,40,50,60,70,80,90,100) -##variable :: varBins :: (100,140,275,425,575,700,850,1000) -variable :: varError :: 0.2 -variable :: varInterpol :: linear -variable :: varLeg :: 1 -variable :: varCut :: 1 -variable :: varPrecision :: 2 -variable :: varIterations :: 5 -variable :: useNominalBwF :: False - - - -## samples (always all samples are used!) -## ----------------------------------------------------------- - -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_1.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_2.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_3.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_4.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_5.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_6.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_7.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_8.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_9x.root; tree:=l1PhaseIITree/L1PhaseIITree - -## tests -#sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_1252_crb_v29_Snap3/230413_214525/0000/L1NtuplePhaseII_Step1_101.root; tree:=l1PhaseIITree/L1PhaseIITree - - - -## physics objects at trigger level -## ----------------------------------------------------------- - -## Electrons and Photons -object :: EG :: basebranch:=EG ; variables:=(Et,Eta,Phi,Iso,zVtx,PassesEleID,PassesSaID,HwQual); \ - leading:=Et; lengthbranch:=nEG; onToOff:=0 - -object :: tkElectron :: basebranch:=tkElectron ; variables:=(Et,Eta,Phi,TrkIso,zVtx,PassesEleID,HwQual); \ - leading:=Et; lengthbranch:=nTkElectrons; onToOff:=0 - -object :: tkPhoton :: basebranch:=tkPhoton ; variables:=(Et,Eta,Phi,TrkIso,TrkIsoPV,zVtx,PassesEleID,PassesPhoID,HwQual); \ - leading:=Et; lengthbranch:=nTkPhotons; onToOff:=0 - -## Muons -#object :: tkMu :: basebranch:=tkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,TrkIso,Qual,zVtx,MuRefPt,MuRefEta,MuRefPhi,Region,Qual); \ -# leading:=Pt; lengthbranch:=nTkMuons; onToOff:=0 - -object :: tkGmtMu :: basebranch:=gmtTkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,Qual,Z0); \ - leading:=Pt; lengthbranch:=nGmtTkMuons; onToOff:=0 - -## Taus -object :: puppiTau :: basebranch:=nnTau ; variables:=(Et,Eta,Phi,PassLooseNN,PassTightNN); \ - leading:=Et; lengthbranch:=nNNTaus; onToOff:=0 - -object :: caloTau :: basebranch:=caloTau ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nCaloTaus; onToOff:=0 - -## Jets -object :: puppiJet :: basebranch:=seededConePuppiJet ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nSeededConePuppiJets; onToOff:=0 - -object :: puppiHt :: basebranch:=seededConePuppiHT ; variables:=(Et=); \ - leading:=Et; isFlat:=True; fixedIndex:=0; onToOff:=0 - -object :: puppiMHt :: basebranch:=seededConePuppiMHT ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## MET -object :: puppiMet :: basebranch:=puppiMET ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## zVtx -object :: puppiVtx :: basebranch:=z0L1TkPV ; variables:=(Et=); \ - leading:=Et; isFlat:=True; onToOff:=0 - - - - -## function aliases -## ----------------------------------------------------------- -function :: notMatched :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(abs(eta1)-abs(eta2)),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2))>0.1 -function :: deltaR :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(eta1-eta2),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2)) -function :: deltaEta :: args:=(eta1,eta2); lambda:= abs(eta1-eta2) -function :: etaRangeCutLess :: args:=(x,eta,etaRange,cutInRange,cutOutRange); lambda:= xcutInRange if abs(eta)cutOutRange -function :: pairInvMass :: args:=(pt1,pt2,eta1,eta2,phi1,phi2); lambda:= math.sqrt(2.0*pt1*pt2*(math.cosh(eta1-eta2)-math.cos(phi1-phi2))) -function :: pfJetEtaVeto :: args:=(Eta); lambda:= abs(Eta)<2.5 or abs(Eta)>3.0 - -#Scalings - -## HT -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=HT_*perc&depth=1 -## 90% -function :: Phase1PuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-54.550)/1.087 -function :: SeededConePuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-47.986)/1.084 -## 50% -function :: Phase1PuppiHT050OfflineEtCut :: args:=(offline); lambda:=(offline+6.229)/0.992 -function :: SeededConePuppiHT050OfflineEtCut :: args:=(offline); lambda:=(offline+11.651)/0.996 - - -##MHT -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=MHT_*perc&depth=1 -## 90% -function :: Phase1PuppiMHT090OfflineEtCut :: args:=(offline); lambda:=(offline-49.175)/1.321 -function :: SeededConePuppiMHT090OfflineEtCut :: args:=(offline); lambda:=(offline-55.097)/1.202 - -## 50% -function :: Phase1PuppiMHT050OfflineEtCut :: args:=(offline); lambda:=(offline+25.367)/1.199 -function :: SeededConePuppiMHT050OfflineEtCut :: args:=(offline); lambda:=(offline+20.499)/1.170 - -##puppimet -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=MET_*perc&depth=1 -## 90% -function :: PuppiMET090OfflineEtCut :: args:=(offline); lambda:=(offline-63.781)/1.465 -## 50% -function :: PuppiMET050OfflineEtCut :: args:=(offline); lambda:=(offline-5.455)/1.169 - -#EG -function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.707)/1.188 if abs(Eta)<1.5 else (Et>(offline-1.572)/1.249) -function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.441)/1.159 if abs(Eta)<1.5 else (Et>(offline-1.256)/1.217) -function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.638)/1.144 if abs(Eta)<1.5 else (Et>(offline-1.219)/1.214) -function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.697)/1.096 if abs(Eta)<1.5 else (Et>(offline-5.038)/1.067) - - -## IDs -function :: EGID :: args:=(EleID, SaID, Eta); lambda:=EleID if abs(Eta)<1.5 else SaID -function :: PhoID :: args:=(EleID, PhoID, Eta); lambda:=EleID if abs(Eta)<1.5 else PhoID - -#function :: EleIDV2 :: args:=(Et,Eta,PassesEleID) ; lambda:=PassesEleID if ( Et>25 or abs(Eta)<1.5) else 1 -#function :: TkElectronIsoQualCut :: args:=(HwQual,Eta, Et); lambda:=HwQual==3 if (Et>25 and abs(Eta)>1.479) else 1 if (Et<25 and abs(Eta)>1.479) else HwQual>=0 - -function :: TkEleQualHIGH :: args:=(Et,Eta,PassesEleID) ; lambda:=PassesEleID -function :: TkEleQualLOW :: args:=(Et,Eta,PassesEleID) ; lambda:=PassesEleID if (abs(Eta)<1.479) else 1 -function :: TkEleIsoQualHIGH :: args:=(Et,Eta,PassesEleID); lambda:= PassesEleID if (abs(Eta)>1.479) else 1 -function :: TkEleIsoQualLOW :: args:=(Et,Eta,PassesEleID); lambda:= (PassesEleID>=0) # this should be always true: we can remove this condition from the menu - -#function :: TkElectronIsoQualCut :: args:=(HwQual,Eta); lambda:=HwQual==3 if abs(Eta)>1.479 else HwQual>=0 - -## taus -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=Tau*perc&depth=1 - -### BARREL -# ## 50 % -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-1.223)/1.083 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+8.291)/1.241 -# ## 90% -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline+2.065)/1.899 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+2.553)/1.525 - -# ### ENDCAP -# ## 50% -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-2.217)/1.087 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+12.821)/1.463 - -# ## 90% -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-19.596)/1.584 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+1.273)/1.968 - -function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+2.553)/1.525 if abs(Eta)<1.5 else (Et>(offline+1.273)/1.968) -function :: CaloTau050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+8.291)/1.241 if abs(Eta)<1.5 else (Et>(offline+12.821)/1.463) - -function :: NNTauLoose090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+2.065)/1.899 if abs(Eta)<1.5 else (Et>(offline-19.596)/1.584) -function :: NNTauLoose050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.223)/1.083 if abs(Eta)<1.5 else (Et>(offline-2.217)/1.087) - -#puppijet -function :: Phase1PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-15.497)/1.383 if abs(Eta)<1.5 else (Et>(offline-9.362)/1.959 if abs(Eta)<2.4 else (Et>(offline-75.5)/1.41)) -function :: SeededConePuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-20.108)/1.308 if abs(Eta)<1.5 else (Et>(offline-7.971)/2.05 if abs(Eta)<2.4 else (Et>(offline-72.567)/1.418)) - -#tkmuons -function :: GMTTkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>offline if (offline<8) else Et>(offline-0.986)/1.049 if abs(Eta)<0.83 else (Et>(offline-1.075)/1.052 if abs(Eta)<1.24 else (Et>(offline-0.792)/1.054)) - -## trigger paths -## ----------------------------------------------------------- - -## muon - -trigger :: L1_SingleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(22.0,Pt,Eta), abs(Eta)<2.4 ); \ - -trigger :: L1_DoubleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(15.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkGmtMu , Pt > 7, abs(Eta)<2.4, abs(leg1.Z0-Z0)<1, Qual > 0); \ - -trigger :: L1_TripleTkMu :: leg1:=(tkGmtMu, Pt>5, abs(Eta)<2.4, Qual>0 ); \ - leg2:=(tkGmtMu, Pt>3, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - leg3:=(tkGmtMu, Pt>3, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - -# e/gamma - -trigger :: L1_SingleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, TkEleQualHIGH(Et,Eta,PassesEleID)); \ - -trigger :: L1_SingleTkEleIso :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(28.0,Et,Eta), TkEleIsoQualLOW(Et,Eta,PassesEleID), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - -trigger :: L1_DoubleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(25.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID) ); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID) , abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_SingleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - -trigger :: L1_TkEleIso_EG :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, TkEleIsoQualLOW(Et,Eta,PassesEleID) , etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - leg2:=(EG , EGElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta), notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - -trigger :: L1_DoubleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - leg2:=(tkPhoton , TkIsoPhotonOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - -# tau stuff - -trigger :: L1_PFIsoTau_PFIsoTau :: leg1:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - -# Jets -trigger :: L1_SinglePfJet :: leg1:=(puppiJet, SeededConePuppiJetOfflineEtCut(230.0,Et,Eta), Et>25, abs(Eta)<2.4); \ - -# HT, MET -trigger :: L1_PFHTT :: leg1:=(puppiHt , leading>SeededConePuppiHT090OfflineEtCut(450.0)); \ - -trigger :: L1_PFMet :: leg1:=(puppiMet, Et>PuppiMET090OfflineEtCut(200.0)); \ - -trigger :: L1_PFHTT_QuadJet :: leg1:=(puppiHt , leading>SeededConePuppiHT090OfflineEtCut(400.0)); \ - leg2:=(puppiJet, SeededConePuppiJetOfflineEtCut(70.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg3:=(puppiJet, SeededConePuppiJetOfflineEtCut(55.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg4:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg5:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - - -# Standalone path: recover efficiency and robustness - -trigger :: L1_SingleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(51.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta)); \ - -trigger :: L1_DoubleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(37.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta) ); \ - leg2:=(EG , EGElectronOfflineEtCut(24.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta), notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - - diff --git a/rates/table/cfg/v29/v29_NOMUONS_Final b/rates/table/cfg/v29/v29_NOMUONS_Final deleted file mode 100644 index 15419057..00000000 --- a/rates/table/cfg/v29/v29_NOMUONS_Final +++ /dev/null @@ -1,364 +0,0 @@ -#format is like this: -#typeOfParameter :: parameterOrObjectName :: option1=value2; option2=(this,is,a,list) - - -## general options -## ----------------------------------------------------------- -variable :: bundledate :: v29_NOSoftMuons -variable :: nBunches :: 2760 -variable :: revFreq :: 11246 - -#variable :: tiers :: (variations) -variable :: tiers :: (thresholds) - -variable :: varBins :: (30,50) -#variable :: varBins :: (10,20,30,40,50,60,70,80,90,100) -##variable :: varBins :: (100,140,275,425,575,700,850,1000) -variable :: varError :: 0.2 -variable :: varInterpol :: linear -variable :: varLeg :: 1 -variable :: varCut :: 1 -variable :: varPrecision :: 2 -variable :: varIterations :: 5 -variable :: useNominalBwF :: False - - - -## samples (always all samples are used!) -## ----------------------------------------------------------- - -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_1.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_2.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_3.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_4.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_5.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_6.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_7.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_8.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_9x.root; tree:=l1PhaseIITree/L1PhaseIITree - -## tests -#sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_1252_crb_v29_Snap3/230413_214525/0000/L1NtuplePhaseII_Step1_101.root; tree:=l1PhaseIITree/L1PhaseIITree - - - -## physics objects at trigger level -## ----------------------------------------------------------- - -## Electrons and Photons -object :: EG :: basebranch:=EG ; variables:=(Et,Eta,Phi,Iso,zVtx,PassesEleID,PassesSaID,HwQual); \ - leading:=Et; lengthbranch:=nEG; onToOff:=0 - -object :: tkElectron :: basebranch:=tkElectron ; variables:=(Et,Eta,Phi,TrkIso,zVtx,PassesEleID,HwQual); \ - leading:=Et; lengthbranch:=nTkElectrons; onToOff:=0 - -object :: tkPhoton :: basebranch:=tkPhoton ; variables:=(Et,Eta,Phi,TrkIso,TrkIsoPV,zVtx,PassesEleID,PassesPhoID,HwQual); \ - leading:=Et; lengthbranch:=nTkPhotons; onToOff:=0 - -## Muons -#object :: tkMu :: basebranch:=tkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,TrkIso,Qual,zVtx,MuRefPt,MuRefEta,MuRefPhi,Region,Qual); \ -# leading:=Pt; lengthbranch:=nTkMuons; onToOff:=0 - -object :: tkGmtMu :: basebranch:=gmtTkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,Qual,Z0); \ - leading:=Pt; lengthbranch:=nGmtTkMuons; onToOff:=0 - -## Taus -object :: puppiTau :: basebranch:=nnTau ; variables:=(Et,Eta,Phi,PassLooseNN,PassTightNN); \ - leading:=Et; lengthbranch:=nNNTaus; onToOff:=0 - -object :: caloTau :: basebranch:=caloTau ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nCaloTaus; onToOff:=0 - -## Jets -object :: puppiJet :: basebranch:=seededConePuppiJet ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nSeededConePuppiJets; onToOff:=0 - -object :: puppiHt :: basebranch:=seededConePuppiHT ; variables:=(Et=); \ - leading:=Et; isFlat:=True; fixedIndex:=0; onToOff:=0 - -object :: puppiMHt :: basebranch:=seededConePuppiMHT ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## MET -object :: puppiMet :: basebranch:=puppiMET ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## zVtx -object :: puppiVtx :: basebranch:=z0L1TkPV ; variables:=(Et=); \ - leading:=Et; isFlat:=True; onToOff:=0 - - - - -## function aliases -## ----------------------------------------------------------- -function :: notMatched :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(abs(eta1)-abs(eta2)),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2))>0.1 -function :: deltaR :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(eta1-eta2),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2)) -function :: deltaEta :: args:=(eta1,eta2); lambda:= abs(eta1-eta2) -function :: etaRangeCutLess :: args:=(x,eta,etaRange,cutInRange,cutOutRange); lambda:= xcutInRange if abs(eta)cutOutRange -function :: pairInvMass :: args:=(pt1,pt2,eta1,eta2,phi1,phi2); lambda:= math.sqrt(2.0*pt1*pt2*(math.cosh(eta1-eta2)-math.cos(phi1-phi2))) -function :: pfJetEtaVeto :: args:=(Eta); lambda:= abs(Eta)<2.5 or abs(Eta)>3.0 - -#Scalings - -## HT -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=HT_*perc&depth=1 -## 90% -function :: Phase1PuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-54.550)/1.087 -function :: SeededConePuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-47.986)/1.084 -## 50% -function :: Phase1PuppiHT050OfflineEtCut :: args:=(offline); lambda:=(offline+6.229)/0.992 -function :: SeededConePuppiHT050OfflineEtCut :: args:=(offline); lambda:=(offline+11.651)/0.996 - - -##MHT -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=MHT_*perc&depth=1 -## 90% -function :: Phase1PuppiMHT090OfflineEtCut :: args:=(offline); lambda:=(offline-49.175)/1.321 -function :: SeededConePuppiMHT090OfflineEtCut :: args:=(offline); lambda:=(offline-55.097)/1.202 - -## 50% -function :: Phase1PuppiMHT050OfflineEtCut :: args:=(offline); lambda:=(offline+25.367)/1.199 -function :: SeededConePuppiMHT050OfflineEtCut :: args:=(offline); lambda:=(offline+20.499)/1.170 - -##puppimet -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=MET_*perc&depth=1 -## 90% -function :: PuppiMET090OfflineEtCut :: args:=(offline); lambda:=(offline-63.781)/1.465 -## 50% -function :: PuppiMET050OfflineEtCut :: args:=(offline); lambda:=(offline-5.455)/1.169 - -#EG -function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.707)/1.188 if abs(Eta)<1.5 else (Et>(offline-1.572)/1.249) -function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.441)/1.159 if abs(Eta)<1.5 else (Et>(offline-1.256)/1.217) -function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.638)/1.144 if abs(Eta)<1.5 else (Et>(offline-1.219)/1.214) -function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.697)/1.096 if abs(Eta)<1.5 else (Et>(offline-5.038)/1.067) - - -## IDs -function :: EGID :: args:=(EleID, SaID, Eta); lambda:=EleID if abs(Eta)<1.5 else SaID -function :: PhoID :: args:=(EleID, PhoID, Eta); lambda:=EleID if abs(Eta)<1.5 else PhoID - -#function :: EleIDV2 :: args:=(Et,Eta,PassesEleID) ; lambda:=PassesEleID if ( Et>25 or abs(Eta)<1.5) else 1 -#function :: TkElectronIsoQualCut :: args:=(HwQual,Eta, Et); lambda:=HwQual==3 if (Et>25 and abs(Eta)>1.479) else 1 if (Et<25 and abs(Eta)>1.479) else HwQual>=0 - -function :: TkEleQualHIGH :: args:=(Et,Eta,PassesEleID) ; lambda:=PassesEleID -function :: TkEleQualLOW :: args:=(Et,Eta,PassesEleID) ; lambda:=PassesEleID if (abs(Eta)<1.479) else 1 -function :: TkEleIsoQualHIGH :: args:=(Et,Eta,PassesEleID); lambda:= PassesEleID if (abs(Eta)>1.479) else 1 -function :: TkEleIsoQualLOW :: args:=(Et,Eta,PassesEleID); lambda:= (PassesEleID>=0) # this should be always true: we can remove this condition from the menu - -#function :: TkElectronIsoQualCut :: args:=(HwQual,Eta); lambda:=HwQual==3 if abs(Eta)>1.479 else HwQual>=0 - -## taus -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=Tau*perc&depth=1 - -### BARREL -# ## 50 % -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-1.223)/1.083 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+8.291)/1.241 -# ## 90% -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline+2.065)/1.899 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+2.553)/1.525 - -# ### ENDCAP -# ## 50% -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-2.217)/1.087 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+12.821)/1.463 - -# ## 90% -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-19.596)/1.584 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+1.273)/1.968 - -function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+2.553)/1.525 if abs(Eta)<1.5 else (Et>(offline+1.273)/1.968) -function :: CaloTau050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+8.291)/1.241 if abs(Eta)<1.5 else (Et>(offline+12.821)/1.463) - -function :: NNTauLoose090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+2.065)/1.899 if abs(Eta)<1.5 else (Et>(offline-19.596)/1.584) -function :: NNTauLoose050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.223)/1.083 if abs(Eta)<1.5 else (Et>(offline-2.217)/1.087) - -#puppijet -function :: Phase1PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-15.497)/1.383 if abs(Eta)<1.5 else (Et>(offline-9.362)/1.959 if abs(Eta)<2.4 else (Et>(offline-75.5)/1.41)) -function :: SeededConePuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-20.108)/1.308 if abs(Eta)<1.5 else (Et>(offline-7.971)/2.05 if abs(Eta)<2.4 else (Et>(offline-72.567)/1.418)) - -#tkmuons -function :: GMTTkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>offline if (offline<8) else Et>(offline-0.986)/1.049 if abs(Eta)<0.83 else (Et>(offline-1.075)/1.052 if abs(Eta)<1.24 else (Et>(offline-0.792)/1.054)) - -## trigger paths -## ----------------------------------------------------------- - -## muon - -trigger :: L1_SingleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(22.0,Pt,Eta), abs(Eta)<2.4 ); \ - -trigger :: L1_DoubleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(15.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkGmtMu , Pt > 7, abs(Eta)<2.4, abs(leg1.Z0-Z0)<1, Qual > 0); \ - -# trigger :: L1_TripleTkMu :: leg1:=(tkGmtMu, Pt>5, abs(Eta)<2.4, Qual>0 ); \ -# leg2:=(tkGmtMu, Pt>3, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0 ); \ -# leg3:=(tkGmtMu, Pt>3, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - -# e/gamma - -trigger :: L1_SingleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, TkEleQualHIGH(Et,Eta,PassesEleID)); \ - -trigger :: L1_SingleTkEleIso :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(28.0,Et,Eta), TkEleIsoQualLOW(Et,Eta,PassesEleID), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - -trigger :: L1_DoubleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(25.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID) ); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID) , abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_SingleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - -trigger :: L1_TkEleIso_EG :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, TkEleIsoQualLOW(Et,Eta,PassesEleID) , etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - leg2:=(EG , EGElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta), notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - -trigger :: L1_DoubleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - leg2:=(tkPhoton , TkIsoPhotonOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - - -# tau stuff - -trigger :: L1_SinglePFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(150.0,Et,Eta), abs(Eta)<2.172); \ - -trigger :: L1_PFTau_PFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172); \ - leg2:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - - - -trigger :: L1_PFIsoTau_PFIsoTau :: leg1:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - -trigger :: L1_PFIsoTau_TkMu :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(puppiTau , NNTauLoose090OfflineEtCut(42.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg3:=(tkGmtMu , GMTTkMuonOfflineEtCut(18.0,Pt,Eta), abs(Eta)<2.1, abs(Z0-leg1.Et)<1); \ - -trigger :: L1_TkEleIso_PFIsoTau :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.1, TkEleIsoQualLOW(Et,Eta,PassesEleID), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiTau, NNTauLoose090OfflineEtCut(45.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - -trigger :: L1_PFIsoTau_PFMet :: leg1:=(puppiTau, NNTauLoose090OfflineEtCut(55.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiMet, Et>PuppiMET090OfflineEtCut(190.0)); \ - - -# Jets -trigger :: L1_SinglePfJet :: leg1:=(puppiJet, SeededConePuppiJetOfflineEtCut(230.0,Et,Eta), Et>25, abs(Eta)<2.4); \ - -trigger :: L1_DoublePFJet_dEtaMax :: leg1:=(puppiJet, SeededConePuppiJetOfflineEtCut(112.0,Et,Eta), Et>25, abs(Eta)<2.4); \ - leg2:=(puppiJet, SeededConePuppiJetOfflineEtCut(112.0,Et,Eta), Et>25, abs(Eta)<2.4, deltaEta(Eta,leg1.Eta)<1.6); \ - -# HT, MET -trigger :: L1_PFHTT :: leg1:=(puppiHt , leading>SeededConePuppiHT090OfflineEtCut(450.0)); \ - -trigger :: L1_PFMHTT :: leg1:=(puppiMHt , Et>SeededConePuppiMHT050OfflineEtCut(135.5)); \ - -trigger :: L1_PFMet :: leg1:=(puppiMet, Et>PuppiMET090OfflineEtCut(200.0)); \ - -trigger :: L1_PFHTT_QuadJet :: leg1:=(puppiHt , leading>SeededConePuppiHT090OfflineEtCut(400.0)); \ - leg2:=(puppiJet, SeededConePuppiJetOfflineEtCut(70.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg3:=(puppiJet, SeededConePuppiJetOfflineEtCut(55.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg4:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg5:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - -# EG+Mu -trigger :: L1_TkMu_TkEleIso :: leg1:=(tkGmtMu, Pt > 7, abs(Eta)<2.4, Qual > 0 ); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(20.0,Et,Eta), abs(Eta)<2.4, TkEleIsoQualLOW(Et,Eta,PassesEleID), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_TkMu_TkEle :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkElectron, TkElectronOfflineEtCut(23.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_TkEle_TkMu :: leg1:=(tkElectron , TkElectronOfflineEtCut(10.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID)); \ - leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(20.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ - -trigger :: L1_TkMu_DoubleTkEle :: \ - leg1:=(tkGmtMu , Pt > 6, abs(Eta)<2.4, Qual > 0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Z0)<1 ); \ - leg3:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Z0)<1); \ - -# trigger :: L1_DoubleTkMu_TkEle :: \ -# leg1:=(tkGmtMu , Pt > 5, abs(Eta)<2.4, Qual>0); \ -# leg2:=(tkGmtMu , Pt > 5, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 , Qual>0); \ -# leg3:=(tkElectron , TkElectronOfflineEtCut(9.0,Et,Eta), abs(Eta)<2.4, abs(zVtx-leg1.Z0)<1, TkEleQualLOW(Et,Eta,PassesEleID)); \ - -# Lep+Jet/HT -trigger :: L1_TkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, Pt > 6, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 , Qual>0); \ - leg3:=(puppiHt, leading>SeededConePuppiHT090OfflineEtCut(320.0)); \ - -trigger :: L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(12.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 , Qual>0); \ - leg3:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25, abs(Eta)<2.4, deltaR(Eta,leg2.Eta,Phi,leg2.Phi)<0.4); \ - leg4:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25, abs(Eta)<2.4); \ - leg5:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25, abs(Eta)<2.4, deltaEta(Eta,leg4.Eta)<1.6); \ - -# trigger :: L1_TkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, Pt > 3, abs(Eta)<2.1, abs(Z0-leg1.Et)<1, Qual>0 ); \ -# leg3:=(puppiJet, SeededConePuppiJetOfflineEtCut(110.0,Et,Eta), Et>25, abs(Eta)<2.5); \ -# leg4:=(puppiMet, Et>PuppiMET090OfflineEtCut(120.0)); \ - -# trigger :: L1_DoubleTkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, Pt > 3, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 , Qual>0); \ -# leg3:=(tkGmtMu, Pt > 3, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 , Qual>0); \ -# leg4:=(puppiJet, SeededConePuppiJetOfflineEtCut(60.0,Et,Eta), Et>25, abs(Eta)<2.4); \ -# leg5:=(puppiMet, Et>PuppiMET090OfflineEtCut(130.0)); - -# trigger :: L1_DoubleTkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ -# leg2:=(tkGmtMu, Pt > 3, abs(Eta)<2.4, abs(Z0-leg1.Et)<1, Qual>0 ); \ -# leg3:=(tkGmtMu, Pt > 3, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 , Qual>0); \ -# leg4:=(puppiHt, leading>SeededConePuppiHT090OfflineEtCut(300.0)); - -trigger :: L1_DoubleTkEle_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Et)<1); \ - leg3:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Et)<1); \ - leg4:=(puppiHt, leading>SeededConePuppiHT090OfflineEtCut(390.0)); - - -trigger :: L1_TkEleIso_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkIsoElectronOfflineEtCut(26.0,Et,Eta), abs(Eta)<2.1, TkEleIsoQualLOW(Et,Eta,PassesEleID), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiHt , leading>SeededConePuppiHT090OfflineEtCut(190.0)); - -trigger :: L1_TkEle_PFJet_dRMin :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(28.0,Et,Eta), abs(Eta)<2.1, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25, abs(Eta)<2.4, deltaR(Eta, leg2.Eta, Phi, leg2.Phi)>0.3); \ - - - - -# VBF -trigger :: L1_DoublePFJet_MassMin :: leg1:=(puppiJet, SeededConePuppiJetOfflineEtCut(160.0,Et,Eta)); \ - leg2:=(puppiJet, SeededConePuppiJetOfflineEtCut(35.0,Et,Eta),Et>25, pairInvMass(Et,leg1.Et,Eta,leg1.Eta,Phi,leg1.Phi)>620.0); \ - - - -# BPH -# trigger :: L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4 :: leg1:=(tkGmtMu, abs(Eta)<1.5, Qual>0 ); \ -# leg2:=(tkGmtMu, abs(Eta)<1.5, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.4, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - -# trigger :: L1_DoubleTkMu4_SQ_OS_dR_Max1p2 :: leg1:=(tkGmtMu, Pt > 4, abs(Eta)<2.4, Qual>0 ); \ -# leg2:=(tkGmtMu, Pt > 4, abs(Eta)<2.4, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.2, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1 , Qual>0); \ - -# trigger :: L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18 :: leg1:=(tkGmtMu, Pt > 4.5, abs(Eta)<2.0 , Qual>0); \ -# leg2:=(tkGmtMu, Pt > 4.5, abs(Eta)<2.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>7.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<18.0, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1 , Qual>0); \ - - -# # trigger :: L1_DoubleTkMu9_SQ :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4, Qual>0); \ -# # leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0); \ - - -# trigger :: L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9 :: leg1:=(tkGmtMu, Pt > 5, abs(Eta)<2.4, Qual>0 ); \ -# leg2:=(tkGmtMu, Pt > 3, abs(Eta)<2.4, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<9.0, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1 , Qual>0); \ -# leg3:=(tkGmtMu, Pt > 0, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - -# trigger :: L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17 :: leg1:=(tkGmtMu, Pt > 5, abs(Eta)<2.4, Qual>0 ); \ -# leg2:=(tkGmtMu, Pt > 3.5, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0 ); \ -# leg3:=(tkGmtMu, Pt > 2.5, abs(Eta)<2.4, leg1.Chg*Chg<0.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>5.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<17.0, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - - - - -# Standalone path: recover efficiency and robustness - -trigger :: L1_SingleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(51.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta)); \ - -trigger :: L1_DoubleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(37.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta) ); \ - leg2:=(EG , EGElectronOfflineEtCut(24.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta), notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - - \ No newline at end of file diff --git a/rates/table/cfg/v29/v29_WITHMUONS_Final b/rates/table/cfg/v29/v29_WITHMUONS_Final deleted file mode 100644 index 44c78227..00000000 --- a/rates/table/cfg/v29/v29_WITHMUONS_Final +++ /dev/null @@ -1,364 +0,0 @@ -#format is like this: -#typeOfParameter :: parameterOrObjectName :: option1=value2; option2=(this,is,a,list) - - -## general options -## ----------------------------------------------------------- -variable :: bundledate :: v29_WithSoftMuons -variable :: nBunches :: 2760 -variable :: revFreq :: 11246 - -#variable :: tiers :: (variations) -variable :: tiers :: (thresholds) - -variable :: varBins :: (30,50) -#variable :: varBins :: (10,20,30,40,50,60,70,80,90,100) -##variable :: varBins :: (100,140,275,425,575,700,850,1000) -variable :: varError :: 0.2 -variable :: varInterpol :: linear -variable :: varLeg :: 1 -variable :: varCut :: 1 -variable :: varPrecision :: 2 -variable :: varIterations :: 5 -variable :: useNominalBwF :: False - - - -## samples (always all samples are used!) -## ----------------------------------------------------------- - -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_1.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_2.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_3.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_4.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_5.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_6.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_7.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_8.root; tree:=l1PhaseIITree/L1PhaseIITree -sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_9x.root; tree:=l1PhaseIITree/L1PhaseIITree - -## tests -#sample :: neutrinos :: path:=/eos/cms/store/group/dpg_trigger/comm_trigger/L1Trigger/alobanov/phase2/menu/ntuples/CMSSW_12_5_2p1/v29/MinBias_1252_crb_v29_Snap3/230413_214525/0000/L1NtuplePhaseII_Step1_101.root; tree:=l1PhaseIITree/L1PhaseIITree - - - -## physics objects at trigger level -## ----------------------------------------------------------- - -## Electrons and Photons -object :: EG :: basebranch:=EG ; variables:=(Et,Eta,Phi,Iso,zVtx,PassesEleID,PassesSaID,HwQual); \ - leading:=Et; lengthbranch:=nEG; onToOff:=0 - -object :: tkElectron :: basebranch:=tkElectron ; variables:=(Et,Eta,Phi,TrkIso,zVtx,PassesEleID,HwQual); \ - leading:=Et; lengthbranch:=nTkElectrons; onToOff:=0 - -object :: tkPhoton :: basebranch:=tkPhoton ; variables:=(Et,Eta,Phi,TrkIso,TrkIsoPV,zVtx,PassesEleID,PassesPhoID,HwQual); \ - leading:=Et; lengthbranch:=nTkPhotons; onToOff:=0 - -## Muons -#object :: tkMu :: basebranch:=tkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,TrkIso,Qual,zVtx,MuRefPt,MuRefEta,MuRefPhi,Region,Qual); \ -# leading:=Pt; lengthbranch:=nTkMuons; onToOff:=0 - -object :: tkGmtMu :: basebranch:=gmtTkMuon ; variables:=(Pt,Eta,Phi,Chg,Iso,Qual,Z0); \ - leading:=Pt; lengthbranch:=nGmtTkMuons; onToOff:=0 - -## Taus -object :: puppiTau :: basebranch:=nnTau ; variables:=(Et,Eta,Phi,PassLooseNN,PassTightNN); \ - leading:=Et; lengthbranch:=nNNTaus; onToOff:=0 - -object :: caloTau :: basebranch:=caloTau ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nCaloTaus; onToOff:=0 - -## Jets -object :: puppiJet :: basebranch:=seededConePuppiJet ; variables:=(Et,Eta,Phi); \ - leading:=Et; lengthbranch:=nSeededConePuppiJets; onToOff:=0 - -object :: puppiHt :: basebranch:=seededConePuppiHT ; variables:=(Et=); \ - leading:=Et; isFlat:=True; fixedIndex:=0; onToOff:=0 - -object :: puppiMHt :: basebranch:=seededConePuppiMHT ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## MET -object :: puppiMet :: basebranch:=puppiMET ; variables:=(Et,Phi); \ - leading:=Et; isFlat:=True; onToOff:=0 - -## zVtx -object :: puppiVtx :: basebranch:=z0L1TkPV ; variables:=(Et=); \ - leading:=Et; isFlat:=True; onToOff:=0 - - - - -## function aliases -## ----------------------------------------------------------- -function :: notMatched :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(abs(eta1)-abs(eta2)),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2))>0.1 -function :: deltaR :: args:=(eta1,eta2,phi1,phi2); lambda:= math.sqrt(math.pow(abs(eta1-eta2),2) + math.pow(abs(phi1-phi2) if abs(phi1-phi2)<=math.pi else 2*math.pi-abs(phi1-phi2),2)) -function :: deltaEta :: args:=(eta1,eta2); lambda:= abs(eta1-eta2) -function :: etaRangeCutLess :: args:=(x,eta,etaRange,cutInRange,cutOutRange); lambda:= xcutInRange if abs(eta)cutOutRange -function :: pairInvMass :: args:=(pt1,pt2,eta1,eta2,phi1,phi2); lambda:= math.sqrt(2.0*pt1*pt2*(math.cosh(eta1-eta2)-math.cos(phi1-phi2))) -function :: pfJetEtaVeto :: args:=(Eta); lambda:= abs(Eta)<2.5 or abs(Eta)>3.0 - -#Scalings - -## HT -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=HT_*perc&depth=1 -## 90% -function :: Phase1PuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-54.550)/1.087 -function :: SeededConePuppiHT090OfflineEtCut :: args:=(offline); lambda:=(offline-47.986)/1.084 -## 50% -function :: Phase1PuppiHT050OfflineEtCut :: args:=(offline); lambda:=(offline+6.229)/0.992 -function :: SeededConePuppiHT050OfflineEtCut :: args:=(offline); lambda:=(offline+11.651)/0.996 - - -##MHT -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=MHT_*perc&depth=1 -## 90% -function :: Phase1PuppiMHT090OfflineEtCut :: args:=(offline); lambda:=(offline-49.175)/1.321 -function :: SeededConePuppiMHT090OfflineEtCut :: args:=(offline); lambda:=(offline-55.097)/1.202 - -## 50% -function :: Phase1PuppiMHT050OfflineEtCut :: args:=(offline); lambda:=(offline+25.367)/1.199 -function :: SeededConePuppiMHT050OfflineEtCut :: args:=(offline); lambda:=(offline+20.499)/1.170 - -##puppimet -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=MET_*perc&depth=1 -## 90% -function :: PuppiMET090OfflineEtCut :: args:=(offline); lambda:=(offline-63.781)/1.465 -## 50% -function :: PuppiMET050OfflineEtCut :: args:=(offline); lambda:=(offline-5.455)/1.169 - -#EG -function :: EGElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.707)/1.188 if abs(Eta)<1.5 else (Et>(offline-1.572)/1.249) -function :: TkElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.441)/1.159 if abs(Eta)<1.5 else (Et>(offline-1.256)/1.217) -function :: TkIsoElectronOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.638)/1.144 if abs(Eta)<1.5 else (Et>(offline-1.219)/1.214) -function :: TkIsoPhotonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-2.697)/1.096 if abs(Eta)<1.5 else (Et>(offline-5.038)/1.067) - - -## IDs -function :: EGID :: args:=(EleID, SaID, Eta); lambda:=EleID if abs(Eta)<1.5 else SaID -function :: PhoID :: args:=(EleID, PhoID, Eta); lambda:=EleID if abs(Eta)<1.5 else PhoID - -#function :: EleIDV2 :: args:=(Et,Eta,PassesEleID) ; lambda:=PassesEleID if ( Et>25 or abs(Eta)<1.5) else 1 -#function :: TkElectronIsoQualCut :: args:=(HwQual,Eta, Et); lambda:=HwQual==3 if (Et>25 and abs(Eta)>1.479) else 1 if (Et<25 and abs(Eta)>1.479) else HwQual>=0 - -function :: TkEleQualHIGH :: args:=(Et,Eta,PassesEleID) ; lambda:=PassesEleID -function :: TkEleQualLOW :: args:=(Et,Eta,PassesEleID) ; lambda:=PassesEleID if (abs(Eta)<1.479) else 1 -function :: TkEleIsoQualHIGH :: args:=(Et,Eta,PassesEleID); lambda:= PassesEleID if (abs(Eta)>1.479) else 1 -function :: TkEleIsoQualLOW :: args:=(Et,Eta,PassesEleID); lambda:= (PassesEleID>=0) # this should be always true: we can remove this condition from the menu - -#function :: TkElectronIsoQualCut :: args:=(HwQual,Eta); lambda:=HwQual==3 if abs(Eta)>1.479 else HwQual>=0 - -## taus -## see https://cms-l1t-ph2menu.web.cern.ch/validation/V29/scalings/?match=Tau*perc&depth=1 - -### BARREL -# ## 50 % -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-1.223)/1.083 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+8.291)/1.241 -# ## 90% -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline+2.065)/1.899 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+2.553)/1.525 - -# ### ENDCAP -# ## 50% -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-2.217)/1.087 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+12.821)/1.463 - -# ## 90% -# function :: nnTauOfflineEtCut :: args:=(offline); lambda:=(offline-19.596)/1.584 -# function :: caloTauOfflineEtCut :: args:=(offline); lambda:=(offline+1.273)/1.968 - -function :: CaloTau090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+2.553)/1.525 if abs(Eta)<1.5 else (Et>(offline+1.273)/1.968) -function :: CaloTau050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+8.291)/1.241 if abs(Eta)<1.5 else (Et>(offline+12.821)/1.463) - -function :: NNTauLoose090OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline+2.065)/1.899 if abs(Eta)<1.5 else (Et>(offline-19.596)/1.584) -function :: NNTauLoose050OfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-1.223)/1.083 if abs(Eta)<1.5 else (Et>(offline-2.217)/1.087) - -#puppijet -function :: Phase1PuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-15.497)/1.383 if abs(Eta)<1.5 else (Et>(offline-9.362)/1.959 if abs(Eta)<2.4 else (Et>(offline-75.5)/1.41)) -function :: SeededConePuppiJetOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>(offline-20.108)/1.308 if abs(Eta)<1.5 else (Et>(offline-7.971)/2.05 if abs(Eta)<2.4 else (Et>(offline-72.567)/1.418)) - -#tkmuons -function :: GMTTkMuonOfflineEtCut :: args:=(offline,Et,Eta); lambda:=Et>offline if (offline<8) else Et>(offline-0.986)/1.049 if abs(Eta)<0.83 else (Et>(offline-1.075)/1.052 if abs(Eta)<1.24 else (Et>(offline-0.792)/1.054)) - -## trigger paths -## ----------------------------------------------------------- - -## muon - -trigger :: L1_SingleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(22.0,Pt,Eta), abs(Eta)<2.4 ); \ - -trigger :: L1_DoubleTkMu :: leg1:=(tkGmtMu , GMTTkMuonOfflineEtCut(15.0,Pt,Eta), abs(Eta)<2.4); \ - leg2:=(tkGmtMu , Pt > 7, abs(Eta)<2.4, abs(leg1.Z0-Z0)<1, Qual > 0); \ - -trigger :: L1_TripleTkMu :: leg1:=(tkGmtMu, Pt>5, abs(Eta)<2.4, Qual>0 ); \ - leg2:=(tkGmtMu, Pt>3, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - leg3:=(tkGmtMu, Pt>3, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - -# e/gamma - -trigger :: L1_SingleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, TkEleQualHIGH(Et,Eta,PassesEleID)); \ - -trigger :: L1_SingleTkEleIso :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(28.0,Et,Eta), TkEleIsoQualLOW(Et,Eta,PassesEleID), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - -trigger :: L1_DoubleTkEle :: leg1:=(tkElectron , TkElectronOfflineEtCut(25.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID) ); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID) , abs(zVtx-leg1.zVtx)<1); \ - -trigger :: L1_SingleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(36.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - -trigger :: L1_TkEleIso_EG :: leg1:=(tkElectron , TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, TkEleIsoQualLOW(Et,Eta,PassesEleID) , etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28)); \ - leg2:=(EG , EGElectronOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta), notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - -trigger :: L1_DoubleTkPhoIso :: leg1:=(tkPhoton , TkIsoPhotonOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - leg2:=(tkPhoton , TkIsoPhotonOfflineEtCut(12.0,Et,Eta), abs(Eta)<2.4, PhoID(PassesEleID, PassesPhoID, Eta), etaRangeCutLess(TrkIso,Eta,1.479,0.25,0.205)); \ - - -# tau stuff - -trigger :: L1_SinglePFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(150.0,Et,Eta), abs(Eta)<2.172); \ - -trigger :: L1_PFTau_PFTau :: leg1:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172); \ - leg2:=(caloTau , CaloTau090OfflineEtCut(90.0,Et,Eta), abs(Eta)<2.172, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - - - -trigger :: L1_PFIsoTau_PFIsoTau :: leg1:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiTau , NNTauLoose090OfflineEtCut(52.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)>0.5); \ - -trigger :: L1_PFIsoTau_TkMu :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(puppiTau , NNTauLoose090OfflineEtCut(42.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg3:=(tkGmtMu , GMTTkMuonOfflineEtCut(18.0,Pt,Eta), abs(Eta)<2.1, abs(Z0-leg1.Et)<1); \ - -trigger :: L1_TkEleIso_PFIsoTau :: leg1:=(puppiVtx ,leading>-99999.0); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(22.0,Et,Eta), abs(Eta)<2.1, TkEleIsoQualLOW(Et,Eta,PassesEleID), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiTau, NNTauLoose090OfflineEtCut(45.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - -trigger :: L1_PFIsoTau_PFMet :: leg1:=(puppiTau, NNTauLoose090OfflineEtCut(55.0,Et,Eta), abs(Eta)<2.172, PassLooseNN>0); \ - leg2:=(puppiMet, Et>PuppiMET090OfflineEtCut(190.0)); \ - - -# Jets -trigger :: L1_SinglePfJet :: leg1:=(puppiJet, SeededConePuppiJetOfflineEtCut(230.0,Et,Eta), Et>25, abs(Eta)<2.4); \ - -trigger :: L1_DoublePFJet_dEtaMax :: leg1:=(puppiJet, SeededConePuppiJetOfflineEtCut(112.0,Et,Eta), Et>25, abs(Eta)<2.4); \ - leg2:=(puppiJet, SeededConePuppiJetOfflineEtCut(112.0,Et,Eta), Et>25, abs(Eta)<2.4, deltaEta(Eta,leg1.Eta)<1.6); \ - -# HT, MET -trigger :: L1_PFHTT :: leg1:=(puppiHt , leading>SeededConePuppiHT090OfflineEtCut(450.0)); \ - -trigger :: L1_PFMHTT :: leg1:=(puppiMHt , Et>SeededConePuppiMHT050OfflineEtCut(135.5)); \ - -trigger :: L1_PFMet :: leg1:=(puppiMet, Et>PuppiMET090OfflineEtCut(200.0)); \ - -trigger :: L1_PFHTT_QuadJet :: leg1:=(puppiHt , leading>SeededConePuppiHT090OfflineEtCut(400.0)); \ - leg2:=(puppiJet, SeededConePuppiJetOfflineEtCut(70.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg3:=(puppiJet, SeededConePuppiJetOfflineEtCut(55.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg4:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - leg5:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25.0, abs(Eta)<2.4); \ - -# EG+Mu -trigger :: L1_TkMu_TkEleIso :: leg1:=(tkGmtMu, Pt > 7, abs(Eta)<2.4, Qual > 0 ); \ - leg2:=(tkElectron, TkIsoElectronOfflineEtCut(20.0,Et,Eta), abs(Eta)<2.4, TkEleIsoQualLOW(Et,Eta,PassesEleID), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_TkMu_TkEle :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(7.0,Pt,Eta), abs(Eta)<2.4 ); \ - leg2:=(tkElectron, TkElectronOfflineEtCut(23.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_TkEle_TkMu :: leg1:=(tkElectron , TkElectronOfflineEtCut(10.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID)); \ - leg2:=(tkGmtMu , GMTTkMuonOfflineEtCut(20.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.zVtx)<1 ); \ - -trigger :: L1_TkMu_DoubleTkEle :: \ - leg1:=(tkGmtMu , Pt > 6, abs(Eta)<2.4, Qual > 0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Z0)<1 ); \ - leg3:=(tkElectron , TkElectronOfflineEtCut(17.0,Et,Eta), abs(Eta)<2.4, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Z0)<1); \ - -trigger :: L1_DoubleTkMu_TkEle :: \ - leg1:=(tkGmtMu , Pt > 5, abs(Eta)<2.4, Qual>0); \ - leg2:=(tkGmtMu , Pt > 5, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1 , Qual>0); \ - leg3:=(tkElectron , TkElectronOfflineEtCut(9.0,Et,Eta), abs(Eta)<2.4, abs(zVtx-leg1.Z0)<1, TkEleQualLOW(Et,Eta,PassesEleID)); \ - -# Lep+Jet/HT -trigger :: L1_TkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, Pt > 6, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 , Qual>0); \ - leg3:=(puppiHt, leading>SeededConePuppiHT090OfflineEtCut(320.0)); \ - -trigger :: L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(12.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Et)<1 , Qual>0); \ - leg3:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25, abs(Eta)<2.4, deltaR(Eta,leg2.Eta,Phi,leg2.Phi)<0.4); \ - leg4:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25, abs(Eta)<2.4); \ - leg5:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25, abs(Eta)<2.4, deltaEta(Eta,leg4.Eta)<1.6); \ - -trigger :: L1_TkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, Pt > 3, abs(Eta)<2.1, abs(Z0-leg1.Et)<1, Qual>0 ); \ - leg3:=(puppiJet, SeededConePuppiJetOfflineEtCut(110.0,Et,Eta), Et>25, abs(Eta)<2.5); \ - leg4:=(puppiMet, Et>PuppiMET090OfflineEtCut(120.0)); \ - -trigger :: L1_DoubleTkMu_PfJet_PfMet :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, Pt > 3, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 , Qual>0); \ - leg3:=(tkGmtMu, Pt > 3, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 , Qual>0); \ - leg4:=(puppiJet, SeededConePuppiJetOfflineEtCut(60.0,Et,Eta), Et>25, abs(Eta)<2.4); \ - leg5:=(puppiMet, Et>PuppiMET090OfflineEtCut(130.0)); - -trigger :: L1_DoubleTkMu_PfHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkGmtMu, Pt > 3, abs(Eta)<2.4, abs(Z0-leg1.Et)<1, Qual>0 ); \ - leg3:=(tkGmtMu, Pt > 3, abs(Eta)<2.4, abs(Z0-leg1.Et)<1 , Qual>0); \ - leg4:=(puppiHt, leading>SeededConePuppiHT090OfflineEtCut(300.0)); - -trigger :: L1_DoubleTkEle_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Et)<1); \ - leg3:=(tkElectron , TkElectronOfflineEtCut(8.0,Et,Eta), abs(Eta)<2.5, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Et)<1); \ - leg4:=(puppiHt, leading>SeededConePuppiHT090OfflineEtCut(390.0)); - - -trigger :: L1_TkEleIso_PFHTT :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkIsoElectronOfflineEtCut(26.0,Et,Eta), abs(Eta)<2.1, TkEleIsoQualLOW(Et,Eta,PassesEleID), etaRangeCutLess(TrkIso,Eta,1.479,0.13,0.28), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiHt , leading>SeededConePuppiHT090OfflineEtCut(190.0)); - -trigger :: L1_TkEle_PFJet_dRMin :: leg1:=(puppiVtx,leading>-99999.0); \ - leg2:=(tkElectron , TkElectronOfflineEtCut(28.0,Et,Eta), abs(Eta)<2.1, TkEleQualLOW(Et,Eta,PassesEleID), abs(zVtx-leg1.Et)<1); \ - leg3:=(puppiJet, SeededConePuppiJetOfflineEtCut(40.0,Et,Eta), Et>25, abs(Eta)<2.4, deltaR(Eta, leg2.Eta, Phi, leg2.Phi)>0.3); \ - - - - -# VBF -trigger :: L1_DoublePFJet_MassMin :: leg1:=(puppiJet, SeededConePuppiJetOfflineEtCut(160.0,Et,Eta)); \ - leg2:=(puppiJet, SeededConePuppiJetOfflineEtCut(35.0,Et,Eta),Et>25, pairInvMass(Et,leg1.Et,Eta,leg1.Eta,Phi,leg1.Phi)>620.0); \ - - - -# BPH -trigger :: L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4 :: leg1:=(tkGmtMu, abs(Eta)<1.5, Qual>0 ); \ - leg2:=(tkGmtMu, abs(Eta)<1.5, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.4, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - -trigger :: L1_DoubleTkMu4_SQ_OS_dR_Max1p2 :: leg1:=(tkGmtMu, Pt > 4, abs(Eta)<2.4, Qual>0 ); \ - leg2:=(tkGmtMu, Pt > 4, abs(Eta)<2.4, deltaR(Eta, leg1.Eta, Phi, leg1.Phi)<1.2, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1 , Qual>0); \ - -trigger :: L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18 :: leg1:=(tkGmtMu, Pt > 4.5, abs(Eta)<2.0 , Qual>0); \ - leg2:=(tkGmtMu, Pt > 4.5, abs(Eta)<2.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>7.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<18.0, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1 , Qual>0); \ - - -# trigger :: L1_DoubleTkMu9_SQ :: leg1:=(tkGmtMu, GMTTkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4, Qual>0); \ -# leg2:=(tkGmtMu, GMTTkMuonOfflineEtCut(9.0,Pt,Eta), abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0); \ - - -trigger :: L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9 :: leg1:=(tkGmtMu, Pt > 5, abs(Eta)<2.4, Qual>0 ); \ - leg2:=(tkGmtMu, Pt > 3, abs(Eta)<2.4, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<9.0, leg1.Chg*Chg<0.0, abs(Z0-leg1.Z0)<1 , Qual>0); \ - leg3:=(tkGmtMu, Pt > 0, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - -trigger :: L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17 :: leg1:=(tkGmtMu, Pt > 5, abs(Eta)<2.4, Qual>0 ); \ - leg2:=(tkGmtMu, Pt > 3.5, abs(Eta)<2.4, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - leg3:=(tkGmtMu, Pt > 2.5, abs(Eta)<2.4, leg1.Chg*Chg<0.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)>5.0, pairInvMass(Pt,leg1.Pt,Eta,leg1.Eta,Phi,leg1.Phi)<17.0, abs(Z0-leg1.Z0)<1, Qual>0 ); \ - - - - -# Standalone path: recover efficiency and robustness - -trigger :: L1_SingleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(51.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta)); \ - -trigger :: L1_DoubleEGEle :: leg1:=(EG , EGElectronOfflineEtCut(37.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta) ); \ - leg2:=(EG , EGElectronOfflineEtCut(24.0,Et,Eta), abs(Eta)<2.4, EGID(PassesEleID, PassesSaID, Eta), notMatched(Eta, leg1.Eta, Phi, leg1.Phi)); \ - - diff --git a/rates/table/lib/cfg.py b/rates/table/lib/cfg.py deleted file mode 100644 index d7fa200f..00000000 --- a/rates/table/lib/cfg.py +++ /dev/null @@ -1,63 +0,0 @@ -import os -from functions import * - - -class CfgObject: - - def __init__(self, name, optstring): - self.name = name - self.options = {} - self.loadOpts(optstring) - - def __getattr__(self, key): - if key in self.options.keys(): return self.options[key] - return None - - def loadOpts(self, optstring): - print "optstring", optstring - if not optstring: - return - print "optstring", optstring - for entry in [so.strip() for so in optstring.split(";")]: - if not entry: - continue - se = [see.strip() for see in entry.split(":=")] - print "print se", se - isList = False; isDict = False - if se[0][-1:] == "+": - isList = True; se[0] = se[0][0:-1] - elif se[0][-1:] == "#": - isDict = True; se[0] = se[0][0:-1] - - print se[0], se[1], isList, isDict - self.options[se[0]] = setType(se[1], isList=isList, isDict=isDict) - print self.options[se[0]] - - -class Cfg: - - def __init__(self, path): - self.path = path - self.load() - - def load(self): - if not self.path: - return - if not os.path.exists(self.path): - return - lines = [l.rstrip("\n").strip() for l in open(self.path, "r").readlines()] - lines = mergeLines(lines) - for line in lines: - if len(line) == 0: continue - if line[0:1] == "#": continue - fields = [sl.strip() for sl in line.split("::")] - if len(fields)<2: continue - if fields[0] in ["variable", "alias"]: - if len(fields)<3: continue - if not hasattr(self, fields[0]): setattr(self, fields[0], {}) - getattr(self, fields[0])[fields[1]] = setType(fields[2]) - continue - if not hasattr(self, fields[0]): setattr(self, fields[0], []) - getattr(self, fields[0]).append(CfgObject(fields[1], fields[2] if len(fields)>2 else "")) - - diff --git a/rates/table/lib/functions.py b/rates/table/lib/functions.py deleted file mode 100644 index 7a2d5a4e..00000000 --- a/rates/table/lib/functions.py +++ /dev/null @@ -1,200 +0,0 @@ -import ROOT, re, os, datetime, math -import inspect - -def cmd(base): - os.system(base) - -def mkdir(path): - if os.path.isdir(path): return - cmd("mkdir -p "+path) - -def cleandir(path): - if not os.path.isdir(path): return - cmd("rm -r "+path+"/*") - -def rmFile(path): - if not os.path.exists(path): return - cmd("rm -r "+path) - -def isFloat(string): - if type(string)==type(1.0) : return True - if type(string)!=type("bla"): return False - if not "." in string : return False - try: - return float(string) - except (ValueError, TypeError) as e: - return False - -def isInt(string): - if type(string)==type(1) : return True - if type(string)!=type("bla"): return False - if "." in string : return False - try: - return float(string) - except (ValueError, TypeError) as e: - return False - -def getRootObj(tfile, objDef): - if not "/" in objDef: return tfile.Get(objDef) - so = objDef.split("/") - prev = tfile.Get(so[0]) - for sk in so[1:]: - if prev.ClassName()=="TDirectoryFile" and sk==so[-1]: - ttree = prev.Get(sk) - return ttree - prev = prev.Get(sk) if "Get" in prev.__dict__ and prev.Get(sk) else prev.GetPrimitive(sk) - return prev - -def getType(variable, isList=False, isDict=False): - r = re.compile(r'(?:[^,(]|\([^)]*\))+') - if variable[0:1]=="(" and variable[-1:]==")": - print "test1" - variable = variable[1:-1] - isList = True - if isDict: - print "test2" - cache = [ss.strip().split(":") for ss in r.findall(variable)] - return (dict, {ss[0].strip():getType(ss[1].strip())[1] for ss in cache}) - if isList: - print "test3 THIS IS WRONG" - for ss in r.findall(variable): - print ss - return (list, [getType(ss.strip())[1] for ss in r.findall(variable)]) - #return (list, [getType(ss.strip())[1] for ss in variable.split(",")]) - if variable=="True": - print "test4" - return (bool, True) - if variable=="False": - print "test5" - return (bool, True) - if type(variable)==type(True): - print "test6" - return (bool, bool(variable)) - if isInt(variable): - print "test7" - return (int, int(variable)) - if isFloat(variable): - print "test8" - return (float, float(variable)) - return (basestring, variable) - -def setType(variable, isList=False, isDict=False): - print "setType variable",variable - tple = getType(variable, isList, isDict) - print "setType tple[1]",tple[1] - return tple[1] - -def shortstamp(readable = True): - if readable: - return datetime.datetime.now().strftime("%Y-%m-%d") - return datetime.datetime.now().strftime("%y%m%d") - -def timestamp(readable = True): - if readable: - return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") - return datetime.datetime.now().strftime("%y%m%d%H%M%S%f") - -def absPath(relative, absolute): - if relative[0:1]=="/": return relative.rstrip("/") - return absolute.rstrip("/")+"/"+relative.rstrip("/") - -def mergeLines(lines): - newlines = [] - buff = "" - for line in lines: - if line.strip()[0:1]=="#": continue - if line[-1:]=="\\": buff+=line[0:-1]; continue - newlines.append(buff+line) - if line[-1:]!="\\": buff="" - return newlines - -def safeDiv(numerator, denominator): - if denominator == 0: return 0 - return float(numerator)/denominator - -def divLists(numerators, denominators): - if len(numerators)!=range(denominators): return [] - quotients = [] - for i in range(len(numerators)): - quotients.append(safeDiv(numerators[i], denominators[i])) - return quotients - -def readObjsFromRootFile(rfile): - contents = [] - rfile.cd() - for key in rfile.GetListOfKeys(): - obj = rfile.Get(key.GetName()) - if obj and "SetDirectory" in [m[0] for m in inspect.getmembers(obj, predicate=inspect.ismethod)]: - obj.SetDirectory(0) - contents.append(obj) - return contents - -def readCache(path, idx="1", selection = lambda x: True): - collection = {} - if not os.path.exists(path): return collection - f = open(path, "r") - for line in [l.rstrip("\n").strip() for l in f.readlines()]: - if len(line) == 0: continue - if line[0:1] == "#": continue - fields = [sl.strip() for sl in line.split("::")] - if len(fields)<2 : continue - if not selection(fields): continue - collection[fields[0]] = fields[int(idx.isdigit())] if idx.isdigit() else eval("fields["+idx+"]") - f.close() - return collection - -def writeCache(path, collection, asList = True): - if len(collection.keys())==0: return - rmFile(path) - f = open(path,"w") - for k,v in collection.iteritems(): - if asList: f.write(k+" :: "+" :: ".join(v)+"\n") - else : f.write(k+" :: "+v+"\n") - f.close() - -def updateTriggers(fullSet, varTrigger): - theSet = [] - for trig in fullSet: - if trig == varTrigger.parent: theSet.append(varTrigger); continue - theSet.append(trig) - return theSet - -def findIntersectionIdx(collection, element): - ## find the idx of the element in the collection that has value just below (above) - ## that of the seeked element, i.e. idx+1 will have a value above (below) it - previous = 0 - #print "bam oida" - #print collection, element - if element>collection[0 ]: return -1 - if element0 if rate is smaller than x, <0 if rate is larger than x - #print previous, this - if previous*this<0: ## change sign - #print "found sign change in element",i,"returning..." - return i-1 - break - previous = this - return -1 - -def getPoissonErrors(values, errors=[]): - q = (1-0.6827)/2. # quantile - er = [math.sqrt(x) for x in values] if len(errors)==0 else errors - up = [] - dn = [] - for i,value in enumerate(values): - N = value - dN = er[i] - if N==0: up.append(0); dn.append(0); continue - scale = 1 - if N>0 and dN>0 and abs(dN**2/N-1)>1e-4: - scale = (dN**2/N) - N = (N/dN)**2 - up.append(scale*((N-ROOT.ROOT.Math.chisquared_quantile_c(1-q,2*N)/2.) if N>0 else 0)) - dn.append(scale*(ROOT.ROOT.Math.chisquared_quantile_c(q,2*(N+1))/2.-N)) - return up, dn - - - - - diff --git a/rates/table/lib/functionsTreeReader.py b/rates/table/lib/functionsTreeReader.py deleted file mode 100644 index fb71203d..00000000 --- a/rates/table/lib/functionsTreeReader.py +++ /dev/null @@ -1,92 +0,0 @@ -## stolen from: -## https://github.com/CERN-PH-CMG/cmgtools-lite/blob/80X/TTHAnalysis/python/tools/treeReaderArrayTools.py - -import types -import ROOT -import numpy - -def getArrayReader(tree, branchName, isClean=False): - """Make a reader for branch branchName containing a variable-length value array. - If you are sure nobody has yet read from the tree, you can set isClean to True and save some overhead.""" - if branchName not in tree._ttras: - if not tree.GetBranch(branchName): raise RuntimeError, "Can't find branch '%s'" % branchName - leaf = tree.GetBranch(branchName).GetLeaf(branchName) - #if not leaf.GetLen() == 0: raise RuntimeError, "Branch %s is not a variable-length value array" % branchName - typ = _rootType2Python[leaf.GetTypeName()] - tree._ttras[branchName] = _makeArrayReader(tree, leaf.GetTypeName(), branchName, remakeAllFirst=not(isClean)) - return tree._ttras[branchName] - -def getValueReader(tree, branchName, isClean=False): - """Make a reader for branch branchName containing a single value. - If you are sure nobody has yet read from the tree, you can set isClean to True and save some overhead.""" - if branchName not in tree._ttrvs: - if not tree.GetBranch(branchName): raise RuntimeError, "Can't find branch '%s'" % branchName - leaf = tree.GetBranch(branchName).GetLeaf(branchName) - if not leaf.GetLen() == 1: raise RuntimeError, "Branch %s is not a value" % branchName - typ = _rootType2Python[leaf.GetTypeName()] - tree._ttrvs[branchName] = _makeValueReader(tree, leaf.GetTypeName(), branchName, remakeAllFirst=not(isClean)) - return tree._ttrvs[branchName] - - -def readBranch(tree, branchName, index = 0): - """Return the branch value if the branch is a value, and a TreeReaderArray if the branch is an array""" - if branchName in tree._ttras: - return tree._ttras[branchName] - elif branchName in tree._ttrvs: - return tree._ttrvs[branchName].Get()[int(index)] - else: - branch = tree.GetBranch(branchName) - if not branch: raise RuntimeError, "Unknown branch %s" % branchName - leaf = branch.GetLeaf(branchName) - #if leaf.GetTypeName() not in _rootType2Python: - # raise RuntimeError, "Branch %s has unsupported type %s" % (branchName, leaf.GetTypeName()) - #typ = _rootType2Python[leaf.GetTypeName()] - if leaf.GetLen() == 1 and not bool(leaf.GetLeafCount()): - print branchName,index - return _makeValueReader(tree, leaf.GetTypeName(), branchName).Get()[int(index)] - #return _makeValueReader(tree, typ, branchName).Get()[0] - else: - return _makeArrayReader(tree, leaf.GetTypeName(), branchName) - #return _makeArrayReader(tree, typ, branchName) - - -####### PRIVATE IMPLEMENTATION PART ####### - -_rootType2Python = { 'Int_t':int, 'Long_t':long, 'UInt_t':numpy.uint8, 'ULong_t':long, 'ULong64_t':"unsigned long long", - 'Float_t':float, 'Double_t':float } -#_rootType2Python = { 'Int_t':int, 'Long_t':long, 'UInt_t':int, 'ULong_t':long, 'ULong64_t':"unsigned long long", -# 'Float_t':float, 'Double_t':float } - -def _makeArrayReader(tree, typ, nam, remakeAllFirst=True): - if remakeAllFirst: _remakeAllReaders(tree) - ttra = ROOT.TTreeReaderArray(typ)(tree._ttreereader, nam) - tree._leafTypes[nam] = typ - tree._ttras[nam] = ttra; - tree._ttreereader.SetEntry(tree.entry) - return tree._ttras[nam] - -def _makeValueReader(tree, typ, nam, remakeAllFirst=True): - if remakeAllFirst: _remakeAllReaders(tree) - ttrv = ROOT.TTreeReaderValue(typ)(tree._ttreereader, nam) - tree._leafTypes[nam] = typ - tree._ttrvs[nam] = ttrv - tree._ttreereader.SetEntry(tree.entry) - return tree._ttrvs[nam] - -def _remakeAllReaders(tree): - _ttreereader = ROOT.TTreeReader(tree) - _ttrvs = {} - for k in tree._ttrvs.iterkeys(): - _ttrvs[k] = ROOT.TTreeReaderValue(tree._leafTypes[k])(_ttreereader,k) - _ttras = {} - for k in tree._ttras.iterkeys(): - _ttras[k] = ROOT.TTreeReaderArray(tree._leafTypes[k])(_ttreereader,k) - tree._ttrvs = _ttrvs - tree._ttras = _ttras - tree._ttreereader = _ttreereader - tree._ttreereaderversion += 1 - - - - - diff --git a/rates/table/lib/master.py b/rates/table/lib/master.py deleted file mode 100644 index 605c1a47..00000000 --- a/rates/table/lib/master.py +++ /dev/null @@ -1,218 +0,0 @@ -from lib.functions import * -from cfg import * -from menu import * -from sample import * -from samplemanager import * -from vb import * - -import os - -class Master: - def __init__(self, args, opts, opts_no_defaults): - self.args = args - self.opts = opts - self.optsndef = opts_no_defaults - self.cfg = Cfg(self.args[0]) - self.homedir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)).rstrip("/")) - self.cachedir = absPath(self.getOpt("cachedir") if self.getOpt("cachedir") else "cache", self.homedir) - self.outdir = absPath(self.getOpt("outdir") if self.getOpt("outdir") else "out" , self.homedir) - bdate = self.getOpt("bundledate") if self.getOpt("bundledate") else shortstamp() - self.bundle = bdate+"_"+os.path.basename(self.args[0]) - self.bundledir = self.outdir+"/"+self.bundle - mkdir(self.cachedir ) - mkdir(self.cachedir+"/lists" ) - mkdir(self.cachedir+"/virtuals") - mkdir(self.outdir ) - mkdir(self.bundledir) - self.vb = Verbose(self, self.getOpt("verbose")) - def getOpt(self, key, default=None): - if hasattr(self.optsndef, key) : return getattr(self.optsndef, key) - if key in self.cfg.variable.keys(): return self.cfg.variable[key] - if hasattr(self.opts , key) : return getattr(self.opts , key) - return default - def sequence(self): - ## this is the main sequence - #self.loadBundle() - self.loadVirtualLegs () - self.loadVirtualSamples () - self.loadVirtualTriggers() - self.loadLists () - self.loadFunctions () - self.loadTriggers () - self.loadSamples () - self.checkTasks () - ##self.doBuffer () ## not fully working yet - self.doThresholds () - self.doVariations () - ##self.doBandwidth () ## not fully working yet - self.end () - ## --------------------------------------------- - def addList(self, trigId, sampleId, theList): - theList.SetName(trigId+"_::_"+sampleId) - if not sampleId in self.retrievableLists.keys(): self.retrievableLists[sampleId] = {} - self.retrievableLists[sampleId][trigId] = theList - def checkConstraints(self): - ## check if trigger menu is overconstrained - pass - def checkTasks(self): - self.tasks = [] - ## do this via init - allTiers = ["thresholds", "bandwidth", "buffer", "variations"] - cfgTiers = self.getOpt("tiers") - exclude = self.getOpt("exclude") - required = [] - if self.getOpt("runThresholds"): required.append("thresholds") - if self.getOpt("runBandwidth" ): required.append("bandwidth" ) - if self.getOpt("runVariations"): required.append("variations") - if self.getOpt("runBuffer" ): required.append("buffer" ) - for tier in allTiers: - if (tier in cfgTiers or tier in required) and not tier in exclude: - self.tasks.append(tier) - def doBandwidth(self): - mkdir(self.bundledir+"/bandwidth") - if not "bandwidth" in self.tasks: return - self.vb.talk("Starting fixed bandwidth tier") - self.menu.computeThresholdsPerRatesIndiv() - self.menu.computeThresholdsPerRatesFull() - self.menu.computeThresholds() - self.menu.dump(self.bundledir+"/bandwidth") - def doBuffer(self): - if not "buffer" in self.tasks: return - self.vb.talk("Starting to prepare the buffers") - self.samples.createBuffer() - def doThresholds(self): - mkdir(self.bundledir+"/thresholds") - if not "thresholds" in self.tasks: return - self.vb.talk("Starting fixed threshold tier") - self.menu.computeRate() - self.menu.dump(self.bundledir+"/thresholds") - def doVariations(self): - mkdir(self.bundledir+"/variations") - if not "variations" in self.tasks: return - self.vb.talk("Starting variations tier") - self.menu.computeRatesPerThresholds() - self.menu.fillVariationTable("variations") - self.menu.dump(self.bundledir+"/variations") - def dump(self): - pass - def end(self): - self.saveVirtualLegs () - self.saveVirtualSamples () - self.saveVirtualTriggers() - self.saveLists() - self.samples.closeAll() - self.vb.close() - def getLegId(self, character): - if len(character)==0: return None - for k,v in self.virtuallegs.iteritems(): - if v == character: return k - newId = int(timestamp(False)) - while str(newId) in self.virtuallegs.keys(): - newId += 1 - self.virtuallegs[str(newId)] = character - return str(newId) - def getListsToRetrieve(self, sampleid): - if not sampleid: return {} - if not sampleid in self.retrievableLists.keys(): return {} - return self.retrievableLists[sampleid] - def getSampleId(self, path): - if not path or not os.path.exists(path): return None - if path[0:1]!="/": path = absPath(path, self.homedir) - sampleId = [k for k,v in self.virtualsamples.iteritems() if v==path] - if len(sampleId)==1: return sampleId[0] - newId = int(timestamp(False)) - while str(newId) in self.virtualsamples.keys(): - #print newId - newId += 1 - self.virtualsamples[str(newId)] = path - return str(newId) - def getTrigId(self, character): - if len(character)==0: return None - for k,v in self.virtualtriggers.iteritems(): - if v == character: return k - newId = int(timestamp(False)) - while str(newId) in self.virtualtriggers.keys(): - newId += 1 - self.virtualtriggers[str(newId)] = character - return str(newId) - def getTrigIdFromList(self, listOfTrigs, logicalOr = False): - if len(listOfTrigs)==0: return None - if len(listOfTrigs)==1: return listOfTrigs[0].triggerId - trigids = [trig.triggerId for trig in listOfTrigs] - trigtype = "multior" if logicalOr else "multiand" - newEntry = [trigtype] + trigids - for k,v in self.virtualtriggers.iteritems(): - if v == newEntry: return k - newId = timestamp(False) - self.virtualtriggers[newId] = newEntry - return newId - def loadVirtualLegs(self): - self.virtuallegs = readCache(self.cachedir+"/virtuals/legs.txt" , "1:") - def loadVirtualSamples(self): - self.virtualsamples = readCache(self.cachedir+"/virtuals/samples.txt" , "1" ) - def loadVirtualTriggers(self): - self.virtualtriggers = readCache(self.cachedir+"/virtuals/triggers.txt", "1:", selection=lambda x: all([n in self.virtuallegs.keys() for n in x[2:]])) - def loadLists(self): - self.retrievableLists = {} - for fname in os.listdir(self.cachedir+"/lists"): - if not ".root" in fname: continue - f = ROOT.TFile.Open(self.cachedir+"/lists/"+fname,"read") - objs = readObjsFromRootFile(f) - for obj in objs: - if not obj.ClassName()=="TEventList": continue - sn = obj.GetName().split("_::_") - if not sn[0] in self.virtualtriggers .keys(): continue - if not sn[1] in self.virtualsamples .keys(): continue - if not sn[1] in self.retrievableLists.keys(): self.retrievableLists[sn[1]] = {} - self.retrievableLists[sn[1]][sn[0]] = obj - f.Close() - def loadFunctions(self): - self.functions = {} - for f in self.cfg.function: - if not "lambda" in f.options or not "args" in f.options: continue - #print "lambda "+",".join(f.options["args"])+": "+f.options["lambda"] - self.functions[f.name] = eval("lambda "+",".join(f.options["args"])+": "+f.options["lambda"]) - def loadSamples(self): - self.samples = SampleManager(self) - for sampDef in self.cfg.sample: - self.samples.addSample(sampDef) - def loadTriggers(self): - self.menu = Menu(self) - for objDef in self.cfg.object: - self.menu.addTrigObject(objDef) - for trigDef in self.cfg.trigger: - self.menu.addTrigger(trigDef) - def saveLists(self): - if len(self.retrievableLists.values())==0: return - cleandir(self.cachedir+"/lists") - for sname in self.retrievableLists.keys(): - f = ROOT.TFile.Open(self.cachedir+"/lists/list_"+sname+".root","recreate") - f.cd() - for tname, elist in self.retrievableLists[sname].iteritems(): - elist.SetName(tname+"_::_"+sname) - elist.Write() - f.Close() - def saveVirtualLegs(self): - writeCache(self.cachedir+"/virtuals/legs.txt" , self.virtuallegs ) - def saveVirtualSamples(self): - writeCache(self.cachedir+"/virtuals/samples.txt" , self.virtualsamples , False) - def saveVirtualTriggers(self): - writeCache(self.cachedir+"/virtuals/triggers.txt", self.virtualtriggers) - - - - -## legID :: LegType :: Object :: Cut1 :: Cut2 :: Cut3 -## LegType = leg, multi, evt - -## trigID :: TrigType :: leg1ID :: leg2ID :: leg3ID -## TrigType = multior, multiand (a collection of triggers) or single (a single trigger) -## sampleID :: samplePath - -## list files are called list_.root -## list objects are called trigID_::_sampleID - -## the cuts need to have the functional expressions replaced! - - - diff --git a/rates/table/lib/menu.py b/rates/table/lib/menu.py deleted file mode 100644 index e68e70d9..00000000 --- a/rates/table/lib/menu.py +++ /dev/null @@ -1,643 +0,0 @@ -from trigger import * -import ROOT -import numpy - - -class Memory: - def __init__(self): - self.items = [] - def append(self, item): - self.items.append(item) - def dump(self, outdir): - for item in self.items: - item.dump(outdir) - def find(self, typename, iteration=0): - found = 0 - for attr in self.items: - if type(attr)==typename and found==iteration: return attr - return None - def free(self, exceptions=[]): - for attr in self.items: - if attr in exceptions: continue - self.items.remove(attr) - def get(self, typename, freeTheRest=False): - if self.has(typename): - keep = self.find(typename) - self.free([keep.name]) - return keep - return None - def has(self, typename): - for attr in self.items: - if type(attr)==typename: return True - return False - - -class MenuTable: - def __init__(self, master, name = ""): - self.master = master - self.name = name - self.rates = {} - self.yields = {} - self.raw = {} - self.correlations = {} - def setCorrelations(self, trigger, ctrigger, totYield): - if not trigger in self.triggers: self.master.vb.error("MenuTable: Trigger not found!") - if not ctrigger in self.triggers: self.master.vb.error("MenuTable: Trigger not found!") - self.correlations[(trigger.triggerId, ctrigger.triggerId)] = totYield/self.yields[trigger.triggerId] if self.yields[trigger.triggerId]>0 else 0 - def setFullMenu(self, totYield, rawYield): - self.setRates(None, totYield) - self.setRates(None, rawYield, "menuraw") - def setNEvts(self, nevts): - self.nEvts = nevts - def setRates(self, trigger, totYield, name=None): - if trigger and not trigger in self.triggers: self.master.vb.error("MenuTable: Trigger not found!") - name = name if name else trigger.triggerId if trigger else "menu" - self.yields[name] = float(totYield) - self.raw [name] = float(totYield)/self.nEvts if self.nEvts>0 else 0 - self.rates [name] = self.master.menu.rateFactor*self.raw[name] - def setTriggers(self, listOfTriggers): - self.triggers = listOfTriggers - def dump(self, outdir): - ## dumping it into a file using self.name - maxlength = max([len(x) for x in self.yields.keys()])+5 - for k in range(len(self.yields)): - print k - if not self.master.menu.getTriggerById(k): continue - print self.yields[k] - #print self.master.menu.getTriggerById(k).name - refs = {self.master.menu.getTriggerById(k).name: k for k in self.yields.keys() if self.master.menu.getTriggerById(k)} - print refs - names = refs.keys()[:] - names.sort() - fs = "%-"+str(maxlength)+"s: %9.2f" - fss = fs + " %1.5f %3.3f" - print - print "MENU RESULT:" - for tname in names: - print fss%(tname, self.yields[refs[tname]], self.raw[refs[tname]], self.rates[refs[tname]]) - print "-"*55 - print fss%("total menu", self.yields["menu" ], self.raw["menu" ], self.rates["menu" ]) - print fss%("total raw" , self.yields["menuraw"], self.raw["menuraw"], self.rates["menuraw"]) - print fs %("total" , self.nEvts) - print - f = open(outdir+"/menu.csv","w") - for tname in names: - f.write(fss%(tname, self.yields[refs[tname]], self.raw[refs[tname]], self.rates[refs[tname]])+"\n") - f.write(fss%("total menu", self.yields["menu"], self.raw["menu"], self.rates["menu"])+"\n") - f.write(fss%("total raw" , self.yields["menu"], self.raw["menu"], self.rates["menu"])+"\n") - f.write(fs %("total" , self.nEvts)+"\n") - f.close() - - xtrigs = list(set([(self.master.menu.getTriggerById(k[0]).name, k[0]) for k in self.correlations.keys()])) - ytrigs = list(set([(self.master.menu.getTriggerById(k[1]).name, k[1]) for k in self.correlations.keys()])) - xtrigs.sort() - ytrigs.sort() - h = ROOT.TH2F("correlations","",len(xtrigs),0,len(xtrigs),len(ytrigs),0,len(ytrigs)) - for ix,xtrig in enumerate(xtrigs): - for iy,ytrig in enumerate(ytrigs): - h.SetBinContent(ix+1,iy+1,1 if xtrig[1]==ytrig[1] else self.correlations[(xtrig[1],ytrig[1])]) - for ix,xtrig in enumerate(xtrigs): - h.GetXaxis().SetBinLabel(ix+1, xtrig[0]) - for iy,ytrig in enumerate(ytrigs): - h.GetYaxis().SetBinLabel(iy+1, ytrig[0]) - h.GetXaxis().LabelsOption("v") - f = ROOT.TFile(outdir+"/correlations.root","recreate") - f.cd() - h.Write() - f.Close() - - f = open(outdir+"/correlations_xtrigs.txt","w") - for xtrig in xtrigs: - f.write(xtrig[0]+"\n") - f.close() - - f = open(outdir+"/correlations_ytrigs.txt","w") - for ytrig in ytrigs: - f.write(ytrig[0]+"\n") - f.close() - - print "printing correlations" - print self.correlations - - -class VariationTable: - def __init__(self, master, name = ""): - self.master = master - self.name = name - self.fitResult = {} - def dump(self, outdir): - f = ROOT.TFile(outdir+"/variations_"+self.name+".root","recreate") - f.cd() - for variation in self.indivRatesPerThresholds: - variation.dump(f) - for variation in self.totalRatesPerThresholds: - variation.dump(f) - f.Close() - def setFitResult(self, fitResult): - pass - def setIndividualRates(self, ratesPerThresholds): - self.indivRatesPerThresholds = [] - for trigId,rvals in ratesPerThresholds.iteritems(): - for rname,variations in rvals.iteritems(): - self.indivRatesPerThresholds.append(Variation(self, self.master.menu.getTriggerById(trigId), "indiv", rname, [x[1] for x in variations], [x[2] for x in variations])) - def setTotalRates(self, ratesPerThresholds): - self.totalRatesPerThresholds = [] - for trigId,rvals in ratesPerThresholds.iteritems(): - for rname,variations in rvals.iteritems(): - self.totalRatesPerThresholds.append(Variation(self, self.master.menu.getTriggerById(trigId), "total", rname, [x[1] for x in variations], [x[2] for x in variations])) - -## setFitResult -## self.primaryFitResult[trigger.triggerId][totalRate] = theVars[it].varValue - - - -class Variation: - def __init__(self, table, trigger, prefix, rname, thresholds, rates): - self.table = table - self.master = table.master - self.trigger = trigger - self.name = trigger.name+"_"+prefix+"_"+rname - self.rname = rname - self.thresholds = thresholds - self.rates = rates - def dump(self, rootfile): - print - print "VARIATION "+self.table.name+" "+self.name - fs = "%5.2f => %3.3f" - for i in range(len(self.thresholds)): - print fs%(self.thresholds[i], self.rates[i]) - - factor = self.master.menu.rateFactor / self.master.samples.getNEvts() - errors = [math.sqrt(factor**2*(r/factor)) for r in self.rates] - up, dn = getPoissonErrors(self.rates, errors) - syst = self.master.getOpt("varError",0.2) - - onToOff = 0 - if self.rname in self.trigger.ranges.keys(): - #print self.trigger.ranges[self.rname][0] - obj = self.trigger.getLegByName(self.trigger.ranges[self.rname][0]).obj - onToOff = float(obj.onToOff) - - gon = ROOT.TGraphAsymmErrors() - gon .SetName("variation_"+self.table.name+"_"+self.name+"_on" ) - goff = ROOT.TGraphAsymmErrors() - goff .SetName("variation_"+self.table.name+"_"+self.name+"_off" ) - gone = ROOT.TGraph() - gone .SetName("variation_"+self.table.name+"_"+self.name+"_one" ) - goffe = ROOT.TGraph() - goffe.SetName("variation_"+self.table.name+"_"+self.name+"_offe") - for i in range(len(self.thresholds)): - edn = math.sqrt(dn[i]**2 + (self.rates[i]*syst)**2) - eup = math.sqrt(up[i]**2 + (self.rates[i]*syst)**2) - off = self.thresholds[i] + onToOff - gon .SetPoint (i, self.thresholds[i], self.rates[i]) - gon .SetPointError(i, 0, 0, edn, eup) - goff .SetPoint (i, off , self.rates[i]) - goff .SetPointError(i, 0, 0, edn, eup) - gone .SetPoint (i, self.thresholds[i], self.rates[i]-edn) - goffe.SetPoint (i, off , self.rates[i]-edn) - for i in reversed(range(len(self.thresholds))): - edn = math.sqrt(dn[i]**2 + (self.rates[i]*syst)**2) - eup = math.sqrt(up[i]**2 + (self.rates[i]*syst)**2) - off = self.thresholds[i] + onToOff - gone .SetPoint(gone .GetN(), self.thresholds[i], self.rates[i]+eup) - goffe.SetPoint(goffe.GetN(), off , self.rates[i]+eup) - edn = math.sqrt(dn[0]**2 + (self.rates[0]*syst)**2) - eup = math.sqrt(up[0]**2 + (self.rates[0]*syst)**2) - gone .SetPoint(gone .GetN(), self.thresholds[0] , self.rates[i]-edn) - goffe.SetPoint(goffe.GetN(), self.thresholds[0]+onToOff, self.rates[i]-edn) - - rootfile.cd() - gon .Write() - goff .Write() - gone .Write() - goffe.Write() - - - - - - -class Menu: - def __init__(self, master): - self.master = master - self.memory = Memory() - self.objects = [] - self.triggers = [] - self.rateFactor = float(self.master.cfg.variable["nBunches"])*float(self.master.cfg.variable["revFreq"])/1000 - def addTrigObject(self, objDef): - print "adding object" - self.objects.append(TriggerObject(self.master, objDef)) - def addTrigger(self, trigDef): - self.triggers.append(Trigger(self.master, trigDef)) - def getTriggerById(self, trigId): - trigs = filter(lambda x: x.triggerId==trigId, self.triggers) - if len(trigs)==1: return trigs[0] - return None - def computeRate(self): - ## for fixed thresholds per trigger, compute the total bandwidth - self.memory.free() - table = MenuTable(self.master, "fixedThresholds") - table.setTriggers(self.triggers) - table.setNEvts (self.master.samples.getNEvts()) - self.master.samples.analyze(self.triggers) - for trigger in self.triggers: - table.setRates(trigger, self.master.samples.apply(trigger)) - table.setFullMenu(self.master.samples.applyAny(self.triggers), self.master.samples.applySum(self.triggers)) - for trigger in self.triggers: - for ctrigger in self.triggers: - if trigger == ctrigger: continue - table.setCorrelations(trigger, ctrigger, self.master.samples.applyAll([trigger, ctrigger])) - self.memory.append(table) - def computeRatesPerThresholds(self, rangeDef={}): - ## for fixed set of thresholds per trigger, compute the individual and total bandwidths - factor = self.rateFactor / self.master.samples.getNEvts() - variations = {} - alltogether = [] - for trigger in self.triggers: - variations[trigger.triggerId] = {} - theDict = rangeDef[trigger.triggerId] if trigger.triggerId in rangeDef.keys() and len(rangeDef[trigger.triggerId].keys())>0 else trigger.ranges - for rname,rdef in theDict.iteritems(): - variations[trigger.triggerId][rname] = [] - existing = [x[1] for x in self.ratesPerThresholds[trigger.triggerId][rname]] if hasattr(self, "ratesPerThresholds") and trigger.triggerId in self.ratesPerThresholds.keys() and rname in self.ratesPerThresholds[trigger.triggerId].keys() else [] - for value in rdef[2:]: - if value in existing: continue - #print rdef - variations[trigger.triggerId][rname].append(trigger.makeVar(rname, rdef[0], rdef[1], value)) - alltogether += variations[trigger.triggerId][rname] - #print alltogether - self.master.samples.analyze(alltogether) - if not hasattr(self, "ratesPerThresholds" ): self.ratesPerThresholds = {} - if not hasattr(self, "totalRatesPerThresholds"): self.totalRatesPerThresholds = {} - for trigger in self.triggers: - if not trigger.triggerId in self.ratesPerThresholds : self.ratesPerThresholds [trigger.triggerId] = {} - if not trigger.triggerId in self.totalRatesPerThresholds: self.totalRatesPerThresholds[trigger.triggerId] = {} - for rname in variations[trigger.triggerId].keys(): - if not rname in self.ratesPerThresholds [trigger.triggerId].keys(): self.ratesPerThresholds [trigger.triggerId][rname] = [] - if not rname in self.totalRatesPerThresholds[trigger.triggerId].keys(): self.totalRatesPerThresholds[trigger.triggerId][rname] = [] - for var in variations[trigger.triggerId][rname]: - self.ratesPerThresholds [trigger.triggerId][rname].append((var, var.varValue, factor * self.master.samples.apply(var))) - updatedSet = updateTriggers(self.triggers, var) - self.totalRatesPerThresholds[trigger.triggerId][rname].append((var, var.varValue, factor * self.master.samples.applyAny(updatedSet))) - for trigId in self.ratesPerThresholds.keys(): - for rname in self.ratesPerThresholds[trigId].keys(): - self.ratesPerThresholds [trigId][rname].sort(key=lambda x: x[1]) - self.totalRatesPerThresholds[trigId][rname].sort(key=lambda x: x[1]) - print "printing varied rates" - print self.ratesPerThresholds - print self.totalRatesPerThresholds - - - def computeThresholds(self): - ## for one fixed bandwidth, compute thresholds of all paths - return - table = self.memory.get("MenuTable", True) - if not table: - self.computeRate() - table = self.memory.get("MenuTable") - table.name = "fixedBandwidth" - ## in principle: run self.computeThresholdsPerRatesFull([float(self.master.cfg.variable["totalBandwidth"])]): - def computeThresholdsPerRatesFull(self): - ## for a fixed set of bandwidths, compute the trigger thresholds with fixed fraction - return - varBins = self.master.cfg.variable["varBins"] ## leave this stuff here in order to add additional bins if you like - if len(varBins)==0: return - triggersToUse = filter(lambda x: "bwFraction" in x.opts.keys() and x.opts["bwFraction"], self.triggers) - if len(triggersToUse)==0: return - table = self.memory.get("MenuTable") - fit = MenuFitter(self.master, "full", triggersToUse, varBins) - additionals = fit.checkRatesPerThresholds(self.ratesPerThresholds if hasattr(self, "ratesPerThresholds") else {}) - self.computeRatesPerThresholds(additionals) - fit.setNominalResult(table) - self.thresholdsPerRatesFull = fit.secondaryProcedure(self.ratesPerThresholds) - #print self.thresholdsPerRatesFull - def computeThresholdsPerRatesIndiv(self): - ## for a fixed set of bandwidths, compute the trigger thresholds without fixed fraction - varBins = self.master.cfg.variable["varBins"] - if len(varBins)==0: return - table = self.memory.get("MenuTable") - fit = MenuFitter(self.master, "indiv", self.triggers, varBins) - additionals = fit.checkRatesPerThresholds(self.totalRatesPerThresholds if hasattr(self, "totalRatesPerThresholds") else {}) - self.computeRatesPerThresholds(additionals) - fit.setNominalResult(table) - self.thresholdsPerRatesIndiv = fit.primaryProcedure(self.totalRatesPerThresholds, False) - #print self.thresholdsPerRatesIndiv - def dump(self, outdir): - self.memory.dump(outdir) - def fillVariationTable(self, name = ""): - table = VariationTable(self.master, name) - table.setIndividualRates(self.ratesPerThresholds ) - table.setTotalRates (self.totalRatesPerThresholds) - self.memory.append(table) - - - - - - -## ============================================================== -## ============================================================== -## ============================================================== -## ============================================================== -## ============================================================== -## MENU FITTER DEVELOPMENT: - - -## Indiv -## * search for self.totalRatePerThresholds for every trigger -## - if found (i.e. the user specified the thresholds), take it -## - if not found, make it up yourself (from nominal, maybe some step size variable in cfg) -## * for every trigger -## - check amount of available steps in both cases if it is enough for the interpolation (depends on varInterpol) -## - if no, add the missing pieces in step 1 -## * primary fit interation -## - for every trigger -## + do the interpolation according to varInterpol -## + recompute the total effective rate (overlaps!) -## + compute the difference to the target rate (current-target) -## + check -## - if the absolute value of the difference is within the precision -> done! -## - if the difference > 0 (current too high): lower the factor of the trigger and reiterate -## - if the difference < 0 (current too low ): increase the factor of the trigger and reiterate - -## Full -## * check if bwFraction add up to 100% or not -## * search for self.ratesPerThresholds for every trigger -## - if found (i.e. the user specified the thresholds), take it -## - if not found, make it up yourself (from nominal, maybe some step size variable in cfg) -## * for every trigger: -## - check amount of available steps in both cases if it is enough for the interpolation (depends on varInterpol) -## - if no, add the missing pieces in step 1 -## * primary fit iterations -## - for every trigger -## + do interpolation using self.ratesPerThresholds according to varInterpol for a given desiredRate of that trigger -## - recompute the total effective rate -## - compute the difference to the target rate (current-target) -## - check -## + if the absolute value of the difference is within the precision -> done! -## + if the difference changes sign and it is at least iteration 2 -> go to step 2! -## + if the difference > 0 (current too high): lower all factors of the triggers simultaneously and reiterate -## + if the difference < 0 (current too low ): increase all factors of the triggers simultaneously and reiterate -## * secondary fit iteration -## - for every trigger -## + from the previously recorded thresholds and total rates, interpolate according to varInterpol for every trigger the threshold -## - recompute the total effective rate -## + add these values to the sample for the next iteration -## - compute the difference to the target rate (current-target) -## - check -## + if the absolute value of the difference is within the precision -> done! -## + if the difference > 0 (current too high): lower all factors of the triggers simultaneously and reiterate -## + if the difference < 0 (current too low ): increase all factors of the triggers simultaneously and reiterate - - -class MenuFitter: - def __init__(self, master, name, triggers, varBins): - self.name = name - self.master = master - self.triggers = triggers - self.varBins = varBins - self.method = self.master.cfg.variable["varInterpol"] - self.varLeg = int(self.master.cfg.variable["varLeg"])-1 - self.varCut = "cut"+str(self.master.cfg.variable["varCut"]) - self.varCutM1 = "cut"+str(self.master.cfg.variable["varCut"]-1) - self.varIterations = int(self.master.cfg.variable["varIterations"]) - self.precision = float(self.master.cfg.variable["varPrecision"]) - self.useNominalBwF = self.master.cfg.variable["useNominalBwF"] - self.factor = self.master.menu.rateFactor / self.master.samples.getNEvts() - - ## ---- public functions ---------- - def checkRatesPerThresholds(self, ratesPerThresholdRaw): - ## search for total or individual rates per trigger threshold - ## also check if there are enough variations available to do an interpolation later - ## here: check from CFG arguments if the variations will suffice or not, otherwise add them as additionals! - theGoodName = None - require = {} - for trigId,rvar in ratesPerThresholdRaw.iteritems(): - trigger = self.master.menu.getTriggerById(trigId) - trigLeg = trigger.getLegNameByIdx(self.varLeg) - require[trigId] = {} - isOk=False - for rname,rvalues in rvar.iteritems(): - if not rvalues[0][0].varLeg==trigLeg: continue - if not rvalues[0][0].varCut==self.varCut: continue - theGoodName = rname - if len(rvalues)==1: - nominal = trigger.getCutValue(trigLeg, self.varCutM1) - if rvalues[0][1]==nominal: newvalues = [nominal*0.5, nominal*1.5] - else : newvalues = [nominal , nominal*1.5] - require[trigId][rname] = [rvalues[0][0].varLeg, rvalues[0][0].varCut]+newvalues - isOk=True - if len(rvalues)==2: - theValues = [x[1] for x in rvalues] - maxvalue = max(theValues) - require[trigId][rname] = [rvalues[0][0].varLeg, rvalues[0][0].varCut]+[maxvalue*1.5] - isOk=True - if len(rvalues)>2: - isOk=True - if not isOk: - nominal = trigger.getCutValue(trigLeg, self.varCutM1) - val1 = [n*0.5 for n in nominal] if type(nominal)==list else nominal*0.5 - val2 = [n*1.5 for n in nominal] if type(nominal)==list else nominal*1.5 - require[trigId][theGoodName if theGoodName else "required1"] = [trigLeg, self.varCut, val1, nominal, val2] - #print "REQUIRE!" - #print require - return require - - def primaryProcedure(self, ratesPerThreshold, useBwF): - ## running primary fit only - self.prepare(ratesPerThreshold) - self.primaryFit(useBwF) - return self.primaryFitResult - def secondaryProcedure(self, ratesPerThreshold): - ## running primary and secondary fit - self.prepare(ratesPerThreshold) - self.primaryFit(True) - self.secondaryFit() - theResult = {} - for totalRate in self.varBins: - for trigger in self.triggers: - if not trigger.triggerId in theResult.keys(): theResult[trigger.triggerId] = {} - if not totalRate in theResult[trigger.triggerId].keys(): theResult[trigger.triggerId][totalRate] = 0 - if trigger.triggerId in self.secondaryFitResult.keys(): - if totalRate in self.secondaryFitResult[trigger.triggerId].keys(): - theResult[trigger.triggerId][totalRate] = self.secondaryFitResult[trigger.triggerId][totalRate] - if theResult[trigger.triggerId][totalRate] == 0 and trigger.triggerId in self.primaryFitResult.keys(): - if totalRate in self.primaryFitResult[trigger.triggerId].keys(): - theResult[trigger.triggerId][totalRate] = self.primaryFitResult[trigger.triggerId][totalRate] - return theResult - def setNominalResult(self, menutable): - ## set nominal result to extract nominal BwF - pass - - - ## ---- private functions --------- - def getNominalBwF(self, trigger): - ## get nominal BwF from nominal menu table - pass - def interpolate(self, collection, rate): - ## interpolate the rate to extract an estimate for the threshold - ## collection = [(threshold1, rate1), (threshold2, rate2), ...] - thresholds = [x[0][0] if type(x[0])==list else x[0] for x in collection] - rates = [x[1] for x in collection] - ## exponential fit - if self.method == "exponential": - result = numpy.polyfit(rates, numpy.log(thresholds), 1, w=numpy.sqrt(thresholds)) - return float(math.exp(result[1])*exp(result[0]*rate)) - ## linear fit - #print "i am here!" - lower = findIntersectionIdx(rates, rate) - #print "my lower bin:",lower - if lower<0: ## outside of boundary (lower edge) - lower = 0 - if lower>=len(thresholds): ## outside of boundary (upper edge) - lower = len(thresholds)-2 - #print "using:",lower - y1 = thresholds[lower]; y2 = thresholds[lower+1] - x1 = rates [lower]; x2 = rates [lower+1] - #print "corresponds to [",x1,x2,"], [",y1,y2,"]" - result = numpy.polyfit([x1,x2], [y1,y2], 1, w=numpy.sqrt([y1, y2])) - return float(result[0]*rate + result[1]) - def interpolationFactor(difference, desiredValue, precision): - ## problem: the precision acts upon the TOTAL rate, while this factor - ## extracted here acts upon the INDIVIDUAL trigger - if difference>precision*10: return desiredValue/(precision*10) - return desiredValue/precision - def prepare(self, ratesPerThresholdRaw): - ## here make a newcollection that has the "range" step integrated out (only one variation per trigger!) - #print "preperare:",ratesPerThresholdRaw - self.ratesPerThreshold = {} - for trig,rvar in ratesPerThresholdRaw.iteritems(): - for rname,rvalues in rvar.iteritems(): - if not rvalues[0][0].varCut==self.varCut: continue - self.ratesPerThreshold[trig] = [(x[1],x[2]) for x in rvalues] - break - #print "I AM HERE!" - #print self.ratesPerThreshold - def primaryFit(self, useBwF, returnAtSignChange=False): - ## this is the primary fit as done for most variation cases - ## the fit here is done on the basis of the ratesPerThreshold - #print "primary FIT" - #print self.ratesPerThreshold - self.primaryFitResult = {trigger.triggerId: {} for trigger in self.triggers} - self.primaryFitTests = {trigger.triggerId: {} for trigger in self.triggers} - self.primarySignChange = {trigger.triggerId: {} for trigger in self.triggers} - if len(self.triggers)==0: return - bwf = [float(trigger.opts["bwFraction"]) for trigger in self.triggers] if useBwF and not self.useNominalBwF else \ - [self.getNominalBwF(trigger) for trigger in self.triggers] if useBwF else \ - [1.0 for trigger in self.triggers] - for totalRate in self.varBins: - factors = [1.0 for i in range(len(self.triggers))] - diffs = [99999 for i in range(len(self.triggers))] - need = [True for i in range(len(self.triggers))] - for it, trigger in enumerate(self.triggers): - self.primaryFitTests[trigger.triggerId][totalRate] = [] - iteration = -1 - while any(need): - iteration += 1 - if iteration==self.varIterations: break - #print "primary iteration",iteration - theVars = {} - runTriggers = [] - for it, trigger in enumerate(self.triggers): - if not need[it]: continue - #print "interpolating trigger",trigger.triggerId - #print totalRate,bwf[it],factors[it], - thisThreshold = self.interpolate(self.ratesPerThreshold[trigger.triggerId], totalRate*bwf[it]*factors[it]) - #print thisThreshold - #print self.name+"_"+str(totalRate)+"_"+str(iteration), "all", self.varCut, thisThreshold - theVars[it] = trigger.makeVar(self.name+"_"+str(totalRate)+"_"+str(iteration), "any", self.varCut, thisThreshold) - #print theVars[it].varValue - runTriggers.append(theVars[it]) - if len(runTriggers) == 0: break - self.master.samples.analyze(runTriggers) - for it, trigger in enumerate(self.triggers): - if not need[it]: continue - updatedSet = updateTriggers(self.triggers, theVars[it]) - thisRate = self.factor * self.master.samples.applyAny(updatedSet) - self.primaryFitTests[trigger.triggerId][totalRate].append((theVars[it].varValue, thisRate)) - previous = diffs[it] - diffs[it] = thisRate - totalRate - #print "this rate is",thisRate,totalRate,diffs[it],self.precision - if abs(diffs[it]) < self.precision: - self.primaryFitResult[trigger.triggerId][totalRate] = theVars[it].varValue - need[it] = False - elif returnAtSignChange and diffs[it]*previous<0: - self.primarySignChange[trigger.triggerId][totalRate] = True - need[it] = False - else: - factors[it] *= totalRate/thisRate -# factors[it] = getInterpolFactor(diffs[it], totalRate, precision) - #print need[it] - #print - def secondaryFit(self): - self.secondaryFitResult = {trigger.triggerId: {} for trigger in self.triggers} - if len(self.triggers)==0: return - toRun = {} - for trigId,rvals in signChanges.iteritems(): - self.thresholdsPerRatesFull[trigId] = {} - for rate,sign in rvals.iteritems(): - if not sign: continue - if not rate in toRun.keys(): toRun[rate] = [] - toRun[rate].append(self.menu.getTriggerById(trigId)) - for totalRate in toRun.keys(): - factors = [1.0 for i in range(len(toRun[totalRate]))] - diffs = [99999 for i in range(len(toRun[totalRate]))] - need = [True for i in range(len(toRun[totalRate]))] - iteration = -1 - while any(need): - iteration += 1 - if iteration==self.varIterations: break - theVars = {} - runTriggers = [] - for it, trigger in enumerate(toRun[totalRate]): - if not need[it]: continue - thisThreshold = self.interpolate(self.primaryFitTests[trigger.triggerId][totalRate], totalRate*factors[it]) - theVars[it] = trigger.makeVar(self.name+"fit2_"+str(totalRate)+"_"+str(iteration), "all", self.varCut, thisThreshold) - runTriggers.append(theVars[it]) - if len(runTriggers) == 0: break - self.master.samples.analyze(runTriggers) - for it, trigger in enumerate(self.triggers): - if not need[it]: continue - updatedSet = updateTriggers(self.triggers, theVars[it]) - previous = diffs[it] - diffs[it] = thisRate - totalRate - if abs(diffs[it]) < self.precision: - self.secondaryFitResult[trigger.triggerId][totalRate] = theVars[it].varValue - need[it] = False - else: - factors[it] *= totalRate/thisRate - - - - - - -## def computeThresholds(self): -## ## for a fixed bandwidth, compute thresholds of all paths -## table = self.memory.get("MenuTable", True) -## if not table: -## self.computeRate() -## table = self.memory.get("MenuTable") -## table.name = "fixedBandwidth" -## ## in principle: run self.computeThresholdsPerRatesFull([float(self.master.cfg.variable["totalBandwidth"])]): -## -## -# desiredRate = float(self.master.cfg.variable["totalBandwidth"]) -# require = {} -# for trigger in self.triggers: -# desiredBw = float(self.variable["bwFraction"])*desiredRate -# require[trigger.triggerId] = {"var1": []} - - - - -## constraints: -## * thresholds are given -## * objects are given -## * bandwidth is given -## * trigger name is not "menu" or "total" -## * revolution frequency -## * number of bunches - - - diff --git a/rates/table/lib/object.py b/rates/table/lib/object.py deleted file mode 100644 index 1cfed0c3..00000000 --- a/rates/table/lib/object.py +++ /dev/null @@ -1,38 +0,0 @@ - - -class Object: - def __init__(self, master, event, objDef, idx): - self.master = master - self.event = event - self.objDef = objDef - self.idx = idx - def __getattr__(self, name): - if name[:2] == "__" and name[-2:] == "__": self.master.vb.error("Doing something stupid") - if not name in self.objDef.variables : self.master.vb.error("Doing something stupid") - if name in self.__dict__: return self.__dict__[name] - value = getattr(self.event, self.objDef.basebranch+self.objDef.separator+name)[self.idx] - self.__dict__[name] = value - return value - def __getitem__(self, attr): - return self.__getattr__(attr) - -class Objectlist: - def __init__(self, master, event, objDef): - self.master = master - self.event = event - self.objDef = objDef - self.length = getattr(event, objDef.lengthBranch) - self.cache = {} - def __getitem__(self, idx): - if not type(idx) == int: self.master.vb.error("Doing something stupid") - if idx >= self.length : self.master.vb.error("Doing something stupid") - if idx in self.cache.keys(): return self.cache[idx] - obj = Object(self.master, self.event, self.objDef, idx) - self.cache[idx] = obj - return obj - def __len__(self): - return self.length - - - - diff --git a/rates/table/lib/sample.py b/rates/table/lib/sample.py deleted file mode 100644 index ae3ff60a..00000000 --- a/rates/table/lib/sample.py +++ /dev/null @@ -1,274 +0,0 @@ -import types -import time -import ROOT -import pandas - -from functions import * -from functionsTreeReader import * - - -class Event: - def __init__(self, master, tree, entry): - self.master = master - self.tree = tree - self.entry = entry - self.objs = {} - self.load() - def __getattr__(self, key): - if key in self.objs: return self.objs[key] - #if hasattr(self.tree, key): return getattr(self.tree, key) - return readBranch(self.tree, key) - def __getitem__(self, attr): - return self.__getattr__(attr) - def getVector(self, key, index): - return readBranch(self.tree, key, index) - def load(self): - if self.tree.entry == self.entry: return - if self.tree.entry == self.entry-1: self.tree._ttreereader.Next() - else: self.tree._ttreereader.SetEntry(self.entry) - self.tree.entry = self.entry - - -class Object: - def __init__(self, master, event, objDef, index): - self.master = master - self.event = event - self.objDef = objDef - self.index = index - self.values = {} - def __eq__(self, other): - if other.__class__.__name__!="Object": return False - if self is other : return True - if self.Et==other.Et and self.Eta==other.Eta and self.Phi==other.Phi: return True - return False - def __ne__(self, other): - if other.__class__.__name__!="Object": return True - if self is other : return False - if self.Et==other.Et and self.Eta==other.Eta and self.Phi==other.Phi: return False - return True - def __getattr__(self, key): - if key in self.values.keys(): return self.values[key] - if key in self.objDef.branches.keys(): - value = self.event.getVector(self.objDef.branches[key], self.index) - self.values[key] = value - return value - else: - return -9999 - def __getitem__(self, attr): - return self.__getattr__(attr) - def p4(self, pt = 0): - ret = ROOT.TLorentzVector() - if pt > 0: ret.SetPtEtaPhiM(pt ,self.eta,self.phi,self.mass) - else : ret.SetPtEtaPhiM(self.pt,self.eta,self.phi,self.mass) - return ret - def __repr__(self): - return ("<%s[%s]>" % (self.objDef.name, self.index) if self.index != None else ("<%s>" % self.objDef.name)) - def __str__(self): - return self.__repr__() - - -class Objectlist: - def __init__(self, master, event, objDef): - self.master = master - self.event = event - self.objDef = objDef - self.name = objDef.name - if objDef.isFlat: - self.length = 1 - else: - self.length = int(getattr(event, objDef.lengthbranch)) - self.length = self.length if self.length else 0 - if self.length==1 and objDef.fixedIndex>0: - self.fixedIndex=objDef.fixedIndex - else: - self.fixedIndex=-1 - self.objs = {} - def __getitem__(self, index): - if type(index) == int and index in self.objs: - return self.objs[index] - if index >= self.length: - self.master.vb.error("Invalid index %r (length is %r) for object %s" % (index, self.length, self.objDef.name)) - if (self.fixedIndex>0): - obj = Object(self.master, self.event, self.objDef, self.fixedIndex) - else: - obj = Object(self.master, self.event, self.objDef, index) - self.objs[index] = obj - return obj - def __len__(self): - return self.length - - - -####class VirtualTrigger: -#### def __init__(self, master, trigger, sample, thresholdvar): -#### self.master = master -#### self.trigger = trigger -#### self.sample = sample -#### def apply(self): -#### :wq -####vi -#### if -#### def retrieveLists(self): -#### toRetrieve = self.master.getListsToRetrieve(self.name) -#### if len(toRetrieve.values())==0: return -#### for rkey, rlist in toRetrieve.iteritems(): -#### if rkey in self.lists.keys(): continue -#### self.lists[rkey] = rlist - - -class Sample: - def __init__(self, master, sampleDef): - self.master = master - self.name = sampleDef.name - self.opts = sampleDef.options - self.opened = False - self.lists = {} # ROOT TEventList - self.buffers = {} # Pandas DataFrame - self.characterize() - self.retrieveLists() - def analyze(self, triggers): - if not self.opened: self.load() - self.setEntries() - toRun = [] - for trigger in triggers: - if trigger.triggerId in self.lists .keys() and not self.master.getOpt("force"): continue - self.lists [trigger.triggerId] = ROOT.TEventList() - toRun.append(trigger.triggerId) - if len(toRun)==0: return - t0 = time.clock() - tlast = t0 - for ievt in xrange(self.getEntries()): - #if ievt!=2417: continue - event = Event(self.master, self.tree, ievt) - #print event.tkMuonEt - trigObjects = {} - for objDef in self.master.menu.objects: - ###objs = Objectlist(self.master, event, objDef) - trigObjects[objDef.name] = Objectlist(self.master, event, objDef) - #print objDef.name, len(trigObjects[objDef.name]) - for it,trigger in enumerate([x for x in triggers if x.triggerId in toRun]): - if trigger.apply(event, trigObjects): - #print ievt - self.lists[trigger.triggerId].Enter(ievt) - if ievt>0 and ievt%10000 == 0: ## FIXME: customize the sh** out of this! - t1 = time.clock() - self.master.vb.talk("Processed %8d/%8d entries of this tree (elapsed time %7.1fs, curr speed %8.3f kHz, avg speed %8.3f kHz)" % (ievt, self.entries, t1-t0, (10.000)/(max(t1-tlast,1e-9)),ievt/1000./(max(t1-t0,1e-9)))) - tlast = t1 - for newId in toRun: - self.master.addList(newId, self.sampleId, self.lists[newId]) - def analyzePairing(self, triggers): - if not self.opened: self.load() - self.setEntries() - toRun = [] - for trigger in triggers: - if trigger.triggerId in self.buffers.keys(): continue - cols = [l for l in trigger.legs.keys()] + [m for m in trigger.multis.keys()] - self.buffers[trigger.triggerId] = pandas.DataFrame(columns=[trigger.triggerId+"_"+l for l in cols]) - trigger.setThresholdCuts() ### ==> the thing is, i need to collect all threshold c - toRun.append(trigger.triggerId) - if len(toRun)==0: return - t0 = time.clock() - tlast = t0 - for ievt in xrange(self.getEntries()): - #if ievt!=2417: continue - event = Event(self.master, self.tree, ievt) - #print event.tkMuonEt - trigObjects = {} - for objDef in self.master.menu.objects: - ###objs = Objectlist(self.master, event, objDef) - trigObjects[objDef.name] = Objectlist(self.master, event, objDef) - #print objDef.name, len(trigObjects[objDef.name]) - ### here need to put the pairing and store that in the data frame!!!! - ###for it,trigger in enumerate([x for x in triggers if x.triggerId in toRun]): - ### if trigger.apply(event, trigObjects, exceptThresholds=True): - ### self.buffers[trigger.triggerId].append(trigger.getThresholdValues()) - ### if trigger.apply(event, trigObjects, onlyThresholds=True): - ### #print ievt - ### self.lists[trigger.triggerId].Enter(ievt) - if ievt>0 and ievt%10000 == 0: ## FIXME: customize the sh** out of this! - t1 = time.clock() - self.master.vb.talk("Processed %8d/%8d entries of this tree (elapsed time %7.1fs, curr speed %8.3f kHz, avg speed %8.3f kHz)" % (ievt, self.entries, t1-t0, (10.000)/(max(t1-tlast,1e-9)),ievt/1000./(max(t1-t0,1e-9)))) - tlast = t1 - def apply(self, trigger): - if not trigger.triggerId in self.lists.keys(): - self.analyze([trigger]) - return self.lists[trigger.triggerId].GetN() - def characterize(self): - self.sampleId = self.master.getSampleId(self.opts["path"]) - def close(self): - if not self.opened: return - self.tfile.Close() - self.opened = False - def createBuffer(self, triggers): - if len(triggers)==0: return - pass - def getEntries(self): - if not hasattr(self, "entries"): self.setEntries() - return self.entries - def init(self): - self.tree.entry = -1 - self.tree._ttreereader = ROOT.TTreeReader(self.tree) - self.tree._ttreereader.SetEntry(0) - self.tree._ttrvs = {} - self.tree._ttras = {} - self.tree._leafTypes = {} - self.tree._ttreereaderversion = 1 - self.tree.arrayReader = types.MethodType(getArrayReader, self.tree) - self.tree.valueReader = types.MethodType(getValueReader, self.tree) - self.tree.readBranch = types.MethodType(readBranch , self.tree) - def intersect(self, triggers): - toRun = [] - for trigger in triggers: - if trigger.triggerId in self.lists: continue - toRun.append(trigger) - if len(toRun)>0: self.analyze(toRun) - newId = self.master.getTrigIdFromList(triggers, False) - lists = [self.lists[trigger.triggerId] for trigger in triggers] - intersected = lists[0].Clone(newId) - for thelist in lists[1:]: - intersected.Intersect(thelist) - self.lists[newId] = intersected - self.master.addList(newId, self.sampleId, intersected) - return intersected.GetN() - def load(self): - self.open() - self.init() - def merge(self, triggers): - toRun = [] - for trigger in triggers: - if trigger.triggerId in self.lists: continue - toRun.append(trigger) - if len(toRun)>0: self.analyze(toRun) - newId = self.master.getTrigIdFromList(triggers, True) - lists = [self.lists[trigger.triggerId] for trigger in triggers] - merged = lists[0].Clone(newId) - for thelist in lists[1:]: - merged.Add(thelist) - self.lists[newId] = merged - self.master.addList(newId, self.sampleId, merged) - return merged.GetN() - def open(self): - if self.opened: return - self.tfile = ROOT.TFile.Open(self.opts["path"],"read") - self.tree = getRootObj(self.tfile, self.opts["tree"]) - self.opened = True - def retrieveLists(self): - ## find all virtual trigger ids that contain this sample path - ## then compile a list of teventlists that apply to this sample - self.lists = self.master.getListsToRetrieve(self.sampleId) - def setEntries(self): - if not self.opened: self.load() - self.entries = self.tree.GetEntries() - - - - ## NO: - ## save an event list per trigger, which carries the name of IDs of the individual legs - ## NO: save event lists indeed per leg, retrieve and apply them per leg (i.e. - ## intersections, or the analyze is still the trigger.apply but remember which legs to run and which ones not to run - ## then, when varying thresholds, can copy a trigger leg and replace one or more cuts - ## this gives a new character and a new possibility to have a leg for that sample - ## STILL: when varying the thresholds, new triggers need to be analyzed, right? on top of the original event lists (lower thresholds) or completely new? - ## the filename where the lists are stored is the name of the sample + its ID that is stored somewhere related to its path - - diff --git a/rates/table/lib/samplemanager.py b/rates/table/lib/samplemanager.py deleted file mode 100644 index d0e2b4b5..00000000 --- a/rates/table/lib/samplemanager.py +++ /dev/null @@ -1,53 +0,0 @@ -from sample import * - - -class SampleManager: - def __init__(self, master): - self.master = master - self.samples = [] - self.alias = [] - self.yields = {} - self.nEvts = 0. - def addSample(self, sampleDef): - self.samples.append(Sample(self.master, sampleDef)) - def analyze(self, triggers): - for sample in self.samples: - sample.analyze(triggers) - def apply(self, trigger): - ## apply every trigger separately - if trigger.triggerId in self.yields.keys(): return self.yields[trigger.triggerId] - weight = 0. - for sample in self.samples: - weight += sample.apply(trigger) - self.yields[trigger.triggerId] = weight - return weight - def applyAll(self, triggers): - ## apply all of them together in one iteration - return sum([s.intersect(triggers) for s in self.samples]) - def applyAny(self, triggers): - ## apply any of them - return sum([s.merge(triggers) for s in self.samples]) - def applySum(self, triggers): - ## apply all of them separately - name = "_".join([t.name for t in triggers])+"_sum" - if name in self.yields.keys(): return self.yields[name] - weight = 0. - for sample in self.samples: - for trigger in triggers: - weight += sample.apply(trigger) - self.yields[name] = weight - return weight - def closeAll(self): - for sample in self.samples: - sample.close() - def createBuffer(self): - for sample in self.samples: - sample.createBuffer(self.master.menu.triggers) - def getNEvts(self): - if self.nEvts != 0: return self.nEvts - for sample in self.samples: - self.nEvts += sample.getEntries() - return self.nEvts - - - diff --git a/rates/table/lib/trigger.py b/rates/table/lib/trigger.py deleted file mode 100644 index 82b9ea1a..00000000 --- a/rates/table/lib/trigger.py +++ /dev/null @@ -1,744 +0,0 @@ -from functions import * -from cfg import * - -import ROOT -import numpy -import math -import collections -import inspect - -def _getArgs(trigLeg, selectedByOtherLegs): - args = [[] for i in range(len(trigLeg.functs.keys()))] - for iu in range(len(args)): - #print "iu",iu - #print "uses",trigLeg.uses[iu] - selected = [olist for io,olist in enumerate(selectedByOtherLegs) if io+1 in trigLeg.uses[iu]] ## first leg is called "1" not "0" - nElms = [len(theobjs) for theobjs in selected] - nVars = int(numpy.prod(nElms)) if len(nElms)>0 else 0 - #print "selected",selected - #print "nElms", nElms - #print "nVars",nVars - if nVars == 0: continue - for iVar in range(nVars): - args[iu].append([selected[i][(iVar/numpy.prod(nElms[i+1:]))%numpy.prod(nElms[i])] for i in range(len(selected[0:-1]))] + [selected[-1][iVar%nElms[-1]]]) - return args - -def _multi(functions, event, trigObjlists, trigLeg, selectedByOtherLegs, onlyThresholdCut=False, exceptThresholdCut=False): - #print "bam oida" - objs = trigObjlists[trigLeg.obj.name] - nObjs = len(objs) - if nObjs1 and trigLeg.prevobjs[io]) - # if len(wouldremove)>0 and wouldremove[0] in result and keepFirst: - # result.remove(wouldremove[0]) - # for obj in (wouldremove[1:] if keepFirst else wouldremove): - # others.remove(obj) - - -def _leg(functions, event, trigObjlists, trigLeg, selectedByOtherLegs, onlyThresholdCut=False, exceptThresholdCut=False): - result = [] - objs = trigObjlists[trigLeg.obj.name] - #print - #print "+"*15 - #print "processing",trigLeg.idx,trigLeg.raw - #print selectedByOtherLegs - args = _getArgs(trigLeg, selectedByOtherLegs) - - - ## this is a bug!! - ## the point is: there can be multiple previously selected objects per leg => only need to find one of them to match - ## in fact, it would be better to have a loop over the different legs - ## meaning, once the first object of the first leg is found, automatically probe the second leg - ## discard the whole thing if the second leg does not match, and try to find the first one again - ## this is necessary because the second leg could be matched to the first one, and if the first one is wrongly chosen, the event is wrongly selected or discarded - - ## careful! - ## when running the second leg, the first leg is already run; it means, the possibilities are already there in selectedByOtherLegs - ## now what needs to be done at the second leg is to find one possibility that works... - - - #print args -# print "blubaaaa",trigLeg.prevobjs - selected = [] - for obj in [objs[io] for io in range(objs.length)]: - pargs = [] - for iu in range(len(args)): - pargs.append([]) - for iv in range(len(args[iu])): - pargs[iu].append([]) - pargs[iu][iv] = [x for x in args[iu][iv] if x!=obj] - #print obj - #print obj==obj - #print obj!=obj - #print "args",args[iu][iv] - #print "pargs",pargs[iu][iv] - - #print - #print "looping on",obj - #print obj.Et, obj.Eta, obj.Phi, obj.zVtx - #name = str(obj) - ##if "EG" in name and not "TkEG" in name: - ## print math.sqrt(math.pow(abs(abs(obj.Eta)-abs(pargs[3][0][0].Eta)),2)+math.pow(obj.Phi-pargs[3][0][0].Phi,2)) - ## print functions["notMatched"](obj.Eta, pargs[3][0][0].Eta, obj.Phi, pargs[3][0][0].Phi) - #if "Tau" in name and not "TkTau" in name: - # #print pargs[3][0][0].Eta, pargs[3][0][0].Phi - # #print obj.Phi-pargs[3][0][0].Phi - # #print math.sqrt(math.pow(abs(abs(obj.Eta)-abs(pargs[3][0][0].Eta)),2)+math.pow(obj.Phi-pargs[3][0][0].Phi,2)) - # #print "bla", math.pow(abs(obj.Phi-pargs[3][0][0].Phi) if abs(obj.Phi-pargs[3][0][0].Phi)<=math.pi else 2*math.pi-abs(obj.Phi-pargs[3][0][0].Phi),2) - # print functions["deltaR"](obj.Eta, pargs[3][0][0].Eta, obj.Phi, pargs[3][0][0].Phi) - - if not trigLeg.apply(functions, obj, pargs, onlyThresholdCut=False, exceptThresholdCut=False): continue - #print "selection is true" - selected.append(obj) - #print "preselected:",selected - #print "by others:",selectedByOtherLegs - -### result = selected -### for io,others in enumerate(selectedByOtherLegs): -### if len(others)!=1: continue -### if not others[0] in result: continue -### result.remove(others[0]) -### -### print "toremove",result -### -### for io,others in enumerate(selectedByOtherLegs): -### #print "io",io -### if len(others)==1: continue -### wouldremove = [] -### for obj in result: -### if not obj in others: continue -### wouldremove.append(obj) -### -### ## below: remove objects from previous legs -### ## in case the previous leg is using the same object: keep at least one in there -### ## which is also selected by this leg -### keepFirst = (len(result)>1 and trigLeg.prevobjs[io]) -### if len(wouldremove)>0 and wouldremove[0] in result and keepFirst: -### result.remove(wouldremove[0]) -### for obj in (wouldremove[1:] if keepFirst else wouldremove): -### others.remove(obj) - - for obj in selected: - used=False - for io,others in enumerate(selectedByOtherLegs): - #print "io",io - #print "obj",obj - #print "others",others - if obj in others: - if len(others)==1: ## in this case, the other trigger leg - used=True; break ## would end up with len(objects)==0, - ## which means the event is rejected - ## so the event cannot be removed from - ## that list nor can it be kept for this leg - others.remove(obj) - if not used: result.append(obj) - #print "selected:",result - #print "others:",selectedByOtherLegs - #print - return result - - - -class TriggerObject: - def __init__(self, master, objDef): - self.master = master - self.name = objDef.name - self.opts = objDef.options - self.load() - def load(self): - ## set variables the trigger object needs - basebranch = self.opts["basebranch" ] if "basebranch" in self.opts.keys() else "Muon" - lengthbranch = self.opts["lengthbranch"] if "lengthbranch" in self.opts.keys() else "n"+basebranch - separator = self.opts["separator" ] if "separator" in self.opts.keys() else "" - leadingvar = self.opts["leadingvar" ] if "leadingvar" in self.opts.keys() else "Et" - leadingop = self.opts["leadingop" ] if "leadingop" in self.opts.keys() else ">" - isFlat = self.opts["isFlat" ] if "isFlat" in self.opts.keys() else False - fixedIndex = self.opts["fixedIndex" ] if "fixedIndex" in self.opts.keys() else -1 - self.onToOff = self.opts["onToOff" ] if "onToOff" in self.opts.keys() else 0 - varnames = [] - varbranch = [] - for raw in self.opts["variables"]: - if "=" in raw: - sr = raw.split("=") - varnames .append(sr[0]) - varbranch.append(sr[1]) - else: - varnames .append(raw) - varbranch.append(raw) - if not leadingvar in varnames: - self.master.vb.warning("Leading variable ("+leadingvar+") does not exist for object "+self.name+"!\nUsing "+varnames[0]+" with operator "+leadingop+" instead. Results may be different than expected!") - leadingvar = varnames[0] - self.branches = {} - for iv, var in enumerate(varnames): - print basebranch + separator + varbranch[iv] - self.branches[var] = basebranch + separator + varbranch[iv] - #self.master.vb.talk("Register branch "+self.branches[var]+" with name "+var+" for object "+self.name) - self.lengthbranch = lengthbranch - self.leadingvar = leadingvar - self.leadingop = leadingop - self.isFlat = isFlat - self.fixedIndex = fixedIndex - def replaceBranches(self, theString): - ## build TDraw compatible strings from variable names - for seek, replacement in self.branches.iteritems(): - theString = theString.replace(seek, replacement) - return theString - - -class TriggerSelection(object): - def __init__(self): - self.thresholdCut = "" - self.thresholdVar = lambda obj: -1 - def buildCut(self, key, cut): - if type(cut)==type(True): - return key, str(cut), False, [] - if isFloat(cut) or isInt(cut): - cut = "obj."+self.obj.leadingvar+self.obj.leadingop+str(cut) - return key, cut, False, [] - if ("leading" in cut): - cut = "obj."+self.obj.leadingvar+str(cut.replace("leading","")) - if any([x in cut for x in self.master.functions.keys()]): - for fname in self.master.functions.keys(): - if fname in cut: - cut = re.sub(r"\w*(?0, uses - return key, cut, len(elms)>0, uses - def getCutValue(self, rawcut): - if type(rawcut)==list: - return [self.getCutValue(rawcut[i]) for i in range(len(rawcut))] - if "<=" in rawcut: return float(rawcut.split("<=")[1]) - if ">=" in rawcut: return float(rawcut.split(">=")[1]) - if "<" in rawcut: return float(rawcut.split("<" )[1]) - if ">" in rawcut: return float(rawcut.split(">" )[1]) - if "!=" in rawcut: return float(rawcut.split("!=")[1]) - if "==" in rawcut: return float(rawcut.split("==")[1]) - return float(rawcut) - def getCutVar(self, rawcut): - if type(rawcut)==list: - return [self.getCutVar(rawcut[i]) for i in range(len(rawcut))] - if "<=" in rawcut: return float(rawcut.split("<=")[0]) - if ">=" in rawcut: return float(rawcut.split(">=")[0]) - if "<" in rawcut: return float(rawcut.split("<" )[0]) - if ">" in rawcut: return float(rawcut.split(">" )[0]) - if "!=" in rawcut: return float(rawcut.split("!=")[0]) - if "==" in rawcut: return float(rawcut.split("==")[0]) - return None - def setCutValue(self, rawcut, newthreshold): - if type(rawcut)==list and len(rawcut)==len(newthreshold): - return [self.setCutValue(rawcut[i], newthreshold[i]) for i in range(len(rawcut))] - if not any([x in rawcut for x in ["<",">","="]]): return float(newthreshold) - if "<=" in rawcut: return rawcut.split("<=")[0]+"<="+str(newthreshold) - if ">=" in rawcut: return rawcut.split(">=")[0]+">="+str(newthreshold) - if "<" in rawcut: return rawcut.split("<" )[0]+"<" +str(newthreshold) - if ">" in rawcut: return rawcut.split(">" )[0]+">" +str(newthreshold) - if "!=" in rawcut: return rawcut.split("!=")[0]+"!="+str(newthreshold) - if "==" in rawcut: return rawcut.split("==")[0]+"=="+str(newthreshold) - return float(rawcut) - def setThresholdCut(self, name): - self.thresholdCut = name - cutvar = self.getCutVar(self.cuts[name]) - self.thresholdVar = eval("lambda obj: "+cutvar if cutvar else self.obj.leadingvar) - -class TriggerLeg(TriggerSelection): - def __init__(self, master, obj, cuts, idx): - super(TriggerLeg,self).__init__() - self.master = master - self.obj = obj - self.idx = int(idx) - self.raw = " ".join([str(c) for c in cuts]) - self.uses = [] - #self.prevobjs = [obj.name==x for x in prevobjs] - self.buildDef(cuts) - self.characterize() - def getThreshold(self, obj): - return self.thresholdVar(obj) - def apply(self, functions, obj, args, onlyThresholdCut=False, exceptThresholdCut=False): - #print "## running trigger leg", self.raw, obj - #print args - for name,function in self.functs.iteritems(): - isThresholdCut = (name==self.thresholdCut) - if (onlyThresholdCut and not isThresholdCut) or (exceptThresholdCut and isThresholdCut): continue - iu = int(name.replace("cut","")) - #print name, iu, self.uses[iu], args[iu] - if len(self.uses[iu])>0 and len(args[iu])==0: return False ## no variations - if len(args[iu])==0: - #print "running normal function",name,obj - if not function(functions, obj): return False - else: - #print "running special", args[iu] - ## args[iu] contains all variations of the list of arguments - ## only one variation needs to work to trigger the event - ## N.B. the object selected here, if in a different collection - ## than previous legs (e.g. leg1=TkEG, leg2=EG), can still - ## overlap with the object selected at any of the previous legs - ## but this is no problem since at least one combination of objects - ## needs to work; when probing further legs (e.g. leg3 depending - ## on leg1 and leg2), the proper combination to probe is among - ## the ones that is probed - anytrue = False - for arg in args[iu]: - if len(self.uses[iu])!=len(arg): continue - #print arg - #print arg[0].zVtx, obj.zVtx, abs(obj.zVtx-arg[0].zVtx) - if function(functions, obj, *arg): anytrue=True#; print "true here!" - if not anytrue: return False - return True - def buildDef(self, cuts): - self.cuts = {} - for ic,cut in enumerate(cuts): - key = "cut"+str(ic) - self.uses.append([]) - key, cut, elms, self.uses[ic] = self.buildCut(key, cut) - self.cuts[key] = cut - ##if isFloat(cut) or isInt(cut): - ## self.cuts[key] = "obj."+self.obj.leadingvar+self.obj.leadingop+str(cut) - ## self.uses.append([]) - ## continue - ##if ":" in cut: - ## sc = cut.split(":") - ## key = sc[0] - ## cut = sc[1] - ##self.uses.append(list(set([int(i) for i in re.findall(r'\bleg(\d+)\.\b', cut)]))) - ##if not any([x in cut for x in self.obj.opts["variables"]]): - ## self.master.vb.error("Doing something stupid") - ##if any([x in cut for x in self.master.functions.keys()]): - ## for fname in self.master.functions.keys(): - ## if fname in cut: - ## cut = re.sub(r"\w*(?0 else "")+": "+cut - self.functs[key] = eval("lambda functions, obj"+(", "+", ".join("leg"+str(i) for i in toUse) if len(toUse)>0 else "")+": "+cut) - def characterize(self): - ## find the id of the virtual leg - self.legId = [self.master.getLegId(["leg", self.obj.name] + [c for k,c in self.cuts.iteritems()])] - - -class TriggerMulti(TriggerSelection): - def __init__(self, master, obj, num, cuts, idx): - super(TriggerMulti,self).__init__() - self.master = master - self.obj = obj - self.num = int(num) - self.idx = int(idx) - self.raw = " ".join([str(c) for c in cuts]) - self.uses = [] - self.elms = [] - self.buildDef(cuts) - self.characterize() - def apply(self, functions, obj, io, args, elms, onlyWithElms=True, onlyThresholdCut=False, exceptThresholdCut=False): - #print "## running trigger leg", self.raw, obj, io - #print args - for name,function in self.functs.iteritems(): - iu = int(name.replace("cut","")) - isThresholdCut = (name==self.thresholdCut) - if (onlyThresholdCut and not isThresholdCut) or (exceptThresholdCut and isThresholdCut): continue - if (onlyWithElms and not self.elms[iu]) or (not onlyWithElms and self.elms[iu]): continue - #print name, function, iu, self.uses[iu], args[iu], self.elms[iu] - if len(self.uses[iu])>0 and len(args[iu])==0: return False ## no variations - if len(args[iu])==0: - #print "running normal function",name,io,function - if len(elms)==0: - if not function[io](functions, obj): return False - else: - if not function[io](functions, obj, *elms): return False - else: - #print "running special", args[iu] - ## args[iu] contains all variations of the list of arguments - ## only one variation needs to work to trigger the event - ## N.B. the object selected here, if in a different collection - ## than previous legs (e.g. leg1=TkEG, leg2=EG), can still - ## overlap with the object selected at any of the previous legs - ## but this is no problem since at least one combination of objects - ## needs to work; when probing further legs (e.g. leg3 depending - ## on leg1 and leg2), the proper combination to probe is among - ## the ones that is probed - anytrue = False - for arg in args[iu]: - if len(self.uses[iu])!=len(arg): continue - #print arg - #print arg[0].zVtx, obj.zVtx, abs(obj.zVtx-arg[0].zVtx) - myargs = arg + elms - if function[io](functions, obj, *myargs): anytrue=True#; print "true here!" - if not anytrue: return False - return True - def buildDef(self, cuts): - self.cuts = {} - for ic,cut in enumerate(cuts): - key = "cut"+str(ic) - self.cuts[key] = [True for i in range(self.num)] - self.uses.append([]) - self.elms.append([]) - if type(cut)==list: - for ii, c in enumerate(cut): - key, cutstring, self.elms[ic], self.uses[ic] = self.buildCut(key, c) - self.cuts[key][ii] = cutstring - else: - for ii in range(self.num): - key, cutstring, self.elms[ic], self.uses[ic] = self.buildCut(key, cut) - self.cuts[key][ii] = cutstring - self.functs = {} - for key,cut in self.cuts.iteritems(): - print key, cut - self.functs[key] = [{} for i in range(self.num)] - iu = int(key.replace("cut","")) - toUseL = self.uses[iu] - for ic in range(self.num): - astring = ", ".join("leg"+str(i) for i in toUseL ) if len(toUseL)>0 else "" - estring = ", ".join("elm"+str(i) for i in range(1,ic+1)) if ic>0 else "" - full = ", "+astring+", "+estring if astring!="" and estring!="" else ", "+astring if astring!="" else ", "+estring if estring!="" else "" - print "DONE:",iu,ic,key,cut[ic],"lambda functions, obj"+full+": "+cut[ic] - self.functs[key][ic] = eval("lambda functions, obj"+full+": "+cut[ic]) - #self.functs[key][ic] = eval("lambda functions, obj"+(", ("+", ".join("leg"+str(i) for i in toUseL)+")" if len(toUseL)>0 else "")+(", ("+", ".join("elm"+str(ii) for ii in range(ic))+")" if ic>0 else "")+": "+cut[ic]) - def characterize(self): - ## find the id of the virtual leg - self.legId = [] - for io in range(self.num): - self.legId.append(self.master.getLegId(["multi"+str(io), self.obj.name] + [c[io] for k,c in self.cuts.iteritems()])) - - -class Trigger: - def __init__(self, master, trigDef): - print "init Trigger"+trigDef.name - print trigDef.options - self.master = master - self.name = trigDef.name - self.opts = trigDef.options - self.parent = None - self.trigVar = {} - print "load Trigger"+trigDef.name - self.load() - print "characterize Trigger"+trigDef.name - self.characterize() - print "Done with Trigger"+trigDef.name - def apply(self, event, trigObjlists, onlyThresholds=False, exceptThresholds=False): - legs = [] - for leg in self.legs.values(): - legs.append(_leg(self.master.functions, event, trigObjlists, leg, legs)) - for mul in self.multis.values(): - multi = _multi(self.master.functions, event, trigObjlists, mul, legs) - legs.extend(multi) - #print "RESULT BELOW:" - #print legs - if any([len(l)==0 for l in legs]): return False - #print legs - #print event.entry - return True - def characterize(self): - legIds = [] - for leg in self.legs.values(): - legIds.extend(leg.legId) - for leg in self.multis.values(): - legIds.extend(leg.legId) - ## check this look up of the trigger id again, especially for the variation case!! - self.triggerId = self.master.getTrigId(["single"] + legIds) - def getCutValue(self, legname, cutname): - #print legname, self.legnames, cutname, self.multis[legname].cuts.keys() - #print legname, self.legnames, cutname, self.legs[legname].cuts.keys() - if not legname in self.legnames: return None - collection = self.multis if "multi" in legname else self.legs - if not cutname in collection[legname].cuts.keys(): return None - rawExpr = collection[legname].cuts[cutname] - print rawExpr - return collection[legname].getCutValue(rawExpr) - def getLegNameByIdx(self, legidx): - if legidx>=len(self.legnames): return None - return self.legnames[legidx] - def getLegByName(self, legname): - if not legname in self.legnames: return None - return self.legs[legname] if "leg" in legname else self.multis[legname] - def makeVar(self, varname, varleg, varcut, varvalue): - ## create a copy of the trigger with a varied cut - print - print "make new var", varvalue - newDef = CfgObject(self.name+"_"+varname,"") - varvalue = float(varvalue) - legToVary = self.legnames[0] if varleg=="any" else varleg - theLeg = self.multis[legToVary] if "multi" in legToVary else self.legs[legToVary] - add = 2 if "multi" in legToVary else 1 ## entry 0 = object, entry 1 = first cut, +1 in multi - cutIdx = int(varcut.replace("cut",""))-1 - cutToVary = "cut"+str(cutIdx) - #cutToVary = int(varcut.replace("cut",""))+add - ## when multiple legs are present, varleg and varvalue will only affect one of the legs - ## thus need to keep the ratio of these cuts fixed and vary all other legs accordingly !!! - print self.legnames, cutToVary, add - oldvalues = [self.getCutValue(ln, cutToVary) for ln in self.legnames] - print oldvalues - newvalues = oldvalues[:] - refs = oldvalues[self.legnames.index(legToVary)] - varvalues = [varvalue] - if type(refs)!=list: refs = [refs] - print refs - if "multi" in legToVary and len(refs)>1: - ## if only one value is given for a multi-leg, it means that it is the leading value, - ## and all other legs must be scaled up too accordingly - for ie in range(1,len(refs)): - varvalues.append(refs[ie]*(varvalue/refs[0])) - print "after newvarvalue",varvalues - scales = [varvalues[i]/refs[i] for i in range(len(varvalues))] - print "scales is",scales - if sum(scales)==len(scales): - self.varValue = varvalue - print "RETURNING",self.triggerId - return self - for iv,oldvalue in enumerate(oldvalues): - if type(oldvalue)==list: - newvalues[iv] = [] - for ie,elm in enumerate(oldvalue): - newvalues[iv].append(theLeg.setCutValue(cutToVary, scales[ie]*elm)) - continue - newvalues[iv] = theLeg.setCutValue(cutToVary, scales[0]*oldvalue) - ## this is necessary in case the cut you want to vary contains an expression, not just a float or int value - print varname, varleg, varcut, varvalue - for key in self.opts.keys(): - ##print "probing",key - if not key in self.legnames: - newDef.options[key] = self.opts[key] - continue - idx = self.legnames.index(key) - ##print "i am here" - newleg = self.opts[key] - newleg[cutIdx+add] = newvalues[idx] - newDef.options[key] = newleg - print "my varied leg:",key,newleg - print "MAKING NEW VARIATION WITH", - print newDef.options - newTrig = Trigger(self.master, newDef) - newTrig.parent = self - newTrig.varName = varname - newTrig.varLeg = varleg - newTrig.varCut = varcut - newTrig.varValue = varvalue - self.trigVar[varname] = newTrig - print newTrig.triggerId - return newTrig - def load(self): - ## prepare the functions and all other constraints - ## builds list of trigger legs and event selection, each of them functions to be - ## executed the apply(evt, trigObjlists) then runs all of them with trigObjlists the - ## actual Objectlists instantiated for a given event - ## for a leg, it takes a _leg(evt, trigObjlists, legDef) - ## for a evt, it takes a _evt(evt, trigObjlists, legs , evtDef) - print "loading trigger" - objnames = [o.name for o in self.master.menu.objects] - self.legs = {} - self.multis = {} - self.ranges = {} - self.legnames = [] - self.legentities = [] - for key in self.opts.keys(): - if "leg" in key: - args = self.opts[key] - if not args[0] in objnames: - self.master.vb.warning("Cannot find trigger object "+args[0]+" for "+key+" of path "+self.name+"\nSkipping this leg! Results may be different than expected!") - continue - obj = self.master.menu.objects[objnames.index(args[0])] - self.legs[key] = TriggerLeg(self.master, obj, args[1:], int(key[3:])) - self.legnames .append(key) - self.legentities.append(self.legs[key]) - ##self.legs[key] = TriggerLeg(self.master, obj, args[1:], int(key[3:]), [x.obj.name for x in self.legs.values()]) - - if "multi" in key: - args = self.opts[key] - if not args[0] in objnames: - self.master.vb.warning("Cannot find trigger object "+args[0]+" for "+key+" of path "+self.name+"\nSkipping this leg! Results may be different than expected!") - continue - obj = self.master.menu.objects[objnames.index(args[0])] - self.multis[key] = TriggerMulti(self.master, obj, args[1], args[2:], int(key[5:])) - self.legnames .append(key) - self.legentities.append(self.multis[key]) - - if "evt" in key: - pass ## not implemented currently - - if "range" in key: - args = self.opts[key] - if len(args)<3: - self.master.vb.warning("Not enough arguments for "+key+" of path "+self.name+"\nSkipping this range!") - continue - if not args[0] in self.legs.keys() and not args[0] in self.multis.keys(): - self.master.vb.warning("Cannot find leg "+args[0]+" for "+key+" of path "+self.name+"\nSkipping this range!") - continue - self.ranges[key] = args - def setThresholdCuts(self): - varCut = "cut"+str(self.master.cfg.variable["varCut"]) - for leg in self.legs .values(): - leg .setThresholdCut(varCut) - for multi in self.multis.values(): - multi.setThresholdCut(varCut) - def setThresholdValues(self, legsresults): - self.thresholdValues = [] - for i,legresult in enumerate(legsresults): - self.thresholdValues.append([]) - theLeg = self.legentities[i] - if len(legresult)==0: self.thresholdValues[i] = [-1]; continue - for legobj in legresult: - self.thresholdValues.append(theLeg.getThreshold(legobj)) - def getThresholdValues(self, trig): - return self.thresholdValues - diff --git a/rates/table/lib/vb.py b/rates/table/lib/vb.py deleted file mode 100644 index ccd0848c..00000000 --- a/rates/table/lib/vb.py +++ /dev/null @@ -1,19 +0,0 @@ -import sys -from functions import * - -class Verbose: - def __init__(self, master, level = 2): - self.master = master - self.level = level - self.f = open(self.master.bundledir+"/log","w") - def close(self): - self.f.close() - def error(self, message): - self.talk("ERROR: " +message, 0) - sys.exit() - def talk(self, message, required=2): - message = "> "+timestamp()+" "+message - if self.level >= required: print message - self.f.write(message+"\n") - def warning(self, message): - self.talk("WARNING: "+message, 1) diff --git a/rates/table/printRateTable.py b/rates/table/printRateTable.py deleted file mode 100644 index 936236d0..00000000 --- a/rates/table/printRateTable.py +++ /dev/null @@ -1,263 +0,0 @@ -""" -This script can be used with or without arguments. -If a cfg and rate file are passed via arguments, -a rate table exculsively for that combination is -printed. -Otherwise a rate table with all the cfg/rate file -combination specified in CFG_RATE_COMBOS is -displayed. -""" -import argparse -from itertools import chain -import re - -''' -CFG_RATE_COMBOS = { - "123_noMu_FBE":{ - "cfg": "cfg/FBE_noMu_L1TDRMET_mhtSeed_123x", - "rates": "out-bkp/2022-Apr20-v5-baseline-noMu_FBE_noMu_L1TDRMET_mhtSeed_123x/thresholds/menu.csv", - }, -# "123_noMu_w3Mu":{ -# "cfg": "cfg/FBE_noMu_L1TDRMET_mhtSeed_123x", -# "rates": "out/2022-Apr20-v5-baseline-noMu_with3tkMu_FBE_noMu_L1TDRMET_mhtSeed_123x/thresholds/menu.csv", -# }, -# "1252_lowstat":{ -# "cfg": "cfg/FBE_1252", -# "rates": "out/2023-March-v5-baseline_FBE_1252/thresholds/menu.csv" -# }, -# "1252_w3Mu":{ -# "cfg": "cfg/FBE_1252", -# "rates": "out/2023-March-v0-baseline_OldScaling_FBE_1252_with3Mu/thresholds/menu.csv" -# }, - "1252_no3Mu":{ - "cfg": "cfg/FBE_1252_oldscaling", - "rates": "out-bkp/2023-March-v0-baseline_OldScaling_no3Mu_FBE_1252/thresholds/menu.csv" - }, - "1252_newSc":{ - "cfg": "cfg/FBE_1252", - "rates": "out-bkp/2023-March-v0-baseline_NewScaling_TauJetMET_FBE_1252/thresholds/menu.csv" - }, - "1252_newSc_shrt":{ - "cfg": "cfg/FBE_1252", - "rates": "out/2023-March-v0-baseline_NewScaling_TauJetMET_testshort_FBE_1252/thresholds/menu.csv" - }, - "1252_newSc_shrt2":{ - "cfg": "cfg/FBE_1252", - "rates": "out/2023-March-v0-baseline_NewScaling_TauJetMET_testshort_101112_FBE_1252/thresholds/menu.csv" - }, - - # "125_oldSc_lowstat":{ - # "cfg": "cfg/FBE_1252", - # "rates": "out/2023-March-v0-baseline_OldScaling_short_10to13_FBE_1252_oldscaling/thresholds/menu.csv", - # }, - # "125_newSc_lowstat":{ - # "cfg": "cfg/FBE_1252", - # "rates": "out/2023-March-v0-baseline_NewScaling_TauJetMET_testshort_101112_v2_FBE_1252/thresholds/menu.csv", - # }, - "125_newSc_1x2x3x_noMu":{ - "cfg": "cfg/FBE_1252", - "rates": "out/2023-March-v0-baseline_NewScaling_TauJetMET_1x2x3x_FBE_1252/thresholds/menu.csv", - }, - "125_newSc_3x_noMu":{ - "cfg": "cfg/FBE_1252", - "rates": "out/2023-March-v0-baseline_NewScaling_TauJetMET_short_3x_FBE_1252/thresholds/menu.csv", - }, -} -''' -''' -CFG_RATE_COMBOS = { - "125_newSc_3x_AllMu":{ - "cfg":"cfg/FBE_1252_onlyMu", - "rates": "out-newsc/2023-March-v0-baseline_NewScaling_TauJetMET_3x_withAllTkMu_FBE_1252_onlyMu/thresholds/menu.csv", - }, - "125_3x_allMu_fixChg":{ - "cfg":"cfg/FBE_1252_onlyMu", - "rates":"out/2023-March-v0-baseline_NewScaling_TauJetMET_3x_withAllTkMu_fixChg_FBE_1252_onlyMu/thresholds/menu.csv" - } -} -''' -CFG_RATE_COMBOS = { - "HistoJets":{ - "cfg":"cfg/FBE_1252_GTemu", - "rates": "out/GTemu_11seeds_allScalings_10x_FBE_1252_GTemu/thresholds/menu.csv", - }, - "SCJets":{ - "cfg":"cfg/FBE_1252_GTemu_SeededCone", - "rates": "out/GTemu_11seeds_allScalings_10x_FBE_1252_GTemu_SeededCone/thresholds/menu.csv", - }, - "SCjets (Barrel Sc)":{ - "cfg":"cfg/FBE_1252_GTemu_SeededCone_BarrelOnlySC", - "rates": "out/GTemu_11seeds_BarrelScalings_10x_FBE_1252_GTemu_SeededCone_BarrelOnlySC/thresholds/menu.csv", - }, - "HistoJets (Barrel Sc)":{ - "cfg":"cfg/FBE_1252_GTemu_histoJets_BarrelOnlySC", - "rates": "out/GTemu_11seeds_BarrelScalings_10x_FBE_1252_GTemu_histoJets_BarrelOnlySC/thresholds/menu.csv", - }, -} - -PATH_NAME_MAP = { - "L1_SingleTkMu": "Single TkMuon", - "L1_DoubleTkMu": "Double TkMuon", - "L1_DoubleTkMu9_SQ": "Double TkMuon 9 SQ", - "L1_SingleTkEle": "Single TkElectron", - "L1_SingleTkEleIso": "Single TkIsoElectron", - "L1_SingleTkPhoIso": "Single TkIsoPhoton", - "L1_TkEleIso_EG": "TkIsoElectron-StaEG", - "L1_DoubleTkEle": "Double TkElectron", - "L1_DoubleTkPhoIso": "Double TkIsoPhoton", - "L1_SinglePFTau": "Single CaloTau", - "L1_PFTau_PFTau": "Double CaloTau", - "L1_PFIsoTau_PFIsoTau": "Double PuppiTau", - "L1_PFIsoTau_TkMu": "PuppiTau-TkMuon", - "L1_TkEleIso_PFIsoTau": "TkIsoElectron-PuppiTau", - "L1_PFIsoTau_PFMet": "PuppiTau-PuppiMET", - "L1_SinglePfJet": "Single PuppiJet", - "L1_DoublePFJet_dEtaMax": "DoublePuppiJet", - "L1_PFHTT": "PuppiHT", - "L1_PFMHTT": "PuppiMHT", - "L1_PFMet": "PuppiMET", - "L1_tkMet": "TrackerMET", - "L1_PFHTT_QuadJet": "QuadPuppiJets-PuppiHT", - "L1_TkMu_TkEleIso": "TkMuon-TkIsoElectron", - "L1_TkMu_TkEle": "TkMuon-TkElectron", - "L1_TkEle_TkMu": "TkElectron-TkMuon", - "L1_TkMu_DoubleTkEle": "TkMuon-DoubleTkElectron", - "L1_TkMu_PfHTT": "TkMuon-PuppiHt", - "L1_TkMu_PfJet_dRMax_DoubleJet_dEtaMax": "TkMuon-PuppiJet-dRMax-DoublePuppiJet-dEtaMax", - "L1_DoubleTkEle_PFHTT": "DoubleTkEleElectron-PuppiHT", - "L1_TkEleIso_PFHTT": "TkIsoElectron-PuppiHT", - "L1_TkEle_PFJet_dRMin": "TkElectron-PuppiJet-dRMin", - "L1_DoublePFJet_MassMin": "Double PuppiJets Minv>620", - "L1_SingleEGEle": "Single StaEG", - "L1_DoubleEGEle": "Double StaEG", - "L1_DoubleTkMu0er1p5_SQ_OS_dR_Max1p4": "Double TkMuon 0er1p5_SQ_OS_dR_Max1p4", - "L1_DoubleTkMu4_SQ_OS_dR_Max1p2": "Double TkMuon 4_SQ_OS_dR_Max1p", - "L1_DoubleTkMu4p5er2p0_SQ_OS_Mass7to18": "Double TkMuon 4p5er2p0_SQ_OS_Mass7to18", - "L1_DoubleTkMu_PfHTT": "DoubleTkMuon-PuppiHT", - "L1_DoubleTkMu_PfJet_PfMet": "DoubleTkMuon-PuppiJet-PuppiETmiss", - "L1_DoubleTkMu_TkEle": "DoubleTkMuon-TkElectron", - "L1_TkMu_PfJet_PfMet": "TkMuon-PuppiJet-PuppiETmiss", - "L1_TripleTkMu": "Triple TkMuon", - "L1_TripleTkMu_5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9": "Triple TkMuon 5SQ_3SQ_0OQ_DoubleMu_5_3_SQ_OS_Mass_Max9", - "L1_TripleTkMu_5_3p5_2p5_OS_Mass_5to17": "Triple TkMuon 5_3p5_2p5_OS_Mass_5to17", - "total menu": "Total", -} - - -def parseArguments() -> dict: - """ - Parses command line arguments for 'cfg' - and 'rates' files and returns them. - """ - parser = argparse.ArgumentParser() - parser.add_argument('-c', '--cfg', default="", type=str, help='cfg file') - parser.add_argument('-r', '--rates', default="", type=str, help='csv file with rates') - args = parser.parse_args() - - if args.cfg and args.rates: - return {"Rates": - {"cfg": args.cfg, "rates": args.rates} - } - return CFG_RATE_COMBOS - - -class RateTablePrinter(): - - def __init__(self, cfg_rate_dict): - self.cfg_rate_dict = cfg_rate_dict - - def _pad(self, s, n_pad: int): - """ - Applies a padding of n_pad whitespaces - to the object s. s has to have a __str__ - method. - """ - s = str(s) - n_pad = n_pad - len(s) - return s + n_pad * ' ' + '|' - - def _getPaths(self, cfg_path: str): - """ - Parses the paths out of the cfg file - given as an argument. - """ - paths = [] - with open(cfg_path, 'r') as f: - paths = [l.split('::')[1].strip() for l in f if l.startswith("trigger")] - paths.append("total menu") - return paths - - def _getRates(self, rates_path: str, paths: list) -> dict: - """ - Returns the rates corresponding to the cfg paths. - """ - rate_dict = {} - with open(rates_path, 'r') as f: - for line in f: - path = re.search("^\w+(\smenu)?",line).group(0) - if path in paths: - #print(path) - pathrate = re.search("\d+.\d+$", line).group(0) - rate_dict[path] = float(pathrate) - return rate_dict - - def _printTable(self, paths_rates: dict): - """ - Prints paths and rates as a table. - """ - nested_list_of_paths = [list(x) for x in paths_rates.values()] - list_of_paths = list(dict.fromkeys(chain.from_iterable(nested_list_of_paths))) - object_names = list(map(lambda x: PATH_NAME_MAP[x], list_of_paths)) - - n_chars_first_col = max([len("L1 Trigger Seeds")] + list(map(lambda x: len(x), object_names))) + 2 - n_chars_other_col = max(list(map(lambda x: len(x), paths_rates.keys()))) + 2 - total_length = (n_chars_first_col - + n_chars_other_col * len(list(paths_rates.keys())) - + 2 * (len(paths_rates) + 2) - 1) - - # Print Header - print('-' * total_length) - rate_headings = [self._pad(x, n_chars_other_col) for x in paths_rates] - print('|', self._pad("L1 Trigger Seeds", n_chars_first_col), *rate_headings) - print('|' + '-' * (total_length - 2) + '|') - - # Print Body - list_of_paths.append(list_of_paths.pop(list_of_paths.index("total menu"))) - for path in list_of_paths: - if "total" in path: - print('-' * total_length) - - rate_numbers = [] - for rname in paths_rates: - try: - n = round(paths_rates[rname][path], 2) - except KeyError: - n = '-' - rate_numbers.append( - self._pad( - n, - n_chars_other_col - ) - ) - print('|', self._pad(PATH_NAME_MAP[path], n_chars_first_col), *rate_numbers) - totals_plus = [self._pad(float(x[:-1]) + 54, n_chars_other_col) for x in rate_numbers] - print('|', self._pad("Total + 54kHz", n_chars_first_col), *totals_plus) - - print('-' * total_length) - - def printRateTable(self): - paths_rates = { - rname: {} for rname in self.cfg_rate_dict.keys() - } - for rname, fpaths in self.cfg_rate_dict.items(): - paths = self._getPaths(fpaths["cfg"]) - rate_dict = self._getRates(fpaths["rates"], paths) - paths_rates[rname] = rate_dict - self._printTable(paths_rates) - - -if __name__ == "__main__": - cfg_rates_dict = parseArguments() - printer = RateTablePrinter(cfg_rates_dict) - printer.printRateTable() - diff --git a/rates/table/run.py b/rates/table/run.py deleted file mode 100644 index 3b2878dc..00000000 --- a/rates/table/run.py +++ /dev/null @@ -1,37 +0,0 @@ -import os, sys, ROOT - -##ROOT.gSystem.Load("libFWCoreFWLite.so") -##ROOT.gSystem.Load("libDataFormatsFWLite.so") -##ROOT.gSystem.Load("libDataFormatsPatCandidates.so") - -import optparse -from lib import master -from lib import functions - -parser = optparse.OptionParser(usage="%prog cfg [options]") -parser.add_option("-o", dest="outdir" , type="string" , default=None , help="Custom output directory") -parser.add_option("-v", dest="verbose", type="int" , default=2 , help="Set verbosity level") -parser.add_option("-M", dest="tiers" , action="append" , default=[] , help="Run a module by name") -parser.add_option("-X", dest="exclude", action="append" , default=[] , help="Exclude a module by name") -parser.add_option("-S", "--buffer" , dest="runBuffer" , action="store_true", default=False, help="Run the skim module") -parser.add_option("-T", "--thresholds", dest="runThresholds", action="store_true", default=False, help="Run the fixed thresholds module") -parser.add_option("-B", "--bandwidth" , dest="runBandwidth" , action="store_true", default=False, help="Run the fixed bandwidth module") -parser.add_option("-V", "--variations", dest="runVariations", action="store_true", default=False, help="Run the variation of the thresholds module") -parser.add_option("-f", "--force" , dest="force" , action="store_true", default=False, help="Rerun triggers even if they already have been processed") - -#(opts, args) = parser.parse_args() -opts_no_defaults = optparse.Values() -__, args = parser.parse_args(values=opts_no_defaults) -opts = optparse.Values(parser.get_default_values().__dict__) -opts._update_careful(opts_no_defaults.__dict__) - -if len(args)<1: - print("Please provide a config file!") - sys.exit() - -MM = master.Master(args, opts, opts_no_defaults) -MM.sequence() -MM.dump() - - - diff --git a/rates/table/tmp b/rates/table/tmp deleted file mode 100644 index 8b137891..00000000 --- a/rates/table/tmp +++ /dev/null @@ -1 +0,0 @@ -