Medial Code Documentation
Loading...
Searching...
No Matches
UnifiedSmokingGenerator.h
1#pragma once
3
4typedef enum {
5 SMX_UNIFIED_CURRENT_SMOKER,
6 SMX_UNIFIED_EX_SMOKER,
7 SMX_UNIFIED_UNKNOWN_SMOKER,
8 SMX_UNIFIED_NEVER_SMOKER,
9 SMX_UNIFIED_PASSIVE_SMOKER,
10 SMX_UNIFIED_DAYS_SINCE_QUITTING,
11 SMX_UNIFIED_SMOK_PACK_YEARS_MAX,
12 SMX_UNIFIED_SMOK_PACK_YEARS_LAST,
13 SMX_UNIFIED_SMOK_PACK_YEARS,
14 UNIFIED_NLST_CRITERION,
15 SMX_UNIFIED_YEARS_SINCE_QUITTING,
16 SMX_UNIFIED_SMOKING_INTENSITY,
17 SMX_UNIFIED_SMOKING_YEARS,
18 SMX_UNIFIED_LAST
19} UnifiedSmokingGeneratorFields;
20
21typedef enum {
22 UNKNOWN_SMOKER,
23 NEVER_SMOKER,
24 PASSIVE_SMOKER,
25 EX_SMOKER,
26 CURRENT_SMOKER,
27 NEVER_OR_EX_SMOKER
28} SMOKING_STATUS;
29
31{
32 int startDate, endDate;
33 SMOKING_STATUS smokingStatus;
34};
35
36#define NA_SMOKING_DATE -1
37#define MAX_PACK_YEARS 200
38#define MAX_INTENSITY_TO_TRIM 140
39#define MAX_INTENSITY_TO_REMOVE 200
40#define AGE_AT_START_SMOKING 20
41#define PACK_SIZE 20
42
44public:
45 float nlstPackYears, nlstQuitTimeYears, nlstMinAge, nlstMaxAge;
46 bool nonDefaultNlstCriterion, useDataComplition;
47 FILE *fp = stderr;
48 string debug_file = "";
49 set<vector<SMOKING_STATUS>> possibleCombinations;
50 float timeSinceQuittingModelSlope = missing_val;
51 float timeSinceQuittingModelConst = missing_val;
52
53 // source_feature_names as specified by the user, will be resolved to decorated names
54 vector<string> raw_feature_names;
55 // Constructor/Destructor
57 missing_val = MED_MAT_MISSING_VALUE, generator_type = FTR_GEN_UNIFIED_SMOKING;
58 // Set NLST default values:
59 nlstMinAge = 55;
60 nlstMaxAge = 80;
61 nlstPackYears = 30;
62 nlstQuitTimeYears = 15;
63 nonDefaultNlstCriterion = false;
64 useDataComplition = false;
65 }
66
68 if (fp != stderr)
69 {
70 fclose(fp);
71 }
72 char *smokingStatusDesc[] = { "UNKNOWN_SMOKER", "NEVER_SMOKER", "PASSIVE_SMOKER", "EX_SMOKER", "CURRENT_SMOKER" };
73 for (auto &comb : possibleCombinations)
74 {
75 for (auto stat : comb)
76 cout << smokingStatusDesc[stat] << " ";
77 cout << endl;
78 }
79
80 };
81
82 void init_tables(MedDictionarySections& dict);
83
86 virtual int init(map<string, string>& mapper);
87
88 virtual int update(map<string, string>& mapper);
89
90 // Name
91 void set_names();
92
93 void set_signal_ids(MedSignals& sigs);
94
96
97 // Copy
98 virtual void copy(FeatureGenerator *generator) { *this = *(dynamic_cast<UnifiedSmokingGenerator *>(generator)); }
99
100 // Learn a generator
101 int _learn(MedPidRepository & rep, const MedSamples & samples, vector<RepProcessor*> processors);
102
103 void calcSmokingDuration(int neverSmoker, int unknownSmoker, vector<RangeStatus>& smokeRanges, int birthDate, int lastPackYearsDate, UniversalSigVec & SmokingDurationUsv, int testDate, float & smokingDurationBeforeLastPackYears, float & smokingDuration);
104
105 void getLastSmokingDuration(int birthDate, UniversalSigVec & SmokingDurationUsv, int testDate, int &lastDurationDate, float &lastDurationValue);
106
107 void calcPackYears(UniversalSigVec & SmokingPackYearsUsv, int testDate, int & neverSmoker, int & currentSmoker, int & formerSmoker, int & lastPackYearsDate, float & lastPackYears, float & maxPackYears);
108
109 void calcQuitTimeOriginalData(PidDynamicRec& rec, UniversalSigVec & smokingStatusUsv, UniversalSigVec & quitTimeUsv, int testDate, int formerSmoker, int neverSmoker, int currentSmoker, float & daysSinceQuittingOriginal);
110
111 void calcPackYearsOriginalData(int testDate, int lastPackYearsDate, float lastPackYears, float & lastPackYearsOriginal, UniversalSigVec SmokingIntensityUsv, UniversalSigVec SmokingDurationUsv);
112
113 void fixPackYearsSmokingIntensity(float smokingDurationSinceLastPackYears, float & smokingIntensity, float smokingDuration, float & lastPackYears, float & maxPackYears);
114
115 void printDebug(vector<RangeStatus>& smokeRanges, int qa_print, UniversalSigVec & smokingStatusUsv, UniversalSigVec & SmokingIntensityUsv, int birthDate, int testDate, vector<pair<SMOKING_STATUS, int>>& smokingStatusVec, PidDynamicRec & rec, UniversalSigVec & quitTimeUsv, UniversalSigVec & SmokingPackYearsUsv, float smokingIntensity, float smokingDuration, float yearsSinceQuitting, float maxPackYears);
116
117 void addDataToMat(vector<float*>& _p_data, int index, int i, int age, int currentSmoker, int formerSmoker, float daysSinceQuitting, float daysSinceQuittingOriginal, float maxPackYears, float lastPackYears, float lastPackYearsOriginal, int neverSmoker, int unknownSmoker, int passiveSmoker, float yearsSinceQuitting, float smokingIntensity, float smokingDuration);
118
119 // generate a new feature
120 int _generate(PidDynamicRec& rec, MedFeatures& features, int index, int num, vector<float *> &_p_data);
121
122 // get pointers to data
123 void get_p_data(MedFeatures& features, vector<float *> &_p_data);
124
125 int calcNlst(int age, int unknownSmoker, int daysSinceQuitting, float lastPackYears);
126
127 SMOKING_STATUS val2SmokingStatus(int sigVal, int smokingStatusSid, PidRec &rec);
128
129 void genSmokingVec(PidDynamicRec & rec, UniversalSigVec & smokingStatusUsv, vector<pair<SMOKING_STATUS, int>>& smokingStatusVec, int testDate, int & unknownSmoker, int & neverSmoker, int & passiveSmoker, int & formerSmoker, int & currentSmoker);
130
131 void genFirstLastSmokingDates(PidDynamicRec & rec, UniversalSigVec & smokingStatusUsv, UniversalSigVec & quitTimeUsv, int testDate, map<SMOKING_STATUS, pair<int, int>>& smokingStatusDates, vector<int>& dates, int birth_date);
132
133 void genSmokingStatus(map<SMOKING_STATUS, pair<int, int>>& smokingStatusDates, vector<int>& dates, int testDate, int birthDate, vector<pair<SMOKING_STATUS, int>>& smokingStatusVec);
134
135 void genSmokingRanges(vector<pair<SMOKING_STATUS, int>>& smokingStatusVec, int testDate, int birthDate, vector<RangeStatus>& smokeRanges);
136
137 void genLastStatus(vector<RangeStatus>& smokeRanges, int & unknownSmoker, int & neverSmoker, int & formerSmoker, int & currentSmoker, int & passiveSmoker);
138
139 void calcQuitTime(vector<RangeStatus> &smokeRange, int formerSmoker, int neverSmoker, int currentSmoker, int testDate, int birthDate, float & daysSinceQuitting, float & yearsSinceQuitting);
140
141 void calcSmokingIntensity(UniversalSigVec & SmokingIntensityUsv, int testDate, int neverSmoker, float & smokingIntensity);
142
143 void getQuitAge(PidDynamicRec& rec, int lastDate, float &ageAtEx, float &deltaTime);
144
145 void get_required_signal_categories(unordered_map<string, vector<string>> &signal_categories_in_use) const;
146 // Serialization
147 ADD_CLASS_NAME(UnifiedSmokingGenerator)
148 ADD_SERIALIZATION_FUNCS(generator_type, raw_feature_names, names, tags, iGenerateWeights, req_signals, timeSinceQuittingModelSlope, timeSinceQuittingModelConst, useDataComplition)
149private:
150 vector<vector<char>> smoke_status_luts;
151 int smoke_status_sec_id;
152
153 int smoking_quit_date_id, smoking_status_id, smoking_intensity_id, smoking_duration_id, smoking_pack_years_id;
154 int bdate_sid;
155};
156
FeatureGenerator : creating features from raw signals.
@ FTR_GEN_UNIFIED_SMOKING
"unified_smoking" - creating smoking feature - UnifiedSmokingGenerator
Definition FeatureGenerator.h:35
#define ADD_SERIALIZATION_FUNCS(...)
Definition SerializableObject.h:122
#define MEDSERIALIZE_SUPPORT(Type)
Definition SerializableObject.h:108
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
float missing_val
Missing value.
Definition FeatureGenerator.h:66
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 MedPidRepository.h:87
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 MedPidRepository.h:43
Definition UnifiedSmokingGenerator.h:43
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 UnifiedSmokingGenerator.cpp:791
void fit_for_repository(MedPidRepository &rep)
Prepartion and adjustment for model based on repository.
Definition UnifiedSmokingGenerator.cpp:812
virtual int init(map< string, string > &mapper)
The parsed fields from init command.
Definition UnifiedSmokingGenerator.cpp:26
virtual int update(map< string, string > &mapper)
Virtual to update object from parsed fields.
Definition UnifiedSmokingGenerator.cpp:88
Definition UnifiedSmokingGenerator.h:31