@@ -285,6 +285,24 @@ struct CriticalPerSevere {
285285 }
286286};
287287
288+ /* *
289+ * @brief the percentage of dead patients per hospitalized patients.
290+ * This is a direct mortality probability from the InfectedSevere compartment,
291+ * independent of ICU capacity.
292+ */
293+ template <typename FP>
294+ struct DeathsPerSevere {
295+ using Type = CustomIndexArray<UncertainValue<FP>, AgeGroup>;
296+ static Type get_default (AgeGroup size)
297+ {
298+ return Type (size, 0 .);
299+ }
300+ static std::string name ()
301+ {
302+ return " DeathsPerSevere" ;
303+ }
304+ };
305+
288306/* *
289307 * @brief the percentage of dead patients per ICU patients in the SECIR model
290308 */
@@ -366,12 +384,14 @@ struct TestAndTraceCapacityMaxRisk {
366384};
367385
368386template <typename FP>
369- using ParametersBase = ParameterSet<
370- StartDay<FP>, Seasonality<FP>, ICUCapacity<FP>, TestAndTraceCapacity<FP>, TestAndTraceCapacityMaxRisk<FP>,
371- ContactPatterns<FP>, DynamicNPIsInfectedSymptoms<FP>, TimeExposed<FP>, TimeInfectedNoSymptoms<FP>,
372- TimeInfectedSymptoms<FP>, TimeInfectedSevere<FP>, TimeInfectedCritical<FP>, TransmissionProbabilityOnContact<FP>,
373- RelativeTransmissionNoSymptoms<FP>, RecoveredPerInfectedNoSymptoms<FP>, RiskOfInfectionFromSymptomatic<FP>,
374- MaxRiskOfInfectionFromSymptomatic<FP>, SeverePerInfectedSymptoms<FP>, CriticalPerSevere<FP>, DeathsPerCritical<FP>>;
387+ using ParametersBase =
388+ ParameterSet<StartDay<FP>, Seasonality<FP>, ICUCapacity<FP>, TestAndTraceCapacity<FP>,
389+ TestAndTraceCapacityMaxRisk<FP>, ContactPatterns<FP>, DynamicNPIsInfectedSymptoms<FP>, TimeExposed<FP>,
390+ TimeInfectedNoSymptoms<FP>, TimeInfectedSymptoms<FP>, TimeInfectedSevere<FP>, TimeInfectedCritical<FP>,
391+ TransmissionProbabilityOnContact<FP>, RelativeTransmissionNoSymptoms<FP>,
392+ RecoveredPerInfectedNoSymptoms<FP>, RiskOfInfectionFromSymptomatic<FP>,
393+ MaxRiskOfInfectionFromSymptomatic<FP>, SeverePerInfectedSymptoms<FP>, CriticalPerSevere<FP>,
394+ DeathsPerSevere<FP>, DeathsPerCritical<FP>>;
375395
376396/* *
377397 * @brief Parameters of an age-resolved SECIR/SECIHURD model.
@@ -568,6 +588,22 @@ class Parameters : public ParametersBase<FP>
568588 corrected = true ;
569589 }
570590
591+ if (this ->template get <DeathsPerSevere<FP>>()[i] < 0.0 ||
592+ this ->template get <DeathsPerSevere<FP>>()[i] > 1.0 ) {
593+ log_warning (" Constraint check: Parameter DeathsPerSevere changed from {} to {}" ,
594+ this ->template get <DeathsPerSevere<FP>>()[i], 0 );
595+ this ->template get <DeathsPerSevere<FP>>()[i] = 0 ;
596+ corrected = true ;
597+ }
598+
599+ if (this ->template get <CriticalPerSevere<FP>>()[i] + this ->template get <DeathsPerSevere<FP>>()[i] > 1.0 ) {
600+ log_warning (" Constraint check: CriticalPerSevere + DeathsPerSevere exceed 1.0 for age group {}. "
601+ " DeathsPerSevere changed from {} to 0." ,
602+ static_cast <size_t >(i), this ->template get <DeathsPerSevere<FP>>()[i]);
603+ this ->template get <DeathsPerSevere<FP>>()[i] = 0 ;
604+ corrected = true ;
605+ }
606+
571607 if (this ->template get <DeathsPerCritical<FP>>()[i] < 0.0 ||
572608 this ->template get <DeathsPerCritical<FP>>()[i] > 1.0 ) {
573609 log_warning (" Constraint check: Parameter DeathsPerCritical changed from {} to {}" ,
@@ -684,6 +720,18 @@ class Parameters : public ParametersBase<FP>
684720 return true ;
685721 }
686722
723+ if (this ->template get <DeathsPerSevere<FP>>()[i] < 0.0 ||
724+ this ->template get <DeathsPerSevere<FP>>()[i] > 1.0 ) {
725+ log_error (" Constraint check: Parameter DeathsPerSevere smaller {} or larger {}" , 0 , 1 );
726+ return true ;
727+ }
728+
729+ if (this ->template get <CriticalPerSevere<FP>>()[i] + this ->template get <DeathsPerSevere<FP>>()[i] > 1.0 ) {
730+ log_error (" Constraint check: CriticalPerSevere + DeathsPerSevere exceed 1.0 for age group {}." ,
731+ static_cast <size_t >(i));
732+ return true ;
733+ }
734+
687735 if (this ->template get <DeathsPerCritical<FP>>()[i] < 0.0 ||
688736 this ->template get <DeathsPerCritical<FP>>()[i] > 1.0 ) {
689737 log_error (" Constraint check: Parameter DeathsPerCritical smaller {} or larger {}" , 0 , 1 );
0 commit comments