Jet Substructure

Jet substructure techniques provide powerful tools for analyzing and refining the properties of jets. Below are some of the key jet substructure functions, that are available.

Mass Drop Tagging

mass_drop(jet::PseudoJet, clusterseq::ClusterSequence, tag::MassDropTagger) -> PseudoJet

The mass_drop function identifies subjets in a jet that pass the mass drop tagging condition. To use the mass_drop function:

  • Configure the MassDropTagger with parameters tailored to the expected mass drop and distance thresholds for analysis.
tagger = MassDropTagger(mu=0.67, y=0.09)
  • Apply the mass_drop function to the jet and its clustering sequence.
tagged_jet = mass_drop(jet, clusterseq, tagger)
  • If the jet is tagged successfully, the function returns the identified subjet. Else it returns PseudoJet(0.0, 0.0, 0.0, 0.0).

Soft Drop Tagging

soft_drop(jet::PseudoJet, clusterseq::ClusterSequence, tag::SoftDropTagger) -> PseudoJet

The soft_drop function applies soft-drop grooming to remove soft, wide-angle radiation from jets. It reclusters the jet with a specified radius and clustering method, iteratively checking the soft-drop condition on subjets. To use the soft_drop function:

  • Construct the SoftDropTagger by defining the parameters for the grooming process, such as the energy fraction (zcut) and angular exponent (b)
tagger = SoftDropTagger(zcut=0.1, b=2.0)

By default, the reclustering radius is set to 1.0 which can be modified by defing the tagger object as

tagger = SoftDropTagger(zcut=0.1, b=2.0, cluster_rad=0.4)
  • Apply the soft_drop function to the jet and its clustering sequence.
tagged_jet = soft_drop(jet, clusterseq, tagger)
  • If the jet is tagged successfully, the function returns the identified subjet. Else it returns nothing.

Jet Filtering

jet_filtering(jet::PseudoJet, clusterseq::ClusterSequence, filter::JetFilter) -> PseudoJet

The jet_filtering function filters a jet to retain only the hardest subjets based on a specified radius and number. To use the function:

  • Set the radius for subjet clustering and the number of hardest subjets to retain in a JetFilter method.
filter = JetFilter(filter_radius=0.3, num_hardest_jets=3)
  • Apply the jet_filtering function to refine the jet.
filtered_jet = jet_filtering(jet, clusterseq, filter)
  • The function returns the filtered jet that retains only the most significant subjets, reducing noise.

Jet Trimming

jet_trimming(jet::PseudoJet, clusterseq::ClusterSequence, trim::JetTrim) -> PseudoJet

The jet_trimming function trims a jet by removing subjets with transverse momentum below a specified fraction of the main jet's momentum. This method cleans up jets by removing soft particles. To use this function:

  • Configure the trimming radius and momentum fraction threshold in JetTrim
trim = JetTrim(trim_radius=0.3, trim_fraction=0.3, recluster_method=JetAlgorithm.CA)

It is to be noted that the jet_trimming function reclusters the constituents of the jet using either C/A or kT algorithm, which needs to be specified.

  • Apply the jet_trimming function to clean the jet.
trimmed_jet = jet_trimming(jet, clusterseq, trim)
  • The function returns the trimmed jet.

For a more detailed guide to use these substructure modules, one can refer to the provided examples in the examples/substructure directory.