Skip to content

LArSoft v10_29_00

Choose a tag to compare

@lgarren lgarren released this 23 Oct 04:39
· 9 commits to develop since this release

LArSoft v10_29_00 Release Notes

list of LArSoft releases

Download instructions for larsoft v10_29_00

Download instructions for just larsoftobj v10_07_00

Purpose

  • approved PRs

New features

  • LArSoft/larpandoracontent#107
    • New 2D to 3D matching algorithms.
    • The option to apply more aggressive stitching of cathode crossing tracks when those tracks are nearly parallel to the cathode.
    • More flexible gap crossing configuration for tracks based on the angle of incidence of the track.
    • Updates to metric calculations.
    • A change to CosmicRayTaggingTool variable visibility to allow ND derivation.
    • Removal of deprecated reclustering algorithms.
    • All features are opt-in, so no product changes are expected.
  • LArSoft/larpandora#57
    • Add support for particle ID directly within larpandora, along with a number of utility functions.
    • No product changes are expected.
  • LArSoft/larana#46
    • Including a new algorithm for OpHitFinder that can handle correction to a pulse's area due to electronics saturation. For this, a new parameter is needed to be passed on to the algorithm: the channel number. The new algorithm was based on the AlgoSiPM one. A tool is implemented and allows different setups in the experiment specific code.
    • An example of configured tool can be found here DUNE/duneopdet#153.
  • LArSoft/lardata#41
    • This PR consolidates the matching logic to be consistent with art::Event handle getters
      1. Bug fix: the pattern was ignored. The matcher builds its regular expressions from the candidate tag instead of the user's pattern: cpp std::regex label_re(!tag.label().empty() ? tag.label() : ".*"); // `tag` is the candidate so every tag matches itself and getManyByRegexTag returns all products of type T, whatever pattern is requested. The patterns are now taken from the user's tag.
      2. Consistency with art::Event handle getters. For a non-regex tag, e.getHandle<T>(input_tag) andlar::util::getManyByRegexTag<T>(e, input_tag) must return consistent results, i.e. the same handle. Even with the pattern fixed, this is not the case:
        - an empty instance name is treated as "any instance", while for art it is a value like any other;
        - products from all processes are returned, while art returns the one from the most recent process.
    • Selection logic
      1. Pattern matching. Each tag field is a std::regex that must match the whole field (gaushit does not match gaushitStage2):

        • label and instance are matched as given: an empty pattern matches only an empty value (use .* for any instance);
        • an empty process means "any process".
          
      2. Newest matching process. art returns the matching tags grouped by process, newest first. Only the products of the first process with a valid matching product are returned.

      • This is the rule art applies in getHandle (resolve_unique_product: "The first process with a
        match wins."
        ), so for a literal tag the result is either {P}, where P is the product e.getHandle<T>(tag) returns, or empty when that handle is invalid.
    • Examples
      • Event history reco1 → reco2 (newest), products gaushit::reco1, gaushit:uncalib:reco1,gaushitStage2::reco1, gaushit::reco2, fasthit::reco2:
tag result
gaushit gaushit::reco2, same as e.getHandle<T>("gaushit")
gaushit.*::reco1 gaushit::reco1, gaushitStage2::reco1
gaushit.* gaushit::reco2 (gaushitStage2 only exists in reco1)
gaushit:.*:reco1 gaushit::reco1, gaushit:uncalib:reco1
gaushit:uncalib gaushit:uncalib:reco1 (newest process with a match)
  • Implementation
    • detail::RegexTagMatcher is replaced by detail::RegexTagSelector, an art::SelectorBase passed to art::Event::getInputTags<T>(selector), so the filtering happens inside art. It takes three patterns (label, instance, process), compiled once at construction.
    • getManyByRegexTag maps an empty process to .* and keeps only the newest matching process.
    • gallery::Event is no longer supported: its getInputTags() takes no selector and it has no getHandle().
    • New Boost unit test test/ArtDataHelper/getManyByRegexTag_test.cc, with a mock event that, like
      art, returns the tags grouped by process, newest first, and one case per documented example.
  • Impact on existing users
    • Because of the bug fix, callers now receive only the products matching their pattern instead ofevery product of type T. Callers relying on an empty instance meaning "any instance", or on products from older processes, must update their tags (e.g. caldata → caldata:.*). Known users: GausHitFinder_module.cc (larreco), TriggerAnaTree_module.cc and TriggerPrimitiveMakerTPC_module.cc (dunetrigger).

Bug fixes

Updated dependencies

Change List

larsoft v10_29_00

lareventdisplay v10_01_14

larexamples v10_02_09

larpandora v10_08_00

larsimrad v10_01_13

larsimdnn v10_02_12

larrecodnn v10_05_06

larwirecell v10_04_06

larana v10_04_00

larreco v10_07_02

larsim v10_23_02

larg4 v10_20_09

larevt v10_00_25

lardata v10_02_00

larcore v10_00_07

larpandoracontent v05_08_00

larsoftobj v10_07_00

larvecutils v09_04_04

lardataobj v10_05_03

lardataalg v10_03_00

larcorealg v10_00_06

larcoreobj v10_00_03

larfinder v09_00_06

larbatch v01_62_00

larutils v1_29_10