RefinementBatch ranges overlap
Looking at the post-refinement log:
0-10 54.92260 58.49574 67.45137 90.00000 89.98422 90.00000
8-17 54.89974 58.46262 67.36989 90.00000 89.98477 90.00000
15-25 54.92752 58.49984 67.43749 90.00000 89.98158 90.00000
23-32 54.90036 58.47766 67.40630 90.00000 89.95393 90.00000
30-40 54.92204 58.51050 67.51689 90.00000 89.93762 90.00000
38-48 54.91028 58.51211 67.50965 90.00000 89.93241 90.00000
Code to iterate over peaks and determine batches (core/algo/Refiner.cpp
):
for (nsx::Peak3D* peak : filtered_peaks) {
// find appropriate batch
const RefinementBatch* b = nullptr;
const double z = peak->shape().center()[2];
for (const auto& batch : _batches) {
if (batch.contains(z)) {
b = &batch;
break;
}
}
The function RefinementBatch::contains
:
bool RefinementBatch::contains(double f) const
{
return (f > _fmin) && (f < _fmax);
}
The frame ranges overlap by 2 frames. This may make sense when doing the refinement, but when computing Miller indices, iterating through the list of peaks, some will belong to more than one batch, and it seems that only the batch with the lowest numerical index is used. I'm not sure if this logic is correct.