SEPatient.h
1 /**************************************************************************************
2 Copyright 2015 Applied Research Associates, Inc.
3 Licensed under the Apache License, Version 2.0 (the "License"); you may not use
4 this file except in compliance with the License. You may obtain a copy of the License
5 at:
6 http://www.apache.org/licenses/LICENSE-2.0
7 Unless required by applicable law or agreed to in writing, software distributed under
8 the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
9 CONDITIONS OF ANY KIND, either express or implied. See the License for the
10 specific language governing permissions and limitations under the License.
11 **************************************************************************************/
12 
13 #pragma once
14 #include <biogears/cdm/CommonDataModel.h>
15 #include <biogears/exports.h>
16 
17 #include <biogears/schema/cdm/Patient.hxx>
18 
19 CDM_BIND_DECL(PatientData)
20 
21 namespace biogears {
22 
23 class SEEventHandler;
24 class SENutrition;
25 class SEScalar;
26 class TimeUnit;
27 class SEScalarMass;
28 class MassUnit;
29 class SEScalarLength;
30 class LengthUnit;
31 class SEScalarArea;
32 class AreaUnit;
33 class SEScalarPower;
34 class PowerUnit;
35 class SEScalarVolume;
36 class VolumeUnit;
37 class SEScalarMassPerVolume;
38 class MassPerVolumeUnit;
39 class SEScalarFraction;
40 class SEScalarPressure;
41 class PressureUnit;
42 class SEScalarFrequency;
43 class FrequencyUnit;
44 class SEScalarNeg1To1;
45 class SEScalarVolumePerTime;
46 class VolumePerTimeUnit;
47 
48 class BIOGEARS_API SEPatient : public Loggable {
49 public:
50  SEPatient(Logger* logger);
51  virtual ~SEPatient();
52 
53  virtual void Clear();
54 
55  virtual bool Load(const CDM::PatientData& in);
56 
57  bool Load(const char* patientFile);
58  bool Load(const std::string& patientFile);
59 
60  virtual CDM::PatientData* Unload() const;
61 
70  virtual const SEScalar* GetScalar(const char* name);
71  virtual const SEScalar* GetScalar(const std::string& name);
72 
73  virtual const std::map<CDM::enumPatientEvent::value, bool>& GetEventStates() const { return m_EventState; }
74  virtual void SetEvent(CDM::enumPatientEvent::value type, bool active, const SEScalarTime& time);
75  virtual bool IsEventActive(CDM::enumPatientEvent::value state) const;
76  virtual double GetEventDuration(CDM::enumPatientEvent::value type, const TimeUnit& unit) const;
77  virtual void UpdateEvents(const SEScalarTime& timeStep);
85  virtual void ForwardEvents(SEEventHandler* handler) const;
86 
87  virtual std::string GetName() const;
88  virtual const char* GetName_cStr() const;
89  virtual void SetName(const char* name);
90  virtual void SetName(const std::string& name);
91  virtual bool HasName() const;
92  virtual void InvalidateName();
93 
94  virtual std::string GetAnnotation() const;
95  virtual const char* GetAnnotation_cStr() const;
96  virtual void SetAnnotation(const char* Annotation);
97  virtual void SetAnnotation(const std::string& Annotation);
98  virtual bool HasAnnotation() const;
99  virtual void InvalidateAnnotation();
100 
101  virtual CDM::enumSex::value GetGender() const;
102  virtual void SetGender(CDM::enumSex::value sex);
103  virtual bool HasGender() const;
104  virtual void InvalidateGender();
105 
106  virtual CDM::enumSex::value GetSex() const;
107  virtual void SetSex(CDM::enumSex::value sex);
108  virtual bool HasSex() const;
109  virtual void InvalidateSex();
110 
111  virtual bool HasAge() const;
112  virtual SEScalarTime& GetAge();
113  virtual double GetAge(const TimeUnit& unit) const;
114 
115  virtual bool HasWeight() const;
116  virtual SEScalarMass& GetWeight();
117  virtual double GetWeight(const MassUnit& unit) const;
118 
119  virtual bool HasHeight() const;
120  virtual SEScalarLength& GetHeight();
121  virtual double GetHeight(const LengthUnit& unit) const;
122 
123  virtual bool HasAlveoliSurfaceArea() const;
124  virtual SEScalarArea& GetAlveoliSurfaceArea();
125  virtual double GetAlveoliSurfaceArea(const AreaUnit& unit) const;
126 
127  virtual bool HasBasalMetabolicRate() const;
128  virtual SEScalarPower& GetBasalMetabolicRate();
129  virtual double GetBasalMetabolicRate(const PowerUnit& unit) const;
130 
131  virtual CDM::enumBloodType::value GetBloodType() const;
132  virtual void SetBloodType(CDM::enumBloodType::value bloodAntigen);
133  virtual bool HasBloodType() const;
134  virtual void InvalidateBloodType();
135 
136  virtual bool GetBloodRh() const;
137  virtual void SetBloodRh(bool bloodRh);
138  virtual bool HasBloodRh() const;
139  virtual void InvalidateBloodRh();
140 
141  virtual bool HasBloodVolumeBaseline() const;
142  virtual SEScalarVolume& GetBloodVolumeBaseline();
143  virtual double GetBloodVolumeBaseline(const VolumeUnit& unit) const;
144 
145  virtual bool HasBodyDensity() const;
146  virtual SEScalarMassPerVolume& GetBodyDensity();
147  virtual double GetBodyDensity(const MassPerVolumeUnit& unit) const;
148 
149  virtual bool HasBodyFatFraction() const;
150  virtual SEScalarFraction& GetBodyFatFraction();
151  virtual double GetBodyFatFraction() const;
152 
153  virtual bool HasDiastolicArterialPressureBaseline() const;
154  virtual SEScalarPressure& GetDiastolicArterialPressureBaseline();
155  virtual double GetDiastolicArterialPressureBaseline(const PressureUnit& unit) const;
156 
157  virtual bool HasExpiratoryReserveVolume() const;
158  virtual SEScalarVolume& GetExpiratoryReserveVolume();
159  virtual double GetExpiratoryReserveVolume(const VolumeUnit& unit) const;
160 
161  virtual bool HasFunctionalResidualCapacity() const;
162  virtual SEScalarVolume& GetFunctionalResidualCapacity();
163  virtual double GetFunctionalResidualCapacity(const VolumeUnit& unit) const;
164 
165  virtual bool HasHeartRateBaseline() const;
166  virtual SEScalarFrequency& GetHeartRateBaseline();
167  virtual double GetHeartRateBaseline(const FrequencyUnit& unit) const;
168 
169  virtual bool HasHeartRateMaximum() const;
170  virtual SEScalarFrequency& GetHeartRateMaximum();
171  virtual double GetHeartRateMaximum(const FrequencyUnit& unit) const;
172 
173  virtual bool HasHeartRateMinimum() const;
174  virtual SEScalarFrequency& GetHeartRateMinimum();
175  virtual double GetHeartRateMinimum(const FrequencyUnit& unit) const;
176 
177  virtual bool HasHyperhidrosis() const;
178  virtual SEScalarNeg1To1& GetHyperhidrosis();
179  virtual double GetHyperhidrosis() const;
180 
181  virtual bool HasInspiratoryCapacity() const;
182  virtual SEScalarVolume& GetInspiratoryCapacity();
183  virtual double GetInspiratoryCapacity(const VolumeUnit& unit) const;
184 
185  virtual bool HasInspiratoryReserveVolume() const;
186  virtual SEScalarVolume& GetInspiratoryReserveVolume();
187  virtual double GetInspiratoryReserveVolume(const VolumeUnit& unit) const;
188 
189  virtual bool HasLeanBodyMass() const;
190  virtual SEScalarMass& GetLeanBodyMass();
191  virtual double GetLeanBodyMass(const MassUnit& unit) const;
192 
193  virtual bool HasMaxWorkRate() const;
194  virtual SEScalarPower& GetMaxWorkRate();
195  virtual double GetMaxWorkRate(const PowerUnit& unit) const;
196 
197  virtual bool HasMuscleMass() const;
198  virtual SEScalarMass& GetMuscleMass();
199  virtual double GetMuscleMass(const MassUnit& unit) const;
200 
201  virtual bool HasMeanArterialPressureBaseline() const;
202  virtual SEScalarPressure& GetMeanArterialPressureBaseline();
203  virtual double GetMeanArterialPressureBaseline(const PressureUnit& unit) const;
204 
205  virtual bool HasPainSusceptibility() const;
206  virtual SEScalarNeg1To1& GetPainSusceptibility();
207  virtual double GetPainSusceptibility() const;
208 
209  virtual bool HasResidualVolume() const;
210  virtual SEScalarVolume& GetResidualVolume();
211  virtual double GetResidualVolume(const VolumeUnit& unit) const;
212 
213  virtual bool HasRespirationRateBaseline() const;
214  virtual SEScalarFrequency& GetRespirationRateBaseline();
215  virtual double GetRespirationRateBaseline(const FrequencyUnit& unit) const;
216 
217  virtual bool HasRespiratoryDriverAmplitudeBaseline() const;
218  virtual SEScalarPressure& GetRespiratoryDriverAmplitudeBaseline();
219  virtual double GetRespiratoryDriverAmplitudeBaseline(const PressureUnit& unit) const;
220 
221  virtual bool HasRightLungRatio() const;
222  virtual SEScalarFraction& GetRightLungRatio();
223  virtual double GetRightLungRatio() const;
224 
225  virtual bool HasSkinSurfaceArea() const;
226  virtual SEScalarArea& GetSkinSurfaceArea();
227  virtual double GetSkinSurfaceArea(const AreaUnit& unit) const;
228 
229  virtual bool HasSleepAmount() const;
230  virtual SEScalarTime& GetSleepAmount();
231  virtual double GetSleepAmount(const TimeUnit& unit) const;
232 
233  virtual bool HasSystolicArterialPressureBaseline() const;
234  virtual SEScalarPressure& GetSystolicArterialPressureBaseline();
235  virtual double GetSystolicArterialPressureBaseline(const PressureUnit& unit) const;
236 
237  virtual bool HasTotalVentilationBaseline() const;
238  virtual SEScalarVolumePerTime& GetTotalVentilationBaseline();
239  virtual double GetTotalVentilationBaseline(const VolumePerTimeUnit& unit) const;
240 
241  virtual bool HasTidalVolumeBaseline() const;
242  virtual SEScalarVolume& GetTidalVolumeBaseline();
243  virtual double GetTidalVolumeBaseline(const VolumeUnit& unit) const;
244 
245  virtual bool HasTotalLungCapacity() const;
246  virtual SEScalarVolume& GetTotalLungCapacity();
247  virtual double GetTotalLungCapacity(const VolumeUnit& unit) const;
248 
249  virtual bool HasVitalCapacity() const;
250  virtual SEScalarVolume& GetVitalCapacity();
251  virtual double GetVitalCapacity(const VolumeUnit& unit) const;
252 
253 protected:
254  virtual void Unload(CDM::PatientData& data) const;
255 
256 protected:
257  std::stringstream m_ss;
259  std::map<CDM::enumPatientEvent::value, bool> m_EventState;
260  std::map<CDM::enumPatientEvent::value, double> m_EventDuration_s;
261 
262  std::string m_Name;
263  std::string m_Annotation;
274  bool m_BloodRh; // true meaning rh positive and false meaning rh negative
275 
279 
293 
303 };
304 }
SEScalarVolume * m_TotalLungCapacity
Definition: SEPatient.h:301
std::string m_Name
Definition: SEPatient.h:262
Class corresponding to the PatientData schema type.
Definition: Patient.hxx:1439
SEScalarNeg1To1 * m_Hyperhidrosis
Definition: SEPatient.h:284
SEScalarVolume * m_VitalCapacity
Definition: SEPatient.h:302
Definition: SEScalarLength.h:18
Definition: SEScalarFrequency.h:18
SEScalarVolume * m_TidalVolumeBaseline
Definition: SEPatient.h:292
SEScalarVolume * m_InspiratoryReserveVolume
Definition: SEPatient.h:299
Definition: SEScalarFrequency.h:36
Definition: SEScalar.h:33
SEScalarMass * m_Weight
Definition: SEPatient.h:266
SEScalarNeg1To1 * m_PainSusceptibility
Definition: SEPatient.h:286
SEScalarPressure * m_SystolicArterialPressureBaseline
Definition: SEPatient.h:290
SEScalarPower * m_MaxWorkRate
Definition: SEPatient.h:271
SEScalarArea * m_AlveoliSurfaceArea
Definition: SEPatient.h:276
SEScalarVolume * m_FunctionalResidualCapacity
Definition: SEPatient.h:297
SEScalarPressure * m_MeanArterialPressureBaseline
Definition: SEPatient.h:285
SEScalarTime * m_Age
Definition: SEPatient.h:265
Definition: SEScalarLength.h:38
SEScalarMass * m_MuscleMass
Definition: SEPatient.h:272
SEScalarPressure * m_RespiratoryDriverAmplitudeBaseline
Definition: SEPatient.h:288
std::string m_Annotation
Definition: SEPatient.h:263
SEScalarFraction * m_BodyFatFraction
Definition: SEPatient.h:269
std::map< CDM::enumPatientEvent::value, double > m_EventDuration_s
Definition: SEPatient.h:260
Definition: SEScalarVolumePerTime.h:18
CDM::enumSex::value m_Gender
Definition: SEPatient.h:264
SEScalarPower * m_BasalMetabolicRate
Definition: SEPatient.h:280
SEScalarVolume * m_InspiratoryCapacity
Definition: SEPatient.h:298
Definition: SEPatient.h:48
SEScalarVolume * m_ExpiratoryReserveVolume
Definition: SEPatient.h:296
Definition: SEScalarMass.h:38
SEScalarVolumePerTime * m_TotalVentilationBaseline
Definition: SEPatient.h:291
Definition: Logger.h:27
SEScalarArea * m_SkinSurfaceArea
Definition: SEPatient.h:278
Definition: Logger.h:75
value
Underlying enum type.
Definition: Patient.hxx:1004
Definition: SEScalarFraction.h:18
Definition: SEScalarTime.h:37
Definition: SEScalarTime.h:18
SEScalarLength * m_Height
Definition: SEPatient.h:267
std::stringstream m_ss
Definition: SEPatient.h:257
SEScalarFrequency * m_HeartRateMinimum
Definition: SEPatient.h:295
Definition: SEScalarPower.h:38
Definition: SEScalarPower.h:18
SEScalarMass * m_LeanBodyMass
Definition: SEPatient.h:270
Definition: SEScalarVolume.h:18
Definition: SEScalarPressure.h:37
Definition: SEScalarArea.h:33
Definition: SEScalarVolume.h:37
SEScalarVolume * m_BloodVolumeBaseline
Definition: SEPatient.h:281
std::map< CDM::enumPatientEvent::value, bool > m_EventState
Definition: SEPatient.h:259
SEEventHandler * m_EventHandler
Definition: SEPatient.h:258
virtual const std::map< CDM::enumPatientEvent::value, bool > & GetEventStates() const
Definition: SEPatient.h:73
SEScalarFrequency * m_HeartRateMaximum
Definition: SEPatient.h:294
Definition: SEScalarVolumePerTime.h:40
Definition: SEScalarArea.h:18
value
Underlying enum type.
Definition: Patient.hxx:696
Definition: SEScalarPressure.h:18
SEScalarFrequency * m_RespirationRateBaseline
Definition: SEPatient.h:287
Definition: SEScalarMassPerVolume.h:46
Definition: SEScalarMassPerVolume.h:18
SEScalarTime * m_SleepAmount
Definition: SEPatient.h:289
SEScalarFraction * m_RightLungRatio
Definition: SEPatient.h:277
SEScalarPressure * m_DiastolicArterialPressureBaseline
Definition: SEPatient.h:282
CDM::enumBloodType::value m_BloodType
Definition: SEPatient.h:273
value
Underlying enum type.
Definition: Patient.hxx:849
Definition: SEScalarMass.h:18
Definition: SEElectricalCircuit.h:18
bool m_BloodRh
Definition: SEPatient.h:274
SEScalarFrequency * m_HeartRateBaseline
Definition: SEPatient.h:283
Definition: SEEventHandler.h:23
SEScalarVolume * m_ResidualVolume
Definition: SEPatient.h:300
SEScalarMassPerVolume * m_BodyDensity
Definition: SEPatient.h:268
Definition: SEScalarNeg1To1.h:18