eis/eqpalg/.do_not_use/no_need/sample_utilites.cpp.bk

108 lines
3.6 KiB
Plaintext

#include <eqpalg/utility/sample_utilites.h>
namespace utility {
/**
* @brief 判断样本是否应该报警
* @param sample 总采样信息
* @param real_value 输入的实际值
* @param diff 运行的差值
* @return true 样本应报警
* @return false 样本不应报警
*/
bool is_alarm_value(SampleTrendAnalysis *sample, double real_value,
double diff) {
bool ret_flag = false;
if (sample->HaveSample()) {
switch (sample->JudgeMode()) {
case JUDGE_MODE::DIFFERENCE:
if (fabs(fabs(real_value) -
fabs(sample->GetProperty()->data.abs_diff.avg)) > diff) {
ret_flag = true;
}
break;
case JUDGE_MODE::PRCENTAGE:
if (fabs(fabs(real_value) -
fabs(sample->GetProperty()->data.abs_diff.avg)) /
fabs(sample->GetProperty()->data.abs_diff.avg) >
diff) {
ret_flag = true;
}
break;
case JUDGE_MODE::NORMAL:
if (real_value > sample->GetProperty()->data.normal_cfdi.up ||
real_value < sample->GetProperty()->data.normal_cfdi.low) {
ret_flag = true;
}
default:
break;
}
}
return ret_flag;
}
/**
* @brief 判断样本是否应该报警 *无报警下限,适用于样本判断偏差是否合法的算法
* @param sample 总采样信息
* @param real_value 输入的实际值
* @param diff 运行的差值
* @return true 样本应报警
* @return false 样本不应报警
*/
bool is_alarm_value_no_down_lim(SampleTrendAnalysis *sample, double real_value,
double diff) {
bool ret_flag = false;
if (sample->HaveSample()) {
switch (sample->JudgeMode()) {
case JUDGE_MODE::DIFFERENCE:
if (fabs(fabs(real_value) -
fabs(sample->GetProperty()->data.abs_diff.avg)) > diff &&
fabs(real_value) - fabs(sample->GetProperty()->data.abs_diff.avg) >
0) {
ret_flag = true;
}
break;
case JUDGE_MODE::PRCENTAGE:
if (fabs(fabs(real_value) -
fabs(sample->GetProperty()->data.abs_diff.avg)) /
fabs(sample->GetProperty()->data.abs_diff.avg) >
diff &&
(fabs(real_value) - fabs(sample->GetProperty()->data.abs_diff.avg)) >
0) {
ret_flag = true;
}
break;
case JUDGE_MODE::NORMAL:
if (real_value > sample->GetProperty()->data.normal_cfdi.up) {
ret_flag = true;
}
default:
break;
}
}
return ret_flag;
}
/**
* @brief 产生样本描述
* @param sample 总样本信息
* @param real_value 输入的实际值
* @param diff 合法区间
* @return string 产生的样本描述
*/
string generate_sample_describe(SampleTrendAnalysis *sample, double real_value,
double diff) {
string value = " 实际值:" + to_string(real_value);
if (sample->JudgeMode() == JUDGE_MODE::DIFFERENCE) {
value += " 区间[" +
to_string(sample->GetProperty()->data.abs_diff.avg - diff) + "," +
to_string(sample->GetProperty()->data.abs_diff.avg + diff) + "]";
} else if (sample->JudgeMode() == JUDGE_MODE::PRCENTAGE) {
value += " 基准值:" + to_string(sample->GetProperty()->data.abs_diff.avg) +
"," + to_string(diff * 100) + "%";
} else if (sample->JudgeMode() == JUDGE_MODE::NORMAL) {
value += " 区间[" + to_string(sample->GetProperty()->data.normal_cfdi.low) +
"," + to_string(sample->GetProperty()->data.normal_cfdi.up) + "]";
}
return value;
}
}