154 LOG(info) <<
"Updating CCDB";
160 } converter0, converter1;
162 for (
auto& it : mPids) {
163 const auto&
type = it.first.get_type();
166 auto& mftdcs = mMFTDCS[it.first];
173 auto& dpvect = mDpsdoublesmap[it.first];
176 mftdcs.firstValue.first = dpvect[0].get_epoch_time();
177 converter0.raw_data = dpvect[0].payload_pt1;
178 mftdcs.firstValue.second = converter0.double_value;
181 mftdcs.lastValue.first = dpvect.back().get_epoch_time();
182 converter0.raw_data = dpvect.back().payload_pt1;
183 mftdcs.lastValue.second = converter0.double_value;
186 mftdcs.summary.first = dpvect[dpvect.size() - 1].get_epoch_time() - dpvect[0].get_epoch_time();
187 mftdcs.summary.second = dpvect.size();
190 if (dpvect.size() > 1) {
192 auto deltatime = dpvect.back().get_epoch_time() - dpvect[0].get_epoch_time();
196 for (
auto i = 0;
i < dpvect.size(); ++
i) {
198 converter0.raw_data = dpvect[
i].payload_pt1;
200 mean += converter0.double_value;
202 for (
auto j =
i + 1;
j < dpvect.size(); ++
j) {
204 auto deltatime = dpvect[
j].get_epoch_time() - dpvect[
i].get_epoch_time();
206 converter1.raw_data = dpvect[
j].payload_pt1;
208 double delta = std::abs(converter0.double_value - converter1.double_value);
210 if (delta > mftdcs.maxChange.second) {
211 mftdcs.maxChange.first = deltatime;
212 mftdcs.maxChange.second = delta;
217 mean /= dpvect.size();
220 mftdcs.meanValue.first = (dpvect[dpvect.size() - 1].get_epoch_time() + dpvect[0].get_epoch_time()) / 2.;
221 mftdcs.meanValue.second = mean;
225 for (
auto i = 0;
i < dpvect.size(); ++
i) {
226 converter0.raw_data = dpvect[
i].payload_pt1;
227 stddev += pow(converter0.double_value - mean, 2);
230 stddev = stddev / dpvect.size();
231 stddev > 0 ? stddev = sqrt(stddev) : 0;
233 mftdcs.stddevValue.first = mftdcs.meanValue.first;
234 mftdcs.stddevValue.second = stddev;
239 if (dpvect.size() % 2 == 0) {
240 midIdx = dpvect.size() / 2;
242 midIdx = (dpvect.size() + 1) / 2 - 1;
245 mftdcs.midValue.first = dpvect[midIdx].get_epoch_time();
246 converter0.raw_data = dpvect[midIdx].payload_pt1;
247 mftdcs.midValue.second = converter0.double_value;
266 LOG(info) << it.first.get_alias();
271 if (strstr(it.first.get_alias(),
"MFT_RU_LV") &&
272 mftdcs.maxChange.second > mThresholdRULV) {
275 if (strstr(it.first.get_alias(),
"Current/Analog") &&
276 mftdcs.maxChange.second > mThresholdAnalogCurrent) {
279 if (strstr(it.first.get_alias(),
"Current/Digit") &&
280 mftdcs.maxChange.second > mThresholdDigitalCurrent) {
283 if (strstr(it.first.get_alias(),
"Current/BackBias") &&
284 mftdcs.maxChange.second > mThresholdBackBiasCurrent) {
287 if (strstr(it.first.get_alias(),
"Voltage/BackBias") &&
288 mftdcs.maxChange.second > mThresholdBackBiasVoltage) {
295 std::map<std::string, std::string> md;
296 md[
"responsible"] =
"Satoshi Yano";