Medial Code Documentation
Loading...
Searching...
No Matches
RepCreateRegistry.h
1#ifndef __REP_CREATE_REGISTRY_H__
2#define __REP_CREATE_REGISTRY_H__
3
4#include <string>
5#include <vector>
6#include <map>
7#include "RepProcess.h"
9
10using namespace std;
11
12typedef enum {
13 REP_REGISTRY_DM,
14 REP_REGISTRY_HT,
15 REP_REGISTRY_PROTEINURIA,
16 REP_REGISTRY_CKD,
17 REP_REGISTRY_CUSTOM,
18 REP_REGISTRY_LAST
19} RegistryTypes;
20
21// helper class
22typedef enum {
23 REG_EVENT_DM_GLUCOSE,
24 REG_EVENT_DM_HBA1C,
25 REG_EVENT_DM_DRUG,
26 REG_EVENT_DM_DIAGNOSES
27} DMEventsTypes;
28
30public:
31 int time = -1;
32 int event_type;
33 float event_val;
34 int event_severity;
35
36 RegistryEvent() {};
37 RegistryEvent(int _time, int _type, float _val, int _severity) { time = _time; event_type = _type; event_val = _val; event_severity = _severity; }
38
39};
40
42public:
43 string sig_name;
44 int sig_id;
45 int usv_idx;
46 int is_numeric;
47 vector<vector<string>> categories;
48 vector<vector<int>> categories_i;
49 vector<pair<float, float>> ranges;
50};
51
53public:
54
55 RegistryTypes registry;
56 vector<string> names;
57
58 vector<string> signals;
59 vector<string> registry_values;
60 int time_unit = -1;
61
62 bool verbose = false;
63 bool ht_systolic_first = false; //TODO: change to true after transferring exising models
64
65 // Registry specific parameters
66 // Hypertension
67 vector<string> ht_identifiers;
68 vector<string> chf_identifiers;
69 vector<string> mi_identifiers;
70 vector<string> af_identifiers;
71 bool ht_identifiers_given = false, chf_identifiers_given = false, mi_identifiers_given = false, af_identifiers_given = false;
72
73 vector<string> ht_drugs = { "ATC_C08C____","ATC_C07B____","ATC_C07C____","ATC_C07D____","ATC_C07F____","ATC_C07A_G__","ATC_C09B____","ATC_C09D____", "ATC_C02D_A01" };
74 vector<string> ht_chf_drugs = { "ATC_C03_____" };
75 vector<string> ht_dm_drugs = { "ATC_C09A____", "ATC_C09C____" };
76 vector<string> ht_extra_drugs = { "ATC_C07A_A__", "ATC_C07A_B__" };
77
78 int ht_drugs_gap = 120;
79
82 if (custom_registry != NULL) {
83 delete custom_registry;
84 custom_registry = NULL;
85 }
86 };
87
88 // dm registry related parameters
89 string dm_drug_sig = "Drug";
90 vector<string> dm_drug_sets = { "ATC_A10_____" };
91 string dm_diagnoses_sig = "RC";
92 vector<string> dm_diagnoses_sets;
93 string dm_glucose_sig = "Glucose";
94 string dm_hba1c_sig = "HbA1C";
95 int dm_diagnoses_severity = 4; // 3: need supporting evidence as well, 4: single code is enough
96 int dm_bio_mode = 0; // bio mode - takes the FIRST suggestive test for a condition
97
98
99 // proteinuria related parameters
100 // <name>:<0/1: is_numeric (numerics are 1)>:<categs or ranges for normal>:<categs or ranges for medium>:<categs or ranges for severe>
101 // / is the separator between signals in a real input
102 vector<string> urine_tests_categories = {
103 "Urine_Microalbumin:1:0,30:30,300:300,1000000",
104 "UrineTotalProtein:1:0,0.15:0.15,0.60:0.60,1000000",
105 "UrineAlbumin:1:0,30:30,300:300,1000000",
106 "Urine_dipstick_for_protein:0:Urine_dipstick_for_protein_normal:Urine_dipstick_for_protein_medium:Urine_dipstick_for_protein_severe",
107 "Urinalysis_Protein:0:Urinalysis_Protein_normal:Urinalysis_Protein_medium:Urinalysis_Protein_severe",
108 "Urine_Protein_Creatinine:1:0,15:15,100:100,1000000",
109 "UrineAlbumin_over_Creatinine:1:0,3.5:3.5,27:27,1000000" };
110
111
112 // ckd related
113 string ckd_egfr_sig = "eGFR_CKD_EPI";
114 string ckd_proteinuria_sig = "Proteinuria_State";
115
116 //custom args:
117 string registry_custom_type = "";
118 string registry_custom_args = "";
119
121 int init(map<string, string>& mapper);
122 void init_lists();
123
124 void post_deserialization();
125
126
127 // making sure V_ids and sigs_ids are initialized
129
130 // Learning
132 int _learn(MedPidRepository& rep, MedSamples& samples, vector<RepProcessor *>& prev_processors) { return 0; };
133
134 // Applying
136 int _apply(PidDynamicRec& rec, vector<int>& time_points, vector<vector<float>>& attributes_mat);
137
138 void get_required_signal_categories(unordered_map<string, vector<string>> &signal_categories_in_use) const;
139
140 void make_summary();
141
142 // serialization
143 ADD_CLASS_NAME(RepCreateRegistry)
145 ht_identifiers, chf_identifiers, mi_identifiers, af_identifiers, ht_identifiers_given, chf_identifiers_given, mi_identifiers_given, af_identifiers_given,
147 dm_drug_sig, dm_drug_sets, dm_diagnoses_sig, dm_diagnoses_sets, dm_glucose_sig, dm_hba1c_sig, dm_diagnoses_severity,
148 urine_tests_categories,
149 ckd_egfr_sig, ckd_proteinuria_sig, registry_custom_type, registry_custom_args, custom_registry, ht_systolic_first)
150
151private:
152 MedRegistry *custom_registry = NULL;
153 int bDateCode = -1;
154 vector<int> create_custom_input_sigs;
155 string registry_name;
156 int found_op_ht = 0;
157 int num_ht_measurements = 0;
158
160 const map<string, RegistryTypes> name2type = { { "dm" , REP_REGISTRY_DM },{ "ht", REP_REGISTRY_HT },{ "proteinuria", REP_REGISTRY_PROTEINURIA },{ "ckd", REP_REGISTRY_CKD },{ "custom", REP_REGISTRY_CUSTOM } };
161
162 // output signal name + type
163 const map<RegistryTypes, vector<pair<string, string>>> type2Virtuals = { { REP_REGISTRY_DM,{ { "DM_Registry", "T(l,l),V(f)" } } },
164 { REP_REGISTRY_HT,{ { "HT_Registry", "T(l,l),V(f)" } } },
165 { REP_REGISTRY_PROTEINURIA,{ { "Proteinuria_State", "T(i),V(f)" } } } ,
166 { REP_REGISTRY_CKD,{ { "CKD_Registry", "T(i),V(f)" } } },
167 { REP_REGISTRY_CUSTOM,{ { "CUSTOM_Registry", "T(l,l),V(f)" } } } };
168
169 // required signals
170 const map<RegistryTypes, vector<string>> type2reqSigs = { { REP_REGISTRY_DM,{ "Glucose","HbA1C","Drug","RC" } },
171 { REP_REGISTRY_HT,{ "BP","RC","Drug","BDATE","DM_Registry" } },
172 { REP_REGISTRY_PROTEINURIA ,{ "Urine_Microalbumin", "UrineTotalProtein" , "UrineAlbumin" , "Urine_dipstick_for_protein" , "Urinalysis_Protein" , "Urine_Protein_Creatinine" , "UrineAlbumin_over_Creatinine" } },
173 { REP_REGISTRY_CKD,{ "Proteinuria_State", "eGFR_CKD_EPI" } } };
174
175 set<int> sig_ids_s;
176 vector<int> sig_ids;
177 vector<int> virtual_ids;
178
179 // dm related privates
180 int dm_drug_idx = -1; // idx for drug signal in usvs, sig_ids, etc...
181 int dm_diagnoses_idx = -1;
182 vector<char> dm_drug_lut;
183 vector<char> dm_diagnoses_lut;
184 int dm_glucose_idx = -1;
185 int dm_hba1c_idx = -1;
186 //DEF 0 DM_Registry_Non_diabetic
187 //DEF 1 DM_Registry_Pre_diabetic
188 //DEF 2 DM_Registry_Diabetic
189 vector<string> dm_reg_values = { "DM_Registry_Non_diabetic", "DM_Registry_Pre_diabetic", "DM_Registry_Diabetic" };
190
191
192 // proteinuria related privates
193 vector<string> proteinuria_reg_values = { "Proteinuria_Normal", "Proteinuria_Medium" , "Proteinuria_Severe" };
194 vector<RegistryDecisionRanges> proteinuria_ranges;
195
196 // CKD related states
197 vector<string> ckd_reg_values = { "CKD_State_Normal" , "CKD_State_Level_1", "CKD_State_Level_2", "CKD_State_Level_3", "CKD_State_Level_4" };
198 int ckd_egfr_idx = -1;
199 int ckd_proteinuria_idx = -1;
200
201
202 vector<int> signal_time_units;
203
204 // Registry specific functions and parameters
205 // HT
206 void init_ht_registry_tables(MedDictionarySections& dict, MedSignals& sigs);
207 void ht_registry_apply(PidDynamicRec& rec, vector<int>& time_points, int iver, vector<UniversalSigVec>& usvs, vector<vector<float>>& all_v_vals, vector<vector<int>>& all_v_times, vector<int>& final_sizes);
208 void ht_init_defaults();
209 void fillLookupTableForHTDrugs(MedDictionary& dict, vector<char>& lut, vector<string>& sets, char val);
210 void buildLookupTableForHTDrugs(MedDictionary& dict, vector<char>& lut);
211
212 vector<string> ht_def_values = { "HT_Registry_Non_Hypertensive","HT_Registry_Hypertensive" };
213 int bp_idx = 0, rc_idx = 1, drug_idx = 2, bdate_idx = 3, dm_registry_idx = 4;
214 vector<char> htLut, chfLut, miLut, afLut;
215 vector<char> htDrugLut;
216
217 // DM
218 void init_dm_registry_tables(MedDictionarySections& dict, MedSignals& sigs);
219 void dm_registry_apply(PidDynamicRec& rec, vector<int>& time_points, int iver, vector<UniversalSigVec>& usvs, vector<vector<float>>& all_v_vals, vector<vector<int>>& all_v_times, vector<int>& final_sizes);
220
221 // Proteinuria
222 void init_proteinuria_registry_tables(MedDictionarySections& dict, MedSignals& sigs);
223 void proteinuria_registry_apply(PidDynamicRec& rec, vector<int>& time_points, int iver, vector<UniversalSigVec>& usvs, vector<vector<float>>& all_v_vals, vector<vector<int>>& all_v_times, vector<int>& final_sizes);
224
225 // ckd
226 void init_ckd_registry_tables(MedDictionarySections& dict, MedSignals& sigs);
227 void ckd_registry_apply(PidDynamicRec& rec, vector<int>& time_points, int iver, vector<UniversalSigVec>& usvs, vector<vector<float>>& all_v_vals, vector<vector<int>>& all_v_times, vector<int>& final_sizes);
228
229 void custom_registry_apply(PidDynamicRec& rec, vector<int>& time_points, int iver,
230 const vector<UniversalSigVec>& usvs, vector<vector<float>>& all_v_vals, vector<vector<int>>& all_v_times, vector<int>& final_sizes);
231};
232
234
235#endif
registry methods over MedRegistry Object
RepProcessor is the parent class for processing a MedRepository or PidDynamicRec Basic functionalitie...
@ REP_PROCESS_CREATE_REGISTRY
"create_registry" creates a registry signal (TimeRange to values). creates RepCreateRegistry
Definition RepProcess.h:37
#define ADD_SERIALIZATION_FUNCS(...)
Definition SerializableObject.h:122
#define MEDSERIALIZE_SUPPORT(Type)
Definition SerializableObject.h:108
Definition MedDictionary.h:87
Definition MedDictionary.h:17
Definition MedPidRepository.h:87
A class that holds all registry records on all patients.
Definition MedRegistry.h:30
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
Definition MedPidRepository.h:127
Definition RepCreateRegistry.h:41
Definition RepCreateRegistry.h:29
Definition RepCreateRegistry.h:52
const map< string, RegistryTypes > name2type
registry name to type
Definition RepCreateRegistry.h:160
vector< string > names
name(s) of registry signal(s) to create
Definition RepCreateRegistry.h:56
int ht_drugs_gap
Gap (in days) from drug input to following indication.
Definition RepCreateRegistry.h:78
vector< string > registry_values
values of registry (to appear in relevant section of dictionary)
Definition RepCreateRegistry.h:59
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 RepCreateRegistry.cpp:219
RegistryTypes registry
type of registry to create
Definition RepCreateRegistry.h:55
int _apply(PidDynamicRec &rec, vector< int > &time_points, vector< vector< float > > &attributes_mat)
apply processing on a single PidDynamicRec at a set of time-points : Should be implemented for all in...
Definition RepCreateRegistry.cpp:281
vector< string > af_identifiers
identifiers (ReadCodes) of AF
Definition RepCreateRegistry.h:70
vector< int > sig_ids
ids of signals used as input by the calculator (for faster usage at run time: save name conversions)
Definition RepCreateRegistry.h:176
vector< string > ht_drugs
drugs indicative of HT
Definition RepCreateRegistry.h:73
vector< string > ht_identifiers
identifiers (ReadCodes) of HT
Definition RepCreateRegistry.h:67
vector< string > ht_dm_drugs
drugs indicative of HT, unless DM
Definition RepCreateRegistry.h:75
vector< string > chf_identifiers
identifiers (ReadCodes) of CHF
Definition RepCreateRegistry.h:68
void init_lists()
Required/Affected signals.
Definition RepCreateRegistry.cpp:137
vector< string > signals
Vector of required signals, to override default ones.
Definition RepCreateRegistry.h:58
vector< int > signal_time_units
time-units of all signals
Definition RepCreateRegistry.h:202
vector< string > ht_chf_drugs
drugs indicative of HT, unless CHF
Definition RepCreateRegistry.h:74
int _learn(MedPidRepository &rep, MedSamples &samples, vector< RepProcessor * > &prev_processors)
In this class there's never learning - we return 0 immediately.
Definition RepCreateRegistry.h:132
bool verbose
verbosity
Definition RepCreateRegistry.h:62
vector< string > ht_extra_drugs
drugs indicative of HT, unless CHF/MI/AF.
Definition RepCreateRegistry.h:76
int init(map< string, string > &mapper)
Init from map.
Definition RepCreateRegistry.cpp:16
vector< int > virtual_ids
ids of signals created by the calculator (for faster usage at run time: save name conversions)
Definition RepCreateRegistry.h:177
vector< string > mi_identifiers
identifiers (ReadCodes) of MI
Definition RepCreateRegistry.h:69
int time_unit
time-unit of registry
Definition RepCreateRegistry.h:60
void init_tables(MedDictionarySections &dict, MedSignals &sigs)
Init required tables : Should be implemented for inheriting classes that have such tables.
Definition RepCreateRegistry.cpp:158
Definition RepProcess.h:53
unordered_set< string > aff_signals
names of signals affected by processing
Definition RepProcess.h:61
unordered_set< string > req_signals
names of signals required for processsing
Definition RepProcess.h:58
RepProcessorTypes processor_type
type of repository processor
Definition RepProcess.h:56
vector< pair< string, int > > virtual_signals
virtual signals are created only in rep processors but can be used by any rep processor that comes af...
Definition RepProcess.h:77
Definition StdDeque.h:58