Medial Code Documentation
Loading...
Searching...
No Matches
RepProcess.h
Go to the documentation of this file.
1#ifndef _REP_PROCESS_H_
2#define _REP_PROCESS_H_
3
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>
11#include <omp.h>
12
13#define DEFAULT_REP_CLNR_NTHREADS 8
14
15//.......................................................................................
18//.......................................................................................
46
54public:
55
56 RepProcessorTypes processor_type = REP_PROCESS_LAST;
57
58 unordered_set<string> req_signals;
59 unordered_set<int> req_signal_ids;
60
61 unordered_set<string> aff_signals;
62 unordered_set<int> aff_signal_ids;
63 bool unconditional = false;
64
65 vector<string> attributes;
66
67 virtual ~RepProcessor() { clear(); }
68 virtual void clear() { };
69
77 vector<pair<string, int>> virtual_signals;
78 vector<pair<string, string>> virtual_signals_generic;
79
80 // create a new rep_processor
82 static RepProcessor *make_processor(string name);
84 static RepProcessor *make_processor(string type, string params);
88 static RepProcessor *make_processor(RepProcessorTypes type, string params);
89
91 static RepProcessor *create_processor(string &params);
92
94 virtual int init(void *params) { return 0; };
96 virtual int init(map<string, string>& mapper) { return 0; };
98 virtual void init_defaults() {};
99
101 virtual void set_signal(const string& _signalName) { return; };
102
104 virtual void set_signal_ids(MedSignals& sigs) { return; }
105
106 // Required Signals functions : get all signals that are required by the processor
108 virtual void get_required_signal_names(unordered_set<string>& signalNames);
109 // Required Signals functions : get all signals that are required by the processor
111 virtual void get_required_signal_names(unordered_set<string>& signalNames, unordered_set<string> preReqSignals);
112
115
117 virtual void add_virtual_signals(map<string, int> &_virtual_signals, map<string, string> &_virtual_signals_generic) const {
118 for (auto &v : virtual_signals) _virtual_signals[v.first] = v.second;
119 for (auto &v : virtual_signals_generic) _virtual_signals_generic[v.first] = v.second;
120 };
121
122 // Required Signals functions : get all signals that are required by the processor
124 virtual void get_required_signal_ids(unordered_set<int>& signalIds);
125 // Required Signals functions : get all signals that are required by the processor
127 virtual void get_required_signal_ids(unordered_set<int>& signalIds, unordered_set<int> preReqSignals);
128
129 // Affected Signals functions;
134 inline bool is_signal_affected(int signalId) { return (aff_signal_ids.find(signalId) != aff_signal_ids.end()); }
135 inline bool is_signal_affected(string& signalName) { return (aff_signals.find(signalName) != aff_signals.end()); }
136
139
142
143 // check filtering
146 virtual bool filter(unordered_set<string>& reqSignals);
147
149 virtual void init_tables(MedDictionarySections& dict, MedSignals& sigs) { return; }
150
152 virtual void init_attributes() { return; }
153
154 // Learning
156 // Should be implemented for inheriting classes that require learning </summary>
157 virtual int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processors) { return 0; };
159 // May be implemented for inheriting classes that require learning </summary>
160 virtual int _conditional_learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processors, unordered_set<int>& neededSignalIds);
161
162 // Learning envelopes - Here because of issues with overloading and inheritance
164 int learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processors) { return _learn(rep, samples, prev_processors); };
166 int learn(MedPidRepository& rep);
168 int learn(MedPidRepository& rep, MedSamples& samples) { vector<RepProcessor *> temp; return _learn(rep, samples, temp); }
170 virtual int conditional_learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processors, unordered_set<int>& neededSignalIds) {
171 return _conditional_learn(rep, samples, prev_processors, neededSignalIds);
172 }
174 int conditional_learn(MedPidRepository& rep, MedSamples& samples, unordered_set<int>& neededSignalIds) { vector<RepProcessor *> temp; return _conditional_learn(rep, samples, temp, neededSignalIds); }
175
176 // Applying
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);
182
183 // next is needed for efficient applying of a single records
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);
187 }
188
189 // Applying envelopes - Here because of issues with overloading and inheritance
191 int apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_vals) { return _apply(rec, time_points, attributes_vals); }
193 int conditional_apply(PidDynamicRec& rec, vector<int>& time_points, unordered_set<int>& neededSignalIds, vector<vector<float>>& attributes_vals) {
194 return _conditional_apply(rec, time_points, neededSignalIds, attributes_vals);
195 }
197 int apply(PidDynamicRec& rec, MedIdSamples& samples);
199 int conditional_apply(PidDynamicRec& rec, MedIdSamples& samples, unordered_set<int>& neededSignalIds);
201 int conditional_apply_without_attributes(PidDynamicRec& rec, const MedIdSamples& samples, unordered_set<int>& neededSignalIds);
202
203
204 // debug prints
207 virtual void dprint(const string &pref, int rp_flag);
208
213 virtual void make_summary() {};
214
216 virtual void get_required_signal_categories(unordered_map<string, vector<string>> &signal_categories_in_use) const {};
217
218 // Serialization (including type)
219 ADD_CLASS_NAME(RepProcessor)
221 void *new_polymorphic(string derived_class_name);
222
224 size_t get_processor_size();
226 size_t processor_serialize(unsigned char *blob);
227
229 virtual void print() { fprintf(stderr, "No implementation for print()\n"); }
230};
231
232// Utilities
234RepProcessorTypes rep_processor_name_to_type(const string& procesor_name);
235
236//.......................................................................................
240//.......................................................................................
242public:
243 vector<RepProcessor *> processors;
244
245 vector<vector<int>> attributes_map;
246
249 ~RepMultiProcessor() { clear(); };
250
251 void clear();
252
253
255 void add_processors_set(RepProcessorTypes type, vector<string>& signals);
257 void add_processors_set(RepProcessorTypes type, vector<string>& signals, string init_string);
261 void add_virtual_signals(map<string, int> &_virtual_signals, map<string, string> &_virtual_signals_generic) const;
262
264 void get_required_signal_names(unordered_set<string>& signalNames);
266 virtual void get_required_signal_names(unordered_set<string>& signalNames, unordered_set<string> preReqSignals);
267
269 void get_required_signal_ids(unordered_set<int>& signalIds);
271 virtual void get_required_signal_ids(unordered_set<int>& signalIds, unordered_set<int> preReqSignals);
272
275
276
278 // check filtering
281 bool filter(unordered_set<string>& reqSignals);
282
284 void set_signal_ids(MedSignals& sigs);
285
287 void init_tables(MedDictionarySections& dict, MedSignals& sigs) { for (RepProcessor * proc : processors) { proc->init_tables(dict, sigs); } }
288
290 void init_attributes();
291
293 int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processors);
294 int _conditional_learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processors, unordered_set<int>& neededSignalIds);
295
297 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_vals);
298 int _apply_simple(PidDynamicRec& rec, vector<int>& time_points);
300 int _conditional_apply(PidDynamicRec& rec, vector<int>& time_points, unordered_set<int>& neededSignals, vector<vector<float>>& attributes_mat);
301
304
306 void dprint(const string &pref, int rp_flag);
307
308 void make_summary();
309
310 void get_required_signal_categories(unordered_map<string, vector<string>> &signal_categories_in_use) const;
311
313 ADD_CLASS_NAME(RepMultiProcessor)
315
316
317 void print() { for (auto& processor : processors) processor->print(); }
318};
319
320#define DEF_REP_TRIMMING_SD_NUM 7
321#define DEF_REP_REMOVING_SD_NUM 14
322
324public:
325 int total_removed = 0, total_pids_touched = 0;
326 int total_records = 0, total_pids = 0;
327
329 void restart();
330
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;
334};
335
336//.......................................................................................
340//.......................................................................................
342private:
343 ofstream log_file;
344 remove_stats _stats;
345 bool is_categ = false;
346public:
347
348 string signalName;
350 int time_channel = 0;
351 int val_channel = 0;
352
353 string nRem_attr = "";
354 string nTrim_attr = "";
355 string nRem_attr_suffix = "";
356 string nTrim_attr_suffix = "";
358
359 bool print_summary = false;
360 float print_summary_critical_cleaned = (float)0.05;
361
365 RepBasicOutlierCleaner(const string& _signalName) { init_defaults(); signalId = -1; signalName = _signalName; init_lists(); }
367 RepBasicOutlierCleaner(const string& _signalName, string init_string) { init_defaults(); signalId = -1; signalName = _signalName; init_from_string(init_string); }
369 RepBasicOutlierCleaner(const string& _signalName, ValueCleanerParams *_params) { init_defaults(); signalId = -1; signalName = _signalName; init_lists(); MedValueCleaner::init(_params); }
370
374 params.trimming_sd_num = DEF_REP_TRIMMING_SD_NUM; params.removing_sd_num = DEF_REP_REMOVING_SD_NUM; params.nbrs_sd_num = 0;
375 params.take_log = 0;
376 params.doTrim = params.doRemove = true;
377 signalId = -1;
379 params.missing_value = MED_MAT_MISSING_VALUE;
380 verbose_file = "";
381 };
382
384 void set_signal(const string& _signalName) { signalId = -1; signalName = _signalName; init_lists(); }
385
387 virtual void set_signal_ids(MedSignals& sigs);
388
390 int init(void *processor_params) { return MedValueCleaner::init(processor_params); };
393 virtual int init(map<string, string>& mapper);
395 void init_lists();
396
398 void init_attributes();
399
401 int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processor);
403 int iterativeLearn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processor);
405 int quantileLearn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processor);
406
408 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
409
410 virtual ~RepBasicOutlierCleaner() { if (!verbose_file.empty() && log_file.is_open()) log_file.close(); };
411
413 void print() { dprint("", 1); }
414 void dprint(const string &pref, int rp_flag);
415
416 void make_summary();
417
419 ADD_CLASS_NAME(RepBasicOutlierCleaner)
423};
424
427//.......................................................................................
429public:
430 double logicalLow, logicalHigh, confirmedLow, confirmedHigh;
431 double trimLow, trimHigh; //<trimming if not above remove borders
432 string distLow, distHigh; //"none" "norm" or "log"
433 int val_channel = 0;
434 ADD_CLASS_NAME(confRecord)
435 ADD_SERIALIZATION_FUNCS(logicalLow, logicalHigh, confirmedLow, confirmedHigh,
436 distLow, distHigh, trimLow, trimHigh, val_channel)
437};
439
440//.......................................................................................
445//.......................................................................................
447private:
448 string confFileName;
449 confRecord outlierParam;
450public:
451 string cleanMethod;
452
453 RepConfiguredOutlierCleaner() { init_defaults(); }
454
458 params.trimming_sd_num = DEF_REP_TRIMMING_SD_NUM; params.removing_sd_num = DEF_REP_REMOVING_SD_NUM; params.nbrs_sd_num = 0;
459 params.take_log = 0;
460 params.doTrim = params.doRemove = true;
461 signalId = -1;
462 params.type = VAL_CLNR_ITERATIVE;
463 params.missing_value = MED_MAT_MISSING_VALUE;
464 verbose_file = "";
465 };
466
468 int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processor);
469
472 int init(map<string, string>& mapper);
473
474 // Apply cleaning model -inheritted
475 void set_signal_ids(MedSignals& sigs);
476
478 ADD_CLASS_NAME(RepConfiguredOutlierCleaner)
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)
481
482 void print();
483};
484
485void learnDistributionBorders(float& borderHi, float& borderLo, vector<float> filteredValues);
486// a function that takes sorted vector of filtered values and estimates the +- 7 sd borders based on the center of distribution
487// predefined calibration constants are used for estimation of the borders.
488
489
520 // get multiple signals and clean them according to consistency with other signals from same date
521public:
522
524 vector <int> signalIds;
525 vector<int> consideredRules;
527
528 string nRem_attr = "";
529 string nRem_attr_suffix = "";
530
531 float tolerance = 0.1F;
532 int time_window = 0;
534 float calc_res = 0;
535
536 bool print_summary = false;
537 float print_summary_critical_cleaned = (float)0.05;
538
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"}}, //rule 16 canceled
557 {18,{"LDL_over_HDL","LDL","HDL"}},
558 {19,{"Albumin","Protein_Total"}},
559 {20,{"FreeT4","T4"}},
560 {21,{"NRBC","RBC"}},
561 {22,{"CHADS2","CHADS2_VASC"}},
562 {23, {"BP"}}
563 };
564
565 map<int, string> rules2RemoveSignal;
566
567 vector <int> rulesToApply;
568 unordered_map<string, pair<int, int>> signal_channels;
569 unordered_map<int, pair<int, int>> signal_id_channels;
570
572 set <int> reqSignalIds, affSignalIds;
573 unordered_map<int, vector<int>> rules_sids;
574 unordered_map<int, vector<bool>> affected_by_rules;
575
576 // Constructors
577 RepRuleBasedOutlierCleaner() : RepProcessor() { init_defaults(); }
578
579 void init_defaults();
580
581 void parse_rules_signals(const string &path);
582 void parse_sig_channels(const string &path);
583
584
585 // Init
586 int init(void *processor_params) { return 0; };
587
590 int init(map<string, string>& mapper);
591
593 void init_attributes();
594
596 void set_signal_ids(MedSignals& sigs);
597
599 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
600
601 // Learning
603 int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processors) { init_tables(rep.dict, rep.sigs); return 0; };
604
606 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
607
608 ~RepRuleBasedOutlierCleaner() { if (!verbose_file.empty() && log_file.is_open()) log_file.close(); };
609
610 // Check if some required signals are missing and remove corresponding rules
611 void fit_for_repository(MedPidRepository& rep);
612
613 // set affected and required signals lists according to rules
614 void init_lists();
615
616 void make_summary();
617
618 void dprint(const string &pref, int rp_flag);
619
621 ADD_CLASS_NAME(RepRuleBasedOutlierCleaner)
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)
624
625private:
628 bool applyRule(int rule, const vector<UniversalSigVec> &ruleUsvs,
629 const vector<int> &val_channels, const vector<int> &sPointer);
630 unordered_map<int, string> affected_ids_to_name;
631 ofstream log_file;
632 unordered_map<string, remove_stats> _rmv_stats;
633
635 void select_rules_to_apply();
636
637};
638
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
642//.......................................................................................
645//.......................................................................................
647public:
648
649 string signalName;
651 int time_channel = 0;
652 int val_channel = 0;
653
656
657 string nRem_attr = "";
658 string nTrim_attr = "";
659 string nRem_attr_suffix = "";
660 string nTrim_attr_suffix = "";
661
665 RepNbrsOutlierCleaner(const string& _signalName) { init_defaults(); signalId = -1; signalName = _signalName; init_lists(); }
667 RepNbrsOutlierCleaner(const string& _signalName, string init_string) { init_defaults(); signalId = -1; signalName = _signalName; init_from_string(init_string); }
669 RepNbrsOutlierCleaner(const string& _signalName, ValueCleanerParams *_params) { init_defaults(); signalId = -1; signalName = _signalName; init_lists(); MedValueCleaner::init(_params); }
670
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;
675 params.take_log = 0;
676 params.doTrim = params.doRemove = true;
677 signalId = -1;
679 params.missing_value = MED_MAT_MISSING_VALUE;
680 };
681
683 void set_signal(const string& _signalName) { signalId = -1; signalName = _signalName; init_lists(); }
684
686 void set_signal_ids(MedSignals& sigs) { signalId = sigs.sid(signalName); }
687
689 int init(void *processor_params) { return MedValueCleaner::init(processor_params); };
692 int init(map<string, string>& mapper);
693 void init_lists();
695 void init_attributes();
696
698 int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processor);
700 int iterativeLearn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processor);
702 int quantileLearn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processor);
703
705 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
706
707 // Serialization
708 ADD_CLASS_NAME(RepNbrsOutlierCleaner)
711
713 void print();
714};
715
716//.......................................................................................
718//.......................................................................................
719
720// Modes of handling multiple values at the same time
721typedef enum {
722 SIM_VAL_FIRST_VAL,
723 SIM_VAL_LAST_VAL,
724 SIM_VAL_MEAN,
725 SIM_VAL_REM,
726 SIM_VAL_REM_DIFF,
727 SIM_VAL_MIN,
728 SIM_VAL_MAX,
729 MULT_VAL_LAST
731
733public:
734 string signalName;
736 vector<int> time_channels;
738
740
741 string nHandle_attr = "";
742 string nHandle_attr_suffix = "";
743 bool debug = false;
744
746 RepSimValHandler() { init_defaults(); processor_type = REP_PROCESS_SIM_VAL; }
748 RepSimValHandler(const string& _signalName) { init_defaults(); processor_type = REP_PROCESS_SIM_VAL;; signalId = -1; signalName = _signalName; init_lists(); }
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); }
751
753 void set_signal(const string& _signalName) { signalId = -1; signalName = _signalName; init_lists(); }
754
756 void set_signal_ids(MedSignals& sigs) { signalId = sigs.sid(signalName); }
757
760 virtual int init(map<string, string>& mapper);
761
763 void init_lists();
764
766 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
767
769 void init_attributes();
770
772 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
773
776 static SimValHandleTypes get_sim_val_handle_type(string& name);
777
779 ADD_CLASS_NAME(RepSimValHandler)
780 ADD_SERIALIZATION_FUNCS(processor_type, signalName, time_channels, req_signals, aff_signals, nHandle_attr, nHandle_attr_suffix, handler_type)
781private:
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);
783 int verbose_cnt = 0;
784};
785
786//.......................................................................................
800//.......................................................................................
801
812
813typedef enum {
814 RED_PNL_MCV,
815 RED_PNL_HCT,
816 RED_PNL_RBC,
817 RED_PNL_MCH,
818 RED_PNL_MCHC,
819 RED_PNL_HGB,
820 RED_PNL_LAST
821} RedPanelSignals;
822
823typedef enum {
824 WHITE_PNL_WBC,
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,
830 WHITE_PNL_LAST
831} WhitePanelSignals;
832
833typedef enum {
834 PLT_PNL_PLTS,
835 PLT_PNL_PLT_HCT,
836 PLT_PNL_MPV,
837 PLT_PNL_LAST
838} PltsPanelSignals;
839
840typedef enum {
841 LIPIDS_PNL_CHOL,
842 LIPIDS_PNL_LDL,
843 LIPIDS_PNL_HDL,
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,
850 LIPIDS_PNL_TRGS,
851 LIPIDS_PNL_VLDL,
852 LIPIDS_PNL_LAST
853} LipidsPanelSignals;
854
855typedef enum {
856 EGFR_PNL_CRT,
857 EGFR_PNL_CKD_EPI,
858 EGFR_PNL_MDRD,
859 EGFR_PNL_LAST
860} eGFRPanelSignals;
861
862typedef enum {
863 BMI_PNL_BMI,
864 BMI_PNL_WGT,
865 BMI_PNL_HGT,
866 BMI_PNL_HGT_SQR,
867 BMI_PNL_LAST
868} BMIPanelSignals;
869
870typedef enum {
871 GCS_PNL,
872 GCS_PNL_EYE,
873 GCS_PNL_MOTOR,
874 GCS_PNL_VERBAL,
875 GCS_PNL_LAST
876} GCSPanelSignals;
877
883public:
884 // Signals for completions
885 vector<vector<string> > panel_signal_names;
886 vector<vector<int> > panel_signal_ids;
887
888 // Extra signal ids
889 int bdateId, genderId;
890 string genderSignalName;
891
892 // Missing value indication
893 float missing_val = MED_MAT_MISSING_VALUE;
894
895 // Handling multiple values
896 SimValHandleTypes sim_val_handler = SIM_VAL_LAST_VAL;
897
898 // Signals meta-data : original and final resolution and factors
899 string metadata_file;
900 vector<vector<float> > original_sig_res, final_sig_res, sig_conversion_factors;
901
902 RepPanelCompleter() { processor_type = REP_PROCESS_COMPLETE; init_defaults(); }
903
905 int init(map<string, string>& mapper);
906
908 void init_defaults();
909
910 // Change signal names from defualt
911 int update_signal_names(string panel, string& names);
912
913 // Change panels to handle
914 int update_panels(string& panels);
915
916 // initialize signal ids
917 void set_signal_ids(MedSignals& sigs);
918
919 // Check if some required signals are missing and make them virtual or remove relevant panel completer
920 void fit_for_repository(MedPidRepository& rep);
921
922 // dictionary based initializations
923 void init_tables(MedDictionarySections &dict, MedSignals& sigs);
924
926 void init_lists();
927
928 // Read conversion and resolution info
929 void read_metadata();
930
931 // Learning
933 int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processors) { init_tables(rep.dict, rep.sigs); read_metadata(); return 0; };
934
935 // Applying
937 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
938
939 // calculators implementations
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);
947
948 // Utilities
949 // Age/Gender
950 int perpare_for_age_and_gender(PidDynamicRec& rec, int& age, int& bYear, int& gender);
951
952 // Rounding - take care of resolution both in original and final units
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); }
955
956 // Generating panels from usvs
957 void get_panels(vector<UniversalSigVec>& usvs, vector<int>& panel_times, vector<vector<float>>& panels, int time_limit, int panel_size);
958
959 // Applying formulas
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);
964
965 // Updating signals in dynamic-rec
966 int update_signals(PidDynamicRec& rec, int iver, vector<vector<float>>& panels, vector<int>& panel_times, vector<int>& sigs_ids, vector<int>& changed);
967
968 // serialization. meta-data file is kept for information but not used in apply
969 void print();
970 ADD_CLASS_NAME(RepPanelCompleter)
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)
972
973private:
974
975 map<string, PanelCompleterTypes> panel2type = {
976 { "red_line",REP_CMPLT_RED_LINE_PANEL },
977 { "white_line",REP_CMPLT_WHITE_LINE_PANEL },
978 { "platelets",REP_CMPLT_PLATELETS_PANEL },
979 { "lipids",REP_CMPLT_LIPIDS_PANEL },
980 { "egfr",REP_CMPLT_EGFR_PANEL },
981 { "bmi",REP_CMPLT_BMI_PANEL },
982 { "gcs", REP_CMPLT_GCS }
983 };
984
985 // definitions and defaults for each panel-completer
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"}}
994 };
995
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 };
1001
1002 //Convertion map for GCS:
1003 unordered_map<int, int> eye_vals, verbal_vals, motor_vals;
1004 void convert_gcs_signals(vector<float> &panel);
1005};
1006
1007//.......................................................................................
1008
1009
1010//.......................................................................................
1032//.......................................................................................
1037public:
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;
1044
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()); };
1054 virtual void init_tables(MedDictionarySections& dict, MedSignals& sigs, const vector<string> &input_signals) {};
1055
1056 virtual void get_required_signal_categories(unordered_map<string, vector<string>> &signal_categories_in_use) const {};
1057
1058 virtual void fit_for_repository(MedPidRepository &rep, vector<pair<string, string>> &_virtual_signals) {};
1059
1061 static SimpleCalculator *make_calculator(const string &calc_type);
1062
1063 virtual ~SimpleCalculator() {};
1064
1065 void *new_polymorphic(string derived_class_name);
1066
1067 ADD_CLASS_NAME(SimpleCalculator)
1068 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range)
1069
1070
1071};
1072
1077public:
1078 EmptyCalculator() { calculator_name = "empty"; keep_only_in_range = false; };
1079
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;
1083
1084 ADD_CLASS_NAME(EmptyCalculator)
1085 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range)
1086};
1087
1093public:
1094 float factor = 1;
1095 float power_base = 1;
1096 float power_mone = 1;
1097
1098 RatioCalculator() { calculator_name = "ratio"; keep_only_in_range = false; };
1100 int init(map<string, string>& mapper);
1101
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;
1105
1106 ADD_CLASS_NAME(RatioCalculator)
1107 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range, factor, power_base, power_mone)
1108};
1109
1114public:
1115
1116 // Valid values are 2,3 or 6
1117 //int model_id = 2;
1118 int n_variables = 4;
1119
1120 int kfre_version = 2;
1121 int prediction_years = 5;
1122 std::string region = "original"; // original,north_american,non_noth_american,pooled
1123 int region_id;
1124 bool discard_range_check = false; // when true, allow computation for input parameters out of valid range
1125
1126 std::map<std::string, int> region2id = {
1127 { "original", 0 },
1128 { "north_american", 1 },
1129 { "non_north_american", 2 },
1130 { "pooled", 3 },
1131 };
1132
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;
1138
1139 ADD_CLASS_NAME(KfreCalculator)
1140 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, n_variables, n_variables, prediction_years, kfre_version, region, discard_range_check)
1141};
1142
1148public:
1149 float ethnicity = 0;
1150 bool mdrd = false;
1151
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;
1158
1159 ADD_CLASS_NAME(eGFRCalculator)
1160 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range, ethnicity, mdrd)
1161};
1162
1167public:
1168 logCalculator() { calculator_name = "log"; keep_only_in_range = false; };
1169
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);
1174
1175 bool do_calc(const vector<float> &vals, float &res) const;
1176
1177 ADD_CLASS_NAME(logCalculator)
1178 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range)
1179};
1180
1186public:
1187 vector<float> factors;
1188 float b0 = 0;
1189
1190 SumCalculator() { calculator_name = "sum"; };
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;
1196
1197 ADD_CLASS_NAME(SumCalculator)
1198 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range, factors, b0)
1199};
1200
1206public:
1209 float in_range_val = 1;
1210 float out_range_val = 0;
1211
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;
1218
1219 ADD_CLASS_NAME(RangeCalculator)
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)
1221};
1222
1228public:
1229 vector<float> powers;
1230 float b0 = 1;
1231
1232 MultiplyCalculator() { calculator_name = "multiply"; };
1234 int init(map<string, string>& mapper);
1235
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);
1238
1239 bool do_calc(const vector<float> &vals, float &res) const;
1240
1241 ADD_CLASS_NAME(MultiplyCalculator)
1242 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range, powers, b0)
1243};
1244
1250public:
1251 vector<string> sets;
1252 float in_range_val = 1;
1253 float out_range_val = 0;
1254 bool regex_on_sets = false;
1255 SetCalculator() { calculator_name = "set"; };
1257 int init(map<string, string>& mapper);
1258
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);
1261 void init_tables(MedDictionarySections& dict, MedSignals& sigs, const vector<string> &input_signals);
1262
1263 bool do_calc(const vector<float> &vals, float &res) const;
1264
1265 void get_required_signal_categories(unordered_map<string, vector<string>> &signal_categories_in_use) const;
1266
1267 ADD_CLASS_NAME(SetCalculator)
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)
1269private:
1270 vector<char> Flags;
1271 string input_signal = "";
1272};
1273
1279public:
1280 float in_range_val = 1;
1281 float out_range_val = 0;
1282
1283 ExistsCalculator() { calculator_name = "exists"; keep_only_in_range = true; need_time = true; };
1285 int init(map<string, string>& mapper);
1286
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);
1289
1290 bool do_calc(const vector<float> &vals, float &res) const;
1291
1292 ADD_CLASS_NAME(ExistsCalculator)
1293 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range, in_range_val, out_range_val)
1294};
1295
1297private:
1298 float numeric_val;
1299public:
1300 string value;
1301 bool is_numeric;
1302 vector<string> additional_dict_vals;
1304 calculator_name = "constant_value"; is_numeric = false; value = ""; numeric_val = 1;
1305 };
1306
1308 int init(map<string, string>& mapper);
1309
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);
1312
1313 bool do_calc(const vector<float> &vals, float &res) const;
1314
1315 void fit_for_repository(MedPidRepository &rep, vector<pair<string, string>> &_virtual_signals);
1316
1317 ADD_CLASS_NAME(ConstantValueCalculator)
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)
1319};
1320
1326
1327public:
1328 vector<string> V_names;
1329
1330 string calculator;
1331 int work_channel = 0;
1332 int time_channel = 0;
1334
1335 float missing_value = (float)MED_MAT_MISSING_VALUE;
1336
1337 //vector<float> coeff; ///< it is possible to transfer a vector of params to the calculator, to enable parametric calculators.
1338
1339 vector<string> signals;
1340 int signals_time_unit = MedTime::Undefined;
1341
1342 int max_time_search_range = 0;
1343 string calculator_init_params = "";
1344
1346 processor_type = REP_PROCESS_CALC_SIGNALS;
1347 output_signal_type = "T(i),V(f)";
1348 }
1350
1352 int init(map<string, string>& mapper);
1353
1354 // making sure V_ids and sigs_ids are initialized
1355 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
1356
1357 void fit_for_repository(MedPidRepository &rep);
1358
1359 // Learning
1361 int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processors) { init_tables(rep.dict, rep.sigs); return 0; };
1362
1363 // Applying
1365 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1366
1367 void print();
1368
1369 void get_required_signal_categories(unordered_map<string, vector<string>> &signal_categories_in_use) const;
1370
1371 void register_virtual_section_name_id(MedDictionarySections& dict);
1372
1373 // serialization
1374 ADD_CLASS_NAME(RepCalcSimpleSignals)
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;
1380 delete p;
1381 //if (calculator_logic == NULL) {
1382 // printf("write calculator_logic again for %s\n%s\n",
1383 // calculator.c_str(), calculator_init_params.c_str());
1384 // calculator_logic = SimpleCalculator::make_calculator(calculator);
1385 // if (!calculator_init_params.empty())
1386 // calculator_logic->init_from_string(calculator_init_params);
1387 // calculator_logic->missing_value = missing_value;
1388 // vector<pair<string, string>> default_virtual_signals;
1389 // calculator_logic->list_output_signals(signals, default_virtual_signals); //init calculator
1390 //}
1391
1392 }
1393
1394private:
1395 // definitions and defaults for each calculator - all must be filled in for a new calculator
1396 bool pass_time_last = false;
1398 const map<string, vector<string>> calc2req_sigs = {
1399 //--------- level 1 - calculated from raw signals (level0)
1400 //the general hospital processor's signals must be overridden from outside
1401 { "calc_eGFR", {"Creatinine", "GENDER", "BDATE"}}
1402 };
1403
1404 vector<int> V_ids;
1405 vector<int> sigs_ids;
1406 vector<bool> static_input_signals;
1407
1408 int apply_calc_in_time(PidDynamicRec& rec, vector<int>& time_points);
1409
1410 SimpleCalculator *calculator_logic = NULL;
1411 int out_n_val_ch, out_n_time_ch;
1412};
1413
1424public:
1426 vector<string> signals;
1427 vector<float> factors;
1430
1432 processor_type = REP_PROCESS_COMBINE;
1433 output_name = "";
1434 factor_channel = 1;
1435 signal_type = "T(i,i),V(f,f)";
1436 }
1437
1438 void register_virtual_section_name_id(MedDictionarySections& dict);
1439
1441 int init(map<string, string>& mapper);
1442
1443 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
1446
1447 void fit_for_repository(MedPidRepository& rep);
1448 // Applying
1450 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1451
1452 void print();
1453 ADD_CLASS_NAME(RepCombineSignals)
1454 ADD_SERIALIZATION_FUNCS(processor_type, output_name, signals, factors,
1455 unconditional, req_signals, aff_signals, virtual_signals,
1456 virtual_signals_generic, signal_type, factor_channel)
1457private:
1458 int v_out_sid = -1;
1459 vector<int> sigs_ids;
1460 int v_out_n_time_ch, v_out_n_val_ch;
1461};
1462
1469public:
1470 string input_name;
1471 vector<string> names;
1472 vector<float> factors;
1473 vector<string> sets;
1476
1477 RepSplitSignal() { processor_type = REP_PROCESS_SPLIT; input_name = ""; val_channel = 0; output_signal_type = "T(i),T(i),V(f),V(f)"; }
1478
1479 void register_virtual_section_name_id(MedDictionarySections& dict);
1480
1482 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
1485
1487 int init(map<string, string>& mapper);
1488
1489 // Applying
1491 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1492
1493 void get_required_signal_categories(unordered_map<string, vector<string>> &signal_categories_in_use) const;
1494
1495 void print();
1496 ADD_CLASS_NAME(RepSplitSignal)
1497 ADD_SERIALIZATION_FUNCS(processor_type, input_name, names, factors, sets, unconditional,
1498 req_signals, aff_signals, virtual_signals, virtual_signals_generic, val_channel, output_signal_type)
1499private:
1500 int in_sid = -1;
1501 vector<int> V_ids;
1502 vector<char> Flags;
1503 int v_out_n_time_ch, v_out_n_val_ch;
1504};
1505
1506
1513public:
1514 string input_name;
1516 vector<string> sets;
1518
1519 int time_unit_win = MedTime::Undefined;
1520 int time_unit_sig = MedTime::Undefined;
1521
1522private:
1523 int in_sid;
1524 vector<int> V_ids;
1525 vector<char> lut;
1526
1527public:
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) {
1530 processor_type = REP_PROCESS_AGGREGATION_PERIOD;
1531 }
1532
1534 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
1535
1537 int init(map<string, string>& mapper);
1538
1539 // Applying
1541 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1542
1543 void print();
1544
1545 void get_required_signal_categories(unordered_map<string, vector<string>> &signal_categories_in_use) const;
1546
1547 ADD_CLASS_NAME(RepAggregationPeriod)
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)
1549
1550};
1551
1555typedef enum {
1556 all = 0,
1557 first = 1,
1558 last = 2
1561private:
1562 vector<char> lut;
1563public:
1564
1574 int get_values_in_range = 1;
1575 range_op_type range_operator = range_op_type::all;
1576 int range_val_channel = -1;
1577 vector<string> sets;
1578 bool regex_on_sets = 0;
1579 int last_n = 0;
1580 bool do_on_last_n = false;
1581
1584 signal_name(""), ranges_name(""), output_name(""), signal_id(-1), ranges_id(-1),
1585 output_id(-1), time_channel(0), output_type(3) {
1586 processor_type = REP_PROCESS_BASIC_RANGE_CLEANER;
1587 range_time_channel = 1;
1588 }
1589
1591 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
1592
1593 void register_virtual_section_name_id(MedDictionarySections& dict);
1594
1595 bool get_last_n_value(int time, const UniversalSigVec& range_sig, float& last_value);
1596
1600 virtual int init(map<string, string>& mapper);
1601
1603 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1604
1605 void fit_for_repository(MedPidRepository& rep);
1606
1608 ADD_CLASS_NAME(RepBasicRangeCleaner)
1609 ADD_SERIALIZATION_FUNCS(processor_type, signal_name, ranges_name, output_name, time_channel,
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)
1612
1614 void print();
1615};
1616
1621public:
1623 string input_name;
1625 float factor;
1627
1628 RepSignalRate() {
1629 processor_type = REP_PROCESS_SIGNAL_RATE; output_name = { "calc_drug_rate" };
1630 work_channel = 0; factor = 1;
1631 output_signal_type = "T(i,i),V(f)";
1632 }
1633
1635 int init(map<string, string>& mapper);
1636 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
1637 void register_virtual_section_name_id(MedDictionarySections& dict);
1640
1641 // Applying
1643 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1644
1645 void print();
1646 ADD_CLASS_NAME(RepSignalRate)
1647 ADD_SERIALIZATION_FUNCS(processor_type, input_name, output_name,
1648 work_channel, factor, unconditional, req_signals, aff_signals,
1649 virtual_signals, virtual_signals_generic, output_signal_type)
1650private:
1651 int v_out_sid = -1;
1652 int in_sid = -1;
1653 int v_out_n_time_ch, v_out_n_val_ch;
1654};
1655
1660public:
1661 string signalName;
1664 int start_time_channel;;
1666 float factor;
1672
1673
1675 processor_type = REP_PROCESS_AGGREGATE;
1676 work_channel = 0;
1677 start_time_channel = 0;
1678 end_time_channel = 0;
1679 factor = 1;
1680 time_unit = global_default_windows_time_unit;
1681 drop_missing_rate = 1;
1682
1683 output_name = "calc_aggregate";
1684 time_window = 0;
1685 buffer_first = true;
1686 output_signal_type = "T(i),V(f)";
1687 }
1688
1690 int init(map<string, string>& mapper);
1691 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
1692 void register_virtual_section_name_id(MedDictionarySections& dict);
1695
1696 // Applying
1700 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1701
1702 void print();
1703 ADD_CLASS_NAME(RepAggregateSignal)
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)
1706private:
1707 int v_out_sid = -1;
1708 int in_sid = -1;
1709 int v_out_n_time_ch, v_out_n_val_ch;
1710};
1711
1712//---------------------------------------------------------------------------------------------------------------
1713// helper structures for RepCreateBitSignal:
1714//---------------------------------------------------------------------------------------------------------------
1716 int first_appearance = 0;
1717 int last_appearance = 0;
1718 int n_appearances = 0;
1719 int last_time = 0; // last_appearance + duration
1720
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; }
1723
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; }
1725};
1726
1728 int time = 0;
1729 int appear_time = 0;
1730 int categ = 0;
1731 int type = 0; // 0 : stop, 1: start, 2: last appearance
1732
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; }
1736
1737
1738 bool operator <(const category_event_state &c) const {
1739 if (time < c.time) return true;
1740 if (time > c.time) return false;
1741 if (type < c.type) return true;
1742 //if (type > c.type) return false;
1743 //if (end_time < c.end_time) return true;
1744 return false;
1745 }
1746};
1747
1749 int start;
1750 int state;
1751 vector<int> last;
1752
1753 combination_state() {};
1754 combination_state(int time, int _state, int N) { start = time; state = _state; last.assign(N, -1); }
1755};
1756
1757
1758//---------------------------------------------------------------------------------------------------------------
1759// RepCreateBitSignal
1760// Given N<32 categories defined as groups of sets on a categorial signal, creates a united signal
1761// holding in bit j the occurance of each category. Each occurance of a category at time t implies
1762// a time span of [t, t+max(min_duration, duration in signal (if available))] in which we define it as
1763// occuring.
1764// The resulted signal includes each time point in which any of the categories changed, and the new "state"
1765// at each such time point. "0" state starts at the first sig time point (unless it starts with the category).
1766// This is useful for example when working on drugs for a specific conditions (such as diabetes drugs)
1767// It then creates all states of treatment for the patient in a single easy to use signal.
1768// A virtual dictionary will be added as well.
1769//
1770//---------------------------------------------------------------------------------------------------------------
1772public:
1773 string in_sig = "";
1774 string out_virtual = "";
1775 int t_chan = 0;
1776 int c_chan = 0;
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;
1788 vector<string> categories_names;
1789 vector<vector<string>> categories_sets;
1790 int time_unit_sig = MedTime::Date;
1791 int time_unit_duration = MedTime::Days;
1792 bool change_at_prescription_mode = false;
1793 MedDictionarySections *_dict; // for debug
1794 // next will NOT be serialized, and is here for debug reasons
1795 string print_dict = "";
1796 int time_channels = 1;
1797 vector<char> all_cat_lut;
1798 vector<vector<char>> categories_luts;
1799
1800 RepCreateBitSignal() { processor_type = REP_PROCESS_CREATE_BIT_SIGNAL; };
1801
1803 int init(map<string, string>& mapper);
1804 void get_min_jitters(string& jitters_s);
1805 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
1806 void register_virtual_section_name_id(MedDictionarySections& dict);
1809
1810 // Applying
1814 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1815
1816 void get_required_signal_categories(unordered_map<string, vector<string>> &signal_categories_in_use) const;
1817
1818 //void print();
1819 ADD_CLASS_NAME(RepCreateBitSignal)
1820 ADD_SERIALIZATION_FUNCS(processor_type, in_sig, out_virtual, aff_signals, req_signals,
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)
1823
1824private:
1825 int v_out_sid = -1;
1826 int in_sid = -1;
1827 vector<string> registry_values;
1828};
1829
1830//---------------------------------------------------------------------------------------------------------------
1831
1832
1833//.......................................................................................
1841//.......................................................................................
1842
1844
1845public:
1846 vector<string> signalNames;
1847 vector<int> signalIds;
1848
1849 vector<int> time_channels;
1850 int win_from = 0, win_to = 0;
1851 int window_time_unit = MedTime::Days;
1852
1853 string attrName = "MissingReq";
1854
1855 // Helper
1856 vector<int> sig_time_units;
1857
1859 RepCheckReq() { processor_type = REP_PROCESS_CHECK_REQ; unconditional = true; }
1860
1862 int init(map<string, string>& mapper);
1863
1865 void set_signal_ids(MedSignals& sigs);
1866
1868 void init_lists();
1869
1871 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
1872
1874 void init_attributes() { attributes = { attrName }; }
1875
1876 // Learning - none done
1877
1878 // Applying
1880 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1881
1882 // serialization.
1883 ADD_CLASS_NAME(RepCheckReq)
1884 ADD_SERIALIZATION_FUNCS(processor_type, signalNames, time_channels, win_from, win_to, window_time_unit, attrName, req_signals)
1885};
1886
1887//----------------------------------------------------------------------------------------
1888// RepHistoryLimit : given a signal : chomps history to be at a given window relative
1889// to prediction points
1890//----------------------------------------------------------------------------------------
1892public:
1893 string signalName;
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; // we assume this is also the samples time unit
1899 int win_from = 0;
1900 int win_to = 0;
1901 int delete_sig = 0;
1902 int take_last_events = -1;
1903
1904 RepHistoryLimit() { init_defaults(); }
1905
1906 // default init
1907 void init_defaults() { processor_type = REP_PROCESS_HISTORY_LIMIT; }
1908
1909 // preparations
1910 void set_signal_ids(MedSignals& sigs) { signalId = sigs.sid(signalName); }
1911
1912 // learn - nothing to do
1913 int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processor) { return 0; }
1914
1915 // apply
1916 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1917
1919 int init(map<string, string>& mapper);
1920
1921 // helper
1922 int get_sub_usv_data(UniversalSigVec &usv, int from_time, int to_time, vector<char> &data, int &len);
1923
1925 void init_lists();
1926
1927 ADD_CLASS_NAME(RepHistoryLimit)
1928 ADD_SERIALIZATION_FUNCS(processor_type, signalName, time_channel, win_time_unit, rep_time_unit,
1929 win_from, win_to, delete_sig, take_last_events, req_signals, aff_signals, truncate_time_channel)
1930
1931};
1932
1933//----------------------------------------------------------------------------------------
1934// RepNumericNoiser : given a numeric signal : adds gaussian noise to each value, with std as user-determined
1935// fraction of signal std, uniform distribution to time, and probability of dropping value
1936//----------------------------------------------------------------------------------------
1938private:
1939 int signalId =-1;
1940 double stdev;
1941 bool on_learning = false;
1942 bool apply_in_test;
1943
1944 random_device rd;
1945 //mt19937 gens;
1946 vector<mt19937> gens;
1947
1948 //mt19937 generator;
1949
1950public:
1951 string signalName;
1952
1953 int val_channel = 0;
1954 int time_channel = 0;
1955 int time_noise = 0;
1956 float value_noise = 0;
1957 int truncation = 2;
1958 float drop_probability = (float)0.0;
1959
1960
1961 RepNumericNoiser() { init_defaults(); }
1962
1963
1964 // default init
1966 processor_type = REP_PROCESS_NUMERIC_NOISER;
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());
1971 }
1972
1973 // preparations
1974 void set_signal_ids(MedSignals& sigs) { signalId = sigs.sid(signalName); }
1975
1976 // learn - nothing to do
1977 int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processor);
1978
1979 // apply
1980 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1981
1983 int init(map<string, string>& mapper);
1984
1986 void init_lists();
1987
1988 ADD_CLASS_NAME(RepNumericNoiser)
1989 ADD_SERIALIZATION_FUNCS(processor_type, signalName, val_channel, time_channel,
1990 time_noise, value_noise, drop_probability, req_signals, aff_signals, stdev, truncation, apply_in_test)
1991
1992};
1993
1995private:
1996 int sid = -1;
1997public:
1998 vector<int> new_order;
1999 string signal_name = "";
2000
2002 processor_type = REP_PROCESS_REODER_CHANNELS;
2003 }
2004
2005 void set_signal_ids(MedSignals& sigs);
2006 void set_signal(const string& _signalName) { sid = -1; signal_name = _signalName; }
2007
2009 int init(map<string, string>& mapper);
2010
2011 // Applying
2013 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
2014
2015 void print();
2016
2017 ADD_CLASS_NAME(RepReoderChannels)
2018 ADD_SERIALIZATION_FUNCS(processor_type, req_signals, aff_signals, virtual_signals, virtual_signals_generic, signal_name, new_order)
2019};
2020
2021//.......................................................................................
2022//.......................................................................................
2023// Utility Functions
2024//.......................................................................................
2025//.......................................................................................
2026
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);
2032
2033//=======================================
2034// Joining the MedSerialze wagon
2035//=======================================
2067
2068#endif
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
RepConfiguredOutlierCleaner is a simple cleaner considering each value of a certain signal separatley...
Definition RepProcess.h:446
void init_defaults()
Initialize to default values.
Definition RepProcess.h:456
string cleanMethod
cleaning method : "logical" "confirmed" or "learned"
Definition RepProcess.h:451
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 &params)
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