4#include "InfraMed/InfraMed/InfraMed.h"
5#include "InfraMed/InfraMed/MedPidRepository.h"
6#include "MedProcessTools/MedProcessTools/MedSamples.h"
7#include "MedProcessTools/MedProcessTools/MedProcessUtils.h"
10#include <MedMat/MedMat/MedMat.h>
13#define DEFAULT_REP_CLNR_NTHREADS 8
68 virtual void clear() { };
78 vector<pair<string, string>> virtual_signals_generic;
94 virtual int init(
void *params) {
return 0; };
96 virtual int init(map<string, string>& mapper) {
return 0; };
101 virtual void set_signal(
const string& _signalName) {
return; };
117 virtual void add_virtual_signals(map<string, int> &_virtual_signals, map<string, string> &_virtual_signals_generic)
const {
119 for (
auto &v : virtual_signals_generic) _virtual_signals_generic[v.first] = v.second;
146 virtual bool filter(unordered_set<string>& reqSignals);
179 virtual int _apply(
PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_vals) {
return -1; };
181 virtual int _conditional_apply(
PidDynamicRec& rec, vector<int>& time_points, unordered_set<int>& neededSignalIds, vector<vector<float>>& attributes_vals);
184 virtual int _apply_simple(
PidDynamicRec& rec, vector<int>& time_points) {
185 vector<vector<float>> attributes_vals;
186 return _apply(rec, time_points, attributes_vals);
191 int apply(
PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_vals) {
return _apply(rec, time_points, attributes_vals); }
207 virtual void dprint(
const string &pref,
int rp_flag);
213 virtual void make_summary() {};
229 virtual void print() { fprintf(stderr,
"No implementation for print()\n"); }
261 void add_virtual_signals(map<string, int> &_virtual_signals, map<string, string> &_virtual_signals_generic)
const;
281 bool filter(unordered_set<string>& reqSignals);
297 int _apply(
PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_vals);
298 int _apply_simple(
PidDynamicRec& rec, vector<int>& time_points);
306 void dprint(
const string &pref,
int rp_flag);
320#define DEF_REP_TRIMMING_SD_NUM 7
321#define DEF_REP_REMOVING_SD_NUM 14
325 int total_removed = 0, total_pids_touched = 0;
326 int total_records = 0, total_pids = 0;
332 void print_summary(
const string &cleaner_info,
const string &signal_name,
333 int minimal_pid_cnt,
float print_summary_critical_cleaned,
bool prnt_flg)
const;
345 bool is_categ =
false;
374 params.trimming_sd_num = DEF_REP_TRIMMING_SD_NUM;
params.removing_sd_num = DEF_REP_REMOVING_SD_NUM;
params.nbrs_sd_num = 0;
379 params.missing_value = MED_MAT_MISSING_VALUE;
390 int init(
void *processor_params) {
return MedValueCleaner::init(processor_params); };
393 virtual int init(map<string, string>& mapper);
408 int _apply(
PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
414 void dprint(
const string &pref,
int rp_flag);
420 ADD_SERIALIZATION_FUNCS(
processor_type,
signalName,
time_channel,
val_channel,
req_signals,
aff_signals,
params.take_log,
params.missing_value,
params.doTrim,
params.doRemove,
430 double logicalLow, logicalHigh, confirmedLow, confirmedHigh;
431 double trimLow, trimHigh;
432 string distLow, distHigh;
436 distLow, distHigh, trimLow, trimHigh, val_channel)
458 params.trimming_sd_num = DEF_REP_TRIMMING_SD_NUM; params.removing_sd_num = DEF_REP_REMOVING_SD_NUM; params.nbrs_sd_num = 0;
460 params.doTrim = params.doRemove =
true;
463 params.missing_value = MED_MAT_MISSING_VALUE;
472 int init(map<string, string>& mapper);
479 ADD_SERIALIZATION_FUNCS(processor_type, signalName, time_channel, val_channel, req_signals, aff_signals, params.take_log, params.missing_value, params.doTrim, params.doRemove,
480 trimMax, trimMin, removeMax, removeMin, confFileName, cleanMethod, outlierParam, nRem_attr, nTrim_attr, nRem_attr_suffix, nTrim_attr_suffix)
485void learnDistributionBorders(
float& borderHi,
float& borderLo, vector<
float> filteredValues);
528 string nRem_attr =
"";
529 string nRem_attr_suffix =
"";
531 float tolerance = 0.1F;
536 bool print_summary =
false;
537 float print_summary_critical_cleaned = (float)0.05;
540 map <int, vector<string>>rules2Signals = {
541 {1,{
"BMI",
"Weight",
"Height"}},
542 {2,{
"MCH",
"Hemoglobin",
"RBC"}},
543 {3,{
"MCV",
"Hematocrit",
"RBC"} },
544 {4,{
"MCHC-M",
"MCH",
"MCV"}},
545 {5,{
"Eosinophils#",
"Monocytes#",
"Basophils#",
"Lymphocytes#",
"Neutrophils#",
"WBC" }},
546 {6,{
"MPV",
"Platelets_Hematocrit",
"Platelets" }},
547 {7,{
"UrineAlbumin",
"UrineTotalProtein" }},
548 {8,{
"UrineAlbumin_over_Creatinine",
"UrineAlbumin",
"UrineCreatinine" }},
549 {9,{
"LDL",
"HDL",
"Cholesterol"}},
550 {10,{
"NonHDLCholesterol",
"HDL",
"Cholesterol"}},
551 {11,{
"HDL_over_nonHDL",
"HDL",
"NonHDLCholesterol"}},
552 {12,{
"HDL_over_Cholesterol",
"HDL",
"Cholesterol"}},
553 {13,{
"HDL_over_LDL",
"HDL",
"LDL"}},
554 {14,{
"HDL_over_LDL",
"LDL_over_HDL"}},
555 {15,{
"Cholesterol_over_HDL",
"Cholesterol",
"HDL"}},
556 {17,{
"Cholesterol_over_HDL",
"HDL_over_Cholesterol"}},
557 {18,{
"LDL_over_HDL",
"LDL",
"HDL"}},
558 {19,{
"Albumin",
"Protein_Total"}},
559 {20,{
"FreeT4",
"T4"}},
561 {22,{
"CHADS2",
"CHADS2_VASC"}},
567 vector <int> rulesToApply;
573 unordered_map<int, vector<int>> rules_sids;
574 unordered_map<int, vector<bool>> affected_by_rules;
579 void init_defaults();
581 void parse_rules_signals(
const string &path);
582 void parse_sig_channels(
const string &path);
586 int init(
void *processor_params) {
return 0; };
590 int init(map<string, string>& mapper);
593 void init_attributes();
606 int _apply(
PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
618 void dprint(
const string &pref,
int rp_flag);
622 ADD_SERIALIZATION_FUNCS(processor_type, time_window, calc_res, rules2Signals, rulesToApply, rules2RemoveSignal, signal_channels, consideredRules, tolerance, req_signals, aff_signals, nRem_attr,
623 nRem_attr_suffix, verbose_file, print_summary, print_summary_critical_cleaned)
628 bool applyRule(
int rule,
const vector<UniversalSigVec> &ruleUsvs,
629 const vector<int> &val_channels,
const vector<int> &sPointer);
632 unordered_map<string, remove_stats> _rmv_stats;
635 void select_rules_to_apply();
639#define DEF_REP_NBRS_NBRS_SD_NUM 5
640#define DEF_REP_NBRS_TRIM_SD_NUM 7
641#define DEF_REP_NBRS_REMOVING_SD_NUM 14
674 params.trimming_sd_num = DEF_REP_NBRS_TRIM_SD_NUM;
params.removing_sd_num = DEF_REP_NBRS_REMOVING_SD_NUM;
params.nbrs_sd_num = DEF_REP_NBRS_NBRS_SD_NUM;
679 params.missing_value = MED_MAT_MISSING_VALUE;
689 int init(
void *processor_params) {
return MedValueCleaner::init(processor_params); };
692 int init(map<string, string>& mapper);
705 int _apply(
PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
709 ADD_SERIALIZATION_FUNCS(
processor_type,
signalName,
time_channel,
val_channel,
req_signals,
aff_signals,
params.take_log,
params.missing_value,
params.doTrim,
params.doRemove,
710 trimMax, trimMin,
removeMax, removeMin,
nbr_time_unit,
nbr_time_width,
nbrsMax, nbrsMin,
nRem_attr,
nTrim_attr,
nRem_attr_suffix,
nTrim_attr_suffix)
741 string nHandle_attr =
"";
742 string nHandle_attr_suffix =
"";
750 RepSimValHandler(
const string& _signalName,
string init_string) { init_defaults(); processor_type =
REP_PROCESS_SIM_VAL; signalId = -1; signalName = _signalName; init_from_string(init_string); }
753 void set_signal(
const string& _signalName) { signalId = -1; signalName = _signalName; init_lists(); }
760 virtual int init(map<string, string>& mapper);
769 void init_attributes();
772 int _apply(
PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
780 ADD_SERIALIZATION_FUNCS(processor_type, signalName, time_channels, req_signals, aff_signals, nHandle_attr, nHandle_attr_suffix, handler_type)
782 void handle_block(
int start,
int end, UniversalSigVec& usv, vector<int>& remove,
int& nRemove, vector<pair<
int, vector<float>>>& change,
int& nChange,
int& nTimes);
825 WHITE_PNL_EOS_N, WHITE_PNL_EOS_P,
826 WHITE_PNL_NEU_N, WHITE_PNL_NEU_P,
827 WHITE_PNL_LYM_N, WHITE_PNL_LYM_P,
828 WHITE_PNL_MON_N, WHITE_PNL_MON_P,
829 WHITE_PNL_BAS_N, WHITE_PNL_BAS_P,
844 LIPIDS_PNL_HDL_OVER_CHOL,
845 LIPIDS_PNL_CHOL_OVER_HDL,
846 LIPIDS_PNL_HDL_OVER_LDL,
847 LIPIDS_PNL_LDL_OVER_HDL,
848 LIPIDS_PNL_NON_HDL_CHOL,
849 LIPIDS_PNL_HDL_OVER_NON_HDL,
885 vector<vector<string> > panel_signal_names;
886 vector<vector<int> > panel_signal_ids;
889 int bdateId, genderId;
890 string genderSignalName;
893 float missing_val = MED_MAT_MISSING_VALUE;
899 string metadata_file;
900 vector<vector<float> > original_sig_res, final_sig_res, sig_conversion_factors;
905 int init(map<string, string>& mapper);
908 void init_defaults();
911 int update_signal_names(
string panel,
string& names);
914 int update_panels(
string& panels);
929 void read_metadata();
937 int _apply(
PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
940 int apply_red_line_completer(
PidDynamicRec& rec, vector<int>& time_points);
941 int apply_white_line_completer(
PidDynamicRec& rec, vector<int>& time_points);
942 int apply_platelets_completer(
PidDynamicRec& rec, vector<int>& time_points);
943 int apply_lipids_completer(
PidDynamicRec& rec, vector<int>& time_points);
944 int apply_eGFR_completer(
PidDynamicRec& rec, vector<int>& time_points);
945 int apply_BMI_completer(
PidDynamicRec& rec, vector<int>& time_points);
946 int apply_GCS_completer(
PidDynamicRec& rec, vector<int>& time_points);
950 int perpare_for_age_and_gender(
PidDynamicRec& rec,
int& age,
int& bYear,
int& gender);
953 inline float completer_round(
float value,
float orig_res,
float final_res,
float factor) {
return set_resolution(set_resolution(value / factor, orig_res) * factor, final_res); }
954 inline float set_resolution(
float value,
float res) {
return res * (int)(value / res + 0.5); }
957 void get_panels(vector<UniversalSigVec>& usvs, vector<int>& panel_times, vector<vector<float>>& panels,
int time_limit,
int panel_size);
960 int triplet_complete(vector<float>& panel,
float factor,
int x_idx,
int y_idx,
int z_idx, vector<float>& orig_res, vector<float>& final_res, vector<float>& conv, vector<int>& changed);
961 int sum_complete(vector<float>& panel,
int sum, vector<int>& summands, vector<float>& orig_res, vector<float>& final_res, vector<float>& conv, vector<int>& changed);
962 int reciprocal_complete(vector<float>& panel,
float factor,
int x_idx,
int y_idx, vector<float>& orig_res, vector<float>& final_res, vector<float>& conv, vector<int>& changed);
963 int egfr_complete(vector<float>& panel,
float age,
int gender, vector<float>& orig_res, vector<float>& final_res, vector<float>& conv, vector<int>& changed);
966 int update_signals(
PidDynamicRec& rec,
int iver, vector<vector<float>>& panels, vector<int>& panel_times, vector<int>& sigs_ids, vector<int>& changed);
971 ADD_SERIALIZATION_FUNCS(processor_type, panel_signal_names, missing_val, sim_val_handler, original_sig_res, final_sig_res, sig_conversion_factors, metadata_file, req_signals, aff_signals, virtual_signals)
975 map<string, PanelCompleterTypes> panel2type = {
986 map<string, vector<string> > panel2signals = {
987 {
"red_line", {
"MCV",
"Hematocrit",
"RBC",
"MCH",
"MCHC-M",
"Hemoglobin"}},
988 {
"white_line", {
"WBC",
"Eosinophils#",
"Eosinophils%",
"Neutrophils#",
"Neutrophils%",
"Lymphocytes#",
"Lymphocytes%",
"Monocytes#",
"Monocytes%",
"Basophils#",
"Basophils%"}},
989 {
"platelets", {
"Platelets",
"Platelets_Hematocrit",
"MPV"}},
990 {
"lipids",{
"Cholesterol",
"LDL",
"HDL",
"HDL_over_Cholesterol",
"Cholesterol_over_HDL",
"HDL_over_LDL",
"LDL_over_HDL",
"NonHDLCholesterol",
"HDL_over_nonHDL",
"Triglycerides",
"VLDL"}},
991 {
"egfr", {
"Creatinine",
"eGFR_CKD_EPI",
"eGFR_MDRD"}},
992 {
"bmi", {
"BMI",
"Weight",
"Height"}},
993 {
"gcs", {
"GCS",
"GCS_Eye",
"GCS_Motor",
"GCS_Verbal"}}
996 vector<int> white_panel_nums = { WHITE_PNL_EOS_N,WHITE_PNL_NEU_N,WHITE_PNL_LYM_N,WHITE_PNL_MON_N,WHITE_PNL_BAS_N };
997 vector<int> white_panel_precs = { WHITE_PNL_EOS_P,WHITE_PNL_NEU_P,WHITE_PNL_LYM_P,WHITE_PNL_MON_P,WHITE_PNL_BAS_P };
998 vector<int> chol_types1 = { LIPIDS_PNL_NON_HDL_CHOL,LIPIDS_PNL_HDL };
999 vector<int> chol_types2 = { LIPIDS_PNL_LDL, LIPIDS_PNL_HDL, LIPIDS_PNL_VLDL };
1000 vector<int> gcs_panel_parts = { GCS_PNL_EYE,GCS_PNL_MOTOR,GCS_PNL_VERBAL };
1003 unordered_map<int, int> eye_vals, verbal_vals, motor_vals;
1004 void convert_gcs_signals(vector<float> &panel);
1038 vector<string> output_signal_names;
1039 float missing_value = (float)MED_MAT_MISSING_VALUE;
1040 string calculator_name =
"";
1041 int work_channel = 0;
1042 bool need_time =
false;
1043 bool keep_only_in_range =
false;
1046 virtual int init(map<string, string>& mapper) {
return 0; };
1048 virtual void validate_arguments(
const vector<string> &input_signals,
const vector<string> &output_signals)
const {};
1050 virtual bool do_calc(
const vector<float> &vals,
float &res)
const { HMTHROW_AND_ERR(
"Error %s::do_calc not implemented\n", my_class_name().c_str()); };
1052 virtual void list_output_signals(
const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals,
const string &output_type) { HMTHROW_AND_ERR(
"Error %s::do_calc not implemented\n", my_class_name().c_str()); };
1056 virtual void get_required_signal_categories(unordered_map<
string, vector<string>> &signal_categories_in_use)
const {};
1058 virtual void fit_for_repository(
MedPidRepository &rep, vector<pair<string, string>> &_virtual_signals) {};
1065 void *new_polymorphic(
string derived_class_name);
1078 EmptyCalculator() { calculator_name =
"empty"; keep_only_in_range =
false; };
1080 void validate_arguments(
const vector<string> &input_signals,
const vector<string> &output_signals)
const;
1081 void list_output_signals(
const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals,
const string &output_type);
1082 bool do_calc(
const vector<float> &vals,
float &res)
const;
1095 float power_base = 1;
1096 float power_mone = 1;
1098 RatioCalculator() { calculator_name =
"ratio"; keep_only_in_range =
false; };
1100 int init(map<string, string>& mapper);
1102 void validate_arguments(
const vector<string> &input_signals,
const vector<string> &output_signals)
const;
1103 void list_output_signals(
const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals,
const string &output_type);
1104 bool do_calc(
const vector<float> &vals,
float &res)
const;
1107 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range, factor, power_base, power_mone)
1118 int n_variables = 4;
1120 int kfre_version = 2;
1121 int prediction_years = 5;
1122 std::string region =
"original";
1124 bool discard_range_check =
false;
1126 std::map<std::string, int> region2id = {
1128 {
"north_american", 1 },
1129 {
"non_north_american", 2 },
1133 KfreCalculator() { calculator_name =
"KFRE"; need_time =
true; keep_only_in_range =
true; };
1134 int init(map<string, string>& mapper);
1135 void validate_arguments(
const vector<string> &input_signals,
const vector<string> &output_signals)
const;
1136 void list_output_signals(
const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals,
const string &output_type);
1137 bool do_calc(
const vector<float> &vals,
float &res)
const;
1140 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, n_variables, n_variables, prediction_years, kfre_version, region, discard_range_check)
1149 float ethnicity = 0;
1152 eGFRCalculator() { calculator_name =
"eGFR_CKD_EPI"; need_time =
true; keep_only_in_range =
true; };
1154 int init(map<string, string>& mapper);
1155 void validate_arguments(
const vector<string> &input_signals,
const vector<string> &output_signals)
const;
1156 void list_output_signals(
const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals,
const string &output_type);
1157 bool do_calc(
const vector<float> &vals,
float &res)
const;
1160 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range, ethnicity, mdrd)
1168 logCalculator() { calculator_name =
"log"; keep_only_in_range =
false; };
1171 int init(map<string, string>& mapper);
1172 void validate_arguments(
const vector<string> &input_signals,
const vector<string> &output_signals)
const;
1173 void list_output_signals(
const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals,
const string &output_type);
1175 bool do_calc(
const vector<float> &vals,
float &res)
const;
1192 int init(map<string, string>& mapper);
1193 void validate_arguments(
const vector<string> &input_signals,
const vector<string> &output_signals)
const;
1194 void list_output_signals(
const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals,
const string &output_type);
1195 bool do_calc(
const vector<float> &vals,
float &res)
const;
1198 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range, factors, b0)
1209 float in_range_val = 1;
1210 float out_range_val = 0;
1212 RangeCalculator() { calculator_name =
"range"; min_range = MED_MAT_MISSING_VALUE; max_range = MED_MAT_MISSING_VALUE; };
1214 int init(map<string, string>& mapper);
1215 void validate_arguments(
const vector<string> &input_signals,
const vector<string> &output_signals)
const;
1216 void list_output_signals(
const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals,
const string &output_type);
1217 bool do_calc(
const vector<float> &vals,
float &res)
const;
1220 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range, min_range, max_range, in_range_val, out_range_val)
1234 int init(map<string, string>& mapper);
1236 void validate_arguments(
const vector<string> &input_signals,
const vector<string> &output_signals)
const;
1237 void list_output_signals(
const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals,
const string &output_type);
1239 bool do_calc(
const vector<float> &vals,
float &res)
const;
1242 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range, powers, b0)
1251 vector<string> sets;
1252 float in_range_val = 1;
1253 float out_range_val = 0;
1254 bool regex_on_sets =
false;
1257 int init(map<string, string>& mapper);
1259 void validate_arguments(
const vector<string> &input_signals,
const vector<string> &output_signals)
const;
1260 void list_output_signals(
const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals,
const string &output_type);
1263 bool do_calc(
const vector<float> &vals,
float &res)
const;
1265 void get_required_signal_categories(unordered_map<
string, vector<string>> &signal_categories_in_use)
const;
1268 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range, input_signal, sets, in_range_val, out_range_val)
1271 string input_signal =
"";
1280 float in_range_val = 1;
1281 float out_range_val = 0;
1283 ExistsCalculator() { calculator_name =
"exists"; keep_only_in_range =
true; need_time =
true; };
1285 int init(map<string, string>& mapper);
1287 void validate_arguments(
const vector<string> &input_signals,
const vector<string> &output_signals)
const;
1288 void list_output_signals(
const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals,
const string &output_type);
1290 bool do_calc(
const vector<float> &vals,
float &res)
const;
1293 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range, in_range_val, out_range_val)
1302 vector<string> additional_dict_vals;
1304 calculator_name =
"constant_value"; is_numeric =
false; value =
""; numeric_val = 1;
1308 int init(map<string, string>& mapper);
1310 void validate_arguments(
const vector<string> &input_signals,
const vector<string> &output_signals)
const;
1311 void list_output_signals(
const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals,
const string &output_type);
1313 bool do_calc(
const vector<float> &vals,
float &res)
const;
1315 void fit_for_repository(
MedPidRepository &rep, vector<pair<string, string>> &_virtual_signals);
1318 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range, value, is_numeric, numeric_val, output_signal_names, additional_dict_vals)
1331 int work_channel = 0;
1332 int time_channel = 0;
1335 float missing_value = (float)MED_MAT_MISSING_VALUE;
1342 int max_time_search_range = 0;
1343 string calculator_init_params =
"";
1347 output_signal_type =
"T(i),V(f)";
1352 int init(map<string, string>& mapper);
1365 int _apply(
PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1369 void get_required_signal_categories(unordered_map<
string, vector<string>> &signal_categories_in_use)
const;
1375 ADD_SERIALIZATION_FUNCS(processor_type, calculator, calculator_init_params, max_time_search_range, signals_time_unit,
1376 signals, V_names, req_signals, aff_signals, virtual_signals, virtual_signals_generic, work_channel, time_channel, calculator_logic, output_signal_type)
1377 void post_deserialization() {
1379 pass_time_last = p->need_time;
1396 bool pass_time_last =
false;
1398 const map<string, vector<string>> calc2req_sigs = {
1401 {
"calc_eGFR", {
"Creatinine",
"GENDER",
"BDATE"}}
1405 vector<int> sigs_ids;
1406 vector<bool> static_input_signals;
1408 int apply_calc_in_time(
PidDynamicRec& rec, vector<int>& time_points);
1411 int out_n_val_ch, out_n_time_ch;
1435 signal_type =
"T(i,i),V(f,f)";
1441 int init(map<string, string>& mapper);
1450 int _apply(
PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1455 unconditional, req_signals, aff_signals, virtual_signals,
1456 virtual_signals_generic, signal_type, factor_channel)
1459 vector<int> sigs_ids;
1460 int v_out_n_time_ch, v_out_n_val_ch;
1487 int init(map<string, string>& mapper);
1491 int _apply(
PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1493 void get_required_signal_categories(unordered_map<
string, vector<string>> &signal_categories_in_use)
const;
1498 req_signals, aff_signals, virtual_signals, virtual_signals_generic, val_channel, output_signal_type)
1503 int v_out_n_time_ch, v_out_n_val_ch;
1529 input_name(
""), output_name(
""), period(0), time_unit_sig(global_default_windows_time_unit), time_unit_win(global_default_windows_time_unit), in_sid(-1) {
1537 int init(map<string, string>& mapper);
1541 int _apply(
PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1545 void get_required_signal_categories(unordered_map<
string, vector<string>> &signal_categories_in_use)
const;
1548 ADD_SERIALIZATION_FUNCS(processor_type, input_name, output_name, sets, period, req_signals, aff_signals, virtual_signals, virtual_signals_generic, time_unit_win, time_unit_sig, in_sid, V_ids, lut)
1574 int get_values_in_range = 1;
1576 int range_val_channel = -1;
1578 bool regex_on_sets = 0;
1580 bool do_on_last_n =
false;
1584 signal_name(
""), ranges_name(
""), output_name(
""), signal_id(-1), ranges_id(-1),
1585 output_id(-1), time_channel(0), output_type(3) {
1587 range_time_channel = 1;
1595 bool get_last_n_value(
int time,
const UniversalSigVec& range_sig,
float& last_value);
1600 virtual int init(map<string, string>& mapper);
1603 int _apply(
PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1610 req_signals, aff_signals, signal_id, ranges_id, output_id, virtual_signals, virtual_signals_generic,
1611 output_type, get_values_in_range, range_operator, range_val_channel, sets, range_time_channel, last_n, do_on_last_n, regex_on_sets)
1630 work_channel = 0; factor = 1;
1631 output_signal_type =
"T(i,i),V(f)";
1635 int init(map<string, string>& mapper);
1643 int _apply(
PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1648 work_channel, factor, unconditional, req_signals, aff_signals,
1649 virtual_signals, virtual_signals_generic, output_signal_type)
1653 int v_out_n_time_ch, v_out_n_val_ch;
1664 int start_time_channel;;
1677 start_time_channel = 0;
1678 end_time_channel = 0;
1680 time_unit = global_default_windows_time_unit;
1681 drop_missing_rate = 1;
1683 output_name =
"calc_aggregate";
1685 buffer_first =
true;
1686 output_signal_type =
"T(i),V(f)";
1690 int init(map<string, string>& mapper);
1700 int _apply(
PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1704 ADD_SERIALIZATION_FUNCS(processor_type, signalName, output_name, work_channel, factor, time_window, time_unit,
1705 start_time_channel, end_time_channel, drop_missing_rate, buffer_first, unconditional, req_signals, aff_signals, virtual_signals, virtual_signals_generic, output_signal_type)
1709 int v_out_n_time_ch, v_out_n_val_ch;
1716 int first_appearance = 0;
1717 int last_appearance = 0;
1718 int n_appearances = 0;
1722 category_time_interval(
int _first,
int _last,
int _n,
int _last_time) { first_appearance = _first; last_appearance = _last; n_appearances = _n; last_time = _last_time; }
1724 void set(
int _first,
int _last,
int _n,
int _last_time) { first_appearance = _first; last_appearance = _last; n_appearances = _n; last_time = _last_time; }
1729 int appear_time = 0;
1734 category_event_state(
int _time,
int _appear_time,
int _categ,
int _type) { time = _time; appear_time = _appear_time; categ = _categ; type = _type; }
1735 void set(
int _time,
int _appear_time,
int _categ,
int _type) { time = _time; appear_time = _appear_time; categ = _categ; type = _type; }
1739 if (time < c.time)
return true;
1740 if (time > c.time)
return false;
1741 if (type < c.type)
return true;
1754 combination_state(
int time,
int _state,
int N) { start = time; state = _state; last.assign(N, -1); }
1774 string out_virtual =
"";
1777 int duration_chan = 1;
1778 int min_duration = 60;
1779 vector<int> min_durations = {};
1780 int max_duration = 180;
1781 float duration_add = 0;
1782 float duration_mult = 0.1f;
1783 int dont_look_back = 7;
1784 int min_clip_time = 7;
1785 int last_clip_period = 30;
1786 vector<int> min_jitters = { 0,0,0 };
1787 int max_min_jitters;
1792 bool change_at_prescription_mode =
false;
1795 string print_dict =
"";
1796 int time_channels = 1;
1797 vector<char> all_cat_lut;
1798 vector<vector<char>> categories_luts;
1803 int init(map<string, string>& mapper);
1804 void get_min_jitters(
string& jitters_s);
1814 int _apply(
PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1816 void get_required_signal_categories(unordered_map<
string, vector<string>> &signal_categories_in_use)
const;
1821 t_chan, c_chan, duration_chan, min_duration, min_durations, max_duration, duration_add, duration_mult, dont_look_back, min_clip_time, last_clip_period, categories_names, categories_sets, time_unit_sig, time_unit_duration, change_at_prescription_mode,
1822 virtual_signals_generic, time_channels, min_jitters)
1827 vector<string> registry_values;
1850 int win_from = 0, win_to = 0;
1853 string attrName =
"MissingReq";
1856 vector<int> sig_time_units;
1862 int init(map<string, string>& mapper);
1880 int _apply(
PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1884 ADD_SERIALIZATION_FUNCS(processor_type, signalNames, time_channels, win_from, win_to, window_time_unit, attrName, req_signals)
1895 int time_channel = 0;
1896 int truncate_time_channel = -1;
1897 int win_time_unit = global_default_windows_time_unit;
1898 int rep_time_unit = global_default_time_unit;
1902 int take_last_events = -1;
1916 int _apply(
PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1919 int init(map<string, string>& mapper);
1922 int get_sub_usv_data(UniversalSigVec &usv,
int from_time,
int to_time, vector<char> &data,
int &len);
1929 win_from, win_to, delete_sig, take_last_events, req_signals, aff_signals, truncate_time_channel)
1941 bool on_learning =
false;
1946 vector<mt19937> gens;
1953 int val_channel = 0;
1954 int time_channel = 0;
1956 float value_noise = 0;
1958 float drop_probability = (float)0.0;
1967 int N_TH = omp_get_max_threads();
1968 gens.resize(3*N_TH);
1969 for (
size_t i = 0; i < 3*N_TH; ++i)
1970 gens[i] = mt19937(rd());
1980 int _apply(
PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1983 int init(map<string, string>& mapper);
1990 time_noise, value_noise, drop_probability, req_signals, aff_signals, stdev, truncation, apply_in_test)
1998 vector<int> new_order;
1999 string signal_name =
"";
2006 void set_signal(
const string& _signalName) { sid = -1; signal_name = _signalName; }
2009 int init(map<string, string>& mapper);
2013 int _apply(
PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
2018 ADD_SERIALIZATION_FUNCS(processor_type, req_signals, aff_signals, virtual_signals, virtual_signals_generic, signal_name, new_order)
2028int get_values(
MedRepository& rep,
MedSamples& samples,
int signalId,
int time_channel,
int val_channel,
float range_min,
float range_max, vector<float>& values,
2029 vector<RepProcessor *>& prev_cleaners);
2031int get_values(
MedRepository& rep,
MedSamples& samples,
int signalId,
int time_channel,
int val_channel,
float range_min,
float range_max, vector<float>& values);
A parent class for single-value cleaners.
@ VAL_CLNR_ITERATIVE
"iterative"
Definition MedValueCleaner.h:12
RepProcessorTypes
Define types of repository processors.
Definition RepProcess.h:20
@ REP_PROCESS_BASIC_RANGE_CLEANER
"basic_range_cleaner" or "range_cln" to activate RepBasicRangeCleaner
Definition RepProcess.h:34
@ REP_PROCESS_COMPLETE
"complete" to activate RepPanelCompleter
Definition RepProcess.h:27
@ REP_PROCESS_CREATE_BIT_SIGNAL
"bit_signal" creates a state of categories (typically drugs) encoded in bits. creates RepCreateBitSig...
Definition RepProcess.h:38
@ REP_PROCESS_REODER_CHANNELS
"reoder_channels" reorder signal channels. Creates RepReoderChannels
Definition RepProcess.h:40
@ REP_PROCESS_CATEGORY_DESCENDERS
"category_descenders" creates all descenders values for each category value. Creates RepCategoryDesce...
Definition RepProcess.h:39
@ REP_PROCESS_HISTORY_LIMIT
"history_limit" chomps the history for a signal to be at a certain given time window relative to the ...
Definition RepProcess.h:36
@ REP_PROCESS_SIM_VAL
"sim_val" or "sim_val_handler" handle multiple simultanous values to activate RepSimValHandler
Definition RepProcess.h:29
@ REP_PROCESS_BASIC_OUTLIER_CLEANER
"basic_outlier_cleaner" or "basic_cln" to activate RepBasicOutlierCleaner
Definition RepProcess.h:22
@ REP_PROCESS_NUMERIC_NOISER
"numeric_noiser" adds gaussian noise to value and uniform noise to time for numeric signal....
Definition RepProcess.h:42
@ REP_PROCESS_SIGNAL_RATE
"signal_rate" combine complition for Drug rate based on Drug amount to activate RepSignalRate
Definition RepProcess.h:30
@ REP_PROCESS_AGGREGATION_PERIOD
"aggregation_period" - creates RepAggregationPeriod
Definition RepProcess.h:33
@ REP_PROCESS_CONFIGURED_OUTLIER_CLEANER
"configured_outlier_cleaner" or "conf_cln" to activate RepConfiguredOutlierCleaner
Definition RepProcess.h:24
@ REP_PROCESS_CREATE_REGISTRY
"create_registry" creates a registry signal (TimeRange to values). creates RepCreateRegistry
Definition RepProcess.h:37
@ REP_PROCESS_SPLIT
"split" split signal to two signals based on set of values - usefull for example to give diffrent rul...
Definition RepProcess.h:32
@ REP_PROCESS_AGGREGATE
"aggregate" - aggregate signal in sliding time window to calc some aggregation function....
Definition RepProcess.h:35
@ REP_PROCESS_FILTER_BY_CHANNELS
"filter_channels" reorder signal channels. Creates RepFilterByChannel
Definition RepProcess.h:41
@ REP_PROCESS_CALC_SIGNALS
"calc_signals" or "calculator" to activate RepCalcSimpleSignals
Definition RepProcess.h:26
@ REP_PROCESS_COMBINE
"combine" flatten signals to 1 signal by dates. if conflict chooses based on order given....
Definition RepProcess.h:31
@ REP_PROCESS_NBRS_OUTLIER_CLEANER
"nbrs_outlier_cleaner" or "nbrs_cln" to activate RepNbrsOutlierCleaner
Definition RepProcess.h:23
@ REP_PROCESS_RULEBASED_OUTLIER_CLEANER
"rulebased_outlier_cleaner" or "rule_cln" to activate RepRuleBasedOutlierCleaner
Definition RepProcess.h:25
@ REP_PROCESS_FILTER_BY_DIAG
"filter_by_diag". Creates RepClearSignalByDiag
Definition RepProcess.h:43
@ REP_PROCESS_CHECK_REQ
"req" or "requirements" check compliance with minimal requirement to activate RepCheckReq
Definition RepProcess.h:28
@ REP_PROCESS_MULTI
"multi_processor" or "multi" to activate RepMultiProcessor
Definition RepProcess.h:21
RepProcessorTypes rep_processor_name_to_type(const string &procesor_name)
get RepProcessorTypes from name
Definition RepProcess.cpp:25
PanelCompleterTypes
RepPanelCompleter fills-in calculatable signal values.
Definition RepProcess.h:802
@ REP_CMPLT_RED_LINE_PANEL
complete values of the red blood line
Definition RepProcess.h:803
@ REP_CMPLT_LAST
Last not in use.
Definition RepProcess.h:810
@ REP_CMPLT_BMI_PANEL
complete BMI/HIGHT/WEIGHT values
Definition RepProcess.h:808
@ REP_CMPLT_WHITE_LINE_PANEL
complete values of the white blood line
Definition RepProcess.h:804
@ REP_CMPLT_GCS
complete Glasgow Coma Score
Definition RepProcess.h:809
@ REP_CMPLT_LIPIDS_PANEL
complete lipd values
Definition RepProcess.h:806
@ REP_CMPLT_EGFR_PANEL
complete eGFR values
Definition RepProcess.h:807
@ REP_CMPLT_PLATELETS_PANEL
complete values of platelets measurements
Definition RepProcess.h:805
SimValHandleTypes
SimValHandler handles multiple values at the same time.
Definition RepProcess.h:721
range_op_type
A filter on signal events using other range signal with time periods.
Definition RepProcess.h:1555
An Abstract class that can be serialized and written/read from file.
#define ADD_SERIALIZATION_FUNCS(...)
Definition SerializableObject.h:122
#define MEDSERIALIZE_SUPPORT(Type)
Definition SerializableObject.h:108
Definition RepProcess.h:1296
Dummy top create empty virtual signal.
Definition RepProcess.h:1076
A is in as exists operation which return binary output res := in_range_val if signal exists otherwise...
Definition RepProcess.h:1278
KFRE calculator based on Age, Gender and eGFR (in that order)
Definition RepProcess.h:1113
Definition MedDictionary.h:87
MedIdSamples represent a collection of samples of a given id Additional (optinal) entries: split
Definition MedSamples.h:90
Definition MedPidRepository.h:87
Definition InfraMed.h:303
MedSamples represent a collection of samples per different id The data is conatined in a vector of ...
Definition MedSamples.h:129
Definition MedSignals.h:719
static const int Undefined
undefined time unit
Definition MedTime.h:24
static const int Days
days since 1900/01/01
Definition MedTime.h:28
static const int Date
dates are in full regular format YYYYMMDD
Definition MedTime.h:25
Definition MedValueCleaner.h:61
float removeMax
Thresholds for removing.
Definition MedValueCleaner.h:71
float trimMax
Thresholds for trimming.
Definition MedValueCleaner.h:68
float nbrsMax
Thresholds for neighbors.
Definition MedValueCleaner.h:74
ValueCleanerParams params
Learning parameters.
Definition MedValueCleaner.h:65
A multiply operation with power on both arguments.
Definition RepProcess.h:1227
vector< float > powers
power for args
Definition RepProcess.h:1229
Definition MedPidRepository.h:127
A simple Range check that return in_range_val if within range and returns out_range_val if outside ra...
Definition RepProcess.h:1205
float max_range
max range check
Definition RepProcess.h:1208
float min_range
min range check
Definition RepProcess.h:1207
Calcs ratio between 2 inputs signals.
Definition RepProcess.h:1092
An Aggregator for signal in sliding time window.
Definition RepProcess.h:1659
string signalName
the name of inout signal
Definition RepProcess.h:1661
void set_required_signal_ids(MedDictionarySections &dict)
Fill req_signal_ids : parent function just fills from req_signals.
Definition RepProcess.h:1693
int time_window
back time window to search for
Definition RepProcess.h:1667
int work_channel
channel for value
Definition RepProcess.h:1663
string output_signal_type
same as input signal - will remove later after change init process of RepProcessor to fetch input sig...
Definition RepProcess.h:1671
void set_affected_signal_ids(MedDictionarySections &dict)
Fill aff_signal_ids : parent function just fills from aff_signals.
Definition RepProcess.h:1694
int end_time_channel
time channel for start time
Definition RepProcess.h:1665
bool buffer_first
If true will wait for first buffer to complete.
Definition RepProcess.h:1670
float drop_missing_rate
If missing time points beyond this threshold will drop measurement.
Definition RepProcess.h:1669
float factor
final factor to multiply
Definition RepProcess.h:1666
int time_unit
time unit
Definition RepProcess.h:1668
string output_name
the name of virtual signal
Definition RepProcess.h:1662
creates a signal of time ranges in which the input signal (usually medication) was active ranges are ...
Definition RepProcess.h:1512
string input_name
name of input signal used by the processor
Definition RepProcess.h:1514
int period
period to consider active after signal in win time units
Definition RepProcess.h:1517
vector< string > sets
the sets to check if signal value is in set
Definition RepProcess.h:1516
string output_name
name of signal created by the processor
Definition RepProcess.h:1515
A simple cleaner considering each value of a certain signal separatley.
Definition RepProcess.h:341
string nRem_attr_suffix
Attribute suffix (name is sample is signalName_suffix) for number of removed. not recorded if empty.
Definition RepProcess.h:355
string nTrim_attr
Attribute name (in sample) for number of trimmed. not recorded if empty.
Definition RepProcess.h:354
int iterativeLearn(MedPidRepository &rep, MedSamples &samples, vector< RepProcessor * > &prev_processor)
Learning : learn cleaning boundaries using MedValueCleaner's iterative approximation of moments.
Definition RepProcess.cpp:955
string verbose_file
cleaning output_file for debuging
Definition RepProcess.h:357
void init_lists()
Fill req- and aff-signals vectors.
Definition RepProcess.cpp:845
void init_attributes()
Init attributes information : Should be implemented for inheriting classes that have attributes.
Definition RepProcess.cpp:918
int _apply(PidDynamicRec &rec, vector< int > &time_points, vector< vector< float > > &attributes_mat)
Apply cleaning model.
Definition RepProcess.cpp:1004
int signalId
id of signal to clean
Definition RepProcess.h:349
string signalName
name of signal to clean
Definition RepProcess.h:348
bool print_summary
If true will always print clean summary.
Definition RepProcess.h:359
int quantileLearn(MedPidRepository &rep, MedSamples &samples, vector< RepProcessor * > &prev_processor)
Learning : learn cleaning boundaries using MedValueCleaner's quantile approximation of moments.
Definition RepProcess.cpp:978
int val_channel
value cahnnel to consider in cleaning
Definition RepProcess.h:351
void dprint(const string &pref, int rp_flag)
used for debug prints, each inheriting class can overload this one to get a more precise debug print.
Definition RepProcess.cpp:1184
float print_summary_critical_cleaned
beyond this value will print summary
Definition RepProcess.h:360
string nTrim_attr_suffix
Attribute suffix (name is sample is signalName_suffix) for number of trimmed. not recorded if empty.
Definition RepProcess.h:356
int init(void *processor_params)
Fill required- and affected-signals sets.
Definition RepProcess.h:390
void init_defaults()
Initialize to default values.
Definition RepProcess.h:372
RepBasicOutlierCleaner(const string &_signalName, ValueCleanerParams *_params)
default constructor + setting signal name + initialize from parameters
Definition RepProcess.h:369
virtual void set_signal_ids(MedSignals &sigs)
Set signal id.
Definition RepProcess.cpp:832
RepBasicOutlierCleaner(const string &_signalName)
default constructor + setting signal name
Definition RepProcess.h:365
int time_channel
time channel to consider in cleaning
Definition RepProcess.h:350
string nRem_attr
Attribute name (in sample) for number of removed. not recorded if empty.
Definition RepProcess.h:353
RepBasicOutlierCleaner()
default constructor
Definition RepProcess.h:363
RepBasicOutlierCleaner(const string &_signalName, string init_string)
default constructor + setting signal name + initialize from string
Definition RepProcess.h:367
int _learn(MedPidRepository &rep, MedSamples &samples, vector< RepProcessor * > &prev_processor)
learn cleaning boundaries
Definition RepProcess.cpp:939
void print()
Debug printing.
Definition RepProcess.h:413
void set_signal(const string &_signalName)
Set signal name and fill affected and required signals sets.
Definition RepProcess.h:384
Definition RepProcess.h:1560
string signal_name
name of signal to clean
Definition RepProcess.h:1565
string output_name
name of output virtual signal - defaults to signal_name + "_" + ranges_name
Definition RepProcess.h:1567
int signal_id
id of signal to clean
Definition RepProcess.h:1568
int ranges_id
id of signal the defines ranges
Definition RepProcess.h:1569
int time_channel
time channel to consider in cleaning in the original signal
Definition RepProcess.h:1571
string ranges_name
name of signal that defines ranges
Definition RepProcess.h:1566
vector< string > sets
sets use to filter ranges_name signal on range_val_channel. If empty or range_val_channel,...
Definition RepProcess.h:1577
int output_id
id of output signal
Definition RepProcess.h:1570
RepBasicRangeCleaner()
default constructor
Definition RepProcess.h:1583
int range_time_channel
range time channel to consider in cleaning. this time channel will be used to check we're not using t...
Definition RepProcess.h:1572
int output_type
output signal type - should be identical to input signal type default to range + val type....
Definition RepProcess.h:1573
A simple class for calculating virtual signals.
Definition RepProcess.h:1325
vector< string > signals
it is possible to transfer a vector of required signals, to override default ones.
Definition RepProcess.h:1339
string output_signal_type
a parameter to be pass to list signal to afect output type
Definition RepProcess.h:1333
string calculator
calculator asked for by user
Definition RepProcess.h:1330
int _learn(MedPidRepository &rep, MedSamples &samples, vector< RepProcessor * > &prev_processors)
In this class there's never learning - we return 0 immediately.
Definition RepProcess.h:1361
vector< string > V_names
names of signals created by the calculator (a calculator can create more than a single signal at a ti...
Definition RepProcess.h:1328
RepCheckReq does not actually process the repository but rather check each sample for compliance with...
Definition RepProcess.h:1843
void init_attributes()
Init attributes information : Should be implemented for inheriting classes that have attributes.
Definition RepProcess.h:1874
vector< string > signalNames
Required signals.
Definition RepProcess.h:1846
vector< int > signalIds
Required signals ids.
Definition RepProcess.h:1847
RepCheckReq()
constructor
Definition RepProcess.h:1859
vector< int > time_channels
signals' time channels
Definition RepProcess.h:1849
RepCreateReigsty creates registries (e.g.
Definition RepProcess.h:1423
void set_affected_signal_ids(MedDictionarySections &dict)
Fill aff_signal_ids : parent function just fills from aff_signals.
Definition RepProcess.h:1445
string signal_type
the signal type definition to create
Definition RepProcess.h:1429
vector< string > signals
names of input signals used by the processor
Definition RepProcess.h:1426
string output_name
names of signal created by the processor
Definition RepProcess.h:1425
int factor_channel
the factor_channel_number
Definition RepProcess.h:1428
vector< float > factors
factor for each signal
Definition RepProcess.h:1427
void set_required_signal_ids(MedDictionarySections &dict)
Fill req_signal_ids : parent function just fills from req_signals.
Definition RepProcess.h:1444
Definition RepProcess.h:1771
void set_affected_signal_ids(MedDictionarySections &dict)
Fill aff_signal_ids : parent function just fills from aff_signals.
Definition RepProcess.h:1808
vector< vector< string > > categories_sets
the sets defining each category.
Definition RepProcess.h:1789
void set_required_signal_ids(MedDictionarySections &dict)
Fill req_signal_ids : parent function just fills from req_signals.
Definition RepProcess.h:1807
vector< string > categories_names
the names of the categories to create, categories_names[j] will sit at bit j (1 << j)
Definition RepProcess.h:1788
Definition RepProcess.h:1891
RepHistoryLimit()
It given >0 and delete_sig==0 and win_from==0,win_to==0 will use only last events number in the signa...
Definition RepProcess.h:1904
string signalName
name of signal to clean
Definition RepProcess.h:1893
int signalId
id of signal to clean
Definition RepProcess.h:1894
int _learn(MedPidRepository &rep, MedSamples &samples, vector< RepProcessor * > &prev_processor)
learn processing model on a subset of samples. Apply set of preceeding processors on DynamicPidRec be...
Definition RepProcess.h:1913
void set_signal_ids(MedSignals &sigs)
set signal-ids : Should be implemented for inheriting classes that have signalId
Definition RepProcess.h:1910
void init_defaults()
initialize to default values : Should be implemented for inheriting classes that have parameters
Definition RepProcess.h:1907
RepMultiProcessor is a repository processor which contains a vector of simpler processors that can be...
Definition RepProcess.h:241
void register_virtual_section_name_id(MedDictionarySections &dict)
Register section id to section name of new virtual signals.
Definition RepProcess.cpp:826
void add_processors_set(RepProcessorTypes type, vector< string > &signals)
Add processors to set.
Definition RepProcess.cpp:731
void init_attributes()
Init attributes information : Should be implemented for inheriting classes that have attributes.
Definition RepProcess.cpp:757
void set_affected_signal_ids(MedDictionarySections &dict)
Affected Signals : Fill the member set aff_signal_ids.
Definition RepProcess.cpp:473
void init_tables(MedDictionarySections &dict, MedSignals &sigs)
Init required tables : Should be implemented for inheriting classes that have such tables.
Definition RepProcess.h:287
void print()
serialization
Definition RepProcess.h:317
bool filter(unordered_set< string > &reqSignals)
Check if processor (and 'sub'-processors within) should be applied according to set of required signa...
Definition RepProcess.cpp:489
int _learn(MedPidRepository &rep, MedSamples &samples, vector< RepProcessor * > &prev_processors)
learn processors
Definition RepProcess.cpp:584
int _apply(PidDynamicRec &rec, vector< int > &time_points, vector< vector< float > > &attributes_vals)
Apply processors.
Definition RepProcess.cpp:622
void get_required_signal_ids(unordered_set< int > &signalIds)
Required Signals ids : Fill the unordered set signalNames.
Definition RepProcess.cpp:559
void set_required_signal_ids(MedDictionarySections &dict)
Required Signals ids : Fill the member vector - req_signal_ids.
Definition RepProcess.cpp:457
void fit_for_repository(MedPidRepository &rep)
make changes to RepProcessor according to available signals in Repository
Definition RepProcess.cpp:524
void add_virtual_signals(map< string, int > &_virtual_signals, map< string, string > &_virtual_signals_generic) const
Reporting back virtual signals if there are any.
Definition RepProcess.cpp:567
vector< vector< int > > attributes_map
A map from the index of an attribute in the list of attributes of each processor to the index in the ...
Definition RepProcess.h:245
int _conditional_apply(PidDynamicRec &rec, vector< int > &time_points, unordered_set< int > &neededSignals, vector< vector< float > > &attributes_mat)
Apply processors that affect any of the needed signals.
Definition RepProcess.cpp:680
vector< RepProcessor * > processors
Set of processors.
Definition RepProcess.h:243
void get_required_signal_categories(unordered_map< string, vector< string > > &signal_categories_in_use) const
returns for each used signal it's used categories
Definition RepProcess.cpp:801
void dprint(const string &pref, int rp_flag)
debug prints
Definition RepProcess.cpp:781
int _conditional_learn(MedPidRepository &rep, MedSamples &samples, vector< RepProcessor * > &prev_processors, unordered_set< int > &neededSignalIds)
learn processing model on a subset of samples only if required. Apply set of preceeding processors on...
Definition RepProcess.cpp:603
void set_signal_ids(MedSignals &sigs)
Set signal-ids for all linked signals.
Definition RepProcess.cpp:533
void get_required_signal_names(unordered_set< string > &signalNames)
Required Signals names : Fill the unordered set signalNames.
Definition RepProcess.cpp:542
RepMultiProcessor()
Constructor.
Definition RepProcess.h:248
RepNbrsOutlierCleaner is cleaner that looks at the neighbourhood of a certain signal value.
Definition RepProcess.h:646
int _learn(MedPidRepository &rep, MedSamples &samples, vector< RepProcessor * > &prev_processor)
learn cleaning boundaries
Definition RepProcess.cpp:2156
int iterativeLearn(MedPidRepository &rep, MedSamples &samples, vector< RepProcessor * > &prev_processor)
Learning : learn cleaning boundaries using MedValueCleaner's iterative approximation of moments.
Definition RepProcess.cpp:2171
int _apply(PidDynamicRec &rec, vector< int > &time_points, vector< vector< float > > &attributes_mat)
Apply cleaning model.
Definition RepProcess.cpp:2209
int quantileLearn(MedPidRepository &rep, MedSamples &samples, vector< RepProcessor * > &prev_processor)
Learning : learn cleaning boundaries using MedValueCleaner's quantile approximation of moments.
Definition RepProcess.cpp:2190
int nbr_time_unit
time unit for defining neighboring values
Definition RepProcess.h:655
void init_defaults()
Initialize to default values.
Definition RepProcess.h:672
RepNbrsOutlierCleaner(const string &_signalName, string init_string)
default constructor + setting signal name + initialize from string
Definition RepProcess.h:667
int val_channel
value cahnnel to consider in cleaning
Definition RepProcess.h:652
void set_signal(const string &_signalName)
Set signal name and fill affected and required signals sets.
Definition RepProcess.h:683
int time_channel
time channel to consider in cleaning
Definition RepProcess.h:651
RepNbrsOutlierCleaner(const string &_signalName)
default constructor + setting signal name
Definition RepProcess.h:665
RepNbrsOutlierCleaner(const string &_signalName, ValueCleanerParams *_params)
default constructor + setting signal name + initialize from parameters
Definition RepProcess.h:669
void init_attributes()
Init attributes information : Should be implemented for inheriting classes that have attributes.
Definition RepProcess.cpp:2135
string nTrim_attr
Attribute name (in sample) for number of trimmed. not recorded if empty.
Definition RepProcess.h:658
int nbr_time_width
size of neighborhood for defining neighboring values
Definition RepProcess.h:654
string nRem_attr_suffix
Attribute suffix (name is sample is signalName_suffix) for number of removed. not recorded if empty.
Definition RepProcess.h:659
string signalName
name of signal to clean
Definition RepProcess.h:649
int signalId
id of signal to clean
Definition RepProcess.h:650
void set_signal_ids(MedSignals &sigs)
Set signal id.
Definition RepProcess.h:686
int init(void *processor_params)
Fill required- and affected-signals sets.
Definition RepProcess.h:689
string nTrim_attr_suffix
Attribute suffix (name is sample is signalName_suffix) for number of trimmed. not recorded if empty.
Definition RepProcess.h:660
RepNbrsOutlierCleaner()
default constructor
Definition RepProcess.h:663
string nRem_attr
Attribute name (in sample) for number of removed. not recorded if empty.
Definition RepProcess.h:657
Definition RepProcess.h:1937
void set_signal_ids(MedSignals &sigs)
set signal-ids : Should be implemented for inheriting classes that have signalId
Definition RepProcess.h:1974
void init_defaults()
initialize to default values : Should be implemented for inheriting classes that have parameters
Definition RepProcess.h:1965
string signalName
name of signal to clean
Definition RepProcess.h:1951
A Repository panel completer for a complete panel of signals that are dependent and given on same tim...
Definition RepProcess.h:882
int _learn(MedPidRepository &rep, MedSamples &samples, vector< RepProcessor * > &prev_processors)
In this class there's never learning - we init tables and return 0 immediately.
Definition RepProcess.h:933
Definition RepProcess.h:53
static RepProcessor * make_processor(string name)
create a new repository processor from name
Definition RepProcess.cpp:120
size_t get_processor_size()
get size of processor + processor_type
Definition RepProcess.cpp:421
vector< string > attributes
attributes generated by the processor (optional)
Definition RepProcess.h:65
int conditional_apply(PidDynamicRec &rec, vector< int > &time_points, unordered_set< int > &neededSignalIds, vector< vector< float > > &attributes_vals)
apply processing on a single PidDynamicRec at a set of time-points only if required : if any of the s...
Definition RepProcess.h:193
virtual void get_required_signal_names(unordered_set< string > &signalNames)
Append required signal names to set : parent function just uses req_signals.
Definition RepProcess.cpp:339
unordered_set< string > aff_signals
names of signals affected by processing
Definition RepProcess.h:61
bool unconditional
indicated that processor should ALWAYS be applied
Definition RepProcess.h:63
virtual void set_affected_signal_ids(MedDictionarySections &dict)
Fill aff_signal_ids : parent function just fills from aff_signals.
Definition RepProcess.cpp:391
unordered_set< string > req_signals
names of signals required for processsing
Definition RepProcess.h:58
virtual void dprint(const string &pref, int rp_flag)
used for debug prints, each inheriting class can overload this one to get a more precise debug print.
Definition RepProcess.cpp:399
virtual int _apply(PidDynamicRec &rec, vector< int > &time_points, vector< vector< float > > &attributes_vals)
apply processing on a single PidDynamicRec at a set of time-points : Should be implemented for all in...
Definition RepProcess.h:179
virtual void init_defaults()
initialize to default values : Should be implemented for inheriting classes that have parameters
Definition RepProcess.h:98
virtual void fit_for_repository(MedPidRepository &rep)
make changes to RepProcessor according to available signals in Repository
Definition RepProcess.h:138
void * new_polymorphic(string derived_class_name)
for polymorphic classes that want to be able to serialize/deserialize a pointer * to the derived clas...
Definition RepProcess.cpp:80
virtual void set_signal(const string &_signalName)
set signal-name : Should be implemented for inheriting classes that have signalName
Definition RepProcess.h:101
int conditional_learn(MedPidRepository &rep, MedSamples &samples, unordered_set< int > &neededSignalIds)
learn processing model on a subset of ids only if required without preceesing processors
Definition RepProcess.h:174
virtual void register_virtual_section_name_id(MedDictionarySections &dict)
Register section id to section name of new virtual signals.
Definition RepProcess.h:141
RepProcessorTypes processor_type
type of repository processor
Definition RepProcess.h:56
virtual void set_required_signal_ids(MedDictionarySections &dict)
Fill req_signal_ids : parent function just fills from req_signals.
Definition RepProcess.cpp:330
virtual void set_signal_ids(MedSignals &sigs)
set signal-ids : Should be implemented for inheriting classes that have signalId
Definition RepProcess.h:104
virtual int _conditional_apply(PidDynamicRec &rec, vector< int > &time_points, unordered_set< int > &neededSignalIds, vector< vector< float > > &attributes_vals)
apply processing on a single PidDynamicRec at a set of time-points only if required : May be implemen...
Definition RepProcess.cpp:313
int apply(PidDynamicRec &rec, vector< int > &time_points, vector< vector< float > > &attributes_vals)
apply processing on a single PidDynamicRec at a set of time-points
Definition RepProcess.h:191
virtual int init(void *params)
initialize from a params object : Should be implemented for inheriting classes that have parameters
Definition RepProcess.h:94
virtual void get_required_signal_categories(unordered_map< string, vector< string > > &signal_categories_in_use) const
returns for each used signal it's used categories
Definition RepProcess.h:216
virtual void init_attributes()
Init attributes information : Should be implemented for inheriting classes that have attributes.
Definition RepProcess.h:152
static RepProcessor * create_processor(string ¶ms)
create a new repository processor from parameters string which contains rp_type
Definition RepProcess.cpp:111
unordered_set< int > req_signal_ids
ids of signals required for processing
Definition RepProcess.h:59
virtual void print()
optional printing of processor
Definition RepProcess.h:229
unordered_set< int > aff_signal_ids
ids of signals affected by processing
Definition RepProcess.h:62
int conditional_apply_without_attributes(PidDynamicRec &rec, const MedIdSamples &samples, unordered_set< int > &neededSignalIds)
apply processing on a single PidDynamicRec at a set of time-points given by samples only if required,...
Definition RepProcess.cpp:300
bool is_signal_affected(int signalId)
Check if a signal is affected by processor </summray> true if affected, false if not
Definition RepProcess.h:134
int learn(MedPidRepository &rep, MedSamples &samples, vector< RepProcessor * > &prev_processors)
learn processing model on a subset of ids. Apply set of preceeding processors on DynamicPidRec before...
Definition RepProcess.h:164
virtual int _learn(MedPidRepository &rep, MedSamples &samples, vector< RepProcessor * > &prev_processors)
learn processing model on a subset of samples. Apply set of preceeding processors on DynamicPidRec be...
Definition RepProcess.h:157
virtual bool filter(unordered_set< string > &reqSignals)
Check if processor (and 'sub'-processors within) should be applied according to set of required signa...
Definition RepProcess.cpp:227
virtual void get_required_signal_ids(unordered_set< int > &signalIds)
Append required signal names to set : parent function just uses req_signals.
Definition RepProcess.cpp:367
virtual int conditional_learn(MedPidRepository &rep, MedSamples &samples, vector< RepProcessor * > &prev_processors, unordered_set< int > &neededSignalIds)
learn processing model on a subset of samples only if required. Apply set of preceeding processors on...
Definition RepProcess.h:170
virtual int init(map< string, string > &mapper)
initialize from a map : Should be implemented for inheriting classes that have parameters
Definition RepProcess.h:96
virtual void add_virtual_signals(map< string, int > &_virtual_signals, map< string, string > &_virtual_signals_generic) const
rep processors CREATING virtual signals need to implement this: adding their signals to the pile
Definition RepProcess.h:117
virtual void init_tables(MedDictionarySections &dict, MedSignals &sigs)
Init required tables : Should be implemented for inheriting classes that have such tables.
Definition RepProcess.h:149
size_t processor_serialize(unsigned char *blob)
seialize processor + processor_type
Definition RepProcess.cpp:427
int learn(MedPidRepository &rep, MedSamples &samples)
learn on subset of samples without preceesing processors
Definition RepProcess.h:168
vector< pair< string, int > > virtual_signals
virtual signals are created only in rep processors but can be used by any rep processor that comes af...
Definition RepProcess.h:77
virtual int _conditional_learn(MedPidRepository &rep, MedSamples &samples, vector< RepProcessor * > &prev_processors, unordered_set< int > &neededSignalIds)
learn processing model on a subset of samples only if required. Apply set of preceeding processors on...
Definition RepProcess.cpp:215
Definition RepProcess.h:1994
void set_signal(const string &_signalName)
set signal-name : Should be implemented for inheriting classes that have signalName
Definition RepProcess.h:2006
A cleaner that is based on rules that describe relations of signal values to each other.
Definition RepProcess.h:519
unordered_map< int, pair< int, int > > signal_id_channels
signal channels (if exists). first is time, second is for val
Definition RepProcess.h:569
string verbose_file
cleaning output_file for debuging
Definition RepProcess.h:533
int init(void *processor_params)
initialize from a params object : Should be implemented for inheriting classes that have parameters
Definition RepProcess.h:586
unordered_map< string, pair< int, int > > signal_channels
signal channels (if exists). first is time, second is for val
Definition RepProcess.h:568
vector< int > consideredRules
only rules in this list will be considered in this cleaner (read list from jason) rule number 0 means...
Definition RepProcess.h:525
map< int, string > rules2RemoveSignal
which signal to remove if contradiction found. If not exists default to remove all
Definition RepProcess.h:565
vector< int > signalIds
Signals to clean.
Definition RepProcess.h:524
int _learn(MedPidRepository &rep, MedSamples &samples, vector< RepProcessor * > &prev_processors)
In this class there's never learning - we init tables and return 0 immediately.
Definition RepProcess.h:603
ADD_SERIALIZATION_FUNCS(processor_type, time_window, calc_res, rules2Signals, rulesToApply, rules2RemoveSignal, signal_channels, consideredRules, tolerance, req_signals, aff_signals, nRem_attr, nRem_attr_suffix, verbose_file, print_summary, print_summary_critical_cleaned) private unordered_map< int, string > affected_ids_to_name
Serialization.
Definition RepProcess.h:622
set< int > reqSignalIds
Helpers.
Definition RepProcess.h:572
Normalize Signal Values by time - divide by time to calculate rate.
Definition RepProcess.h:1620
string output_name
names of signals created by the completer
Definition RepProcess.h:1622
void set_required_signal_ids(MedDictionarySections &dict)
Fill req_signal_ids : parent function just fills from req_signals.
Definition RepProcess.h:1638
string output_signal_type
the output signal type
Definition RepProcess.h:1626
int work_channel
which channel to change and divide by time
Definition RepProcess.h:1624
float factor
additional constant factor
Definition RepProcess.h:1625
string input_name
names of input signals used by the completer
Definition RepProcess.h:1623
void set_affected_signal_ids(MedDictionarySections &dict)
Fill aff_signal_ids : parent function just fills from aff_signals.
Definition RepProcess.h:1639
Definition RepProcess.h:732
RepSimValHandler(const string &_signalName, string init_string)
default constructor + setting signal name + initialize from string
Definition RepProcess.h:750
RepSimValHandler()
default constructor
Definition RepProcess.h:746
int nValChannels
number of value-channels, important for rem-diff and mean modes
Definition RepProcess.h:739
string signalName
name of signal to handle
Definition RepProcess.h:734
SimValHandleTypes handler_type
type of handling multiple-values
Definition RepProcess.h:737
void set_signal(const string &_signalName)
Set signal name and fill affected and required signals sets.
Definition RepProcess.h:753
int signalId
id of signal to handle
Definition RepProcess.h:735
vector< int > time_channels
time channels to consider. All if empty
Definition RepProcess.h:736
RepSimValHandler(const string &_signalName)
default constructor + setting signal name
Definition RepProcess.h:748
void set_signal_ids(MedSignals &sigs)
Set signal id.
Definition RepProcess.h:756
split signal based on set of values.
Definition RepProcess.h:1468
string output_signal_type
same as input signal - will remove later after change init process of RepProcessor to fetch input sig...
Definition RepProcess.h:1475
void set_affected_signal_ids(MedDictionarySections &dict)
Fill aff_signal_ids : parent function just fills from aff_signals.
Definition RepProcess.h:1484
vector< float > factors
factor for each output signal
Definition RepProcess.h:1472
vector< string > names
names of signal created by the processor
Definition RepProcess.h:1471
void set_required_signal_ids(MedDictionarySections &dict)
Fill req_signal_ids : parent function just fills from req_signals.
Definition RepProcess.h:1483
vector< string > sets
the sets to check if signal value is in set
Definition RepProcess.h:1473
int val_channel
the val channel to look for the sets
Definition RepProcess.h:1474
string input_name
names of input signal used by the processor
Definition RepProcess.h:1470
Definition SerializableObject.h:32
int init_from_string(string init_string)
Init from string.
Definition SerializableObject.cpp:121
A is in set operation which return binary output res := in_range_val if is in set otherwise out_range...
Definition RepProcess.h:1249
RepCalcSimpleSignals is a rep processor containing several calculators to calculate new signals.
Definition RepProcess.h:1036
virtual void list_output_signals(const vector< string > &input_signals, vector< pair< string, string > > &_virtual_signals, const string &output_type)
list output signals with default naming
Definition RepProcess.h:1052
virtual bool do_calc(const vector< float > &vals, float &res) const
the calc option
Definition RepProcess.h:1050
static SimpleCalculator * make_calculator(const string &calc_type)
Definition RepProcess.cpp:2948
virtual int init(map< string, string > &mapper)
init function of calculator
Definition RepProcess.h:1046
virtual void validate_arguments(const vector< string > &input_signals, const vector< string > &output_signals) const
validates correctness of inputs
Definition RepProcess.h:1048
virtual void init_tables(MedDictionarySections &dict, MedSignals &sigs, const vector< string > &input_signals)
init operator based on repo if needed
Definition RepProcess.h:1054
does linear sum with factors on vector of input signals, has b0 as constant res := b0 + sum_sigma(i=1...
Definition RepProcess.h:1185
vector< float > factors
the factors given by ","
Definition RepProcess.h:1187
Definition MedValueCleaner.h:17
Parameters for configured outliers cleaner.
Definition RepProcess.h:428
eGFR calculator based on Creatinine, Gender and Age.
Definition RepProcess.h:1147
does log operation
Definition RepProcess.h:1166
Definition RepProcess.h:323
void restart()
restarts stats for new apply
Definition RepProcess.cpp:1141
void print_summary(const string &cleaner_info, const string &signal_name, int minimal_pid_cnt, float print_summary_critical_cleaned, bool prnt_flg) const
prints stats to screen for cleaner
Definition RepProcess.cpp:1149
header to handle OpenMP compatibility issues
Definition RepProcess.h:1727
Definition RepProcess.h:1715
Definition RepProcess.h:1748