add: random signal;

change: update control view
This commit is contained in:
liuyihui 2022-05-30 16:36:01 +08:00
parent 25e4a64ea0
commit c356285fe2
17 changed files with 3197 additions and 22 deletions

View File

@ -1,3 +1,12 @@
## Change Log
### 3.21-3.27
* `Visio`的`UML`类图初步制作
* `Visio`的`UML`类图初步制作
* 随机信号的生成[^1]
### 5.24
* 随机信号的完善
### 5.30
* control view
[^1]: Xiao M, Hu R, Ge L Q, et al. Study of a full-digital multi-waveform nuclear pulse signal generator[J]. Applied Radiation and Isotopes, 2022, 179: 110028.

View File

@ -16,7 +16,6 @@ IMPLEMENT_DYNCREATE(CControlView, CFormView)
CControlView::CControlView()
: CFormView(IDD_DIALOG_CONTROL)
{
}
CControlView::~CControlView()
@ -29,6 +28,7 @@ void CControlView::DoDataExchange(CDataExchange* pDX)
}
BEGIN_MESSAGE_MAP(CControlView, CFormView)
ON_WM_SIZE()
END_MESSAGE_MAP()
@ -50,3 +50,16 @@ void CControlView::Dump(CDumpContext& dc) const
// CControlView 消息处理程序
void CControlView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
CRect rect;
GetClientRect(&rect); // 获取当前客户区view大小
CSize size;
size.cx = rect.right - rect.left;
size.cy = rect.bottom - rect.top;
SetScrollSizes(MM_HIMETRIC, size); // 将CScrollView的大小设置为当前客户区大小
}

View File

@ -28,6 +28,7 @@ protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnSize(UINT nType, int cx, int cy);
};

View File

@ -151,7 +151,7 @@ protected:
// 实现
protected:
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP();
};
CAboutDlg::CAboutDlg() noexcept : CDialogEx(IDD_ABOUTBOX)
@ -174,6 +174,3 @@ void CMCAApp::OnAppAbout()
}
// CMCAApp 消息处理程序

Binary file not shown.

View File

@ -214,6 +214,9 @@
<ResourceCompile Include="MCA.rc" />
</ItemGroup>
<ItemGroup>
<None Include="..\.gitignore" />
<None Include="..\ChangeLog.md" />
<None Include="..\README.md" />
<None Include="res\MCA.rc2" />
</ItemGroup>
<ItemGroup>

View File

@ -13,6 +13,9 @@
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
<Filter Include="说明文件">
<UniqueIdentifier>{5f85e690-53f6-4e18-9b27-e5968d458c94}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="MCA.h">
@ -84,6 +87,15 @@
<None Include="res\MCA.rc2">
<Filter>资源文件</Filter>
</None>
<None Include="..\.gitignore">
<Filter>说明文件</Filter>
</None>
<None Include="..\ChangeLog.md">
<Filter>说明文件</Filter>
</None>
<None Include="..\README.md">
<Filter>说明文件</Filter>
</None>
</ItemGroup>
<ItemGroup>
<Image Include="res\MCADoc.ico">

View File

@ -4,6 +4,7 @@
#include "pch.h"
#include "framework.h"
// SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的
// ATL 项目中进行定义,并允许与该项目共享文档代码。
#ifndef SHARED_HANDLERS
@ -12,6 +13,10 @@
#include "MCADoc.h"
#include <time.h>
#include <stdio.h>
#include <string>
#include <algorithm>
#include <propkey.h>
#ifdef _DEBUG
@ -27,14 +32,46 @@ END_MESSAGE_MAP()
// CMCADoc 构造/析构
CMCADoc::CMCADoc() noexcept
{
FILE *stream_tmp;
int channel_id, channel_count;
srand((unsigned)time(NULL));
m_nChannelCount = new int[m_nChannelNum];
for (int i = 0; i < m_nChannelNum; i++)
{
m_nChannelCount[i] = 0;
}
for (int i = 0; i < m_nChannelNum; i++) m_nChannelCount[i] = 0;
freopen_s(&stream_tmp, "data/Co60.txt", "r", stdin);
for (int i = 0; i < 1024; i++)
{
scanf_s("%d,%d", &channel_id, &channel_count);
es_Co60[i] = channel_count;
if (i > 0) es_Co60[i] += es_Co60[i-1];
}
fclose(stdin);
freopen_s(&stream_tmp, "data/Cs137.txt", "r", stdin);
for (int i = 0; i < 1024; i++)
{
scanf_s("%d,%d", &channel_id, &channel_count);
es_Cs137[i] = channel_count;
if (i > 0) es_Cs137[i] += es_Cs137[i-1];
}
fclose(stdin);
freopen_s(&stream_tmp, "data/Na22.txt", "r", stdin);
for (int i = 0; i < 1024; i++)
{
scanf_s("%d,%d", &channel_id, &channel_count);
es_Na22[i] = channel_count;
if (i > 0) es_Na22[i] += es_Na22[i-1];
}
fclose(stdin);
for (int i = 0; i < 1024; i++)
{
es_Co60[i] /= es_Co60[1023];
es_Cs137[i] /= es_Cs137[1023];
es_Na22[i] /= es_Na22[1023];
}
}
CMCADoc::~CMCADoc()
@ -52,11 +89,7 @@ BOOL CMCADoc::OnNewDocument()
return TRUE;
}
// CMCADoc 序列化
void CMCADoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
@ -70,7 +103,6 @@ void CMCADoc::Serialize(CArchive& ar)
}
#ifdef SHARED_HANDLERS
// 缩略图的支持
void CMCADoc::OnDrawThumbnail(CDC& dc, LPRECT lprcBounds)
{
@ -124,7 +156,6 @@ void CMCADoc::SetSearchContent(const CString& value)
#endif // SHARED_HANDLERS
// CMCADoc 诊断
#ifdef _DEBUG
void CMCADoc::AssertValid() const
{
@ -139,3 +170,21 @@ void CMCADoc::Dump(CDumpContext& dc) const
// CMCADoc 命令
double CMCADoc::uniform()
{
int x = rand();
double y = (float)(x % 100) / 100;
return y;
}
void CMCADoc::random_peaks(std::string name)
{
int K;
double eps = uniform();
if (name == "Co60") K = std::lower_bound(es_Co60, es_Co60 + 1024, eps) - es_Co60;
else if (name == "Cs137") K = std::lower_bound(es_Cs137, es_Cs137 + 1024, eps) - es_Cs137;
else K = std::lower_bound(es_Na22, es_Na22 + 1024, eps) - es_Na22;
m_nChannelCount[K] += 1;
}

View File

@ -5,6 +5,7 @@
#pragma once
#include <string>
class CMCADoc : public CDocument
{
@ -14,16 +15,27 @@ protected: // 仅从序列化创建
// 特性
public:
int m_nChannelNum = 0;
int m_nChannelNum = 1024;
int *m_nChannelCount;
private:
// reference spectrum
double es_Co60[1024] = {};
double es_Cs137[1024] = {};
double es_Na22[1024] = {};
// 操作
public:
void random_peaks(std::string name);
private:
double uniform();
// 重写
public:
virtual BOOL OnNewDocument();
virtual void Serialize(CArchive& ar);
#ifdef SHARED_HANDLERS
virtual void InitializeSearchContent();
virtual void OnDrawThumbnail(CDC& dc, LPRECT lprcBounds);

View File

@ -79,7 +79,7 @@ BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
WS_CHILD | WS_VISIBLE, AFX_IDW_PANE_FIRST));
// 左侧窗口创建视图第0行第0列
VERIFY(m_wndSplitter.CreateView(0, 0,
RUNTIME_CLASS(CControlView), CSize(240, 0), pContext));
RUNTIME_CLASS(CControlView), CSize(360, 0), pContext));
// 右侧窗口上下拆分2行1列
VERIFY(m_wndSplitter_2.CreateStatic(&m_wndSplitter, 2, 1,
WS_CHILD | WS_VISIBLE, m_wndSplitter.IdFromRowCol(0, 1)));

View File

@ -8,6 +8,9 @@
#define IDR_MCATYPE 130
#define IDD_DIALOG1 310
#define IDD_DIALOG_CONTROL 310
#define IDC_TREE1 1010
#define IDC_MFCSHELLTREE1 1013
#define IDC_MFCMASKEDEDIT1 1015
#define ID_32786 32786
#define ID_32787 32787
#define ID_32788 32788
@ -33,14 +36,18 @@
#define ID_BUTTON32809 32809
#define ID_BUTTON32810 32810
#define ID_BUTTON32811 32811
#define ID_32812 32812
#define ID_32813 32813
#define ID_32814 32814
#define ID_32815 32815
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 313
#define _APS_NEXT_COMMAND_VALUE 32812
#define _APS_NEXT_CONTROL_VALUE 1008
#define _APS_NEXT_COMMAND_VALUE 32816
#define _APS_NEXT_CONTROL_VALUE 1016
#define _APS_NEXT_SYMED_VALUE 310
#endif
#endif

1024
MCA/data/Co60.txt Normal file

File diff suppressed because it is too large Load Diff

1024
MCA/data/Cs137.txt Normal file

File diff suppressed because it is too large Load Diff

1024
MCA/data/Na22.txt Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -1 +1 @@
Multichannel Analyzer
# Multichannel Analyzer

Binary file not shown.