Corryvreckan merge requestshttps://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests2024-03-28T11:06:04+01:00https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/681Draft: Module AnalysisBeamProfile2024-03-28T11:06:04+01:00Paul Jean SchutzeDraft: Module AnalysisBeamProfileThis implements a module called `AnalysisBeamProfile`.
This module is can be used for analysing properties of a bunched beam on an event-by-event basis. What it does is the following:
* read `Pixel` objects for the corresponding detecto...This implements a module called `AnalysisBeamProfile`.
This module is can be used for analysing properties of a bunched beam on an event-by-event basis. What it does is the following:
* read `Pixel` objects for the corresponding detector from the clipboard
* create a single cluster per event
* assign central cluster position and `errorX`&`errorY` as widths based on a fit to a gaussian distribution or from statistics to (charge-weighted) projections onto the x/y-axes
* add cluster to clipboard
* plot hitmaps, projections and width/center distributions, most of them also vs event number
Points for discussion:
- [x] Renaming? I could imagine that a more generic name like `AnalysisBeamProfile` would be more suitable. We use it for [this method](https://indico.cern.ch/event/1232761/contributions/5357414/), but in principle the functionality is very generic. Any opinions?
- [ ] `Cluster->errorX()`? I abused the `errorX`&`errorY` for storing the width of the cluster. The reason is, that here we'd like to store the width of a gaussian of the cluster projection (or StdDev, depending on the configuration), and the `columnWidth`&`rowWidth` members are [Cluster-internally coded](https://gitlab.cern.ch/corryvreckan/corryvreckan/-/blob/master/src/objects/Cluster.cpp?ref_type=heads#L28) to be the extent of the cluster along these axes, computed during `addPixel(...)`. An option would be to add setter functions for the `columnWidth`&`rowWidth` members and overwrite them in the new module after the last pixel has been added. Any opinions?https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/680ReadmeParticleFlux: change description of parameter for plot unit control2024-02-22T15:43:45+01:00Annika VauthReadmeParticleFlux: change description of parameter for plot unit controlJust a small readme change:
I wanted to use this module and have plots in rad and tried using ```angle_unit = "rad"``` as suggested by the Readme. When I noticed that the output plots were still in degree, a look at the source code reve...Just a small readme change:
I wanted to use this module and have plots in rad and tried using ```angle_unit = "rad"``` as suggested by the Readme. When I noticed that the output plots were still in degree, a look at the source code revealed that the config parameter in question should be a bool ```output_plots_in_degrees``` instead. Hence this suggested change of the documentation.https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/679adding support of mupix112024-02-15T14:58:24+01:00Lennart Huthadding support of mupix11MuPix11 identifier added to converterMuPix11 identifier added to converterhttps://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/678add MAXIMUM2D method in Prealignment2024-01-29T15:49:52+01:00Yajun Headd MAXIMUM2D method in PrealignmentThe `MAXIMUM2D` method will look for the maximum in the 2D residual plot (Xref-X, Yref-Y). It can help to deal with some complicated cases that the 1D correlation maps are not able to fully resolve.The `MAXIMUM2D` method will look for the maximum in the 2D residual plot (Xref-X, Yref-Y). It can help to deal with some complicated cases that the 1D correlation maps are not able to fully resolve.https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/677Revert "Itk strip EC efficiency"2024-01-24T17:53:11+01:00Yajun HeRevert "Itk strip EC efficiency"This reverts commit de2e091ee3f8ba4c6c119312f667859911bd34c4This reverts commit de2e091ee3f8ba4c6c119312f667859911bd34c4https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/676Update copyright year2024-02-01T15:59:45+01:00Simon SpannagelUpdate copyright yearhttps://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/675Orientation modes2024-03-20T17:06:22+01:00Lennart HuthOrientation modesThe naming scheme xyz is misleading. This MR changes it to roations<0..2> as discussed in #173The naming scheme xyz is misleading. This MR changes it to roations<0..2> as discussed in #173https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/674Fix detector size2024-03-20T17:02:34+01:00Lennart HuthFix detector sizeWe only give the Detetcor::size() in local. This MR changes it to global and local dimensions.We only give the Detetcor::size() in local. This MR changes it to global and local dimensions.https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/673ClusteringSpatial: allow split clusters2024-02-06T17:24:34+01:00Gianpiero VignolaClusteringSpatial: allow split clustersThe possibility of having split clusters is implemented in Clustering4D. However, it is a purely spatial feature. Does it make sense to include it in ClusteringSpatial as well?The possibility of having split clusters is implemented in Clustering4D. However, it is a purely spatial feature. Does it make sense to include it in ClusteringSpatial as well?Gianpiero VignolaGianpiero Vignolahttps://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/672EventLoaderEUDAQ2: Do Not Drop UNKNOWN Events2024-01-04T17:45:29+01:00Simon SpannagelEventLoaderEUDAQ2: Do Not Drop UNKNOWN EventsEvents with `UNKNOWN` position should not be dropped, otherwise we just run through the file without ever matching. This will be taken care of by the next iteration, marking it as `BEFORE`.
### Example 1
* `Event` holds trigger with ID...Events with `UNKNOWN` position should not be dropped, otherwise we just run through the file without ever matching. This will be taken care of by the next iteration, marking it as `BEFORE`.
### Example 1
* `Event` holds trigger with ID 0 and 3.
* Detector has trigger with ID 2, position is `UNKNOWN`
Currently:
* We drop detector data with trigger ID 2 and read the next
What we should do:
* Look at next event, which has trigger IDs 4 and 5.
* Detector has trigger ID 2, tagged as `BEFORE` and discarded.
### Example 2
The difference comes for events with no trigger ID at all, here we would just discard the event but the subsequent one may actually hold ID2.
* `Event` holds no trigger
* Detector holds trigger 1, position `UNKNOWN`
* We drop detector data, go to next event, which has trigger 1
* ...
what we should do:
* Do not drop event, check next one
* We have a match!https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/671Update CI to AlmaLinux9 and LCG_1042023-12-18T19:36:26+01:00Simon SpannagelUpdate CI to AlmaLinux9 and LCG_104This updates the CI to the new standard distribution for LXPLUS, RHEL9/AlmaLinux9.
* New CI jobs for AlmaLinux 9
* CentOS7 only as legacy build with GCC
* Now allowing `clang-tidy` and `clang-format` >= 12, required one formatting chang...This updates the CI to the new standard distribution for LXPLUS, RHEL9/AlmaLinux9.
* New CI jobs for AlmaLinux 9
* CentOS7 only as legacy build with GCC
* Now allowing `clang-tidy` and `clang-format` >= 12, required one formatting change
* Now always building with same C++ standard as the linked ROOT version, which is C++20 already in some cases
lint-diff fails because of external header includes. Will merge hard when approved.https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/670Rework parts of EventLoaderMupixTelescope2024-01-03T10:29:56+01:00Simon SpannagelRework parts of EventLoaderMupixTelescope* remove spam messages after upstream fixes
* use `Event` class methods for pixel comparison
* refill buffer before accessing first pixel* remove spam messages after upstream fixes
* use `Event` class methods for pixel comparison
* refill buffer before accessing first pixelLennart HuthLennart Huthhttps://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/669Fix loader2023-12-07T21:00:41+01:00Lennart HuthFix loaderMissed including the edges of events in the loader, thanks to David Immig for spottingMissed including the edges of events in the loader, thanks to David Immig for spottinghttps://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/668Fix EventLoaderEUDAQ2 handling of aux detectors2024-01-12T17:28:16+01:00Miljenko SuljicFix EventLoaderEUDAQ2 handling of aux detectorsDo not fill histograms that do not exist for aux detectors.Do not fill histograms that do not exist for aux detectors.Miljenko SuljicMiljenko Suljichttps://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/667Add new_config_suffix option to MaskCreator2023-12-18T17:52:32+01:00Miljenko SuljicAdd new_config_suffix option to MaskCreatorAdd `new_config_suffix` option to `MaskCreator`: If `write_new_config=true` and the detector config did not previously hold a mask file, add a suffix to the new mask file. Default is `""` (no suffix).Add `new_config_suffix` option to `MaskCreator`: If `write_new_config=true` and the detector config did not previously hold a mask file, add a suffix to the new mask file. Default is `""` (no suffix).Miljenko SuljicMiljenko Suljichttps://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/666Transformation of Errors in Radial Detectors + Radial Clustering2023-12-20T14:16:25+01:00Maximilian CasparTransformation of Errors in Radial Detectors + Radial ClusteringError Transformation:
Make sure the detector resolution transforms correctly from radial to cartesian coordinates. This is achieved using gaussian error transformation.
Symbolic derivation of the derivatives used in the error transformat...Error Transformation:
Make sure the detector resolution transforms correctly from radial to cartesian coordinates. This is achieved using gaussian error transformation.
Symbolic derivation of the derivatives used in the error transformation: [Resolution.md](/uploads/10ca696d94a0c7f939373e2dd7dfa9dc/Resolution.md)
ToDo: Test this with the Allpix^2 implementation of the geometry (as in IT-4086/EP/ATLAS) that Radek is working on.
Radial Clustering: Introduce a new module (ClusteringRadial) that uses the radial clustering concept and gives cluster statistics not only in x/y but also in R/Phi. The clustering algorithm is the same as in ClusteringSpatial, but everything is handled in radial coordinates, and the cluster centre is found using a weighted average that considers individual strip resolutions.
ToDo: Look at the output of the histograms in a few scenarios to judge whether the bounds are correct.https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/665Reverted recent changes which started GUI on separate thread2023-11-30T11:03:41+01:00Andreas Leon Loeschcke CentenoReverted recent changes which started GUI on separate threadFurther testing revealed that there were some deep thread safety issues related to ROOT which could not easily be resolved.
Therefore it was necessary to revert the changes for nowFurther testing revealed that there were some deep thread safety issues related to ROOT which could not easily be resolved.
Therefore it was necessary to revert the changes for nowhttps://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/664OnlineMonitor: Resolving Issues with Threading2023-11-28T11:40:49+01:00Simon SpannagelOnlineMonitor: Resolving Issues with ThreadingThis MR contains some fixups to !650 since @pschutze and me experienced issues with some modules when attempting do online monitoring, manifesting itself in seemingly random crashes deep within different parts of ROOT, changing whenever ...This MR contains some fixups to !650 since @pschutze and me experienced issues with some modules when attempting do online monitoring, manifesting itself in seemingly random crashes deep within different parts of ROOT, changing whenever restarting.
This was traced back to be a threading issue, so this MR implements the following changes:
* The `TApplication` is created on the main thread - this removes the random crashes but leaves the spawned thread with an empty ROOT directory
* Passing the `gDirectory` ti the spawned GUI thread and `cd()`ing into it explicitly restores access to the histograms
* The `gui_running` is now a `std::atomic<bool>` to be thread-safe
* An additional `gui_ready` atomic bool blocks the main thread `initialize()` method until the GUI has been properly initialized. This removes possible race conditions between histogram creating/filling in other modules and the booking and access thereof from the GUI thread.
@aloeschc would you be so kind to look at this and test this since it touches your work?https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/663AlignmentDUT: Do not attempt to delete pointers because ROOT does it :/2023-11-30T11:29:18+01:00Simon SpannagelAlignmentDUT: Do not attempt to delete pointers because ROOT does it :/This fixes #186
(cc) @avauth @maantone fixed.This fixes #186
(cc) @avauth @maantone fixed.https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/662Remove Workarounds for RootMacros.cmake2023-11-24T13:34:41+01:00Simon SpannagelRemove Workarounds for RootMacros.cmakeRemoving the workaround that was necessary with ROOT versions below 6.20.
This fixes #82
@avauth @rprivara should fix your issues.Removing the workaround that was necessary with ROOT versions below 6.20.
This fixes #82
@avauth @rprivara should fix your issues.