cms-l1-dpg / Phase2-L1MenuTools

This repository contains the 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.
3 stars 10 forks source link

Make option to do full matching+trigger efficiency plots #82

Open artlbv opened 3 months ago

artlbv commented 3 months ago

As this always comes up during the reviews, we need to add the possibility to produce "proper" trigger efficiency plots, which are essentially matching + trigger , i.e. the efficiency of matching a gen/ref object to a L1 object passing a certain threshold.

I suggest to produce these directly from the existing trigger plot configs, i.e. adding these plots to the trigger-only efficiency plots.

@danielhundhausen can you look into this?

danielhundhausen commented 1 month ago

Is this something that needs development on the code or is this "just" config writing? Maybe something @LukasEbeling can do to gain familiarity with the code?

artlbv commented 1 month ago

Not really config writing: I was thinking we could remove the need for separate matching and trigger configs -> and just add an option to do the trigger plot too.

Basically I would like to define 1 config e.g. Electron_Barrel, that would produce (selectable) three types of plots:

  1. Matching efficiency
  2. Trigger efficiency (as now i.e. after matching)
  3. "Proper" trigger efficiency -> matching+trigger (pt>x) efficiency combined.

There is not need to have three configs imo. I think you have the better overview Daniel, so I let you decide how to implement that best.

danielhundhausen commented 1 month ago

Just to understand what we're talking about:

matching

ElectronsMatchingEndcap:
  sample: DYLL_M50
  version: V44nano
  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

trigger efficiency

ElectronsTriggerEndcap:
  sample: DYLL_M50
  version: V44nano
  match_test_to_ref: False
  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 > <threshold>$ GeV)"
  binning:
    min: 0
    max: 100
    step: 1.5

proper trigger efficiency

ElectronsTriggerEndcap:
  sample: DYLL_M50
  version: V44nano
  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 > <threshold>$ GeV)"
  binning:
    min: 0
    max: 100
    step: 1.5

Do you suggest leaving the plot definitions as they are and just putting them all in one file? In that case the feature would be to implement different command options that specify which plot you want. Or do you suggest merging the three Plot configs blocks into one, e.g. called ElectronEndcap and then modifying the config dynamically to match specified case in the command (e.g. matching)?