新增核素数据库,修改乱码问题,删除符合能谱再次符合逻辑
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();
|
||||
QPushButton* hideBtn = new QPushButton(QStringLiteral("−"));
|
||||
hideBtn->setFixedSize(20, 20);
|
||||
hideBtn->setToolTip(QStringLiteral(u"隐藏窗口"));
|
||||
hideBtn->setText(QStringLiteral(u"X"));
|
||||
hideBtn->setStyleSheet("border: none; font-weight: bold;");
|
||||
titleLayout->addWidget(hideBtn);
|
||||
mainLayout->addWidget(titleBar);
|
||||
|
|
@ -316,7 +316,7 @@ void TwoDSpectralCompliance::createFloatingInfoWidget()
|
|||
"}"
|
||||
"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);
|
||||
|
||||
m_floatingWidget->move(10, 10);
|
||||
|
|
|
|||
|
|
@ -22,10 +22,6 @@ struct SpectrumData
|
|||
uint64_t timestamp;
|
||||
};
|
||||
|
||||
struct CoincidenceEvent
|
||||
{
|
||||
std::vector<SpectrumData> events;
|
||||
};
|
||||
|
||||
ConformToTheEnergySpectrum::ConformToTheEnergySpectrum(QWidget *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()
|
||||
{
|
||||
|
|
@ -156,25 +110,33 @@ void ConformToTheEnergySpectrum::loadAndProcess()
|
|||
return;
|
||||
}
|
||||
|
||||
const uint64_t TIME_WINDOW_NS = 50;
|
||||
const int MIN_ORDER = 2;
|
||||
const int MAX_ORDER = 9;
|
||||
std::vector<CoincidenceEvent> coincidences = processCoincidence(rawData, TIME_WINDOW_NS, MIN_ORDER, MAX_ORDER);
|
||||
// const uint64_t TIME_WINDOW_NS = 50;
|
||||
// const int MIN_ORDER = 2;
|
||||
// const int MAX_ORDER = 9;
|
||||
// std::vector<CoincidenceEvent> coincidences = processCoincidence(rawData, TIME_WINDOW_NS, MIN_ORDER, MAX_ORDER);
|
||||
|
||||
if (coincidences.empty()) {
|
||||
_busy_indicator->Stop();
|
||||
return;
|
||||
}
|
||||
// if (coincidences.empty()) {
|
||||
// _busy_indicator->Stop();
|
||||
// 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;
|
||||
std::map<int, double> hist;
|
||||
|
||||
for (const auto& ev : coincidences) {
|
||||
for (const auto& spdt : ev.events) {
|
||||
for (const auto& spdt : rawData) {
|
||||
int idx = static_cast<int>(spdt.energy) / STEP;
|
||||
hist[idx] += 1.0;
|
||||
}
|
||||
}
|
||||
|
||||
QVector<double> vx, vy;
|
||||
for (const auto& pair : hist) {
|
||||
|
|
|
|||
|
|
@ -104,6 +104,7 @@
|
|||
<addaction name="action_energy_scale_mrg"/>
|
||||
<addaction name="action_efficiency_scale_mrg"/>
|
||||
<addaction name="action_roi"/>
|
||||
<addaction name="action_nuclideLib"/>
|
||||
</widget>
|
||||
<action name="action_help_manual">
|
||||
<property name="text">
|
||||
|
|
@ -179,6 +180,11 @@
|
|||
<string>感兴趣区</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_nuclideLib">
|
||||
<property name="text">
|
||||
<string>核素库</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user