Files
Jungfraujoch/image_analysis/StrongPixelSet.h

63 lines
2.3 KiB
C++

// Copyright (2019-2023) Paul Scherrer Institute
#ifndef JUNGFRAUJOCH_STRONGPIXELSET_H
#define JUNGFRAUJOCH_STRONGPIXELSET_H
#include <unordered_map>
#include <unordered_set>
#include <mutex>
#include "../common/DiffractionExperiment.h"
#include "../common/Coord.h"
#include "../common/DiffractionSpot.h"
#include "../acquisition_device/AcquisitionDevice.h"
#include "SpotFindingSettings.h"
inline uint32_t strong_pixel_coord(uint16_t col, uint16_t line) {
return col + (static_cast<uint32_t>(line) << 16u);
}
inline uint16_t line_from_strong_pixel(uint32_t strong_pixel) {
return ((strong_pixel & 0xFFFF0000u) >> 16u);
}
inline uint16_t col_from_strong_pixel(uint32_t strong_pixel) {
return (strong_pixel & 0x0000FFFFu);
}
void FilterSpotsByResolution(const DiffractionExperiment& experiment,
const std::vector<DiffractionSpot> &input,
std::vector<DiffractionSpot> &output);
void FilterSpotsByCount(const DiffractionExperiment& experiment,
const std::vector<DiffractionSpot> &input,
std::vector<DiffractionSpot> &output);
class StrongPixelSet {
std::vector<std::pair<uint32_t, int32_t>> single_pixels;
std::unordered_map<uint32_t, int32_t> strong_pixel_map;
static const constexpr uint32_t xpixel = RAW_MODULE_COLS;
static const constexpr uint32_t ypixel = RAW_MODULE_LINES;
uint32_t strong_pixel_count;
std::vector<bool> strong_pixel_vector;
void AddNeighbor(DiffractionSpot &spot, uint16_t col, uint16_t line);
DiffractionSpot BuildSpot(std::unordered_map<uint32_t, int32_t>::iterator &it_frames);
void ExtendSpot(DiffractionSpot &spot, std::unordered_map<uint32_t, int32_t>::iterator &it_frames);
public:
void ReadFPGAOutput(const DeviceOutput& output);
StrongPixelSet();
size_t Count() const;
void AddStrongPixel(uint16_t col, uint16_t line, int32_t photons = 1);
void AddSingleStrongPixel(uint16_t col, uint16_t line, int32_t photons = 1);
void FindSpots(const DiffractionExperiment &experiment, const SpotFindingSettings &settings, std::vector<DiffractionSpot> &spots,
uint16_t module_number);
size_t Common(const StrongPixelSet &set) const;
uint32_t GetStrongPixelCount() const;
};
#endif //JUNGFRAUJOCH_STRONGPIXELSET_H