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.
EecTopMass.DuplicatedTriplets Type
struct DuplicatedTriplets{I}Iterator for triplets including duplicated entries.
sourceEecTopMass.EecCalcConfig Type
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_nameto add the new field into the string serialization, which is used for the file name of results.
Fields
calc_id::String: name for this calculationinput_ntuple_filenames::Vector{String}: filename/path of input ntuplesinput_ntuple_name::Union{Nothing, String}: input ntuple name (description)pt_selection::IntervalSets.Interval{L, R, PT} where {L, R, PT<:Number}: event pT_jet selectioncharged_only::Bool: use charged constituents onlyungroomed::Bool: read the ungroomed large-R truth jets (truthjet_ungroomed_*) instead of the SoftDrop-groomed onespt_bins::AbstractRange{PT} where PT<:Number:bins custom_jet_radius::Union{Nothing, Float64}: Custom jet radius if used
EecTopMass.EventMetaInfoView Type
BranchView for event metadata, like runNumber and eventNumber.
EecTopMass.IndexDict Type
Dict for (runNumber, eventNumber). See create_index for more details.
EecTopMass.SmallRJetLabel Type
primitive type SmallRJetLabel <: Enum{Int32} 32Label for constituents.
sourceEecTopMass.TruthJetFields Type
Property names and return types for TruthJetView. See BranchView.
EecTopMass.TruthJetView Type
Large-R truth jet view (:truthjet for SoftDrop-groomed, :truthjet_ungroomed for ungroomed).
EecTopMass._event_and_jet_selection Method
_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-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.
EecTopMass.calc_threepoint_correlation_entries Method
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.
EecTopMass.calc_twopoint_correlation_entry Method
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.
EecTopMass.config_name Method
config_name(config::EecTopMass.EecCalcConfig) -> StringFormated string for a given config.
EecTopMass.create_index Method
Create a index of (runNumber, eventNumber) => (file_id, row_id) for given root files.
EecTopMass.create_index Method
Create a index of (runNumber, eventNumber) => (file_id, row_id) for given event tables.
EecTopMass.duplicated_triplets Method
duplicated_triplets(xs) -> EecTopMass.DuplicatedTripletsConstructor for DuplicatedTriplets.
EecTopMass.event_and_jet_selection Method
event_and_jet_selection(
event::UnROOT.LazyEvent,
calc_config::EecTopMass.EecCalcConfig
) -> Union{Nothing, Tuple{Any, Any}}Select event and jet using groomed jet.
sourceEecTopMass.event_and_jet_selection_truth Method
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.
sourceEecTopMass.event_and_jet_selection_ungroomed Method
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.
EecTopMass.fit Method
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.
sourceEecTopMass.hadronic_w Method
hadronic_w(
event
) -> LorentzVectorHEP.LorentzVectorCyl{Float64}Truth W boson (as a LorentzVectorCyl) that decayed hadronically in event.
EecTopMass.label_jet_constituents Method
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.
EecTopMass.process_event_with_truth Method
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.
EecTopMass.process_event_with_ungroomed_truth Method
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.
EecTopMass.process_jet Method
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.
EecTopMass.pt_slice_hists Method
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.
EecTopMass.search_for_event Method
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
EecTopMass.ζ_1_2 Method
ζ_1_2(η_1, ϕ_1, η_2, ϕ_2) -> AnyCalculate angle parameter ζ between two directions.
EecTopMass.Fitting.fit_eec_peak_vs_pt Method
fit_eec_peak_vs_pt(
pt_selection::AbstractVector{<:IntervalSets.Interval},
eec_normal::AbstractVector{<:FHist.Hist1D},
fit_peak;
mass
)Argument
fit_peak: Functionrow -> peak_ζwhererowis a element of [Tables.rows] with columnspt_selectionandeec_normal. Should return peak position.
EecTopMass.Plotting Module
Plotting function module.
Plot functions must have following signature:
Arguments
eec_hists: NamedTuple of histogramsfit_result: NamedTuple of fit results
Keyword arguments
axis:Axisattributes
EecTopMass.Plotting.e3c_top_normal_components Method
e3c_top_normal_components(eec_hists; tops_only, axis) -> AnyIf tops_only is true, then only top 5 entries are plotted and others are summarized into a single category.
EecTopMass.Plotting.e3c_w_normal_components Method
e3c_w_normal_components(eec_hists; mode, axis) -> AnyArgument
Key word
mode::all,:tops_only,:two_vs_three
EecTopMass.Plotting.pt_sliced_hists_with_components Method
pt_sliced_hists_with_components(
hist_2d_with_components
) -> AnyMake (key => 2d) to pt-sliced (pt => (key => 2d)) hists.