Corryvreckan merge requestshttps://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests2023-11-30T11:03:41+01:00https://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/661Clustering4D: Increase Default Timecut to include Timewalk2023-11-24T11:14:46+01:00Simon SpannagelClustering4D: Increase Default Timecut to include TimewalkThis fixes #142This fixes #142https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/660Do not expose 3rdpart header in our headers2023-11-30T11:30:37+01:00Simon SpannagelDo not expose 3rdpart header in our headersAttempt to fix #163
@aloeschc would you mind testing this?Attempt to fix #163
@aloeschc would you mind testing this?https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/659GBL: Calculate both residuals from fitted points2023-11-24T11:04:44+01:00Simon SpannagelGBL: Calculate both residuals from fitted pointshttps://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/658Jobsub: Attempt to fix Ctrl+C / SIGINT Treatment2023-11-30T11:29:56+01:00Simon SpannagelJobsub: Attempt to fix Ctrl+C / SIGINT TreatmentThis is an attempt to fix #183 reported by @lex.
The first part is simple, before spawning pool workers we need to inhibit the signal handling of `SIGINT` because they will inherit this. Then we can set the signal handler.
Now the othe...This is an attempt to fix #183 reported by @lex.
The first part is simple, before spawning pool workers we need to inhibit the signal handling of `SIGINT` because they will inherit this. Then we can set the signal handler.
Now the other problem (runs continue to being processed) I somehow cannot seem to solve - I can close the pool for new submissions with `pool.close()` but there is no way to *invalidate the existing task queue* already held by the pool. :/
Someone more pythonic needs to take a look at this.https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/657adding reading optional config parameters2023-11-21T11:48:56+01:00Lennart Huthadding reading optional config parametersAllow to read in configuration parameters that are optional.Allow to read in configuration parameters that are optional.https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/656CI: ensure default jobs dont land on macOS2023-11-21T11:21:09+01:00Simon SpannagelCI: ensure default jobs dont land on macOShttps://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/655Dynamic Sizing for DUT ButtonGroup2023-11-21T13:28:12+01:00Andreas Leon Loeschcke CentenoDynamic Sizing for DUT ButtonGroupMy previous changes to the DUT ButtonGroup in the OnlineMonitor GUI to enable a scrollbar have left the section with a constant size, really not nice to look at (see picture).
![1_plane_before](/uploads/5a06bc2bfade03733bfbc44cd60d34e0/1...My previous changes to the DUT ButtonGroup in the OnlineMonitor GUI to enable a scrollbar have left the section with a constant size, really not nice to look at (see picture).
![1_plane_before](/uploads/5a06bc2bfade03733bfbc44cd60d34e0/1_plane_before.png)
I have now implemented "dynamic" sizing for the DUT section for less than 3 planes. See the examples below.
**1 plane:**
![1_plane](/uploads/03648c715b09e9fe2b752c3330367a5a/1_plane.png)
**2 planes**
![2_plane](/uploads/c338a95044db6806702eed07dedd78c6/2_plane.png)
**3 planes**
![3_plane](/uploads/1df095f4a0a6c2d127da959340951459/3_plane.png)
**3+ planes**
![3plus_plane](/uploads/f8565e8fe8e486a634ab414919e60da8/3plus_plane.png)https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/654adding option to filter events depending on their length2023-11-21T13:27:17+01:00Lennart Huthadding option to filter events depending on their lengthhttps://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/653AnalysisEfficiency: add log to the init method, not run2023-11-13T15:14:53+01:00Simon SpannagelAnalysisEfficiency: add log to the init method, not runhttps://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/652CI: Remove Deprecated "docker" Tags2023-11-10T13:18:45+01:00Simon SpannagelCI: Remove Deprecated "docker" TagsCERN GitLab runners have deprecated the `docker` tag since they are funneling their jobs through a Kubernetes cluster now. When requiring CVMFS, this should be replaced with the `cvmfs` tag, or left without any tag otherwise.
https://ce...CERN GitLab runners have deprecated the `docker` tag since they are funneling their jobs through a Kubernetes cluster now. When requiring CVMFS, this should be replaced with the `cvmfs` tag, or left without any tag otherwise.
https://cern.service-now.com/service-portal?id=outage&n=OTG0078219https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/651OnlineMonitor: Adapted DUT ButtonGroup such that scrollbar appears for large ...2023-11-09T10:55:26+01:00Andreas Leon Loeschcke CentenoOnlineMonitor: Adapted DUT ButtonGroup such that scrollbar appears for large number of DUTsIn testing I noticed when using a large number of DUTs the ButtonGroup would "take over" the entire display such that it wasn't usable (see picture). This commit changes the implementation of the DUT ButtonGroup such that a scroll bar ap...In testing I noticed when using a large number of DUTs the ButtonGroup would "take over" the entire display such that it wasn't usable (see picture). This commit changes the implementation of the DUT ButtonGroup such that a scroll bar appears if the DUT list becomes too long.
Problems as of now:
- DUT ButtonGroup has fixed size, even for fewer DUTs
- Scrollbar currently does not react to scroll wheel, unless mouse is hovering over the bar
- Unable to adapt behaviour of mouse wheel input: Scrolling happens too fast, need to drag scroll bar with mouse for fine adjustment
(cherry picked from commit bc350fc9270c6d1741551a3ab1c9ae830cdbb57c)
![detector_planes_problem](/uploads/aa56c24f109aec74cb5011f1db0c09cc/detector_planes_problem.png)https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/650Online Monitoring with EUDAQ22023-11-28T10:41:25+01:00Andreas Leon Loeschcke CentenoOnline Monitoring with EUDAQ2Changes to the EventLoaderEUDAQ2 and OnlineMonitor modules to work with the new online monitoring process in EUDAQ2 which utilises corryvreckan.
Changes in repository:
1. `EventLoaderEUDAQ2`:
- Implemented new flag which should keep ...Changes to the EventLoaderEUDAQ2 and OnlineMonitor modules to work with the new online monitoring process in EUDAQ2 which utilises corryvreckan.
Changes in repository:
1. `EventLoaderEUDAQ2`:
- Implemented new flag which should keep corrycreckan from closing when reaching the end of the file
2. `OnlineMonitor`:
- Changed implementation of the DUT ButtonGroup to allow for a scroll bar when a large number of DUTs is usedhttps://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/649Draft: Evaluate spatial cuts and residuals based on detector model2023-11-08T17:54:59+01:00Radek PrivaraDraft: Evaluate spatial cuts and residuals based on detector modelThis MR comes as a follow-up from the discussions in MR !644.
It attemps to solve the complication in `DUTAssociation` and `AlignmentDUTResiduals` modules, where in the case of detector models not natively using cartesian coordinates (e...This MR comes as a follow-up from the discussions in MR !644.
It attemps to solve the complication in `DUTAssociation` and `AlignmentDUTResiduals` modules, where in the case of detector models not natively using cartesian coordinates (e.g. radial detectors use polar coordinates) detector model has to be checked and recalculations are necessary to properly evaluate spatial cuts or residuals in the correct coordinate system. (No such detector model is currently a part of the `master` branch and only exist in WIP branches.)
The proposed solution is to evaluate spatial cuts and residuals in "native coordinates" (name is subject to change if something else would be preferred) which are defined via two `Detector` (pure virtual) member functions
- `Detector::getNativePosition(localPosition)`
- `Detector::getNativePosition(column, row)`
For pixel detectors (including hexagonal detectors), the native coordinates are identical to local cartesian coordinates, and so these two functions simply call their respective `getLocalPosition()` functions, seemingly only adding unnecessary function calls. For detector models using other coordinate systems, however, the local cartesian coordinates can be transformed to a desired system via the `getNativePosition()` functions and therefore ensure proper handling of spatial cuts and residuals.https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/648Support for TelePix22023-10-12T14:26:06+02:00Lennart HuthSupport for TelePix2Telepix2 has a slightly different data format and needs a few adjustments to the `EventLoaderMuPixTelescope`, which are implemented hereTelepix2 has a slightly different data format and needs a few adjustments to the `EventLoaderMuPixTelescope`, which are implemented herehttps://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/646Also plot the res<X/Y>profiles along <col/row> in AnalysisDUT2023-10-11T11:53:03+02:00Lennart HuthAlso plot the res<X/Y>profiles along <col/row> in AnalysisDUTThese plots have been only in the `AlignmentDUTResiduals`, but I think they are useful in general. Added them to `AnalysisDUT` to always have them available, even if no alignment is performedThese plots have been only in the `AlignmentDUTResiduals`, but I think they are useful in general. Added them to `AnalysisDUT` to always have them available, even if no alignment is performedhttps://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/645Draft: Introduce SensorDesign Class2023-10-26T13:09:24+02:00Yajun HeDraft: Introduce SensorDesign Class(Everything is on behalf of Nigel Hessy)
Merge request to initiate discussion on improving the adaptability of Corryvreckan for new sensor designs by separating out the parts of a Detector Class into a new "SensorDesign" class. So the c...(Everything is on behalf of Nigel Hessy)
Merge request to initiate discussion on improving the adaptability of Corryvreckan for new sensor designs by separating out the parts of a Detector Class into a new "SensorDesign" class. So the current Detector class which "is" a design would get a pointer to a SensorDesign which would do everything that is internal to a sensor.
Then people with any new sensor with whatever arrangement of diodes can implement their design, without altering the Detector class. Detector class becomes smaller and rather unchanging: it knows the position, orientation, transform local->global and vv, as well as Dector Type (DUT, ...)
Current idea is to have a base SensorDesign class with virtual methods to convert diode indices to position and vice versa. RectangularSensor would inherit from this and implement the most common form of sensors (Timepix, Medipix, Alpide, Mimosa26, ...; HexagonalDesign; and an ATLAS Endcap Strip sensor would be a StereoAnnulusDesign.
In a Mimosa telescope, there would be one design: RectangularDesign mimosa26Design(...); with six Detectors all pointing to this same design. A single config section would give the mimosa parameters (pixel size, number of rows and columns mainly). The geometry file would have this information replaced by a string describing what SensorDesign the Detector should point to.
Many other packages have this separation of an actual instance of a detector and the design of those detectors. This change will allow import of at least some of such code, or at least with reduced changes. This split would make Corryvreckan more scalable. This would possibly allow Corryvreckan to be used in ATLAS system tests where we will have hundreds of sensors, but only 8 sensor designs.https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/644Polar detector support2023-12-20T14:16:26+01:00Radek PrivaraPolar detector supportThis MR adds support for polar (radial) strip detectors by adding a `PolarDetector` class. Significant contributions by @mcaspar.
Other changes include:
- `AlignmentDUTResidual` module: Added residual plots in polar coordinates (`R`, `p...This MR adds support for polar (radial) strip detectors by adding a `PolarDetector` class. Significant contributions by @mcaspar.
Other changes include:
- `AlignmentDUTResidual` module: Added residual plots in polar coordinates (`R`, `phi`). When a polar detector is aligned, polar residuals are used for alignment instead of cartesian ones.
- `DUTAssociation` module: For polar detectors, spatial cuts are evaluated in polar coordinates.
- `DUTAssociation` module: New option `elliptic_cut` determines whether spatial cuts are evaluated as an ellipse or as a rectange. By default, the option is set to `true` to preserve the current behavior.
This work is a compilation of efforts done by many people over the years, including Jin Zhang, Jens Dopke, Jonas Steentoft, Callan Jessiman, Arturo Rodriguez, Geetika Jain, Max Caspar (apologies to any I have forgotten).https://gitlab.cern.ch/corryvreckan/corryvreckan/-/merge_requests/643Draft: EventLoaderEUDAQ2 send wave info to clipboard2023-11-30T12:54:55+01:00Manuel Alejandro Del Rio VieraDraft: EventLoaderEUDAQ2 send wave info to clipboardget_waveform_data based on get_pixel_data to save waveform vectors to the clipboardget_waveform_data based on get_pixel_data to save waveform vectors to the clipboard