Skip to content

Top Mass Measurement with Energy Correlator ​

Docs ​

EecTopMass.EVENT_DISPLAY_CALC_CONFIG Constant

Config used only to drive _event_and_jet_selection for event display purposes; only pt_selection is actually used by the selection logic.

source
EecTopMass.DuplicatedTriplets Type
julia
struct DuplicatedTriplets{I}

Iterator for triplets including duplicated entries.

source
EecTopMass.EecCalcConfig Type
julia
struct EecCalcConfig{L, R, PT<:Number, PTB<:AbstractRange{PT<:Number}}

Calculation config.

Update guide.

Some notes for those who updates this config type.

  • Set default value for new field. The default value must be one which have been assumed so far.

  • Also update config_name to add the new field into the string serialization, which is used for the file name of results.

Fields

  • calc_id::String: name for this calculation

  • input_ntuple_filenames::Vector{String}: filename/path of input ntuples

  • input_ntuple_name::Union{Nothing, String}: input ntuple name (description)

  • pt_selection::IntervalSets.Interval{L, R, PT} where {L, R, PT<:Number}: event pT_jet selection

  • charged_only::Bool: use charged constituents only

  • ungroomed::Bool: read the ungroomed large-R truth jets (truthjet_ungroomed_*) instead of the SoftDrop-groomed ones

  • pt_bins::AbstractRange{PT} where PT<:Number: bins

  • custom_jet_radius::Union{Nothing, Float64}: Custom jet radius if used

source
EecTopMass.EventMetaInfoView Type

BranchView for event metadata, like runNumber and eventNumber.

source
EecTopMass.IndexDict Type

Dict for (runNumber, eventNumber). See create_index for more details.

source
EecTopMass.SmallRJetLabel Type
julia
primitive type SmallRJetLabel <: Enum{Int32} 32

Label for constituents.

source
EecTopMass.TruthJetFields Type

Property names and return types for TruthJetView. See BranchView.

source
EecTopMass.TruthJetView Type

Large-R truth jet view (:truthjet for SoftDrop-groomed, :truthjet_ungroomed for ungroomed).

source
EecTopMass.TruthJetView Method

Constructor.

source
EecTopMass.TruthParticleView Method

For example of top, P is t or tbar.

source
EecTopMass.TruthSmallJetFields Type

Property names and return types for TruthSmallJetView.

source
EecTopMass.TruthSmallJetView Type

Small-R truth jet view (:truthsmalljet).

source
EecTopMass._event_and_jet_selection Method
julia
_event_and_jet_selection(
    _truthjet_trait::EecTopMass.BranchViews.HasBranchSchema{@NamedTuple{pt::SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, eta::SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, phi::SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, m::SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, ghostBHadronsFinalCount::SubArray{Int32, 1, Vector{Int32}, Tuple{UnitRange{Int64}}, true}, ghostTQuarksFinalCount::SubArray{Int32, 1, Vector{Int32}, Tuple{UnitRange{Int64}}, true}, constituent_pt::SubArray{Vector{Float64}, 1, Vector{Vector{Float64}}, Tuple{UnitRange{Int64}}, true}, constituent_eta::SubArray{Vector{Float64}, 1, Vector{Vector{Float64}}, Tuple{UnitRange{Int64}}, true}, constituent_phi::SubArray{Vector{Float64}, 1, Vector{Vector{Float64}}, Tuple{UnitRange{Int64}}, true}, constituent_pdgId::SubArray{Vector{Int32}, 1, Vector{Vector{Int32}}, Tuple{UnitRange{Int64}}, true}}},
    event,
    calc_config::EecTopMass.EecCalcConfig,
    _truthjet_prefix::Val{P}
) -> Union{Nothing, Tuple{Any, Any}}

Select the highest- jet in truthjet (a TruthJetView) with exactly one ghost-matched top quark and one ghost-matched b hadron, within ΔR_W_HADDECAY of W_haddecay and inside calc_config.pt_selection. Returns (pt_jet, id_jet) or nothing.

source
EecTopMass.calc_threepoint_correlation_entries Method
julia
calc_threepoint_correlation_entries(
    constituents_η::Vector{Float64},
    constituents_ϕ::Vector{Float64},
    constituents_pt::Vector{Float64},
    pt_jet::Float64
) -> Base.Generator{EecTopMass.DuplicatedTriplets{Base.OneTo{Int64}}, EecTopMass.var"#calc_threepoint_correlation_entries##0#calc_threepoint_correlation_entries##1"{Vector{Float64}, Vector{Float64}, Vector{Float64}, Float64}}

Returns an iterator of E3cEntry.

source
EecTopMass.calc_twopoint_correlation_entry Method
julia
calc_twopoint_correlation_entry(
    constituents_η::Vector{Float64},
    constituents_ϕ::Vector{Float64},
    constituents_pt::Vector{Float64},
    pt_jet::Float64
) -> Base.Generator{IterTools.StaticSizeBinomial{2, Base.OneTo{Int64}}, EecTopMass.var"#calc_twopoint_correlation_entry##0#calc_twopoint_correlation_entry##1"{Vector{Float64}, Vector{Float64}, Vector{Float64}, Float64}}

Returns an iterator of E2cEntry.

source
EecTopMass.compare_jets Method

Compare R=1.0 jet and custom R=1.5 jet kinematics.

source
EecTopMass.config_name Method
julia
config_name(config::EecTopMass.EecCalcConfig) -> String

Formated string for a given config.

source
EecTopMass.create_index Method

Create a index of (runNumber, eventNumber) => (file_id, row_id) for given root files.

source
EecTopMass.create_index Method

Create a index of (runNumber, eventNumber) => (file_id, row_id) for given event tables.

source
EecTopMass.duplicated_triplets Method
julia
duplicated_triplets(xs) -> EecTopMass.DuplicatedTriplets

Constructor for DuplicatedTriplets.

source
EecTopMass.event_and_jet_selection Method
julia
event_and_jet_selection(
    event::UnROOT.LazyEvent,
    calc_config::EecTopMass.EecCalcConfig
) -> Union{Nothing, Tuple{Any, Any}}

Select event and jet using groomed jet.

source
EecTopMass.event_and_jet_selection_truth Method
julia
event_and_jet_selection_truth(
    event::UnROOT.LazyEvent,
    calc_config::EecTopMass.EecCalcConfig,
    jet_prefix::Symbol
) -> Union{Nothing, Tuple{Any, Any}}

Select event and jet based on truth particle, not using jets.

source
EecTopMass.event_and_jet_selection_ungroomed Method
julia
event_and_jet_selection_ungroomed(
    event::UnROOT.LazyEvent,
    calc_config::EecTopMass.EecCalcConfig
) -> Union{Nothing, Tuple{Any, Any}}

Same as event_and_jet_selection, but for the ungroomed AntiKt10TruthDressedWZJets collection.

source
EecTopMass.fit Method
julia
fit(
    jld_filepath::AbstractString
) -> NamedTuple{(:e3c_t_fit, :e3c_e2c_w_fit), <:Tuple{Vector{Union{Nothing, @NamedTuple{fitted_poly::Polynomials.Polynomial{Float64, :x}, peak_ζ::Float64}}}, Vector}}

Execute fits.

source
EecTopMass.hadronic_w Method
julia
hadronic_w(
    event
) -> LorentzVectorHEP.LorentzVectorCyl{Float64}

Truth W boson (as a LorentzVectorCyl) that decayed hadronically in event.

source
EecTopMass.label_jet_constituents Method
julia
label_jet_constituents(
    _truth_largerjet_trait::EecTopMass.BranchViews.HasBranchSchema{@NamedTuple{pt::SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, eta::SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, phi::SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, m::SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, ghostBHadronsFinalCount::SubArray{Int32, 1, Vector{Int32}, Tuple{UnitRange{Int64}}, true}, ghostTQuarksFinalCount::SubArray{Int32, 1, Vector{Int32}, Tuple{UnitRange{Int64}}, true}, constituent_pt::SubArray{Vector{Float64}, 1, Vector{Vector{Float64}}, Tuple{UnitRange{Int64}}, true}, constituent_eta::SubArray{Vector{Float64}, 1, Vector{Vector{Float64}}, Tuple{UnitRange{Int64}}, true}, constituent_phi::SubArray{Vector{Float64}, 1, Vector{Vector{Float64}}, Tuple{UnitRange{Int64}}, true}, constituent_pdgId::SubArray{Vector{Int32}, 1, Vector{Vector{Int32}}, Tuple{UnitRange{Int64}}, true}}},
    _truth_smallrjet_trait::EecTopMass.BranchViews.HasBranchSchema{@NamedTuple{eta::SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, phi::SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, partonTruthLabelID::SubArray{Int32, 1, Vector{Int32}, Tuple{UnitRange{Int64}}, true}, ghostBHadronsFinalCount::SubArray{Int32, 1, Vector{Int32}, Tuple{UnitRange{Int64}}, true}, ttbarDecayTopologyLabelD::SubArray{Int32, 1, Vector{Int32}, Tuple{UnitRange{Int64}}, true}, constituent_pt::SubArray{Vector{Float64}, 1, Vector{Vector{Float64}}, Tuple{UnitRange{Int64}}, true}, constituent_eta::SubArray{Vector{Float64}, 1, Vector{Vector{Float64}}, Tuple{UnitRange{Int64}}, true}, constituent_phi::SubArray{Vector{Float64}, 1, Vector{Vector{Float64}}, Tuple{UnitRange{Int64}}, true}}},
    event::UnROOT.LazyEvent,
    jet_id::Int64,
    _::Val{P}
) -> Vector{EecTopMass.SmallRJetLabel}

Give labels SmallRJetLabel to constituent of large-R truth jet at index jet_id.

source
EecTopMass.process_event_with_truth Method
julia
process_event_with_truth(
    event::UnROOT.LazyEvent,
    calc_config::EecTopMass.EecCalcConfig
) -> Union{Tuple{Base.Generator{EecTopMass.DuplicatedTriplets{Base.OneTo{Int64}}, EecTopMass.var"#calc_threepoint_correlation_entries##0#calc_threepoint_correlation_entries##1"{Vector{Float64}, Vector{Float64}, Vector{Float64}, Float64}}, Base.Generator{IterTools.StaticSizeBinomial{2, Base.OneTo{Int64}}, EecTopMass.var"#calc_twopoint_correlation_entry##0#calc_twopoint_correlation_entry##1"{Vector{Float64}, Vector{Float64}, Vector{Float64}, Float64}}}, Tuple{Vector{@NamedTuple{ζ::Float64, pt_product::Float64, ζ_S::Float64, ζ_A::Float64, pt_jet::Float64}}, Vector{@NamedTuple{ζ::Float64, pt_product::Float64, pt_jet::Float64}}}}

Calculate three point energy correlator entries (not integrated) from a given event for top quark peak extraction.

source
EecTopMass.process_event_with_ungroomed_truth Method
julia
process_event_with_ungroomed_truth(
    event::UnROOT.LazyEvent,
    calc_config::EecTopMass.EecCalcConfig
) -> Union{Tuple{Base.Generator{EecTopMass.DuplicatedTriplets{Base.OneTo{Int64}}, EecTopMass.var"#calc_threepoint_correlation_entries##0#calc_threepoint_correlation_entries##1"{Vector{Float64}, Vector{Float64}, Vector{Float64}, Float64}}, Base.Generator{IterTools.StaticSizeBinomial{2, Base.OneTo{Int64}}, EecTopMass.var"#calc_twopoint_correlation_entry##0#calc_twopoint_correlation_entry##1"{Vector{Float64}, Vector{Float64}, Vector{Float64}, Float64}}}, Tuple{Vector{@NamedTuple{ζ::Float64, pt_product::Float64, ζ_S::Float64, ζ_A::Float64, pt_jet::Float64}}, Vector{@NamedTuple{ζ::Float64, pt_product::Float64, pt_jet::Float64}}}}

Same as process_event_with_truth, but for the ungroomed AntiKt10TruthDressedWZJets collection.

source
EecTopMass.process_jet Method
julia
process_jet(
    truthjet::EecTopMass.BranchViews.BranchView{P, @NamedTuple{pt::SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, eta::SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, phi::SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, m::SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, ghostBHadronsFinalCount::SubArray{Int32, 1, Vector{Int32}, Tuple{UnitRange{Int64}}, true}, ghostTQuarksFinalCount::SubArray{Int32, 1, Vector{Int32}, Tuple{UnitRange{Int64}}, true}, constituent_pt::SubArray{Vector{Float64}, 1, Vector{Vector{Float64}}, Tuple{UnitRange{Int64}}, true}, constituent_eta::SubArray{Vector{Float64}, 1, Vector{Vector{Float64}}, Tuple{UnitRange{Int64}}, true}, constituent_phi::SubArray{Vector{Float64}, 1, Vector{Vector{Float64}}, Tuple{UnitRange{Int64}}, true}, constituent_pdgId::SubArray{Vector{Int32}, 1, Vector{Vector{Int32}}, Tuple{UnitRange{Int64}}, true}}} where P,
    id_jet::Int64,
    pt_jet::Float64,
    calc_config::EecTopMass.EecCalcConfig
) -> Tuple{Base.Generator{EecTopMass.DuplicatedTriplets{Base.OneTo{Int64}}, EecTopMass.var"#calc_threepoint_correlation_entries##0#calc_threepoint_correlation_entries##1"{Vector{Float64}, Vector{Float64}, Vector{Float64}, Float64}}, Base.Generator{IterTools.StaticSizeBinomial{2, Base.OneTo{Int64}}, EecTopMass.var"#calc_twopoint_correlation_entry##0#calc_twopoint_correlation_entry##1"{Vector{Float64}, Vector{Float64}, Vector{Float64}, Float64}}}

Compute E3C/E2C entries for jet id_jet (at pt_jet), using its charged constituents only if calc_config.charged_only.

source
EecTopMass.pt_slice_hists Method
julia
pt_slice_hists(
    h::FHist.Hist2D
) -> Base.Generator{IterTools.Partition{Vector{Float64}, 2, 1}, F} where F<:(EecTopMass.var"#pt_slice_hists##0#pt_slice_hists##1"{FHist.Hist2D{T}} where T<:Real)

Generate iterator of (hist, (pt_low, pt_high)) where hist is a single pt-bin slice of 2d hist.

source
EecTopMass.search_for_event Method
julia
search_for_event(
    run_number,
    event_number,
    event_tables
) -> Union{Nothing, Tuple{Int64, Int64}}

Search for an event with run_number and event_number from event_tables. event_tables should be a Tables.LazyTable.

Note

Use create_index when you call this multiple times. It's while calling this times is .

source
EecTopMass.ζ_1_2 Method
julia
ζ_1_2(η_1, ϕ_1, η_2, ϕ_2) -> Any

Calculate angle parameter ζ between two directions.

source
EecTopMass.Fitting.fit_eec_peak_vs_pt Method
julia
fit_eec_peak_vs_pt(
    pt_selection::AbstractVector{<:IntervalSets.Interval},
    eec_normal::AbstractVector{<:FHist.Hist1D},
    fit_peak;
    mass
)

Argument

  • fit_peak: Function row -> peak_ζ where row is a element of [Tables.rows] with columns pt_selection and eec_normal. Should return peak position.
source
EecTopMass.Plotting Module

Plotting function module.

Plot functions must have following signature:

  • Arguments

    • eec_hists: NamedTuple of histograms

    • fit_result: NamedTuple of fit results

  • Keyword arguments

    • axis: Axis attributes
source
EecTopMass.Plotting.e3c_top_normal_components Method
julia
e3c_top_normal_components(eec_hists; tops_only, axis) -> Any

If tops_only is true, then only top 5 entries are plotted and others are summarized into a single category.

source
EecTopMass.Plotting.e3c_w_normal_components Method
julia
e3c_w_normal_components(eec_hists; mode, axis) -> Any

Argument

Key word

  • mode: :all, :tops_only, :two_vs_three
source
EecTopMass.Plotting.pt_sliced_hists_with_components Method
julia
pt_sliced_hists_with_components(
    hist_2d_with_components
) -> Any

Make (key => 2d) to pt-sliced (pt => (key => 2d)) hists.

source

Contents ​