Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updating branch #1

Closed

Conversation

ssdetlab
Copy link
Owner

@ssdetlab ssdetlab commented Nov 3, 2024

No description provided.

ssdetlab and others added 30 commits October 18, 2024 08:59
Adding json converter for the different track parameters types. The
converter follows the pattern outlined in [nlohmann::json
documentation](https://json.nlohmann.me/features/arbitrary_types/#how-can-i-use-get-for-non-default-constructiblenon-copyable-types),
rather than the one present in the codebase due to the a) track
parameters types not being default constructible, b) use cases connected
to the grid-of-of-track-parameters conversion.

To keep the converter to one implementation of the json serializer, the
liberty was taken to add one more constructor to the
`FreeTrackParameters`. The `GridJsonConverter` code was modified a bit
to be able to handle non-default constructible types.

Header for the track parameters json converter in
`GridJsonConverter.hpp` is required for the grid-of-of-track-parameters
conversion to be possible by the `nlohmann::json` standard. As a side
note, all the types in the framework that have `to_json`/`from_json`
overloaded can have grid-of-type json conversion implemented for free,
if the respective headers are added to the `GridJsonConverter.hpp`.

---------

Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
This adds an option that should disable the warnings appearing in the GSF in a meaningful way...

Worksaround but does not solve #3738
This (somehow) fixes a faulty `-Wnull-dereference` case in GCC 11
…3758)

With gcc-14, the following compilation failure is reported:
```
     438    In file included from /home/wdconinc/git/acts/Core/include/Acts/Seeding/HoughTransformUtils.hpp:374,
     439                     from /home/wdconinc/git/acts/Examples/Algorithms/TrackFinding/include/ActsExamples/TrackFinding/MuonHoughSeeder.hpp:12,
     440                     from /home/wdconinc/git/acts/Examples/Algorithms/TrackFinding/src/MuonHoughSeeder.cpp:9:
     441    /home/wdconinc/git/acts/Core/include/Acts/Seeding/HoughTransformUtils.ipp: In member function 'std::vector<Acts::HoughTransformUtils::PeakFinders::IslandsAroundMax<identifier_t>::Maximum> Acts::HoughTransformUtils::PeakFind
            ers::IslandsAroundMax<identifier_t>::findPeaks(const Acts::HoughTransformUtils::HoughPlane<identifier_t>&, const Acts::HoughTransformUtils::HoughAxisRanges&)':
  >> 442    /home/wdconinc/git/acts/Core/include/Acts/Seeding/HoughTransformUtils.ipp:224:8: error: 'sort' is not a member of 'std'; did you mean 'qsort'?
     443      224 |   std::sort(candidates.begin(), candidates.end(),
     444          |        ^~~~
     445          |        qsort
  >> 446    make[2]: *** [Examples/Algorithms/TrackFinding/CMakeFiles/ActsExamplesTrackFinding.dir/build.make:177: Examples/Algorithms/TrackFinding/CMakeFiles/ActsExamplesTrackFinding.dir/src/MuonHoughSeeder.cpp.o] Error 1
     447    make[2]: *** Waiting for unfinished jobs....
```
This appears to be due to a missing `#include <algorithm>` before the use of `std::sort` in the `.ipp` file. This PR adds the `algorithm` header to the `.hpp` file.
Our ROOT writers are quite scattered and I would like to group them back together.
- remove `TruthSeedRanges` as this a duplication of `ParticleSelector `
- enhance `ParticleSelector` by also input/output final particle selections which are necessary to access the number of hits
- raise some pT cuts to the usual 1 GeV
- handle downstream changes

blocked by
- #3744
The Detray material conversion was broken due to missing locality of the index map.

It renames the cache object to simply `Cache` since it does more now, and through the namespace it gets clear that it is the conversion cache.
Some data seem to be not present in every root file being around...
)

I noticed a few cases where the angles escape their valid range after a KF update / smoothing. We can avoid that by normalizing the angles back to their range after update.

In principle other params like local position and momentum are also constrained and might need checking+fixing but for those I am not sure how to do it right now.
Adding `TrackFitterPerformanceWriter` to the track finding jobs in addition to `CKFPerformanceWriter`.

blocked by 
- #3742
…3745)

Similar to #3737. I think performance writer should provide plots we can look at while the `VertexPerformanceWriter` is actually only writing NTuples.
I usually expect some accumulated plots in the performance writers we can directly look at. At the same time the `CKFPerformanceWriter` is generic enough to write the performance for any finder.

Therefore I propose to
- Rename `TrackFinderPerformanceWriter` to `TrackFinderNTupleWriter` (this pr)
- (and later) Rename `CKFPerformanceWriter` to `TrackFinderPerformanceWriter`

blocked by 
- #3742
Followup of #3737

I usually expect some accumulated plots in the performance writers we can directly look at. At the same time the `CKFPerformanceWriter` is generic enough to write the performance for any finder.

Therefore I propose to
- Rename `TrackFinderPerformanceWriter` to `TrackFinderNTupleWriter` (#3737)
- Rename `CKFPerformanceWriter` to `TrackFinderPerformanceWriter` (this pr)

blocked by 
- #3742
- #3737
Cleaning up and generalizing the interface of the `PathSeeder`. Adding a concept to constrain the grid type during the instantiation.
- reset all the `ccache` caches by bumping `CCACHE_KEY_SUFFIX` up to `r2`
- rework key naming scheme
  - GitHub `ccache-${{ runner.os  }}-${{ github.job }}-${{ env.CCACHE_KEY_SUFFIX }}-${{ github.sha }}`
  - GitLab `ccache-${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}-${CCACHE_KEY_SUFFIX}`
- GitLab: restore cache from main branch if there is none for the current branch
It seems that the current implementation is prone to symbol hiding. I worked around this by inserting another non-templated layer in the class hierarchy which can do the type check more reliably.

The origin of the problem could be `-fvisibility=hidden` being toggled on all of my `ActsPythonBindings` compilation commands. It might be that this is another case where this flag leaks in via CMake from another library. I also did not want to change the visibility of the symbol manually as this would require some macros to be compiler agnostic.

Some resources
- https://www.qt.io/blog/quality-assurance/one-way-dynamic_cast-across-library-boundaries-can-fail-and-how-to-fix-it
- https://developers.redhat.com/articles/2021/10/27/compiler-option-hidden-visibility-and-weak-symbol-walk-bar#
This adds an additional tracking efficiency plot vs `z0`. It was useful for some studies that I was doing and it may be useful also for others.
Adds central conversion between $\eta$ and $\theta$
These 2 files don't exist anymore, so we don't need them anymore in the exclude-list.
- unit tests
- implement `addBoundParameters`
- revisit `subtractBoundParameters`
Terminology:

- "Navigation delegate": the function that is registered with a tracking volume. In principle, this can be anything
- "Navigation policy": the object that is registered with the tracking volume. It contains a method that is connected to the "navigation delegate". It has extra methods
- "Navigation policy factory": To delay construction of the actual policy object **until after** the volume is fully sized and has all of its internal structure registered, the blueprint tree only contains *navigation policy factories*. This is configurable. During construction, the factory is applied to volumes, and produces a policy that is registered with the volume. This is called "navigation policy factory" from a conceptual point of view.
- "MultiNavigationPolicy": chains together multiple policies in a sort of composition. You can have one policy that only deals with portals, one for sensitive and one for passive surfaces, for example.
- To make this less annoying to construct, as you would have to manage the factory, I'm adding a concrete class `NavigationPolicyFactory`. Its job is to make defining a factory that produces a "MultiNavigationPolicy" easy, like:
  ```cpp
  using namespace Acts;
  using SurfaceArrayNavigationPolicy::LayerType;
  SurfaceArrayNavigationPolicy::Config config{
    .layerType = LayerType::Cylinder,
    .bins = {10, 10}
  };
  auto factory = NavigationPolicyFactory::make()
    .add<TryAllPortalNavigationPolicy>()
    .add<SurfaceArrayNavigationPolicy>(config);
  ```
  or in python:
  ```python
  policy = (
    acts.NavigationPolicyFactory.make()
      .add(acts.TryAllPortalNavigationPolicy)
      .add(acts.TryAllSurfaceNavigationPolicy)
      .add(
        acts.SurfaceArrayNavigationPolicy,
        acts.SurfaceArrayNavigationPolicy.Config(
            layerType=acts.SurfaceArrayNavigationPolicy.LayerType.Plane,
            bins=(10, 10),
        ),
      )
  )
  ```

Part of #3502
DD4hep is currently quite log-happy. I raised the threshold in both Examples and Python a bit to avoid getting spammed.
- Reworks random bound and free track parameter generation
  - This should guarantee to obtain valid parameters #3756
- Split general random parameter and covariance generation
- Also, don't use covariance to draw parameters in general random generation
stephenswat and others added 22 commits October 24, 2024 19:43
Currently, as @krasznaa discovered, the finding of the Boost dependency in an installed version of Acts (i.e., through `ActsConfig.cmake` uses the `@ACTS_USE_SYSTEM_BOOST@` template, but this variable no longer exists.

CMake, in its infinite wisdom, silently ignores this, producing `if()`, which it _again_ silently accepts and which apparently evaluates to false, so Boost is never loaded.

This commit fixes the issue by ensuring that Boost is loaded unconditionally.
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
Not sure why, but the URL does not work directly with a variable.

related to:
- #3782
- removed `Tests/UnitTests/Core/Surfaces/BoundaryToleranceTestsRefs.hpp` because it was unused.
- fixed typo in the testing numbers in `Tests/UnitTests/Core/Surfaces/TrapezoidBoundsTests.cpp`
- enable tests, that were planned but not finished back in the days
Adds two free functions which allow checking `BoundVector`s and `FreeVectors`s for valid track parameters. This is then used as `assert`s in the track parameter EDM.

blocked by
- #3777
It looks like this is creating issues in Athena with
```console
In file included from libActsEventDict dictionary payload:146:
In file included from /cvmfs/atlas-nightlies.cern.ch/repo/sw/main--ACTS_Athena_x86_64-el9-gcc13-opt/2024-10-09T2101/Athena/25.0.20/InstallArea/x86_64-el9-gcc13-opt/include/ActsEvent/Seed.h:8:
/cvmfs/atlas-nightlies.cern.ch/repo/sw/main--ACTS_Athena_x86_64-el9-gcc13-opt/2024-10-09T2101/AthenaExternals/25.0.20/InstallArea/x86_64-el9-gcc13-opt/include/Acts/Acts/EventData/Seed.hpp:17:11: error: requires clause differs in template redeclaration
  requires(N >= 3ul)
          ^
Forward declarations from /cvmfs/atlas-nightlies.cern.ch/repo/sw/main--ACTS_Athena_x86_64-el9-gcc13-opt/2024-10-09T2101/Athena/25.0.20/InstallArea/x86_64-el9-gcc13-opt/lib/Athena.rootmap:773:18: note: previous template declaration is here
namespace Acts { template <typename external_spacepoint_t, size_t> class Seed; }
```

/cc @krasznaa 

@Ragansu and @Corentin-Allaire managed to make it work by:
> removed requires(N >= 3ul) in Seed.h and Seed.ipp and recompiled ACTS
> commented out parts in CxxUtils.h which delt with std::range when __cling__ is enabled. and recompiled Athena with a modified Package Filter.

Quoting:
> For information I think part of the issue might be that Cling doesn't like the requiere in the seed definition:
> The other issue seem to be that athena redefine the std::range::end function when Cling is used (in CxxUtils/range). Probably because it was not implemented before, but now this create a conflict with newer root version I guess ?  

See: https://atlas-art-data.web.cern.ch/atlas-art-data/grid-output/main/Athena/x86_64-el9-gcc13-opt/2024-10-08T2101/InDetPhysValMonitoring/test_run4_acts_vertex_PU200/tarball_logs/payload.stdout 

Co-authored-by: Pierfrancesco Butti <[email protected]>
Protect against η=`nan` in `Acts::TrackSelector::isValidTrack()`, which would `throw std::invalid_argument{"Eta is outside the abs eta bin edges"}` exception. This can come about if somehow the track θ<0 or θ>π. We should try to prevent these out-of-range values, but having them shouldn't raise an exception.

Co-authored-by: Paul Gessinger <[email protected]>
Kodiak handles this

Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
I'm adding a explicit check on the input config here, because we default to an empty config, which is actually invalid, when it tries to run the selection itself.

I'm also making the printing of the error code a bit more explicit in one case.
Adding some `VERBOSE` statements in the  seeding, from Grid creation and Filling to seed finder and filter.
Previously, the configuration could trun through even if TBB is not present on the system.
This is a relic from codecov. We fully switched to sonarcloud.
As a step to make the gx2f easier to read, I pulled out the step, where we check out all trackstates and fill all variables of the gx2f-system.

Maybe we manage in the future to remove the template using a internal track-type and put this into a separate compile unit.
The concept definition was not generic enough to cover for cases with `N != 3ul`
…3793)

While troubleshooting the exception I added some logging and later removed the exception as it does not seem hurtful to double define the alias to me.
This adds simple python bindings to the test framework to convert between global and local coordinates.
I don't think this is useful and I always have to deal with this downstream
After removing `TruthSeedRanges` with #3742 we can also safely remove `TruthSeedSelector` which does very much the same as the `ParticleSelector` by now.
@ssdetlab ssdetlab closed this Nov 3, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.