Medial Code Documentation
Loading...
Searching...
No Matches
DiabetesFinderGenerator.h
1#pragma once
2
5#include <nlohmann/json.hpp>
6
7using json = nlohmann::json;
12 // dm related privates
13 int df_drug_sid = -1; // idx for drug signal in usvs, sig_ids, etc...
14 int df_diagnosis_sid = -1;
15 int df_coded_sid = -1;
16 int df_glucose_sid = -1;
17 int df_hba1c_sid = -1;
18 int df_drug_section_id = -1;
19 int df_diagnosis_section_id = -1;
20 int df_coded_section_id = -1;
21
22 enum {
23 REASON_RECENT_LABS = 1,
24 REASON_RECENT_DRUGS = 2,
25 REASON_RECENT_DIAGNOSTIC = 4,
26 REASON_PAST_LABS = 8,
27 REASON_PAST_DRUGS = 16,
28 REASON_PAST_DIAGNOSTIC = 32,
29 };
30
31 enum {
32 DFG_DIABETES_EVENT_GLUCOSE,
33 DFG_DIABETES_EVENT_HBA1C,
34 DFG_DIABETES_EVENT_DRUG,
35 DFG_DIABETES_EVENT_DIAGNOSIS,
36 DFG_DIABETES_EVENT_PG_DURING_OGTT, //Plasma Glucose during Oral Glucose Tolerance Test
37 };
38
39 class DiabetesEvent {
40 public:
41 int time = -1;
42 int de_type;
43 float val;
44 bool is_second = false;
45 bool is_first = false;
46 bool is_non_dm = false;
47 string reason = "";
48
49 DiabetesEvent() {};
50 DiabetesEvent(int _type, int _time, float _val) { time = _time; de_type = _type; val = _val; }
51 };
52 vector<unsigned char> df_drug_lut;
53 vector<unsigned char> df_diagnosis_lut;
54 vector<unsigned char> df_coded_lut;
55
56 int _resolve(PidDynamicRec& rec, vector<DiabetesEvent>& df_events, int coded_date, int coded_val, int calc_time, json& json_out);
57public:
58
59 bool df_score_is_flag = true;
60 bool df_score_is_bitmask = false;
61
62 // dm registry related parameters
63 vector<string> df_drug_sets = { "ATC_A10_____" };
64 //TODO - Diabetes diagnosis sets?
65 vector<string> df_coded_sets; // if not given explicitly will be defaulted to df_diagnosis sets
66
67 vector<string> df_diagnosis_sets;
68 string df_diagnosis_sig = "RC"; // These are optional sig + diagnosis codes (in df_diagnosis_sets) that can point to Diabetes but are not in the coded sig and sets.
69 string df_coded_sig = "RC"; // This is the signal that will define who's coded (along with the df_coded_sets)
70 string df_glucose_sig = "Glucose";
71 string df_hba1c_sig = "HbA1C";
72 string df_drug_sig = "Drug";
73 int df_diagnoses_severity = 4; // 3: need supporting evidence as well, 4: single code is enough
74 int df_bio_mode = 0; // bio mode - takes the FIRST suggestive test for a condition
75 int df_output_verbosity = 2; // 1 - "score" only, 2 - add reason for detected date, 3 - add all supporting evidences in history
76 int df_output_non_dm_period = 0; // 1 - report also the period of non dm tests prior to the predition time
77
78 int df_past_event_days = (365)*3;
79 float df_by_single_glucose = 200.0f;
80 float df_by_single_hba1c = 7.0f;
81 float df_by_second_glucose = 126.0f;
82 float df_by_second_hba1c = 6.5f;
83 float df_pre_d_hba1c = 5.8f;
84 float df_pre_d_glucose = 101.0f;
85 int df_by_second_time_delta_days = (365) * 2;
86
87 // Constructor/Destructor
90 //names.push_back("df");
91 req_signals.push_back(df_glucose_sig);
92 req_signals.push_back(df_hba1c_sig);
93 req_signals.push_back(df_drug_sig);
94 req_signals.push_back(df_diagnosis_sig);
95 if(df_coded_sig != df_diagnosis_sig)
96 req_signals.push_back(df_coded_sig);
97 init_defaults();
98 };
100
102 int init(map<string, string>& mapper);
103
104 void init_tables(MedDictionarySections& dict);
105 void set_signal_ids(MedSignals& sigs);
106
107 void init_defaults();
108
109 // Naming
110 void set_names() { if (names.empty()) names.push_back("FTR_" + int_to_string_digits(serial_id, 6) + ".DiabetesFinder"); tags.push_back("Diabetes"); }
111
112 // Copy
113 virtual void copy(FeatureGenerator *generator) { *this = *(dynamic_cast<DiabetesFinderGenerator *>(generator)); }
114
115 // generate a new feature
116 int _generate(PidDynamicRec& rec, MedFeatures& features, int index, int num, vector<float *> &_p_data);
117 //float get_value(PidDynamicRec &rec, int idx, int time, int sig_outcomeTime);
118
119 // Serialization
120 ADD_CLASS_NAME(DiabetesFinderGenerator)
121 ADD_SERIALIZATION_FUNCS(generator_type, names, tags, iGenerateWeights, req_signals, df_drug_sets, df_coded_sets, df_diagnosis_sets, df_diagnosis_sig, df_coded_sig, df_glucose_sig,
122 df_hba1c_sig, df_drug_sig, df_past_event_days, df_by_single_glucose, df_by_second_glucose, df_by_second_hba1c, df_by_single_hba1c, df_by_second_time_delta_days, df_pre_d_hba1c, df_pre_d_glucose,
123 df_diagnoses_severity, df_output_verbosity, df_output_non_dm_period)
124};
125
FeatureGenerator : creating features from raw signals.
@ FTR_GEN_DIABETES_FINDER
"diabetes_finder" - Diabetes Finder feature. Creates DiabetesFinderGenerator
Definition FeatureGenerator.h:46
An Abstract class that can be serialized and written/read from file.
#define ADD_SERIALIZATION_FUNCS(...)
Definition SerializableObject.h:156
#define MEDSERIALIZE_SUPPORT(Type)
Definition SerializableObject.h:142
calculate drug coverage of prescription time in defined the time window.
Definition DiabetesFinderGenerator.h:11
int init(map< string, string > &mapper)
The parsed fields from init command.
Definition DiabetesFinderGenerator.cpp:375
Definition FeatureGenerator.h:53
int iGenerateWeights
Feature/Weights generator.
Definition FeatureGenerator.h:72
vector< string > tags
Tags - for defining labels or groups. may be used later for filtering for example.
Definition FeatureGenerator.h:69
FeatureGeneratorTypes generator_type
Type.
Definition FeatureGenerator.h:57
vector< string > names
Feature name.
Definition FeatureGenerator.h:60
Definition MedDictionary.h:88
A class for holding features data as a virtual matrix
Definition MedFeatures.h:47
Definition MedSignals.h:719
Definition MedPidRepository.h:127