新增核素数据库,修改乱码问题,删除符合能谱再次符合逻辑

This commit is contained in:
anxinglong 2026-04-13 18:17:01 +08:00
parent 65e7a5787c
commit 7b6b967397
4 changed files with 29 additions and 61 deletions

BIN
bin/nuclideLib.db Normal file

Binary file not shown.

View File

@ -261,7 +261,7 @@ void TwoDSpectralCompliance::createFloatingInfoWidget()
titleLayout->addStretch(); titleLayout->addStretch();
QPushButton* hideBtn = new QPushButton(QStringLiteral("")); QPushButton* hideBtn = new QPushButton(QStringLiteral(""));
hideBtn->setFixedSize(20, 20); hideBtn->setFixedSize(20, 20);
hideBtn->setToolTip(QStringLiteral(u"隐藏窗口")); hideBtn->setText(QStringLiteral(u"X"));
hideBtn->setStyleSheet("border: none; font-weight: bold;"); hideBtn->setStyleSheet("border: none; font-weight: bold;");
titleLayout->addWidget(hideBtn); titleLayout->addWidget(hideBtn);
mainLayout->addWidget(titleBar); mainLayout->addWidget(titleBar);
@ -316,7 +316,7 @@ void TwoDSpectralCompliance::createFloatingInfoWidget()
"}" "}"
"QPushButton:hover { background-color: rgba(150,150,150,200); }" "QPushButton:hover { background-color: rgba(150,150,150,200); }"
); );
m_showButton->setText(""); m_showButton->setText(QStringLiteral(u""));
connect(m_showButton, &QPushButton::clicked, this, &TwoDSpectralCompliance::showFloatingWidget); connect(m_showButton, &QPushButton::clicked, this, &TwoDSpectralCompliance::showFloatingWidget);
m_floatingWidget->move(10, 10); m_floatingWidget->move(10, 10);

View File

@ -22,10 +22,6 @@ struct SpectrumData
uint64_t timestamp; uint64_t timestamp;
}; };
struct CoincidenceEvent
{
std::vector<SpectrumData> events;
};
ConformToTheEnergySpectrum::ConformToTheEnergySpectrum(QWidget *parent) : ConformToTheEnergySpectrum::ConformToTheEnergySpectrum(QWidget *parent) :
MeasureAnalysisView(parent) MeasureAnalysisView(parent)
@ -81,48 +77,6 @@ void ConformToTheEnergySpectrum::SetAnalyzeDataFilename(const QMap<QString, QVar
} }
} }
static std::vector<CoincidenceEvent> processCoincidence(const std::vector<SpectrumData>& data,
uint64_t time_window_ns = 50,
int min_order = 2,
int max_order = 9)
{
std::vector<CoincidenceEvent> result;
if (data.empty()) return result;
std::vector<SpectrumData> sorted = data;
std::sort(sorted.begin(), sorted.end(),
[](const SpectrumData& a, const SpectrumData& b) { return a.timestamp < b.timestamp; });
size_t n = sorted.size();
for (size_t i = 0; i < n; ++i)
{
std::vector<SpectrumData> cluster;
cluster.push_back(sorted[i]);
uint64_t base = sorted[i].timestamp;
for (size_t j = i + 1; j < n && (sorted[j].timestamp - base) <= time_window_ns; ++j)
cluster.push_back(sorted[j]);
for (size_t j = i; j > 0 && (base - sorted[j-1].timestamp) <= time_window_ns; --j)
if (j-1 != i) cluster.push_back(sorted[j-1]);
std::sort(cluster.begin(), cluster.end(),
[](const SpectrumData& a, const SpectrumData& b) { return a.timestamp < b.timestamp; });
cluster.erase(std::unique(cluster.begin(), cluster.end(),
[](const SpectrumData& a, const SpectrumData& b) {
return a.timestamp == b.timestamp && a.board_id == b.board_id && a.channel_id == b.channel_id;
}), cluster.end());
int order = (int)cluster.size();
if (order >= min_order && order <= max_order)
{
CoincidenceEvent ev;
ev.events = cluster;
result.push_back(ev);
i += (cluster.size() - 1);
}
}
return result;
}
void ConformToTheEnergySpectrum::loadAndProcess() void ConformToTheEnergySpectrum::loadAndProcess()
{ {
@ -156,25 +110,33 @@ void ConformToTheEnergySpectrum::loadAndProcess()
return; return;
} }
const uint64_t TIME_WINDOW_NS = 50; // const uint64_t TIME_WINDOW_NS = 50;
const int MIN_ORDER = 2; // const int MIN_ORDER = 2;
const int MAX_ORDER = 9; // const int MAX_ORDER = 9;
std::vector<CoincidenceEvent> coincidences = processCoincidence(rawData, TIME_WINDOW_NS, MIN_ORDER, MAX_ORDER); // std::vector<CoincidenceEvent> coincidences = processCoincidence(rawData, TIME_WINDOW_NS, MIN_ORDER, MAX_ORDER);
if (coincidences.empty()) { // if (coincidences.empty()) {
_busy_indicator->Stop(); // _busy_indicator->Stop();
return; // return;
} // }
// const int STEP = 1;
// std::map<int, double> hist;
// for (const auto& ev : coincidences) {
// for (const auto& spdt : ev.events) {
// int idx = static_cast<int>(spdt.energy) / STEP;
// hist[idx] += 1.0;
// }
// }
const int STEP = 1; const int STEP = 1;
std::map<int, double> hist; std::map<int, double> hist;
for (const auto& ev : coincidences) { for (const auto& spdt : rawData) {
for (const auto& spdt : ev.events) {
int idx = static_cast<int>(spdt.energy) / STEP; int idx = static_cast<int>(spdt.energy) / STEP;
hist[idx] += 1.0; hist[idx] += 1.0;
} }
}
QVector<double> vx, vy; QVector<double> vx, vy;
for (const auto& pair : hist) { for (const auto& pair : hist) {

View File

@ -104,6 +104,7 @@
<addaction name="action_energy_scale_mrg"/> <addaction name="action_energy_scale_mrg"/>
<addaction name="action_efficiency_scale_mrg"/> <addaction name="action_efficiency_scale_mrg"/>
<addaction name="action_roi"/> <addaction name="action_roi"/>
<addaction name="action_nuclideLib"/>
</widget> </widget>
<action name="action_help_manual"> <action name="action_help_manual">
<property name="text"> <property name="text">
@ -179,6 +180,11 @@
<string>感兴趣区</string> <string>感兴趣区</string>
</property> </property>
</action> </action>
<action name="action_nuclideLib">
<property name="text">
<string>核素库</string>
</property>
</action>
</widget> </widget>
<resources/> <resources/>
<connections/> <connections/>