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#include <cmath>
13
14#define DEFAULT_REP_CLNR_NTHREADS 8
15
16//.......................................................................................
19//.......................................................................................
47
55public:
56
57 RepProcessorTypes processor_type = REP_PROCESS_LAST;
58
59 unordered_set<string> req_signals;
60 unordered_set<int> req_signal_ids;
61
62 unordered_set<string> aff_signals;
63 unordered_set<int> aff_signal_ids;
64 bool unconditional = false;
65
66 vector<string> attributes;
67
68 virtual ~RepProcessor() { clear(); }
69 virtual void clear() { };
70
78 vector<pair<string, int>> virtual_signals;
79 vector<pair<string, string>> virtual_signals_generic;
80
81 // create a new rep_processor
83 static RepProcessor *make_processor(string name);
85 static RepProcessor *make_processor(string type, string params);
89 static RepProcessor *make_processor(RepProcessorTypes type, string params);
90
92 static RepProcessor *create_processor(string &params);
93
95 virtual int init(void *params) { return 0; };
97 virtual int init(map<string, string>& mapper) { return 0; };
99 virtual void init_defaults() {};
100
102 virtual void set_signal(const string& _signalName) { return; };
103
105 virtual void set_signal_ids(MedSignals& sigs) { return; }
106
107 // Required Signals functions : get all signals that are required by the processor
109 virtual void get_required_signal_names(unordered_set<string>& signalNames);
110 // Required Signals functions : get all signals that are required by the processor
112 virtual void get_required_signal_names(unordered_set<string>& signalNames, unordered_set<string> preReqSignals);
113
116
118 virtual void add_virtual_signals(map<string, int> &_virtual_signals, map<string, string> &_virtual_signals_generic) const {
119 for (auto &v : virtual_signals) _virtual_signals[v.first] = v.second;
120 for (auto &v : virtual_signals_generic) _virtual_signals_generic[v.first] = v.second;
121 };
122
123 // Required Signals functions : get all signals that are required by the processor
125 virtual void get_required_signal_ids(unordered_set<int>& signalIds);
126 // Required Signals functions : get all signals that are required by the processor
128 virtual void get_required_signal_ids(unordered_set<int>& signalIds, unordered_set<int> preReqSignals);
129
130 // Affected Signals functions;
135 inline bool is_signal_affected(int signalId) { return (aff_signal_ids.find(signalId) != aff_signal_ids.end()); }
136 inline bool is_signal_affected(string& signalName) { return (aff_signals.find(signalName) != aff_signals.end()); }
137
140
143
144 // check filtering
147 virtual bool filter(unordered_set<string>& reqSignals);
148
150 virtual void init_tables(MedDictionarySections& dict, MedSignals& sigs) { return; }
151
153 virtual void init_attributes() { return; }
154
155 // Learning
157 // Should be implemented for inheriting classes that require learning </summary>
158 virtual int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processors) { return 0; };
160 // May be implemented for inheriting classes that require learning </summary>
161 virtual int _conditional_learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processors, unordered_set<int>& neededSignalIds);
162
163 // Learning envelopes - Here because of issues with overloading and inheritance
165 int learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processors) { return _learn(rep, samples, prev_processors); };
167 int learn(MedPidRepository& rep);
169 int learn(MedPidRepository& rep, MedSamples& samples) { vector<RepProcessor *> temp; return _learn(rep, samples, temp); }
171 virtual int conditional_learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processors, unordered_set<int>& neededSignalIds) {
172 return _conditional_learn(rep, samples, prev_processors, neededSignalIds);
173 }
175 int conditional_learn(MedPidRepository& rep, MedSamples& samples, unordered_set<int>& neededSignalIds) { vector<RepProcessor *> temp; return _conditional_learn(rep, samples, temp, neededSignalIds); }
176
177 // Applying
180 virtual int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_vals) { return -1; };
182 virtual int _conditional_apply(PidDynamicRec& rec, vector<int>& time_points, unordered_set<int>& neededSignalIds, vector<vector<float>>& attributes_vals);
183
184 // next is needed for efficient applying of a single records
185 virtual int _apply_simple(PidDynamicRec& rec, vector<int>& time_points) {
186 vector<vector<float>> attributes_vals;
187 return _apply(rec, time_points, attributes_vals);
188 }
189
190 // Applying envelopes - Here because of issues with overloading and inheritance
192 int apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_vals) { return _apply(rec, time_points, attributes_vals); }
194 int conditional_apply(PidDynamicRec& rec, vector<int>& time_points, unordered_set<int>& neededSignalIds, vector<vector<float>>& attributes_vals) {
195 return _conditional_apply(rec, time_points, neededSignalIds, attributes_vals);
196 }
198 int apply(PidDynamicRec& rec, MedIdSamples& samples);
200 int conditional_apply(PidDynamicRec& rec, MedIdSamples& samples, unordered_set<int>& neededSignalIds);
202 int conditional_apply_without_attributes(PidDynamicRec& rec, const MedIdSamples& samples, unordered_set<int>& neededSignalIds);
203
204
205 // debug prints
208 virtual void dprint(const string &pref, int rp_flag);
209
214 virtual void make_summary() {};
215
217 virtual void get_required_signal_categories(unordered_map<string, vector<string>> &signal_categories_in_use) const {};
218
219 // Serialization (including type)
220 ADD_CLASS_NAME(RepProcessor)
222 void *new_polymorphic(string derived_class_name);
223
225 size_t get_processor_size();
227 size_t processor_serialize(unsigned char *blob);
228
230 virtual void print() { fprintf(stderr, "No implementation for print()\n"); }
231};
232
233// Utilities
235RepProcessorTypes rep_processor_name_to_type(const string& procesor_name);
236
237//.......................................................................................
241//.......................................................................................
243public:
244 vector<RepProcessor *> processors;
245
246 vector<vector<int>> attributes_map;
247
250 ~RepMultiProcessor() { clear(); };
251
252 void clear();
253
254
256 void add_processors_set(RepProcessorTypes type, vector<string>& signals);
258 void add_processors_set(RepProcessorTypes type, vector<string>& signals, string init_string);
262 void add_virtual_signals(map<string, int> &_virtual_signals, map<string, string> &_virtual_signals_generic) const;
263
265 void get_required_signal_names(unordered_set<string>& signalNames);
267 virtual void get_required_signal_names(unordered_set<string>& signalNames, unordered_set<string> preReqSignals);
268
270 void get_required_signal_ids(unordered_set<int>& signalIds);
272 virtual void get_required_signal_ids(unordered_set<int>& signalIds, unordered_set<int> preReqSignals);
273
276
277
279 // check filtering
282 bool filter(unordered_set<string>& reqSignals);
283
285 void set_signal_ids(MedSignals& sigs);
286
288 void init_tables(MedDictionarySections& dict, MedSignals& sigs) { for (RepProcessor * proc : processors) { proc->init_tables(dict, sigs); } }
289
291 void init_attributes();
292
294 int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processors);
295 int _conditional_learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processors, unordered_set<int>& neededSignalIds);
296
298 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_vals);
299 int _apply_simple(PidDynamicRec& rec, vector<int>& time_points);
301 int _conditional_apply(PidDynamicRec& rec, vector<int>& time_points, unordered_set<int>& neededSignals, vector<vector<float>>& attributes_mat);
302
305
307 void dprint(const string &pref, int rp_flag);
308
309 void make_summary();
310
311 void get_required_signal_categories(unordered_map<string, vector<string>> &signal_categories_in_use) const;
312
314 ADD_CLASS_NAME(RepMultiProcessor)
316
317
318 void print() { for (auto& processor : processors) processor->print(); }
319};
320
321#define DEF_REP_TRIMMING_SD_NUM 7
322#define DEF_REP_REMOVING_SD_NUM 14
323
325public:
326 int total_removed = 0, total_pids_touched = 0;
327 int total_records = 0, total_pids = 0;
328
330 void restart();
331
333 void print_summary(const string &cleaner_info, const string &signal_name,
334 int minimal_pid_cnt, float print_summary_critical_cleaned, bool prnt_flg) const;
335};
336
337//.......................................................................................
341//.......................................................................................
343private:
344 ofstream log_file;
345 remove_stats _stats;
346 bool is_categ = false;
347public:
348
349 string signalName;
351 int time_channel = 0;
352 int val_channel = 0;
353
354 string nRem_attr = "";
355 string nTrim_attr = "";
356 string nRem_attr_suffix = "";
357 string nTrim_attr_suffix = "";
359
360 bool print_summary = false;
361 float print_summary_critical_cleaned = (float)0.05;
362
366 RepBasicOutlierCleaner(const string& _signalName) { init_defaults(); signalId = -1; signalName = _signalName; init_lists(); }
368 RepBasicOutlierCleaner(const string& _signalName, string init_string) { init_defaults(); signalId = -1; signalName = _signalName; init_from_string(init_string); }
370 RepBasicOutlierCleaner(const string& _signalName, ValueCleanerParams *_params) { init_defaults(); signalId = -1; signalName = _signalName; init_lists(); MedValueCleaner::init(_params); }
371
375 params.trimming_sd_num = DEF_REP_TRIMMING_SD_NUM; params.removing_sd_num = DEF_REP_REMOVING_SD_NUM; params.nbrs_sd_num = 0;
376 params.take_log = 0;
377 params.doTrim = params.doRemove = true;
378 signalId = -1;
380 params.missing_value = MED_MAT_MISSING_VALUE;
381 verbose_file = "";
382 };
383
385 void set_signal(const string& _signalName) { signalId = -1; signalName = _signalName; init_lists(); }
386
388 virtual void set_signal_ids(MedSignals& sigs);
389
391 int init(void *processor_params) { return MedValueCleaner::init(processor_params); };
394 virtual int init(map<string, string>& mapper);
396 void init_lists();
397
399 void init_attributes();
400
402 int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processor);
404 int iterativeLearn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processor);
406 int quantileLearn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processor);
407
409 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
410
411 virtual ~RepBasicOutlierCleaner() { if (!verbose_file.empty() && log_file.is_open()) log_file.close(); };
412
414 void print() { dprint("", 1); }
415 void dprint(const string &pref, int rp_flag);
416
417 void make_summary();
418
420 ADD_CLASS_NAME(RepBasicOutlierCleaner)
424};
425
428//.......................................................................................
430public:
431 double logicalLow, logicalHigh, confirmedLow, confirmedHigh;
432 double trimLow, trimHigh; //<trimming if not above remove borders
433 string distLow, distHigh; //"none" "norm" or "log"
434 int val_channel = 0;
435 ADD_CLASS_NAME(confRecord)
436 ADD_SERIALIZATION_FUNCS(logicalLow, logicalHigh, confirmedLow, confirmedHigh,
437 distLow, distHigh, trimLow, trimHigh, val_channel)
438};
440
441//.......................................................................................
446//.......................................................................................
448private:
449 string confFileName;
450 confRecord outlierParam;
451public:
452 string cleanMethod;
453
454 RepConfiguredOutlierCleaner() { init_defaults(); }
455
459 params.trimming_sd_num = DEF_REP_TRIMMING_SD_NUM; params.removing_sd_num = DEF_REP_REMOVING_SD_NUM; params.nbrs_sd_num = 0;
460 params.take_log = 0;
461 params.doTrim = params.doRemove = true;
462 signalId = -1;
463 params.type = VAL_CLNR_ITERATIVE;
464 params.missing_value = MED_MAT_MISSING_VALUE;
465 verbose_file = "";
466 };
467
469 int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processor);
470
473 int init(map<string, string>& mapper);
474
475 // Apply cleaning model -inheritted
476 void set_signal_ids(MedSignals& sigs);
477
479 ADD_CLASS_NAME(RepConfiguredOutlierCleaner)
480 ADD_SERIALIZATION_FUNCS(processor_type, signalName, time_channel, val_channel, req_signals, aff_signals, params.take_log, params.missing_value, params.doTrim, params.doRemove,
481 trimMax, trimMin, removeMax, removeMin, confFileName, cleanMethod, outlierParam, nRem_attr, nTrim_attr, nRem_attr_suffix, nTrim_attr_suffix)
482
483 void print();
484};
485
486void learnDistributionBorders(float& borderHi, float& borderLo, vector<float> filteredValues);
487// a function that takes sorted vector of filtered values and estimates the +- 7 sd borders based on the center of distribution
488// predefined calibration constants are used for estimation of the borders.
489
490
521 // get multiple signals and clean them according to consistency with other signals from same date
522public:
523
525 vector <int> signalIds;
526 vector<int> consideredRules;
528
529 string nRem_attr = "";
530 string nRem_attr_suffix = "";
531
532 float tolerance = 0.1F;
533 int time_window = 0;
535 float calc_res = 0;
536
537 bool print_summary = false;
538 float print_summary_critical_cleaned = (float)0.05;
539
541 map <int, vector<string>>rules2Signals = {
542 {1,{"BMI","Weight","Height"}},
543 {2,{"MCH", "Hemoglobin","RBC"}},
544 {3,{"MCV","Hematocrit","RBC"} },
545 {4,{"MCHC-M","MCH","MCV"}},
546 {5,{"Eosinophils#","Monocytes#","Basophils#","Lymphocytes#","Neutrophils#","WBC" }},
547 {6,{ "MPV","Platelets_Hematocrit","Platelets" }},
548 {7,{"UrineAlbumin","UrineTotalProtein" }},
549 {8,{"UrineAlbumin_over_Creatinine","UrineAlbumin","UrineCreatinine" }},
550 {9,{"LDL","HDL","Cholesterol"}},
551 {10,{"NonHDLCholesterol","HDL","Cholesterol"}},
552 {11,{"HDL_over_nonHDL","HDL","NonHDLCholesterol"}},
553 {12,{"HDL_over_Cholesterol","HDL","Cholesterol"}},
554 {13,{"HDL_over_LDL","HDL","LDL"}},
555 {14,{"HDL_over_LDL","LDL_over_HDL"}},
556 {15,{"Cholesterol_over_HDL","Cholesterol","HDL"}},
557 {17,{"Cholesterol_over_HDL","HDL_over_Cholesterol"}}, //rule 16 canceled
558 {18,{"LDL_over_HDL","LDL","HDL"}},
559 {19,{"Albumin","Protein_Total"}},
560 {20,{"FreeT4","T4"}},
561 {21,{"NRBC","RBC"}},
562 {22,{"CHADS2","CHADS2_VASC"}},
563 {23, {"BP"}}
564 };
565
566 map<int, string> rules2RemoveSignal;
567
568 vector <int> rulesToApply;
569 unordered_map<string, pair<int, int>> signal_channels;
570 unordered_map<int, pair<int, int>> signal_id_channels;
571
573 set <int> reqSignalIds, affSignalIds;
574 unordered_map<int, vector<int>> rules_sids;
575 unordered_map<int, vector<bool>> affected_by_rules;
576
577 // Constructors
578 RepRuleBasedOutlierCleaner() : RepProcessor() { init_defaults(); }
579
580 void init_defaults();
581
582 void parse_rules_signals(const string &path);
583 void parse_sig_channels(const string &path);
584
585
586 // Init
587 int init(void *processor_params) { return 0; };
588
591 int init(map<string, string>& mapper);
592
594 void init_attributes();
595
597 void set_signal_ids(MedSignals& sigs);
598
600 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
601
602 // Learning
604 int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processors) { init_tables(rep.dict, rep.sigs); return 0; };
605
607 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
608
609 ~RepRuleBasedOutlierCleaner() { if (!verbose_file.empty() && log_file.is_open()) log_file.close(); };
610
611 // Check if some required signals are missing and remove corresponding rules
612 void fit_for_repository(MedPidRepository& rep);
613
614 // set affected and required signals lists according to rules
615 void init_lists();
616
617 void make_summary();
618
619 void dprint(const string &pref, int rp_flag);
620
622 ADD_CLASS_NAME(RepRuleBasedOutlierCleaner)
623 ADD_SERIALIZATION_FUNCS(processor_type, time_window, calc_res, rules2Signals, rulesToApply, rules2RemoveSignal, signal_channels, consideredRules, tolerance, req_signals, aff_signals, nRem_attr,
624 nRem_attr_suffix, verbose_file, print_summary, print_summary_critical_cleaned)
625
626private:
629 bool applyRule(int rule, const vector<UniversalSigVec> &ruleUsvs,
630 const vector<int> &val_channels, const vector<int> &sPointer);
631 unordered_map<int, string> affected_ids_to_name;
632 ofstream log_file;
633 unordered_map<string, remove_stats> _rmv_stats;
634
636 void select_rules_to_apply();
637
638};
639
640#define DEF_REP_NBRS_NBRS_SD_NUM 5
641#define DEF_REP_NBRS_TRIM_SD_NUM 7
642#define DEF_REP_NBRS_REMOVING_SD_NUM 14
643//.......................................................................................
646//.......................................................................................
648public:
649
650 string signalName;
652 int time_channel = 0;
653 int val_channel = 0;
654
657
658 string nRem_attr = "";
659 string nTrim_attr = "";
660 string nRem_attr_suffix = "";
661 string nTrim_attr_suffix = "";
662
666 RepNbrsOutlierCleaner(const string& _signalName) { init_defaults(); signalId = -1; signalName = _signalName; init_lists(); }
668 RepNbrsOutlierCleaner(const string& _signalName, string init_string) { init_defaults(); signalId = -1; signalName = _signalName; init_from_string(init_string); }
670 RepNbrsOutlierCleaner(const string& _signalName, ValueCleanerParams *_params) { init_defaults(); signalId = -1; signalName = _signalName; init_lists(); MedValueCleaner::init(_params); }
671
675 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;
676 params.take_log = 0;
677 params.doTrim = params.doRemove = true;
678 signalId = -1;
680 params.missing_value = MED_MAT_MISSING_VALUE;
681 };
682
684 void set_signal(const string& _signalName) { signalId = -1; signalName = _signalName; init_lists(); }
685
687 void set_signal_ids(MedSignals& sigs) { signalId = sigs.sid(signalName); }
688
690 int init(void *processor_params) { return MedValueCleaner::init(processor_params); };
693 int init(map<string, string>& mapper);
694 void init_lists();
696 void init_attributes();
697
699 int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processor);
701 int iterativeLearn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processor);
703 int quantileLearn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processor);
704
706 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
707
708 // Serialization
709 ADD_CLASS_NAME(RepNbrsOutlierCleaner)
712
714 void print();
715};
716
717//.......................................................................................
719//.......................................................................................
720
721// Modes of handling multiple values at the same time
722typedef enum {
723 SIM_VAL_FIRST_VAL,
724 SIM_VAL_LAST_VAL,
725 SIM_VAL_MEAN,
726 SIM_VAL_REM,
727 SIM_VAL_REM_DIFF,
728 SIM_VAL_MIN,
729 SIM_VAL_MAX,
730 MULT_VAL_LAST
732
734public:
735 string signalName;
737 vector<int> time_channels;
739
741
742 string nHandle_attr = "";
743 string nHandle_attr_suffix = "";
744 bool debug = false;
745
747 RepSimValHandler() { init_defaults(); processor_type = REP_PROCESS_SIM_VAL; }
749 RepSimValHandler(const string& _signalName) { init_defaults(); processor_type = REP_PROCESS_SIM_VAL;; signalId = -1; signalName = _signalName; init_lists(); }
751 RepSimValHandler(const string& _signalName, string init_string) { init_defaults(); processor_type = REP_PROCESS_SIM_VAL; signalId = -1; signalName = _signalName; init_from_string(init_string); }
752
754 void set_signal(const string& _signalName) { signalId = -1; signalName = _signalName; init_lists(); }
755
757 void set_signal_ids(MedSignals& sigs) { signalId = sigs.sid(signalName); }
758
761 virtual int init(map<string, string>& mapper);
762
764 void init_lists();
765
767 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
768
770 void init_attributes();
771
773 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
774
777 static SimValHandleTypes get_sim_val_handle_type(string& name);
778
780 ADD_CLASS_NAME(RepSimValHandler)
781 ADD_SERIALIZATION_FUNCS(processor_type, signalName, time_channels, req_signals, aff_signals, nHandle_attr, nHandle_attr_suffix, handler_type)
782private:
783 void handle_block(int start, int end, UniversalSigVec& usv, vector<int>& remove, int& nRemove, vector<pair<int, vector<float>>>& change, int& nChange, int& nTimes);
784 int verbose_cnt = 0;
785};
786
787//.......................................................................................
801//.......................................................................................
802
813
814typedef enum {
815 RED_PNL_MCV,
816 RED_PNL_HCT,
817 RED_PNL_RBC,
818 RED_PNL_MCH,
819 RED_PNL_MCHC,
820 RED_PNL_HGB,
821 RED_PNL_LAST
822} RedPanelSignals;
823
824typedef enum {
825 WHITE_PNL_WBC,
826 WHITE_PNL_EOS_N, WHITE_PNL_EOS_P,
827 WHITE_PNL_NEU_N, WHITE_PNL_NEU_P,
828 WHITE_PNL_LYM_N, WHITE_PNL_LYM_P,
829 WHITE_PNL_MON_N, WHITE_PNL_MON_P,
830 WHITE_PNL_BAS_N, WHITE_PNL_BAS_P,
831 WHITE_PNL_LAST
832} WhitePanelSignals;
833
834typedef enum {
835 PLT_PNL_PLTS,
836 PLT_PNL_PLT_HCT,
837 PLT_PNL_MPV,
838 PLT_PNL_LAST
839} PltsPanelSignals;
840
841typedef enum {
842 LIPIDS_PNL_CHOL,
843 LIPIDS_PNL_LDL,
844 LIPIDS_PNL_HDL,
845 LIPIDS_PNL_HDL_OVER_CHOL,
846 LIPIDS_PNL_CHOL_OVER_HDL,
847 LIPIDS_PNL_HDL_OVER_LDL,
848 LIPIDS_PNL_LDL_OVER_HDL,
849 LIPIDS_PNL_NON_HDL_CHOL,
850 LIPIDS_PNL_HDL_OVER_NON_HDL,
851 LIPIDS_PNL_TRGS,
852 LIPIDS_PNL_VLDL,
853 LIPIDS_PNL_LAST
854} LipidsPanelSignals;
855
856typedef enum {
857 EGFR_PNL_CRT,
858 EGFR_PNL_CKD_EPI,
859 EGFR_PNL_MDRD,
860 EGFR_PNL_LAST
861} eGFRPanelSignals;
862
863typedef enum {
864 BMI_PNL_BMI,
865 BMI_PNL_WGT,
866 BMI_PNL_HGT,
867 BMI_PNL_HGT_SQR,
868 BMI_PNL_LAST
869} BMIPanelSignals;
870
871typedef enum {
872 GCS_PNL,
873 GCS_PNL_EYE,
874 GCS_PNL_MOTOR,
875 GCS_PNL_VERBAL,
876 GCS_PNL_LAST
877} GCSPanelSignals;
878
884public:
885 // Signals for completions
886 vector<vector<string> > panel_signal_names;
887 vector<vector<int> > panel_signal_ids;
888
889 // Extra signal ids
890 int bdateId, genderId;
891 string genderSignalName;
892
893 // Missing value indication
894 float missing_val = MED_MAT_MISSING_VALUE;
895
896 // Handling multiple values
897 SimValHandleTypes sim_val_handler = SIM_VAL_LAST_VAL;
898
899 // Signals meta-data : original and final resolution and factors
900 string metadata_file;
901 vector<vector<float> > original_sig_res, final_sig_res, sig_conversion_factors;
902
903 RepPanelCompleter() { processor_type = REP_PROCESS_COMPLETE; init_defaults(); }
904
906 int init(map<string, string>& mapper);
907
909 void init_defaults();
910
911 // Change signal names from defualt
912 int update_signal_names(string panel, string& names);
913
914 // Change panels to handle
915 int update_panels(string& panels);
916
917 // initialize signal ids
918 void set_signal_ids(MedSignals& sigs);
919
920 // Check if some required signals are missing and make them virtual or remove relevant panel completer
921 void fit_for_repository(MedPidRepository& rep);
922
923 // dictionary based initializations
924 void init_tables(MedDictionarySections &dict, MedSignals& sigs);
925
927 void init_lists();
928
929 // Read conversion and resolution info
930 void read_metadata();
931
932 // Learning
934 int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processors) { init_tables(rep.dict, rep.sigs); read_metadata(); return 0; };
935
936 // Applying
938 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
939
940 // calculators implementations
941 int apply_red_line_completer(PidDynamicRec& rec, vector<int>& time_points);
942 int apply_white_line_completer(PidDynamicRec& rec, vector<int>& time_points);
943 int apply_platelets_completer(PidDynamicRec& rec, vector<int>& time_points);
944 int apply_lipids_completer(PidDynamicRec& rec, vector<int>& time_points);
945 int apply_eGFR_completer(PidDynamicRec& rec, vector<int>& time_points);
946 int apply_BMI_completer(PidDynamicRec& rec, vector<int>& time_points);
947 int apply_GCS_completer(PidDynamicRec& rec, vector<int>& time_points);
948
949 // Utilities
950 // Age/Gender
951 int perpare_for_age_and_gender(PidDynamicRec& rec, int& age, int& bYear, int& gender);
952
953 // Rounding - take care of resolution both in original and final units
954 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); }
955 inline float set_resolution(float value, float res) { return res * std::round(value / res); }
956
957 // Generating panels from usvs
958 void get_panels(vector<UniversalSigVec>& usvs, vector<int>& panel_times, vector<vector<float>>& panels, int time_limit, int panel_size);
959
960 // Applying formulas
961 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);
962 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);
963 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);
964 int egfr_complete(vector<float>& panel, float age, int gender, vector<float>& orig_res, vector<float>& final_res, vector<float>& conv, vector<int>& changed);
965
966 // Updating signals in dynamic-rec
967 int update_signals(PidDynamicRec& rec, int iver, vector<vector<float>>& panels, vector<int>& panel_times, vector<int>& sigs_ids, vector<int>& changed);
968
969 // serialization. meta-data file is kept for information but not used in apply
970 void print();
971 ADD_CLASS_NAME(RepPanelCompleter)
972 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)
973
974private:
975
976 map<string, PanelCompleterTypes> panel2type = {
977 { "red_line",REP_CMPLT_RED_LINE_PANEL },
978 { "white_line",REP_CMPLT_WHITE_LINE_PANEL },
979 { "platelets",REP_CMPLT_PLATELETS_PANEL },
980 { "lipids",REP_CMPLT_LIPIDS_PANEL },
981 { "egfr",REP_CMPLT_EGFR_PANEL },
982 { "bmi",REP_CMPLT_BMI_PANEL },
983 { "gcs", REP_CMPLT_GCS }
984 };
985
986 // definitions and defaults for each panel-completer
987 map<string, vector<string> > panel2signals = {
988 { "red_line", {"MCV","Hematocrit","RBC","MCH","MCHC-M","Hemoglobin"}},
989 { "white_line", {"WBC", "Eosinophils#", "Eosinophils%", "Neutrophils#", "Neutrophils%", "Lymphocytes#", "Lymphocytes%", "Monocytes#", "Monocytes%", "Basophils#", "Basophils%"}},
990 { "platelets", {"Platelets", "Platelets_Hematocrit","MPV"}},
991 { "lipids",{"Cholesterol", "LDL", "HDL", "HDL_over_Cholesterol", "Cholesterol_over_HDL", "HDL_over_LDL", "LDL_over_HDL", "NonHDLCholesterol", "HDL_over_nonHDL", "Triglycerides", "VLDL"}},
992 { "egfr", {"Creatinine","eGFR_CKD_EPI","eGFR_MDRD"}},
993 { "bmi", {"BMI","Weight","Height"}},
994 {"gcs", {"GCS", "GCS_Eye", "GCS_Motor", "GCS_Verbal"}}
995 };
996
997 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 };
998 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 };
999 vector<int> chol_types1 = { LIPIDS_PNL_NON_HDL_CHOL,LIPIDS_PNL_HDL };
1000 vector<int> chol_types2 = { LIPIDS_PNL_LDL, LIPIDS_PNL_HDL, LIPIDS_PNL_VLDL };
1001 vector<int> gcs_panel_parts = { GCS_PNL_EYE,GCS_PNL_MOTOR,GCS_PNL_VERBAL };
1002
1003 //Convertion map for GCS:
1004 unordered_map<int, int> eye_vals, verbal_vals, motor_vals;
1005 void convert_gcs_signals(vector<float> &panel);
1006};
1007
1008//.......................................................................................
1009
1010
1011//.......................................................................................
1033//.......................................................................................
1038public:
1039 vector<string> output_signal_names;
1040 float missing_value = (float)MED_MAT_MISSING_VALUE;
1041 string calculator_name = "";
1042 int work_channel = 0;
1043 bool need_time = false;
1044 bool keep_only_in_range = false;
1045
1047 virtual int init(map<string, string>& mapper) { return 0; };
1049 virtual void validate_arguments(const vector<string> &input_signals, const vector<string> &output_signals) const {};
1051 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()); };
1053 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()); };
1055 virtual void init_tables(MedDictionarySections& dict, MedSignals& sigs, const vector<string> &input_signals) {};
1056
1057 virtual void get_required_signal_categories(unordered_map<string, vector<string>> &signal_categories_in_use) const {};
1058
1059 virtual void fit_for_repository(MedPidRepository &rep, vector<pair<string, string>> &_virtual_signals) {};
1060
1062 static SimpleCalculator *make_calculator(const string &calc_type);
1063
1064 virtual ~SimpleCalculator() {};
1065
1066 void *new_polymorphic(string derived_class_name);
1067
1068 ADD_CLASS_NAME(SimpleCalculator)
1069 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range)
1070
1071
1072};
1073
1078public:
1079 EmptyCalculator() { calculator_name = "empty"; keep_only_in_range = false; };
1080
1081 void validate_arguments(const vector<string> &input_signals, const vector<string> &output_signals) const;
1082 void list_output_signals(const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals, const string &output_type);
1083 bool do_calc(const vector<float> &vals, float &res) const;
1084
1085 ADD_CLASS_NAME(EmptyCalculator)
1086 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range)
1087};
1088
1094public:
1095 float factor = 1;
1096 float power_base = 1;
1097 float power_mone = 1;
1098
1099 RatioCalculator() { calculator_name = "ratio"; keep_only_in_range = false; };
1101 int init(map<string, string>& mapper);
1102
1103 void validate_arguments(const vector<string> &input_signals, const vector<string> &output_signals) const;
1104 void list_output_signals(const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals, const string &output_type);
1105 bool do_calc(const vector<float> &vals, float &res) const;
1106
1107 ADD_CLASS_NAME(RatioCalculator)
1108 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range, factor, power_base, power_mone)
1109};
1110
1115public:
1116
1117 // Valid values are 2,3 or 6
1118 //int model_id = 2;
1119 int n_variables = 4;
1120
1121 int kfre_version = 2;
1122 int prediction_years = 5;
1123 std::string region = "original"; // original,north_american,non_noth_american,pooled
1124 int region_id;
1125 bool discard_range_check = false; // when true, allow computation for input parameters out of valid range
1126
1127 std::map<std::string, int> region2id = {
1128 { "original", 0 },
1129 { "north_american", 1 },
1130 { "non_north_american", 2 },
1131 { "pooled", 3 },
1132 };
1133
1134 KfreCalculator() { calculator_name = "KFRE"; need_time = true; keep_only_in_range = true; };
1135 int init(map<string, string>& mapper);
1136 void validate_arguments(const vector<string> &input_signals, const vector<string> &output_signals) const;
1137 void list_output_signals(const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals, const string &output_type);
1138 bool do_calc(const vector<float> &vals, float &res) const;
1139
1140 ADD_CLASS_NAME(KfreCalculator)
1141 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, n_variables, n_variables, prediction_years, kfre_version, region, discard_range_check)
1142};
1143
1149public:
1150 float ethnicity = 0;
1151 bool mdrd = false;
1152
1153 eGFRCalculator() { calculator_name = "eGFR_CKD_EPI"; need_time = true; keep_only_in_range = true; };
1155 int init(map<string, string>& mapper);
1156 void validate_arguments(const vector<string> &input_signals, const vector<string> &output_signals) const;
1157 void list_output_signals(const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals, const string &output_type);
1158 bool do_calc(const vector<float> &vals, float &res) const;
1159
1160 ADD_CLASS_NAME(eGFRCalculator)
1161 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range, ethnicity, mdrd)
1162};
1163
1168public:
1169 logCalculator() { calculator_name = "log"; keep_only_in_range = false; };
1170
1172 int init(map<string, string>& mapper);
1173 void validate_arguments(const vector<string> &input_signals, const vector<string> &output_signals) const;
1174 void list_output_signals(const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals, const string &output_type);
1175
1176 bool do_calc(const vector<float> &vals, float &res) const;
1177
1178 ADD_CLASS_NAME(logCalculator)
1179 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range)
1180};
1181
1187public:
1188 vector<float> factors;
1189 float b0 = 0;
1190
1191 SumCalculator() { calculator_name = "sum"; };
1193 int init(map<string, string>& mapper);
1194 void validate_arguments(const vector<string> &input_signals, const vector<string> &output_signals) const;
1195 void list_output_signals(const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals, const string &output_type);
1196 bool do_calc(const vector<float> &vals, float &res) const;
1197
1198 ADD_CLASS_NAME(SumCalculator)
1199 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range, factors, b0)
1200};
1201
1207public:
1210 float in_range_val = 1;
1211 float out_range_val = 0;
1212
1213 RangeCalculator() { calculator_name = "range"; min_range = MED_MAT_MISSING_VALUE; max_range = MED_MAT_MISSING_VALUE; };
1215 int init(map<string, string>& mapper);
1216 void validate_arguments(const vector<string> &input_signals, const vector<string> &output_signals) const;
1217 void list_output_signals(const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals, const string &output_type);
1218 bool do_calc(const vector<float> &vals, float &res) const;
1219
1220 ADD_CLASS_NAME(RangeCalculator)
1221 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)
1222};
1223
1229public:
1230 vector<float> powers;
1231 float b0 = 1;
1232
1233 MultiplyCalculator() { calculator_name = "multiply"; };
1235 int init(map<string, string>& mapper);
1236
1237 void validate_arguments(const vector<string> &input_signals, const vector<string> &output_signals) const;
1238 void list_output_signals(const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals, const string &output_type);
1239
1240 bool do_calc(const vector<float> &vals, float &res) const;
1241
1242 ADD_CLASS_NAME(MultiplyCalculator)
1243 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range, powers, b0)
1244};
1245
1251public:
1252 vector<string> sets;
1253 float in_range_val = 1;
1254 float out_range_val = 0;
1255 bool regex_on_sets = false;
1256 SetCalculator() { calculator_name = "set"; };
1258 int init(map<string, string>& mapper);
1259
1260 void validate_arguments(const vector<string> &input_signals, const vector<string> &output_signals) const;
1261 void list_output_signals(const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals, const string &output_type);
1262 void init_tables(MedDictionarySections& dict, MedSignals& sigs, const vector<string> &input_signals);
1263
1264 bool do_calc(const vector<float> &vals, float &res) const;
1265
1266 void get_required_signal_categories(unordered_map<string, vector<string>> &signal_categories_in_use) const;
1267
1268 ADD_CLASS_NAME(SetCalculator)
1269 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range, input_signal, sets, in_range_val, out_range_val)
1270private:
1271 vector<char> Flags;
1272 string input_signal = "";
1273};
1274
1280public:
1281 float in_range_val = 1;
1282 float out_range_val = 0;
1283
1284 ExistsCalculator() { calculator_name = "exists"; keep_only_in_range = true; need_time = true; };
1286 int init(map<string, string>& mapper);
1287
1288 void validate_arguments(const vector<string> &input_signals, const vector<string> &output_signals) const;
1289 void list_output_signals(const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals, const string &output_type);
1290
1291 bool do_calc(const vector<float> &vals, float &res) const;
1292
1293 ADD_CLASS_NAME(ExistsCalculator)
1294 ADD_SERIALIZATION_FUNCS(calculator_name, missing_value, work_channel, need_time, keep_only_in_range, in_range_val, out_range_val)
1295};
1296
1298private:
1299 float numeric_val;
1300public:
1301 string value;
1302 bool is_numeric;
1303 vector<string> additional_dict_vals;
1305 calculator_name = "constant_value"; is_numeric = false; value = ""; numeric_val = 1;
1306 };
1307
1309 int init(map<string, string>& mapper);
1310
1311 void validate_arguments(const vector<string> &input_signals, const vector<string> &output_signals) const;
1312 void list_output_signals(const vector<string> &input_signals, vector<pair<string, string>> &_virtual_signals, const string &output_type);
1313
1314 bool do_calc(const vector<float> &vals, float &res) const;
1315
1316 void fit_for_repository(MedPidRepository &rep, vector<pair<string, string>> &_virtual_signals);
1317
1318 ADD_CLASS_NAME(ConstantValueCalculator)
1319 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)
1320};
1321
1327
1328public:
1329 vector<string> V_names;
1330
1331 string calculator;
1332 int work_channel = 0;
1333 int time_channel = 0;
1335
1336 float missing_value = (float)MED_MAT_MISSING_VALUE;
1337
1338 //vector<float> coeff; ///< it is possible to transfer a vector of params to the calculator, to enable parametric calculators.
1339
1340 vector<string> signals;
1341 int signals_time_unit = MedTime::Undefined;
1342
1343 int max_time_search_range = 0;
1344 string calculator_init_params = "";
1345
1347 processor_type = REP_PROCESS_CALC_SIGNALS;
1348 output_signal_type = "T(i),V(f)";
1349 }
1351
1353 int init(map<string, string>& mapper);
1354
1355 // making sure V_ids and sigs_ids are initialized
1356 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
1357
1358 void fit_for_repository(MedPidRepository &rep);
1359
1360 // Learning
1362 int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processors) { init_tables(rep.dict, rep.sigs); return 0; };
1363
1364 // Applying
1366 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1367
1368 void print();
1369
1370 void get_required_signal_categories(unordered_map<string, vector<string>> &signal_categories_in_use) const;
1371
1372 void register_virtual_section_name_id(MedDictionarySections& dict);
1373
1374 // serialization
1375 ADD_CLASS_NAME(RepCalcSimpleSignals)
1376 ADD_SERIALIZATION_FUNCS(processor_type, calculator, calculator_init_params, max_time_search_range, signals_time_unit,
1377 signals, V_names, req_signals, aff_signals, virtual_signals, virtual_signals_generic, work_channel, time_channel, calculator_logic, output_signal_type)
1378 void post_deserialization() {
1380 pass_time_last = p->need_time;
1381 delete p;
1382 //if (calculator_logic == NULL) {
1383 // printf("write calculator_logic again for %s\n%s\n",
1384 // calculator.c_str(), calculator_init_params.c_str());
1385 // calculator_logic = SimpleCalculator::make_calculator(calculator);
1386 // if (!calculator_init_params.empty())
1387 // calculator_logic->init_from_string(calculator_init_params);
1388 // calculator_logic->missing_value = missing_value;
1389 // vector<pair<string, string>> default_virtual_signals;
1390 // calculator_logic->list_output_signals(signals, default_virtual_signals); //init calculator
1391 //}
1392
1393 }
1394
1395private:
1396 // definitions and defaults for each calculator - all must be filled in for a new calculator
1397 bool pass_time_last = false;
1399 const map<string, vector<string>> calc2req_sigs = {
1400 //--------- level 1 - calculated from raw signals (level0)
1401 //the general hospital processor's signals must be overridden from outside
1402 { "calc_eGFR", {"Creatinine", "GENDER", "BDATE"}}
1403 };
1404
1405 vector<int> V_ids;
1406 vector<int> sigs_ids;
1407 vector<bool> static_input_signals;
1408
1409 int apply_calc_in_time(PidDynamicRec& rec, vector<int>& time_points);
1410
1411 SimpleCalculator *calculator_logic = NULL;
1412 int out_n_val_ch, out_n_time_ch;
1413};
1414
1425public:
1427 vector<string> signals;
1428 vector<float> factors;
1431
1433 processor_type = REP_PROCESS_COMBINE;
1434 output_name = "";
1435 factor_channel = 1;
1436 signal_type = "T(i,i),V(f,f)";
1437 }
1438
1439 void register_virtual_section_name_id(MedDictionarySections& dict);
1440
1442 int init(map<string, string>& mapper);
1443
1444 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
1447
1448 void fit_for_repository(MedPidRepository& rep);
1449 // Applying
1451 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1452
1453 void print();
1454 ADD_CLASS_NAME(RepCombineSignals)
1455 ADD_SERIALIZATION_FUNCS(processor_type, output_name, signals, factors,
1456 unconditional, req_signals, aff_signals, virtual_signals,
1457 virtual_signals_generic, signal_type, factor_channel)
1458private:
1459 int v_out_sid = -1;
1460 vector<int> sigs_ids;
1461 int v_out_n_time_ch, v_out_n_val_ch;
1462};
1463
1470public:
1471 string input_name;
1472 vector<string> names;
1473 vector<float> factors;
1474 vector<string> sets;
1477
1478 RepSplitSignal() { processor_type = REP_PROCESS_SPLIT; input_name = ""; val_channel = 0; output_signal_type = "T(i),T(i),V(f),V(f)"; }
1479
1480 void register_virtual_section_name_id(MedDictionarySections& dict);
1481
1483 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
1486
1488 int init(map<string, string>& mapper);
1489
1490 // Applying
1492 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1493
1494 void get_required_signal_categories(unordered_map<string, vector<string>> &signal_categories_in_use) const;
1495
1496 void print();
1497 ADD_CLASS_NAME(RepSplitSignal)
1498 ADD_SERIALIZATION_FUNCS(processor_type, input_name, names, factors, sets, unconditional,
1499 req_signals, aff_signals, virtual_signals, virtual_signals_generic, val_channel, output_signal_type)
1500private:
1501 int in_sid = -1;
1502 vector<int> V_ids;
1503 vector<char> Flags;
1504 int v_out_n_time_ch, v_out_n_val_ch;
1505};
1506
1507
1514public:
1515 string input_name;
1517 vector<string> sets;
1519
1520 int time_unit_win = MedTime::Undefined;
1521 int time_unit_sig = MedTime::Undefined;
1522
1523private:
1524 int in_sid;
1525 vector<int> V_ids;
1526 vector<char> lut;
1527
1528public:
1530 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) {
1531 processor_type = REP_PROCESS_AGGREGATION_PERIOD;
1532 }
1533
1535 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
1536
1538 int init(map<string, string>& mapper);
1539
1540 // Applying
1542 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1543
1544 void print();
1545
1546 void get_required_signal_categories(unordered_map<string, vector<string>> &signal_categories_in_use) const;
1547
1548 ADD_CLASS_NAME(RepAggregationPeriod)
1549 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)
1550
1551};
1552
1556typedef enum {
1557 all = 0,
1558 first = 1,
1559 last = 2
1562private:
1563 vector<char> lut;
1564public:
1565
1575 int get_values_in_range = 1;
1576 range_op_type range_operator = range_op_type::all;
1577 int range_val_channel = -1;
1578 vector<string> sets;
1579 bool regex_on_sets = 0;
1580 int last_n = 0;
1581 bool do_on_last_n = false;
1582
1585 signal_name(""), ranges_name(""), output_name(""), signal_id(-1), ranges_id(-1),
1586 output_id(-1), time_channel(0), output_type(3) {
1587 processor_type = REP_PROCESS_BASIC_RANGE_CLEANER;
1588 range_time_channel = 1;
1589 }
1590
1592 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
1593
1594 void register_virtual_section_name_id(MedDictionarySections& dict);
1595
1596 bool get_last_n_value(int time, const UniversalSigVec& range_sig, float& last_value);
1597
1601 virtual int init(map<string, string>& mapper);
1602
1604 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1605
1606 void fit_for_repository(MedPidRepository& rep);
1607
1609 ADD_CLASS_NAME(RepBasicRangeCleaner)
1610 ADD_SERIALIZATION_FUNCS(processor_type, signal_name, ranges_name, output_name, time_channel,
1611 req_signals, aff_signals, signal_id, ranges_id, output_id, virtual_signals, virtual_signals_generic,
1612 output_type, get_values_in_range, range_operator, range_val_channel, sets, range_time_channel, last_n, do_on_last_n, regex_on_sets)
1613
1615 void print();
1616};
1617
1622public:
1624 string input_name;
1626 float factor;
1628
1629 RepSignalRate() {
1630 processor_type = REP_PROCESS_SIGNAL_RATE; output_name = { "calc_drug_rate" };
1631 work_channel = 0; factor = 1;
1632 output_signal_type = "T(i,i),V(f)";
1633 }
1634
1636 int init(map<string, string>& mapper);
1637 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
1638 void register_virtual_section_name_id(MedDictionarySections& dict);
1641
1642 // Applying
1644 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1645
1646 void print();
1647 ADD_CLASS_NAME(RepSignalRate)
1648 ADD_SERIALIZATION_FUNCS(processor_type, input_name, output_name,
1649 work_channel, factor, unconditional, req_signals, aff_signals,
1650 virtual_signals, virtual_signals_generic, output_signal_type)
1651private:
1652 int v_out_sid = -1;
1653 int in_sid = -1;
1654 int v_out_n_time_ch, v_out_n_val_ch;
1655};
1656
1661public:
1662 string signalName;
1665 int start_time_channel;;
1667 float factor;
1673
1674
1676 processor_type = REP_PROCESS_AGGREGATE;
1677 work_channel = 0;
1678 start_time_channel = 0;
1679 end_time_channel = 0;
1680 factor = 1;
1681 time_unit = global_default_windows_time_unit;
1682 drop_missing_rate = 1;
1683
1684 output_name = "calc_aggregate";
1685 time_window = 0;
1686 buffer_first = true;
1687 output_signal_type = "T(i),V(f)";
1688 }
1689
1691 int init(map<string, string>& mapper);
1692 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
1693 void register_virtual_section_name_id(MedDictionarySections& dict);
1696
1697 // Applying
1701 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1702
1703 void print();
1704 ADD_CLASS_NAME(RepAggregateSignal)
1705 ADD_SERIALIZATION_FUNCS(processor_type, signalName, output_name, work_channel, factor, time_window, time_unit,
1706 start_time_channel, end_time_channel, drop_missing_rate, buffer_first, unconditional, req_signals, aff_signals, virtual_signals, virtual_signals_generic, output_signal_type)
1707private:
1708 int v_out_sid = -1;
1709 int in_sid = -1;
1710 int v_out_n_time_ch, v_out_n_val_ch;
1711};
1712
1713//---------------------------------------------------------------------------------------------------------------
1714// helper structures for RepCreateBitSignal:
1715//---------------------------------------------------------------------------------------------------------------
1717 int first_appearance = 0;
1718 int last_appearance = 0;
1719 int n_appearances = 0;
1720 int last_time = 0; // last_appearance + duration
1721
1723 category_time_interval(int _first, int _last, int _n, int _last_time) { first_appearance = _first; last_appearance = _last; n_appearances = _n; last_time = _last_time; }
1724
1725 void set(int _first, int _last, int _n, int _last_time) { first_appearance = _first; last_appearance = _last; n_appearances = _n; last_time = _last_time; }
1726};
1727
1729 int time = 0;
1730 int appear_time = 0;
1731 int categ = 0;
1732 int type = 0; // 0 : stop, 1: start, 2: last appearance
1733
1735 category_event_state(int _time, int _appear_time, int _categ, int _type) { time = _time; appear_time = _appear_time; categ = _categ; type = _type; }
1736 void set(int _time, int _appear_time, int _categ, int _type) { time = _time; appear_time = _appear_time; categ = _categ; type = _type; }
1737
1738
1739 bool operator <(const category_event_state &c) const {
1740 if (time < c.time) return true;
1741 if (time > c.time) return false;
1742 if (type < c.type) return true;
1743 //if (type > c.type) return false;
1744 //if (end_time < c.end_time) return true;
1745 return false;
1746 }
1747};
1748
1750 int start;
1751 int state;
1752 vector<int> last;
1753
1754 combination_state() {};
1755 combination_state(int time, int _state, int N) { start = time; state = _state; last.assign(N, -1); }
1756};
1757
1758
1759//---------------------------------------------------------------------------------------------------------------
1760// RepCreateBitSignal
1761// Given N<32 categories defined as groups of sets on a categorial signal, creates a united signal
1762// holding in bit j the occurance of each category. Each occurance of a category at time t implies
1763// a time span of [t, t+max(min_duration, duration in signal (if available))] in which we define it as
1764// occuring.
1765// The resulted signal includes each time point in which any of the categories changed, and the new "state"
1766// at each such time point. "0" state starts at the first sig time point (unless it starts with the category).
1767// This is useful for example when working on drugs for a specific conditions (such as diabetes drugs)
1768// It then creates all states of treatment for the patient in a single easy to use signal.
1769// A virtual dictionary will be added as well.
1770//
1771//---------------------------------------------------------------------------------------------------------------
1773public:
1774 string in_sig = "";
1775 string out_virtual = "";
1776 int t_chan = 0;
1777 int c_chan = 0;
1778 int duration_chan = 1;
1779 int min_duration = 60;
1780 vector<int> min_durations = {};
1781 int max_duration = 180;
1782 float duration_add = 0;
1783 float duration_mult = 0.1f;
1784 int dont_look_back = 7;
1785 int min_clip_time = 7;
1786 int last_clip_period = 30;
1787 vector<int> min_jitters = { 0,0,0 };
1788 int max_min_jitters;
1789 vector<string> categories_names;
1790 vector<vector<string>> categories_sets;
1791 int time_unit_sig = MedTime::Date;
1792 int time_unit_duration = MedTime::Days;
1793 bool change_at_prescription_mode = false;
1794 MedDictionarySections *_dict; // for debug
1795 // next will NOT be serialized, and is here for debug reasons
1796 string print_dict = "";
1797 int time_channels = 1;
1798 vector<char> all_cat_lut;
1799 vector<vector<char>> categories_luts;
1800
1801 RepCreateBitSignal() { processor_type = REP_PROCESS_CREATE_BIT_SIGNAL; };
1802
1804 int init(map<string, string>& mapper);
1805 void get_min_jitters(string& jitters_s);
1806 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
1807 void register_virtual_section_name_id(MedDictionarySections& dict);
1810
1811 // Applying
1815 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1816
1817 void get_required_signal_categories(unordered_map<string, vector<string>> &signal_categories_in_use) const;
1818
1819 //void print();
1820 ADD_CLASS_NAME(RepCreateBitSignal)
1821 ADD_SERIALIZATION_FUNCS(processor_type, in_sig, out_virtual, aff_signals, req_signals,
1822 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,
1823 virtual_signals_generic, time_channels, min_jitters)
1824
1825private:
1826 int v_out_sid = -1;
1827 int in_sid = -1;
1828 vector<string> registry_values;
1829};
1830
1831//---------------------------------------------------------------------------------------------------------------
1832
1833
1834//.......................................................................................
1842//.......................................................................................
1843
1845
1846public:
1847 vector<string> signalNames;
1848 vector<int> signalIds;
1849
1850 vector<int> time_channels;
1851 int win_from = 0, win_to = 0;
1852 int window_time_unit = MedTime::Days;
1853
1854 string attrName = "MissingReq";
1855
1856 // Helper
1857 vector<int> sig_time_units;
1858
1860 RepCheckReq() { processor_type = REP_PROCESS_CHECK_REQ; unconditional = true; }
1861
1863 int init(map<string, string>& mapper);
1864
1866 void set_signal_ids(MedSignals& sigs);
1867
1869 void init_lists();
1870
1872 void init_tables(MedDictionarySections& dict, MedSignals& sigs);
1873
1875 void init_attributes() { attributes = { attrName }; }
1876
1877 // Learning - none done
1878
1879 // Applying
1881 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1882
1883 // serialization.
1884 ADD_CLASS_NAME(RepCheckReq)
1885 ADD_SERIALIZATION_FUNCS(processor_type, signalNames, time_channels, win_from, win_to, window_time_unit, attrName, req_signals)
1886};
1887
1888//----------------------------------------------------------------------------------------
1889// RepHistoryLimit : given a signal : chomps history to be at a given window relative
1890// to prediction points
1891//----------------------------------------------------------------------------------------
1893public:
1894 string signalName;
1896 int time_channel = 0;
1897 int truncate_time_channel = -1;
1898 int win_time_unit = global_default_windows_time_unit;
1899 int rep_time_unit = global_default_time_unit; // we assume this is also the samples time unit
1900 int win_from = 0;
1901 int win_to = 0;
1902 int delete_sig = 0;
1903 int take_last_events = -1;
1904
1905 RepHistoryLimit() { init_defaults(); }
1906
1907 // default init
1908 void init_defaults() { processor_type = REP_PROCESS_HISTORY_LIMIT; }
1909
1910 // preparations
1911 void set_signal_ids(MedSignals& sigs) { signalId = sigs.sid(signalName); }
1912
1913 // learn - nothing to do
1914 int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processor) { return 0; }
1915
1916 // apply
1917 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1918
1920 int init(map<string, string>& mapper);
1921
1922 // helper
1923 int get_sub_usv_data(UniversalSigVec &usv, int from_time, int to_time, vector<char> &data, int &len);
1924
1926 void init_lists();
1927
1928 ADD_CLASS_NAME(RepHistoryLimit)
1929 ADD_SERIALIZATION_FUNCS(processor_type, signalName, time_channel, win_time_unit, rep_time_unit,
1930 win_from, win_to, delete_sig, take_last_events, req_signals, aff_signals, truncate_time_channel)
1931
1932};
1933
1934//----------------------------------------------------------------------------------------
1935// RepNumericNoiser : given a numeric signal : adds gaussian noise to each value, with std as user-determined
1936// fraction of signal std, uniform distribution to time, and probability of dropping value
1937//----------------------------------------------------------------------------------------
1939private:
1940 int signalId =-1;
1941 double stdev;
1942 bool on_learning = false;
1943 bool apply_in_test;
1944
1945 random_device rd;
1946 //mt19937 gens;
1947 vector<mt19937> gens;
1948
1949 //mt19937 generator;
1950
1951public:
1952 string signalName;
1953
1954 int val_channel = 0;
1955 int time_channel = 0;
1956 int time_noise = 0;
1957 float value_noise = 0;
1958 int truncation = 2;
1959 float drop_probability = (float)0.0;
1960
1961
1962 RepNumericNoiser() { init_defaults(); }
1963
1964
1965 // default init
1967 processor_type = REP_PROCESS_NUMERIC_NOISER;
1968 int N_TH = omp_get_max_threads();
1969 gens.resize(3*N_TH);
1970 for (size_t i = 0; i < 3*N_TH; ++i)
1971 gens[i] = mt19937(rd());
1972 }
1973
1974 // preparations
1975 void set_signal_ids(MedSignals& sigs) { signalId = sigs.sid(signalName); }
1976
1977 // learn - nothing to do
1978 int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processor);
1979
1980 // apply
1981 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
1982
1984 int init(map<string, string>& mapper);
1985
1987 void init_lists();
1988
1989 ADD_CLASS_NAME(RepNumericNoiser)
1990 ADD_SERIALIZATION_FUNCS(processor_type, signalName, val_channel, time_channel,
1991 time_noise, value_noise, drop_probability, req_signals, aff_signals, stdev, truncation, apply_in_test)
1992
1993};
1994
1996private:
1997 int sid = -1;
1998public:
1999 vector<int> new_order;
2000 string signal_name = "";
2001
2003 processor_type = REP_PROCESS_REODER_CHANNELS;
2004 }
2005
2006 void set_signal_ids(MedSignals& sigs);
2007 void set_signal(const string& _signalName) { sid = -1; signal_name = _signalName; }
2008
2010 int init(map<string, string>& mapper);
2011
2012 // Applying
2014 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
2015
2016 void print();
2017
2018 ADD_CLASS_NAME(RepReoderChannels)
2019 ADD_SERIALIZATION_FUNCS(processor_type, req_signals, aff_signals, virtual_signals, virtual_signals_generic, signal_name, new_order)
2020};
2021
2022//.......................................................................................
2023//.......................................................................................
2024// Utility Functions
2025//.......................................................................................
2026//.......................................................................................
2027
2029int get_values(MedRepository& rep, MedSamples& samples, int signalId, int time_channel, int val_channel, float range_min, float range_max, vector<float>& values,
2030 vector<RepProcessor *>& prev_cleaners);
2032int get_values(MedRepository& rep, MedSamples& samples, int signalId, int time_channel, int val_channel, float range_min, float range_max, vector<float>& values);
2033
2034//=======================================
2035// Joining the MedSerialze wagon
2036//=======================================
2068
2069#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:21
@ REP_PROCESS_BASIC_RANGE_CLEANER
"basic_range_cleaner" or "range_cln" to activate RepBasicRangeCleaner
Definition RepProcess.h:35
@ REP_PROCESS_COMPLETE
"complete" to activate RepPanelCompleter
Definition RepProcess.h:28
@ REP_PROCESS_CREATE_BIT_SIGNAL
"bit_signal" creates a state of categories (typically drugs) encoded in bits. creates RepCreateBitSig...
Definition RepProcess.h:39
@ REP_PROCESS_REODER_CHANNELS
"reorder_channels" reorder signal channels. Creates RepReoderChannels
Definition RepProcess.h:41
@ REP_PROCESS_CATEGORY_DESCENDERS
"category_descenders" creates all descenders values for each category value. Creates RepCategoryDesce...
Definition RepProcess.h:40
@ 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:37
@ REP_PROCESS_SIM_VAL
"sim_val" or "sim_val_handler" handle multiple simultanous values to activate RepSimValHandler
Definition RepProcess.h:30
@ REP_PROCESS_BASIC_OUTLIER_CLEANER
"basic_outlier_cleaner" or "basic_cln" to activate RepBasicOutlierCleaner
Definition RepProcess.h:23
@ REP_PROCESS_NUMERIC_NOISER
"numeric_noiser" adds gaussian noise to value and uniform noise to time for numeric signal....
Definition RepProcess.h:43
@ REP_PROCESS_SIGNAL_RATE
"signal_rate" combine complition for Drug rate based on Drug amount to activate RepSignalRate
Definition RepProcess.h:31
@ REP_PROCESS_AGGREGATION_PERIOD
"aggregation_period" - creates RepAggregationPeriod
Definition RepProcess.h:34
@ REP_PROCESS_CONFIGURED_OUTLIER_CLEANER
"configured_outlier_cleaner" or "conf_cln" to activate RepConfiguredOutlierCleaner
Definition RepProcess.h:25
@ REP_PROCESS_CREATE_REGISTRY
"create_registry" creates a registry signal (TimeRange to values). creates RepCreateRegistry
Definition RepProcess.h:38
@ REP_PROCESS_SPLIT
"split" split signal to two signals based on set of values - usefull for example to give diffrent rul...
Definition RepProcess.h:33
@ REP_PROCESS_AGGREGATE
"aggregate" - aggregate signal in sliding time window to calc some aggregation function....
Definition RepProcess.h:36
@ REP_PROCESS_FILTER_BY_CHANNELS
"filter_channels" reorder signal channels. Creates RepFilterByChannel
Definition RepProcess.h:42
@ REP_PROCESS_CALC_SIGNALS
"calc_signals" or "calculator" to activate RepCalcSimpleSignals
Definition RepProcess.h:27
@ REP_PROCESS_COMBINE
"combine" flatten signals to 1 signal by dates. if conflict chooses based on order given....
Definition RepProcess.h:32
@ REP_PROCESS_NBRS_OUTLIER_CLEANER
"nbrs_outlier_cleaner" or "nbrs_cln" to activate RepNbrsOutlierCleaner
Definition RepProcess.h:24
@ REP_PROCESS_RULEBASED_OUTLIER_CLEANER
"rulebased_outlier_cleaner" or "rule_cln" to activate RepRuleBasedOutlierCleaner
Definition RepProcess.h:26
@ REP_PROCESS_FILTER_BY_DIAG
"filter_by_diag". Creates RepClearSignalByDiag
Definition RepProcess.h:44
@ REP_PROCESS_CHECK_REQ
"req" or "requirements" check compliance with minimal requirement to activate RepCheckReq
Definition RepProcess.h:29
@ REP_PROCESS_MULTI
"multi_processor" or "multi" to activate RepMultiProcessor
Definition RepProcess.h:22
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:803
@ REP_CMPLT_RED_LINE_PANEL
complete values of the red blood line
Definition RepProcess.h:804
@ REP_CMPLT_LAST
Last not in use.
Definition RepProcess.h:811
@ REP_CMPLT_BMI_PANEL
complete BMI/HIGHT/WEIGHT values
Definition RepProcess.h:809
@ REP_CMPLT_WHITE_LINE_PANEL
complete values of the white blood line
Definition RepProcess.h:805
@ REP_CMPLT_GCS
complete Glasgow Coma Score
Definition RepProcess.h:810
@ REP_CMPLT_LIPIDS_PANEL
complete lipd values
Definition RepProcess.h:807
@ REP_CMPLT_EGFR_PANEL
complete eGFR values
Definition RepProcess.h:808
@ REP_CMPLT_PLATELETS_PANEL
complete values of platelets measurements
Definition RepProcess.h:806
SimValHandleTypes
SimValHandler handles multiple values at the same time.
Definition RepProcess.h:722
range_op_type
A filter on signal events using other range signal with time periods.
Definition RepProcess.h:1556
An Abstract class that can be serialized and written/read from file.
#define ADD_SERIALIZATION_FUNCS(...)
Definition SerializableObject.h:121
#define MEDSERIALIZE_SUPPORT(Type)
Definition SerializableObject.h:107
Definition RepProcess.h:1297
Dummy top create empty virtual signal.
Definition RepProcess.h:1077
A is in as exists operation which return binary output res := in_range_val if signal exists otherwise...
Definition RepProcess.h:1279
KFRE calculator based on Age, Gender and eGFR (in that order)
Definition RepProcess.h:1114
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:1228
vector< float > powers
power for args
Definition RepProcess.h:1230
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:1206
float max_range
max range check
Definition RepProcess.h:1209
float min_range
min range check
Definition RepProcess.h:1208
Calcs ratio between 2 inputs signals.
Definition RepProcess.h:1093
An Aggregator for signal in sliding time window.
Definition RepProcess.h:1660
string signalName
the name of inout signal
Definition RepProcess.h:1662
void set_required_signal_ids(MedDictionarySections &dict)
Fill req_signal_ids : parent function just fills from req_signals.
Definition RepProcess.h:1694
int time_window
back time window to search for
Definition RepProcess.h:1668
int work_channel
channel for value
Definition RepProcess.h:1664
string output_signal_type
same as input signal - will remove later after change init process of RepProcessor to fetch input sig...
Definition RepProcess.h:1672
void set_affected_signal_ids(MedDictionarySections &dict)
Fill aff_signal_ids : parent function just fills from aff_signals.
Definition RepProcess.h:1695
int end_time_channel
time channel for start time
Definition RepProcess.h:1666
bool buffer_first
If true will wait for first buffer to complete.
Definition RepProcess.h:1671
float drop_missing_rate
If missing time points beyond this threshold will drop measurement.
Definition RepProcess.h:1670
float factor
final factor to multiply
Definition RepProcess.h:1667
int time_unit
time unit
Definition RepProcess.h:1669
string output_name
the name of virtual signal
Definition RepProcess.h:1663
creates a signal of time ranges in which the input signal (usually medication) was active ranges are ...
Definition RepProcess.h:1513
string input_name
name of input signal used by the processor
Definition RepProcess.h:1515
int period
period to consider active after signal in win time units
Definition RepProcess.h:1518
vector< string > sets
the sets to check if signal value is in set
Definition RepProcess.h:1517
string output_name
name of signal created by the processor
Definition RepProcess.h:1516
A simple cleaner considering each value of a certain signal separatley.
Definition RepProcess.h:342
string nRem_attr_suffix
Attribute suffix (name is sample is signalName_suffix) for number of removed. not recorded if empty.
Definition RepProcess.h:356
string nTrim_attr
Attribute name (in sample) for number of trimmed. not recorded if empty.
Definition RepProcess.h:355
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:358
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:350
string signalName
name of signal to clean
Definition RepProcess.h:349
bool print_summary
If true will always print clean summary.
Definition RepProcess.h:360
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:352
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:361
string nTrim_attr_suffix
Attribute suffix (name is sample is signalName_suffix) for number of trimmed. not recorded if empty.
Definition RepProcess.h:357
int init(void *processor_params)
Fill required- and affected-signals sets.
Definition RepProcess.h:391
void init_defaults()
Initialize to default values.
Definition RepProcess.h:373
RepBasicOutlierCleaner(const string &_signalName, ValueCleanerParams *_params)
default constructor + setting signal name + initialize from parameters
Definition RepProcess.h:370
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:366
int time_channel
time channel to consider in cleaning
Definition RepProcess.h:351
string nRem_attr
Attribute name (in sample) for number of removed. not recorded if empty.
Definition RepProcess.h:354
RepBasicOutlierCleaner()
default constructor
Definition RepProcess.h:364
RepBasicOutlierCleaner(const string &_signalName, string init_string)
default constructor + setting signal name + initialize from string
Definition RepProcess.h:368
int _learn(MedPidRepository &rep, MedSamples &samples, vector< RepProcessor * > &prev_processor)
learn cleaning boundaries
Definition RepProcess.cpp:939
void print()
Debug printing.
Definition RepProcess.h:414
void set_signal(const string &_signalName)
Set signal name and fill affected and required signals sets.
Definition RepProcess.h:385
Definition RepProcess.h:1561
string signal_name
name of signal to clean
Definition RepProcess.h:1566
string output_name
name of output virtual signal - defaults to signal_name + "_" + ranges_name
Definition RepProcess.h:1568
int signal_id
id of signal to clean
Definition RepProcess.h:1569
int ranges_id
id of signal the defines ranges
Definition RepProcess.h:1570
int time_channel
time channel to consider in cleaning in the original signal
Definition RepProcess.h:1572
string ranges_name
name of signal that defines ranges
Definition RepProcess.h:1567
vector< string > sets
sets use to filter ranges_name signal on range_val_channel. If empty or range_val_channel,...
Definition RepProcess.h:1578
int output_id
id of output signal
Definition RepProcess.h:1571
RepBasicRangeCleaner()
default constructor
Definition RepProcess.h:1584
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:1573
int output_type
output signal type - should be identical to input signal type default to range + val type....
Definition RepProcess.h:1574
A simple class for calculating virtual signals.
Definition RepProcess.h:1326
vector< string > signals
it is possible to transfer a vector of required signals, to override default ones.
Definition RepProcess.h:1340
string output_signal_type
a parameter to be pass to list signal to afect output type
Definition RepProcess.h:1334
string calculator
calculator asked for by user
Definition RepProcess.h:1331
int _learn(MedPidRepository &rep, MedSamples &samples, vector< RepProcessor * > &prev_processors)
In this class there's never learning - we return 0 immediately.
Definition RepProcess.h:1362
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:1329
RepCheckReq does not actually process the repository but rather check each sample for compliance with...
Definition RepProcess.h:1844
void init_attributes()
Init attributes information : Should be implemented for inheriting classes that have attributes.
Definition RepProcess.h:1875
vector< string > signalNames
Required signals.
Definition RepProcess.h:1847
vector< int > signalIds
Required signals ids.
Definition RepProcess.h:1848
RepCheckReq()
constructor
Definition RepProcess.h:1860
vector< int > time_channels
signals' time channels
Definition RepProcess.h:1850
RepCreateReigsty creates registries (e.g.
Definition RepProcess.h:1424
void set_affected_signal_ids(MedDictionarySections &dict)
Fill aff_signal_ids : parent function just fills from aff_signals.
Definition RepProcess.h:1446
string signal_type
the signal type definition to create
Definition RepProcess.h:1430
vector< string > signals
names of input signals used by the processor
Definition RepProcess.h:1427
string output_name
names of signal created by the processor
Definition RepProcess.h:1426
int factor_channel
the factor_channel_number
Definition RepProcess.h:1429
vector< float > factors
factor for each signal
Definition RepProcess.h:1428
void set_required_signal_ids(MedDictionarySections &dict)
Fill req_signal_ids : parent function just fills from req_signals.
Definition RepProcess.h:1445
RepConfiguredOutlierCleaner is a simple cleaner considering each value of a certain signal separatley...
Definition RepProcess.h:447
void init_defaults()
Initialize to default values.
Definition RepProcess.h:457
string cleanMethod
cleaning method : "logical" "confirmed" or "learned"
Definition RepProcess.h:452
Definition RepProcess.h:1772
void set_affected_signal_ids(MedDictionarySections &dict)
Fill aff_signal_ids : parent function just fills from aff_signals.
Definition RepProcess.h:1809
vector< vector< string > > categories_sets
the sets defining each category.
Definition RepProcess.h:1790
void set_required_signal_ids(MedDictionarySections &dict)
Fill req_signal_ids : parent function just fills from req_signals.
Definition RepProcess.h:1808
vector< string > categories_names
the names of the categories to create, categories_names[j] will sit at bit j (1 << j)
Definition RepProcess.h:1789
Definition RepProcess.h:1892
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:1905
string signalName
name of signal to clean
Definition RepProcess.h:1894
int signalId
id of signal to clean
Definition RepProcess.h:1895
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:1914
void set_signal_ids(MedSignals &sigs)
set signal-ids : Should be implemented for inheriting classes that have signalId
Definition RepProcess.h:1911
void init_defaults()
initialize to default values : Should be implemented for inheriting classes that have parameters
Definition RepProcess.h:1908
RepMultiProcessor is a repository processor which contains a vector of simpler processors that can be...
Definition RepProcess.h:242
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:288
void print()
serialization
Definition RepProcess.h:318
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:246
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:244
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:249
RepNbrsOutlierCleaner is cleaner that looks at the neighbourhood of a certain signal value.
Definition RepProcess.h:647
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:656
void init_defaults()
Initialize to default values.
Definition RepProcess.h:673
RepNbrsOutlierCleaner(const string &_signalName, string init_string)
default constructor + setting signal name + initialize from string
Definition RepProcess.h:668
int val_channel
value cahnnel to consider in cleaning
Definition RepProcess.h:653
void set_signal(const string &_signalName)
Set signal name and fill affected and required signals sets.
Definition RepProcess.h:684
int time_channel
time channel to consider in cleaning
Definition RepProcess.h:652
RepNbrsOutlierCleaner(const string &_signalName)
default constructor + setting signal name
Definition RepProcess.h:666
RepNbrsOutlierCleaner(const string &_signalName, ValueCleanerParams *_params)
default constructor + setting signal name + initialize from parameters
Definition RepProcess.h:670
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:659
int nbr_time_width
size of neighborhood for defining neighboring values
Definition RepProcess.h:655
string nRem_attr_suffix
Attribute suffix (name is sample is signalName_suffix) for number of removed. not recorded if empty.
Definition RepProcess.h:660
string signalName
name of signal to clean
Definition RepProcess.h:650
int signalId
id of signal to clean
Definition RepProcess.h:651
void set_signal_ids(MedSignals &sigs)
Set signal id.
Definition RepProcess.h:687
int init(void *processor_params)
Fill required- and affected-signals sets.
Definition RepProcess.h:690
string nTrim_attr_suffix
Attribute suffix (name is sample is signalName_suffix) for number of trimmed. not recorded if empty.
Definition RepProcess.h:661
RepNbrsOutlierCleaner()
default constructor
Definition RepProcess.h:664
string nRem_attr
Attribute name (in sample) for number of removed. not recorded if empty.
Definition RepProcess.h:658
Definition RepProcess.h:1938
void set_signal_ids(MedSignals &sigs)
set signal-ids : Should be implemented for inheriting classes that have signalId
Definition RepProcess.h:1975
void init_defaults()
initialize to default values : Should be implemented for inheriting classes that have parameters
Definition RepProcess.h:1966
string signalName
name of signal to clean
Definition RepProcess.h:1952
A Repository panel completer for a complete panel of signals that are dependent and given on same tim...
Definition RepProcess.h:883
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:934
Definition RepProcess.h:54
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:66
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:194
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:62
bool unconditional
indicated that processor should ALWAYS be applied
Definition RepProcess.h:64
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:59
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:180
virtual void init_defaults()
initialize to default values : Should be implemented for inheriting classes that have parameters
Definition RepProcess.h:99
virtual void fit_for_repository(MedPidRepository &rep)
make changes to RepProcessor according to available signals in Repository
Definition RepProcess.h:139
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:102
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:175
virtual void register_virtual_section_name_id(MedDictionarySections &dict)
Register section id to section name of new virtual signals.
Definition RepProcess.h:142
RepProcessorTypes processor_type
type of repository processor
Definition RepProcess.h:57
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:105
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:192
virtual int init(void *params)
initialize from a params object : Should be implemented for inheriting classes that have parameters
Definition RepProcess.h:95
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:217
virtual void init_attributes()
Init attributes information : Should be implemented for inheriting classes that have attributes.
Definition RepProcess.h:153
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:60
virtual void print()
optional printing of processor
Definition RepProcess.h:230
unordered_set< int > aff_signal_ids
ids of signals affected by processing
Definition RepProcess.h:63
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:135
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:165
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:158
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:171
virtual int init(map< string, string > &mapper)
initialize from a map : Should be implemented for inheriting classes that have parameters
Definition RepProcess.h:97
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:118
virtual void init_tables(MedDictionarySections &dict, MedSignals &sigs)
Init required tables : Should be implemented for inheriting classes that have such tables.
Definition RepProcess.h:150
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:169
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:78
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:1995
void set_signal(const string &_signalName)
set signal-name : Should be implemented for inheriting classes that have signalName
Definition RepProcess.h:2007
A cleaner that is based on rules that describe relations of signal values to each other.
Definition RepProcess.h:520
unordered_map< int, pair< int, int > > signal_id_channels
signal channels (if exists). first is time, second is for val
Definition RepProcess.h:570
string verbose_file
cleaning output_file for debuging
Definition RepProcess.h:534
int init(void *processor_params)
initialize from a params object : Should be implemented for inheriting classes that have parameters
Definition RepProcess.h:587
unordered_map< string, pair< int, int > > signal_channels
signal channels (if exists). first is time, second is for val
Definition RepProcess.h:569
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:526
map< int, string > rules2RemoveSignal
which signal to remove if contradiction found. If not exists default to remove all
Definition RepProcess.h:566
vector< int > signalIds
Signals to clean.
Definition RepProcess.h:525
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:604
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:623
set< int > reqSignalIds
Helpers.
Definition RepProcess.h:573
Normalize Signal Values by time - divide by time to calculate rate.
Definition RepProcess.h:1621
string output_name
names of signals created by the completer
Definition RepProcess.h:1623
void set_required_signal_ids(MedDictionarySections &dict)
Fill req_signal_ids : parent function just fills from req_signals.
Definition RepProcess.h:1639
string output_signal_type
the output signal type
Definition RepProcess.h:1627
int work_channel
which channel to change and divide by time
Definition RepProcess.h:1625
float factor
additional constant factor
Definition RepProcess.h:1626
string input_name
names of input signals used by the completer
Definition RepProcess.h:1624
void set_affected_signal_ids(MedDictionarySections &dict)
Fill aff_signal_ids : parent function just fills from aff_signals.
Definition RepProcess.h:1640
Definition RepProcess.h:733
RepSimValHandler(const string &_signalName, string init_string)
default constructor + setting signal name + initialize from string
Definition RepProcess.h:751
RepSimValHandler()
default constructor
Definition RepProcess.h:747
int nValChannels
number of value-channels, important for rem-diff and mean modes
Definition RepProcess.h:740
string signalName
name of signal to handle
Definition RepProcess.h:735
SimValHandleTypes handler_type
type of handling multiple-values
Definition RepProcess.h:738
void set_signal(const string &_signalName)
Set signal name and fill affected and required signals sets.
Definition RepProcess.h:754
int signalId
id of signal to handle
Definition RepProcess.h:736
vector< int > time_channels
time channels to consider. All if empty
Definition RepProcess.h:737
RepSimValHandler(const string &_signalName)
default constructor + setting signal name
Definition RepProcess.h:749
void set_signal_ids(MedSignals &sigs)
Set signal id.
Definition RepProcess.h:757
split signal based on set of values.
Definition RepProcess.h:1469
string output_signal_type
same as input signal - will remove later after change init process of RepProcessor to fetch input sig...
Definition RepProcess.h:1476
void set_affected_signal_ids(MedDictionarySections &dict)
Fill aff_signal_ids : parent function just fills from aff_signals.
Definition RepProcess.h:1485
vector< float > factors
factor for each output signal
Definition RepProcess.h:1473
vector< string > names
names of signal created by the processor
Definition RepProcess.h:1472
void set_required_signal_ids(MedDictionarySections &dict)
Fill req_signal_ids : parent function just fills from req_signals.
Definition RepProcess.h:1484
vector< string > sets
the sets to check if signal value is in set
Definition RepProcess.h:1474
int val_channel
the val channel to look for the sets
Definition RepProcess.h:1475
string input_name
names of input signal used by the processor
Definition RepProcess.h:1471
Definition SerializableObject.h:31
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:1250
RepCalcSimpleSignals is a rep processor containing several calculators to calculate new signals.
Definition RepProcess.h:1037
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:1053
virtual bool do_calc(const vector< float > &vals, float &res) const
the calc option
Definition RepProcess.h:1051
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:1047
virtual void validate_arguments(const vector< string > &input_signals, const vector< string > &output_signals) const
validates correctness of inputs
Definition RepProcess.h:1049
virtual void init_tables(MedDictionarySections &dict, MedSignals &sigs, const vector< string > &input_signals)
init operator based on repo if needed
Definition RepProcess.h:1055
does linear sum with factors on vector of input signals, has b0 as constant res := b0 + sum_sigma(i=1...
Definition RepProcess.h:1186
vector< float > factors
the factors given by ","
Definition RepProcess.h:1188
Definition MedValueCleaner.h:17
Parameters for configured outliers cleaner.
Definition RepProcess.h:429
eGFR calculator based on Creatinine, Gender and Age.
Definition RepProcess.h:1148
does log operation
Definition RepProcess.h:1167
Definition RepProcess.h:324
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:1728
Definition RepProcess.h:1716
Definition RepProcess.h:1749