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