OpenHKL issueshttps://jugit.fz-juelich.de/mlz/openhkl/-/issues2022-10-07T15:53:18+02:00https://jugit.fz-juelich.de/mlz/openhkl/-/issues/421Feature request: CCP4 MTZ-format output2022-10-07T15:53:18+02:00a.ostermannFeature request: CCP4 MTZ-format outputThe CCP4 (Collaborative Computational Project, number 4) is a collection of programs and associated data and subroutine libraries which can be used for macromolecular structure determination by X-ray (and neutron ;) ) crystallography. Th...The CCP4 (Collaborative Computational Project, number 4) is a collection of programs and associated data and subroutine libraries which can be used for macromolecular structure determination by X-ray (and neutron ;) ) crystallography. The common file format for data storage is the so-called MTZ-format. It would be very helpful if NSXTool would support this file format for the output of the integrated intensities. This would allow it for example to scale data from different integration runs with CCP4 routines. MTZ-format information: https://www.ccp4.ac.uk/html/mtzformat.htmlChristian TrageserChristian Trageserhttps://jugit.fz-juelich.de/mlz/openhkl/-/issues/502In source file headers, provide homepage URL2022-10-06T17:00:17+02:00Wuttke, Joachimj.wuttke@fz-juelich.deIn source file headers, provide homepage URLjust replace ###HOMEPAGE### by https://openhkl.orgjust replace ###HOMEPAGE### by https://openhkl.orghttps://jugit.fz-juelich.de/mlz/openhkl/-/issues/422GUI: generate***Name() methods for handlers give non-unique names2022-10-06T17:00:06+02:00Raza, ZamaanGUI: generate***Name() methods for handlers give non-unique names```
std::string PeakHandler::generateName()
{
int n = 4; // number of digits
std::string str = std::to_string(numPeakCollections() + 1);
if (str.size() > n) { //
return "Please enter name for this collection";
}
...```
std::string PeakHandler::generateName()
{
int n = 4; // number of digits
std::string str = std::to_string(numPeakCollections() + 1);
if (str.size() > n) { //
return "Please enter name for this collection";
}
return std::string("PeakCollection") + std::string(n - str.size(), '0').append(str);
}
```
These methods use the size of the map to generate a new name; however, if an item that is not the last in the list is removed, the suggested name will clash with an existing name.https://jugit.fz-juelich.de/mlz/openhkl/-/issues/544GUI: add filtered/thresholded view to SubframeExperiment2022-10-06T13:32:42+02:00Raza, ZamaanGUI: add filtered/thresholded view to SubframeExperiment`QCheckbox* _live_check` in `SubframeFindPeaks`.`QCheckbox* _live_check` in `SubframeFindPeaks`.https://jugit.fz-juelich.de/mlz/openhkl/-/issues/547GUI: repositioning ellipse masks does not work2022-10-06T12:38:17+02:00Raza, ZamaanGUI: repositioning ellipse masks does not workAttempting to change the bounding box of an ellipse mask via the GUI in `SubframeExperiment` sets all of the spin boxes to their maximum, and the mask cannot be resized.Attempting to change the bounding box of an ellipse mask via the GUI in `SubframeExperiment` sets all of the spin boxes to their maximum, and the mask cannot be resized.https://jugit.fz-juelich.de/mlz/openhkl/-/issues/541GUI: Histogram items in DetectorScene persist between clicks2022-10-05T16:08:26+02:00Raza, ZamaanGUI: Histogram items in DetectorScene persist between clicksA histogram is drawn by selecting one of the plotting tools (line plot, horizontal slice, vertical slice) available in `SubframeExperiment` (histogram tab). When a plot exists and another is drawn on the `DetectorScene`, the old lines/re...A histogram is drawn by selecting one of the plotting tools (line plot, horizontal slice, vertical slice) available in `SubframeExperiment` (histogram tab). When a plot exists and another is drawn on the `DetectorScene`, the old lines/rectangles persist, and are never deleted, although the data in the plot widget is overwritten.
Adding a new `CutterItem` to `DetectorScene` should always overwrite the last one.https://jugit.fz-juelich.de/mlz/openhkl/-/issues/493GUI: Hide masks icon should change depending on whether masks are hidden2022-10-05T11:46:17+02:00Raza, ZamaanGUI: Hide masks icon should change depending on whether masks are hiddenhttps://jugit.fz-juelich.de/mlz/openhkl/-/issues/535Export and Importing Masks2022-10-05T09:42:05+02:00Christian TrageserExport and Importing MasksAndreas O. requested a new feature which allows to save and restore applied rectangle and ellipsoid masks in separated files. This would allow instrumentalists to use masks for different datasets without recreating them every time from s...Andreas O. requested a new feature which allows to save and restore applied rectangle and ellipsoid masks in separated files. This would allow instrumentalists to use masks for different datasets without recreating them every time from scratch.
Ideal solution would human readable like xml format for examplehttps://jugit.fz-juelich.de/mlz/openhkl/-/issues/326GUI: delete/undo peak/mask removal has no associated GUI element or documenta...2022-10-05T09:42:05+02:00Raza, ZamaanGUI: delete/undo peak/mask removal has no associated GUI element or documentation- The keys "backspace" and "u" are used to delete masks and peaks in the `DetectorScene` and undo deletion respectively. They should have associated GUI elements
- Keystrokes should be documented.- The keys "backspace" and "u" are used to delete masks and peaks in the `DetectorScene` and undo deletion respectively. They should have associated GUI elements
- Keystrokes should be documented.https://jugit.fz-juelich.de/mlz/openhkl/-/issues/530GUI: SubframeShapes: building shapes iterates over numors2022-09-30T13:37:40+02:00Raza, ZamaanGUI: SubframeShapes: building shapes iterates over numorsDoes it make sense to generate a shape model from multiple `DataSet`s given that the sample orientation will vary? This is important because currently when building shape collections, we iterate over numors for some reason:
```
void Sub...Does it make sense to generate a shape model from multiple `DataSet`s given that the sample orientation will vary? This is important because currently when building shape collections, we iterate over numors for some reason:
```
void SubframeShapes::buildShapeModel()
{
gGui->setReady(false);
setShapeParameters();
try {
auto* params = _shape_model.parameters();
std::vector<ohkl::Peak3D*> fit_peaks;
for (ohkl::Peak3D* peak : _peak_combo->currentPeakCollection()->getPeakList()) {
if (!peak->enabled())
continue;
const double d = 1.0 / peak->q().rowVector().norm();
if (d > params->d_max || d < params->d_min)
continue;
const ohkl::Intensity intensity = peak->correctedIntensity();
if (intensity.value() <= params->strength_min * intensity.sigma())
continue;
fit_peaks.push_back(peak);
}
ohkl::sptrProgressHandler handler(new ohkl::ProgressHandler);
ProgressView view(this);
view.watch(handler);
std::set<ohkl::sptrDataSet> data;
for (auto dataset : gSession->currentProject()->experiment()->getAllData())
data.insert(dataset);
_shape_model.integrate(fit_peaks, data, handler);
_shape_model.updateFit(1000); // This does nothing!! - zamaan
} catch (std::exception& e) {
QMessageBox::critical(this, "Error", QString(e.what()));
}
gGui->statusBar()->showMessage(
QString::number(_shape_model.numberOfPeaks()) + " shapes generated");
toggleUnsafeWidgets();
gGui->setReady(true);
}
```https://jugit.fz-juelich.de/mlz/openhkl/-/issues/540Reworking Sidebar of OpenHKL2022-09-29T16:10:21+02:00Christian TrageserReworking Sidebar of OpenHKLBecause of scaling issues of the OpenHKL Sidebar (especially on laptops) the sidebar is going to be reworked:
- Reducing minimal height/width of icons
- Removing fixed text description under the icons
- Adding mouse over text when hoover...Because of scaling issues of the OpenHKL Sidebar (especially on laptops) the sidebar is going to be reworked:
- Reducing minimal height/width of icons
- Removing fixed text description under the icons
- Adding mouse over text when hoovering over the icons with a detailed descriptionChristian TrageserChristian Trageserhttps://jugit.fz-juelich.de/mlz/openhkl/-/issues/517GUI no longer fits in 1920x1080 display2022-09-29T16:10:21+02:00Wuttke, Joachimj.wuttke@fz-juelich.deGUI no longer fits in 1920x1080 displayAfter recent addition of "Reject" vertical tab, the GUI no longer fits in my 1920x1080 laptop display.
Urgent, because it hampers further work on the software.After recent addition of "Reject" vertical tab, the GUI no longer fits in my 1920x1080 laptop display.
Urgent, because it hampers further work on the software.https://jugit.fz-juelich.de/mlz/openhkl/-/issues/471doc: Convolver documentation needed2022-09-27T09:04:10+02:00Raza, Zamaandoc: Convolver documentation neededSince the annular convolver seems to always work, under which circumstances would we want to change it? How do the others work?Since the annular convolver seems to always work, under which circumstances would we want to change it? How do the others work?https://jugit.fz-juelich.de/mlz/openhkl/-/issues/472doc: convolution kernel parameters2022-09-27T09:04:10+02:00Raza, Zamaandoc: convolution kernel parametersI presume the unit of these parameters is pixels, in which case, why are they hard coded, but exposed to the user in `SubframeFindPeaks`? Are these hard-coded choices always appropriate?I presume the unit of these parameters is pixels, in which case, why are they hard coded, but exposed to the user in `SubframeFindPeaks`? Are these hard-coded choices always appropriate?https://jugit.fz-juelich.de/mlz/openhkl/-/issues/469Support Logger under Python2022-09-26T09:47:47+02:00Wuttke, Joachimj.wuttke@fz-juelich.deSupport Logger under PythonFor debugging, or simply for studying the software, it would be helpful to get Logger output from Python scripts.
If I understand correctly, logging would be started by something like
```
log = ohkl.Logger.instance()
log.start("tpf.log"...For debugging, or simply for studying the software, it would be helpful to get Logger output from Python scripts.
If I understand correctly, logging would be started by something like
```
log = ohkl.Logger.instance()
log.start("tpf.log", 4)
```
However, this results in
```
log.start("tpf.log", 4)
File "/G/sw/ohkl/build/swig/pyohkl.py", line 2180, in start
return _pyohkl.Logger_start(self, filename, min_level)
TypeError: in method 'Logger_start', argument 3 of type 'Level const &'
```https://jugit.fz-juelich.de/mlz/openhkl/-/issues/464sidebar icon: software has "Indexer", tutorial says "Autoindex"2022-09-26T09:47:05+02:00Wuttke, Joachimj.wuttke@fz-juelich.desidebar icon: software has "Indexer", tutorial says "Autoindex"Tutorial says "Click on the Autoindex icon on the sidebar"Tutorial says "Click on the Autoindex icon on the sidebar"https://jugit.fz-juelich.de/mlz/openhkl/-/issues/508rm unused FitParameters::setConstraints2022-09-26T09:44:05+02:00Wuttke, Joachimj.wuttke@fz-juelich.derm unused FitParameters::setConstraintsThe function `FitParameters::setConstraints` is never used, except in `TestConstrainedMinimizer`, which should also be removed.
The function `FitParameters::resetConstraints` can also be removed if `_contrained=false` is set during cons...The function `FitParameters::setConstraints` is never used, except in `TestConstrainedMinimizer`, which should also be removed.
The function `FitParameters::resetConstraints` can also be removed if `_contrained=false` is set during construction of `FitParameters` objects.https://jugit.fz-juelich.de/mlz/openhkl/-/issues/497under gdb, hanging at 99% in "Build shape model" while source line comment sa...2022-09-26T09:43:49+02:00Wuttke, Joachimj.wuttke@fz-juelich.deunder gdb, hanging at 99% in "Build shape model" while source line comment says "does nothing"Running OpenHKL on Ryzen 9 under Debian/testing in Debug mode.
Execution hangs for 10 minutes or longer at `Shape model > Build shape model` with progress bar showing `99%`.
Interrupted with ^C and looked at backtrace.
```
...
#17 0x00...Running OpenHKL on Ryzen 9 under Debian/testing in Debug mode.
Execution hangs for 10 minutes or longer at `Shape model > Build shape model` with progress bar showing `99%`.
Interrupted with ^C and looked at backtrace.
```
...
#17 0x00007ffff732488c in gsl_multifit_nlinear_driver ()
from /lib/x86_64-linux-gnu/libgsl.so.27
#18 0x0000555555b1b7a0 in ohkl::Minimizer::fit (this=0x7fffffffc8b0,
max_iter=1000) at /G/sw/ohkl/base/fit/Minimizer.cpp:164
#19 0x00005555559b3356 in ohkl::ShapeModel::updateFit (this=0x555556892220,
num_iterations=1000) at /G/sw/ohkl/core/shape/ShapeModel.cpp:230
#20 0x0000555555685644 in SubframeShapes::buildShapeModel (this=0x555556892080)
at /G/sw/ohkl/gui/subframe_shapes/SubframeShapes.cpp:484
#21 0x000055555568f0ff in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (SubframeShapes::*)()>::call(void (SubframeShapes::*)(), SubframeShapes*, void**) (
f=(void (SubframeShapes::*)(SubframeShapes * const)) 0x5555556851dc <SubframeShapes::buildShapeModel()>, o=0x555556892080, arg=0x7fffffffd170)
at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:152
...
```
Code line SubframeShapes.cpp:484 is
```
_shape_model.updateFit(1000); // This does nothing!! - zamaan
```
Why not remove this call if it does nothing?https://jugit.fz-juelich.de/mlz/openhkl/-/issues/504File extension should indicate format, not contents2022-09-26T09:43:25+02:00Wuttke, Joachimj.wuttke@fz-juelich.deFile extension should indicate format, not contentsWith `menu bar > Experiment > Save as`, we generate a HDF5 file. The file name dialog widget proposes the file extension `.ohkl`. Wouldn't it be more in line with general practice to impose the extension `.hdf`?With `menu bar > Experiment > Save as`, we generate a HDF5 file. The file name dialog widget proposes the file extension `.ohkl`. Wouldn't it be more in line with general practice to impose the extension `.hdf`?https://jugit.fz-juelich.de/mlz/openhkl/-/issues/514Preview with threshold should exclude masked peaks2022-09-26T09:40:53+02:00Wuttke, Joachimj.wuttke@fz-juelich.dePreview with threshold should exclude masked peaksAfter selecting `GUI > Find Peaks > Peak search parameters > apply threshold to peaks`, the masks are no longer shown while pixels with count above the threshold are shown in the areas we have previously masked. This makes little sense. ...After selecting `GUI > Find Peaks > Peak search parameters > apply threshold to peaks`, the masks are no longer shown while pixels with count above the threshold are shown in the areas we have previously masked. This makes little sense. The view with applied threshold should show the peaks retained for further analysis, and nothing else.