Skip to content

Calculator-v4.14.0: Merge branch 'feature/CO2_fit' into 'master'

Latest
Compare
Choose a tag to compare
@lrdossan lrdossan released this 22 Nov 15:08
· 437 commits to master since this release

Fit ventilation and exhalation rates on CO2 sensor data

Default form values:

NO_DEFAULT = object()

DEFAULT_MC_SAMPLE_SIZE = config.monte_carlo_sample_size

DEFAULTS = {
    'activity_type': 'office',
    'air_changes': 0.,
    'air_supply': 0.,
    'arve_sensors_option': False,
    'specific_breaks': '{}',
    'precise_activity': '{}',
    'calculator_version': NO_DEFAULT,
    'ceiling_height': 0.,
    'conditional_probability_plot': False,
    'conditional_probability_viral_loads': False,
    'CO2_fitting_result': '{}',
    'exposed_coffee_break_option': 'coffee_break_0',
    'exposed_coffee_duration': 5,
    'exposed_finish': '17:30',
    'exposed_lunch_finish': '13:30',
    'exposed_lunch_option': True,
    'exposed_lunch_start': '12:30',
    'exposed_start': '08:30',
    'event_month': 'January',
    'floor_area': 0.,
    'hepa_amount': 0.,
    'hepa_option': False,
    'humidity': '',
    'infected_coffee_break_option': 'coffee_break_0',
    'infected_coffee_duration': 5,
    'infected_dont_have_breaks_with_exposed': False,
    'infected_finish': '17:30',
    'infected_lunch_finish': '13:30',
    'infected_lunch_option': True,
    'infected_lunch_start': '12:30',
    'infected_people': 1,
    'infected_start': '08:30',
    'inside_temp': NO_DEFAULT,
    'location_latitude': NO_DEFAULT,
    'location_longitude': NO_DEFAULT,
    'location_name': NO_DEFAULT,
    'geographic_population': 0,
    'geographic_cases': 0,
    'ascertainment_bias': 'confidence_low',
    'exposure_option': 'p_deterministic_exposure',
    'mask_type': 'Type I',
    'mask_wearing_option': 'mask_off',
    'mechanical_ventilation_type': 'not-applicable',
    'opening_distance': 0.,
    'room_heating_option': False,
    'room_number': NO_DEFAULT,
    'room_volume': 0.,
    'simulation_name': NO_DEFAULT,
    'total_people': NO_DEFAULT,
    'vaccine_option': False,
    'vaccine_booster_option': False,
    'vaccine_type': 'AZD1222_(AstraZeneca)',
    'vaccine_booster_type': 'AZD1222_(AstraZeneca)',
    'ventilation_type': 'no_ventilation',
    'virus_type': 'SARS_CoV_2',
    'volume_type': NO_DEFAULT,
    'window_type': 'window_sliding',
    'window_height': 0.,
    'window_width': 0.,
    'windows_duration': 10.,
    'windows_frequency': 60.,
    'windows_number': 0,
    'window_opening_regime': 'windows_open_permanently',
    'sensor_in_use': '',
    'short_range_option': 'short_range_no',
    'short_range_interactions': '[]',
}

ACTIVITIES: typing.Dict[str, typing.Dict] = config.population_scenario_activity

ACTIVITY_TYPES: typing.List[str] = list(ACTIVITIES.keys())

COFFEE_OPTIONS_INT = {'coffee_break_0': 0, 'coffee_break_1': 1,
                      'coffee_break_2': 2, 'coffee_break_4': 4}

CONFIDENCE_LEVEL_OPTIONS = {'confidence_low': 10,
                            'confidence_medium': 5, 'confidence_high': 2}

MECHANICAL_VENTILATION_TYPES = {
    'mech_type_air_changes', 'mech_type_air_supply', 'not-applicable'}

MASK_TYPES: typing.List[str] = list(config.mask_distributions.keys())

MASK_WEARING_OPTIONS = {'mask_on', 'mask_off'}

MONTH_NAMES = [
    'January', 'February', 'March', 'April', 'May', 'June', 'July',
    'August', 'September', 'October', 'November', 'December',
]

VACCINE_BOOSTER_TYPE = ['AZD1222_(AstraZeneca)', 'Ad26.COV2.S_(Janssen)', 'BNT162b2_(Pfizer)', 'BNT162b2_(Pfizer)_(4th_dose)', 'BNT162b2_(Pfizer)_and_mRNA-1273_(Moderna)',
                        'BNT162b2_(Pfizer)_or_mRNA-1273_(Moderna)', 'BNT162b2_(Pfizer)_or_mRNA-1273_(Moderna)_(4th_dose)', 'CoronaVac_(Sinovac)', 'Coronavac_(Sinovac)', 'Sinopharm',
                        'mRNA-1273_(Moderna)', 'mRNA-1273_(Moderna)_(4th_dose)', 'Other']

VACCINE_TYPE = ['Ad26.COV2.S_(Janssen)', 'Any_mRNA_-_heterologous', 'AZD1222_(AstraZeneca)', 'AZD1222_(AstraZeneca)_and_any_mRNA_-_heterologous', 'AZD1222_(AstraZeneca)_and_BNT162b2_(Pfizer)',
                'BBIBP-CorV_(Beijing_CNBG)', 'BNT162b2_(Pfizer)', 'BNT162b2_(Pfizer)_and_mRNA-1273_(Moderna)', 'CoronaVac_(Sinovac)', 'CoronaVac_(Sinovac)_and_AZD1222_(AstraZeneca)', 'Covishield',
                'mRNA-1273_(Moderna)', 'Sputnik_V_(Gamaleya)', 'CoronaVac_(Sinovac)_and_BNT162b2_(Pfizer)']

VENTILATION_TYPES = {'natural_ventilation', 'mechanical_ventilation', 
                     'no_ventilation', 'from_fitting'}

VIRUS_TYPES: typing.List[str] = list(config.virus_distributions)

VOLUME_TYPES = {'room_volume_explicit', 'room_volume_from_dimensions'}

WINDOWS_OPENING_REGIMES = {'windows_open_permanently',
                           'windows_open_periodically', 'not-applicable'}

WINDOWS_TYPES = {'window_sliding', 'window_hinged', 'not-applicable'}

Configuration:

BLOmodel = {
    "cn": {
        "B": 0.06,
        "L": 0.2,
        "O": 0.0010008,
    },
    "mu": {
        "B": 0.989541,
        "L": 1.38629,
        "O": 4.97673,
    },
    "sigma": {
        "B": 0.262364,
        "L": 0.506818,
        "O": 0.585005,
    },
}
activity_distributions = {
    "Seated": {
        "inhalation_rate": {
            "associated_distribution": "Numpy Log-normal Distribution (random.lognormal)",
            "parameters": {
                "mean_gaussian": -0.6872121723362303,
                "standard_deviation_gaussian": 0.10498338229297108,
            },
        },
        "exhalation_rate": {
            "associated_distribution": "Numpy Log-normal Distribution (random.lognormal)",
            "parameters": {
                "mean_gaussian": -0.6872121723362303,
                "standard_deviation_gaussian": 0.10498338229297108,
            },
        },
    },
    "Standing": {
        "inhalation_rate": {
            "associated_distribution": "Numpy Log-normal Distribution (random.lognormal)",
            "parameters": {
                "mean_gaussian": -0.5742377578494785,
                "standard_deviation_gaussian": 0.09373162411398223,
            },
        },
        "exhalation_rate": {
            "associated_distribution": "Numpy Log-normal Distribution (random.lognormal)",
            "parameters": {
                "mean_gaussian": -0.5742377578494785,
                "standard_deviation_gaussian": 0.09373162411398223,
            },
        },
    },
    "Light activity": {
        "inhalation_rate": {
            "associated_distribution": "Numpy Log-normal Distribution (random.lognormal)",
            "parameters": {
                "mean_gaussian": 0.21380242785625422,
                "standard_deviation_gaussian": 0.09435378091059601,
            },
        },
        "exhalation_rate": {
            "associated_distribution": "Numpy Log-normal Distribution (random.lognormal)",
            "parameters": {
                "mean_gaussian": 0.21380242785625422,
                "standard_deviation_gaussian": 0.09435378091059601,
            },
        },
    },
    "Moderate activity": {
        "inhalation_rate": {
            "associated_distribution": "Numpy Log-normal Distribution (random.lognormal)",
            "parameters": {
                "mean_gaussian": 0.551771330362601,
                "standard_deviation_gaussian": 0.1894616357138137,
            },
        },
        "exhalation_rate": {
            "associated_distribution": "Numpy Log-normal Distribution (random.lognormal)",
            "parameters": {
                "mean_gaussian": 0.551771330362601,
                "standard_deviation_gaussian": 0.1894616357138137,
            },
        },
    },
    "Heavy exercise": {
        "inhalation_rate": {
            "associated_distribution": "Numpy Log-normal Distribution (random.lognormal)",
            "parameters": {
                "mean_gaussian": 1.1644665696723049,
                "standard_deviation_gaussian": 0.21744554768657565,
            },
        },
        "exhalation_rate": {
            "associated_distribution": "Numpy Log-normal Distribution (random.lognormal)",
            "parameters": {
                "mean_gaussian": 1.1644665696723049,
                "standard_deviation_gaussian": 0.21744554768657565,
            },
        },
    },
}
symptomatic_vl_frequencies = {
    "log_variable": [
        2.46032,
        2.67431,
        2.85434,
        3.06155,
        3.25856,
        3.47256,
        3.66957,
        3.85979,
        4.09927,
        4.27081,
        4.47631,
        4.66653,
        4.87204,
        5.10302,
        5.27456,
        5.46478,
        5.6533,
        5.88428,
        6.07281,
        6.30549,
        6.48552,
        6.64856,
        6.85407,
        7.10373,
        7.30075,
        7.47229,
        7.66081,
        7.85782,
        8.05653,
        8.27053,
        8.48453,
        8.65607,
        8.90573,
        9.06878,
        9.27429,
        9.473,
        9.66152,
        9.87552,
    ],
    "frequencies": [
        0.001206885,
        0.007851618,
        0.008078144,
        0.01502491,
        0.013258014,
        0.018528495,
        0.020053765,
        0.021896167,
        0.022047184,
        0.018604005,
        0.01547796,
        0.018075445,
        0.021503523,
        0.022349217,
        0.025097721,
        0.032875078,
        0.030594727,
        0.032573045,
        0.034717482,
        0.034792991,
        0.033267721,
        0.042887485,
        0.036846816,
        0.03876473,
        0.045016819,
        0.040063473,
        0.04883754,
        0.043944602,
        0.048142864,
        0.041588741,
        0.048762031,
        0.027921732,
        0.033871788,
        0.022122693,
        0.016927718,
        0.008833228,
        0.00478598,
        0.002807662,
    ],
    "kernel_bandwidth": 0.1,
}
covid_overal_vl_data = {
    "shape_factor": 3.47,
    "scale_factor": 7.01,
    "start": 0.01,
    "stop": 0.99,
    "num": 30.0,
    "min_bound": 2,
    "max_bound": 10,
    "interpolation_fp_left": 0,
    "interpolation_fp_right": 0,
    "max_function": 0.2,
}
viable_to_RNA_ratio_distribution = {
    "low": 0.01,
    "high": 0.6,
}
infectious_dose_distribution = {
    "low": 10,
    "high": 100,
}
virus_distributions = {
    "SARS_CoV_2": {
        "viral_load_in_sputum": "Ref: Viral load - covid_overal_vl_data",
        "infectious_dose": "Ref: Infectious dose - infectious_dose_distribution",
        "viable_to_RNA_ratio": "Ref: Viable to RNA ratio - viable_to_RNA_ratio_distribution",
        "transmissibility_factor": 1,
        "infectiousness_days": 14,
    },
    "SARS_CoV_2_ALPHA": {
        "viral_load_in_sputum": "Ref: Viral load - covid_overal_vl_data",
        "infectious_dose": "Ref: Infectious dose - infectious_dose_distribution",
        "viable_to_RNA_ratio": "Ref: Viable to RNA ratio - viable_to_RNA_ratio_distribution",
        "transmissibility_factor": 0.78,
        "infectiousness_days": 14,
    },
    "SARS_CoV_2_BETA": {
        "viral_load_in_sputum": "Ref: Viral load - covid_overal_vl_data",
        "infectious_dose": "Ref: Infectious dose - infectious_dose_distribution",
        "viable_to_RNA_ratio": "Ref: Viable to RNA ratio - viable_to_RNA_ratio_distribution",
        "transmissibility_factor": 0.8,
        "infectiousness_days": 14,
    },
    "SARS_CoV_2_GAMMA": {
        "viral_load_in_sputum": "Ref: Viral load - covid_overal_vl_data",
        "infectious_dose": "Ref: Infectious dose - infectious_dose_distribution",
        "viable_to_RNA_ratio": "Ref: Viable to RNA ratio - viable_to_RNA_ratio_distribution",
        "transmissibility_factor": 0.72,
        "infectiousness_days": 14,
    },
    "SARS_CoV_2_DELTA": {
        "viral_load_in_sputum": "Ref: Viral load - covid_overal_vl_data",
        "infectious_dose": "Ref: Infectious dose - infectious_dose_distribution",
        "viable_to_RNA_ratio": "Ref: Viable to RNA ratio - viable_to_RNA_ratio_distribution",
        "transmissibility_factor": 0.51,
        "infectiousness_days": 14,
    },
    "SARS_CoV_2_OMICRON": {
        "viral_load_in_sputum": "Ref: Viral load - covid_overal_vl_data",
        "infectious_dose": "Ref: Infectious dose - infectious_dose_distribution",
        "viable_to_RNA_ratio": "Ref: Viable to RNA ratio - viable_to_RNA_ratio_distribution",
        "transmissibility_factor": 0.2,
        "infectiousness_days": 14,
    },
    "SARS_CoV_2_Other": {
        "viral_load_in_sputum": "Ref: Viral load - covid_overal_vl_data",
        "infectious_dose": "Ref: Infectious dose - infectious_dose_distribution",
        "viable_to_RNA_ratio": "Ref: Viable to RNA ratio - viable_to_RNA_ratio_distribution",
        "transmissibility_factor": 0.1,
        "infectiousness_days": 14,
    },
}
mask_distributions = {
    "Type I": {
        "η_inhale": {
            "associated_distribution": "Numpy Uniform Distribution (random.uniform)",
            "parameters": {
                "low": 0.25,
                "high": 0.80,
            },
        },
        "Known filtration efficiency of masks when exhaling?": "No",
        "factor_exhale": 1,
    },
    "FFP2": {
        "η_inhale": {
            "associated_distribution": "Numpy Uniform Distribution (random.uniform)",
            "parameters": {
                "low": 0.83,
                "high": 0.91,
            },
        },
        "Known filtration efficiency of masks when exhaling?": "No",
        "factor_exhale": 1,
    },
    "Cloth": {
        "η_inhale": {
            "associated_distribution": "Numpy Uniform Distribution (random.uniform)",
            "parameters": {
                "low": 0.05,
                "high": 0.40,
            },
        },
        "Known filtration efficiency of masks when exhaling?": "Yes",
        "η_exhale": {
            "associated_distribution": "Numpy Uniform Distribution (random.uniform)",
            "parameters": {
                "low": 0.20,
                "high": 0.50,
            },
        },
        "factor_exhale": 1,
    },
}
expiration_BLO_factors = {
    "Breathing": {
        "B": 1.0,
        "L": 0.0,
        "O": 0.0,
    },
    "Speaking": {
        "B": 1.0,
        "L": 1.0,
        "O": 1.0,
    },
    "Singing": {
        "B": 1.0,
        "L": 5.0,
        "O": 5.0,
    },
    "Shouting": {
        "B": 1.0,
        "L": 5.0,
        "O": 5.0,
    },
}
long_range_expiration_distributions = {
    "minimum_diameter": 0.1,
    "maximum_diameter": 30,
}
short_range_expiration_distributions = {
    "minimum_diameter": 0.1,
    "maximum_diameter": 100,
}
short_range_distances = {
    "minimum_distance": 0.5,
    "maximum_distance": 2.0,
}

####################################

room = {
    "defaults": {
        "inside_temp": 293,
        "humidity_with_heating": 0.3,
        "humidity_without_heating": 0.5,
    },
}
ventilation = {
    "natural": {
        "discharge_factor": {
            "sliding": 0.6,
        },
    },
    "infiltration_ventilation": 0.25,
}
particle = {
    "evaporation_factor": 0.3,
}
population_with_virus = {
    "fraction_of_infectious_virus": 1,
}
concentration_model = {
    "min_background_concentration": 0.0,
    "CO2_concentration_model": {
        "CO2_atmosphere_concentration": 440.44,
        "CO2_fraction_exhaled": 0.042,
    },
}
short_range_model = {
    "dilution_factor": {
        "mouth_diameter": 0.02,
        "exhalation_coefficient": 2,
        "tstar": 2,
        "penetration_coefficients": {
            "𝛽r1": 0.18,
            "𝛽r2": 0.2,
            "𝛽x1": 2.4,
        },
    },
}
exposure_model = {
    "repeats": 1,
}
conditional_prob_inf_given_viral_load = {
    "lower_percentile": 0.05,
    "upper_percentile": 0.95,
    "min_vl": 2,
    "max_vl": 10,
}
monte_carlo_sample_size = 250000
population_scenario_activity = {
    "office": {"activity": "Seated", "expiration": {"Speaking": 1, "Breathing": 2}},
    "smallmeeting": {
        "activity": "Seated",
        "expiration": {"Speaking": 1, "Breathing": None},
    },
    "largemeeting": {
        "activity": "Standing",
        "expiration": {"Speaking": 1, "Breathing": 2},
    },
    "callcenter": {"activity": "Seated", "expiration": {"Speaking": 1}},
    "controlroom-day": {
        "activity": "Seated",
        "expiration": {"Speaking": 1, "Breathing": 1},
    },
    "controlroom-night": {
        "activity": "Seated",
        "expiration": {"Speaking": 1, "Breathing": 9},
    },
    "library": {"activity": "Seated", "expiration": {"Breathing": 1}},
    "lab": {
        "activity": "Light activity",
        "expiration": {"Speaking": 1, "Breathing": 1},
    },
    "workshop": {
        "activity": "Moderate activity",
        "expiration": {"Speaking": 1, "Breathing": 1},
    },
    "training": {"activity": "Standing", "expiration": {"Speaking": 1}},
    "training_attendee": {"activity": "Seated", "expiration": {"Breathing": 1}},
    "gym": {"activity": "Heavy exercise", "expiration": {"Breathing": 1}},
    "household-day": {
        "activity": "Light activity",
        "expiration": {"Breathing": 5, "Speaking": 5},
    },
    "household-night": {
        "activity": "Seated",
        "expiration": {"Breathing": 7, "Speaking": 3},
    },
    "primary-school": {
        "activity": "Light activity",
        "expiration": {"Breathing": 5, "Speaking": 5},
    },
    "secondary-school": {
        "activity": "Light activity",
        "expiration": {"Breathing": 7, "Speaking": 3},
    },
    "university": {
        "activity": "Seated",
        "expiration": {"Breathing": 9, "Speaking": 1},
    },
    "restaurant": {
        "activity": "Seated",
        "expiration": {"Breathing": 1, "Speaking": 9},
    },
    "precise": {"activity": "", "expiration": {}},
}

Screenshot 2023-11-22 at 16 06 39