新增核素数据库,修改乱码问题,删除符合能谱再次符合逻辑
This commit is contained in:
parent
65e7a5787c
commit
7b6b967397
BIN
bin/nuclideLib.db
Normal file
BIN
bin/nuclideLib.db
Normal file
Binary file not shown.
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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,24 +110,32 @@ 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;
|
||||||
|
|
|
||||||
|
|
@ -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/>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user