cams-pollution-dashboard / constants.py
aditya-me13's picture
integrated both the versions
610152e
raw
history blame
13.8 kB
# NetCDF variables and their properties (includes air pollution, meteorological, and other variables)
NETCDF_VARIABLES = {
# === AIR POLLUTION VARIABLES ===
# PM2.5
'pm2p5': {'units': 'µg/m³', 'name': 'PM2.5', 'cmap': 'YlOrRd', 'vmax_percentile': 95, 'type': 'surface'},
'pm25': {'units': 'µg/m³', 'name': 'PM2.5', 'cmap': 'YlOrRd', 'vmax_percentile': 95, 'type': 'surface'},
'PM2P5': {'units': 'µg/m³', 'name': 'PM2.5', 'cmap': 'YlOrRd', 'vmax_percentile': 95, 'type': 'surface'},
'PM25': {'units': 'µg/m³', 'name': 'PM2.5', 'cmap': 'YlOrRd', 'vmax_percentile': 95, 'type': 'surface'},
'pm2_5': {'units': 'µg/m³', 'name': 'PM2.5', 'cmap': 'YlOrRd', 'vmax_percentile': 95, 'type': 'surface'},
'PM2_5': {'units': 'µg/m³', 'name': 'PM2.5', 'cmap': 'YlOrRd', 'vmax_percentile': 95, 'type': 'surface'},
'particulate_matter_2_5': {'units': 'µg/m³', 'name': 'PM2.5', 'cmap': 'YlOrRd', 'vmax_percentile': 95, 'type': 'surface'},
'particulate_matter_2.5um': {'units': 'µg/m³', 'name': 'PM2.5', 'cmap': 'YlOrRd', 'vmax_percentile': 95, 'type': 'surface'},
'mass_concentration_of_pm2p5_ambient_aerosol_particles_in_air': {'units': 'µg/m³', 'name': 'PM2.5', 'cmap': 'YlOrRd', 'vmax_percentile': 95, 'type': 'surface'},
# PM10
'pm10': {'units': 'µg/m³', 'name': 'PM10', 'cmap': 'Oranges', 'vmax_percentile': 95, 'type': 'surface'},
'PM10': {'units': 'µg/m³', 'name': 'PM10', 'cmap': 'Oranges', 'vmax_percentile': 95, 'type': 'surface'},
'pm10p0': {'units': 'µg/m³', 'name': 'PM10', 'cmap': 'Oranges', 'vmax_percentile': 95, 'type': 'surface'},
'particulate_matter_10': {'units': 'µg/m³', 'name': 'PM10', 'cmap': 'Oranges', 'vmax_percentile': 95, 'type': 'surface'},
'particulate_matter_10um': {'units': 'µg/m³', 'name': 'PM10', 'cmap': 'Oranges', 'vmax_percentile': 95, 'type': 'surface'},
'mass_concentration_of_pm10_ambient_aerosol_particles_in_air': {'units': 'µg/m³', 'name': 'PM10', 'cmap': 'Oranges', 'vmax_percentile': 95, 'type': 'surface'},
# PM1
'pm1': {'units': 'µg/m³', 'name': 'PM1', 'cmap': 'Reds', 'vmax_percentile': 95, 'type': 'surface'},
'PM1': {'units': 'µg/m³', 'name': 'PM1', 'cmap': 'Reds', 'vmax_percentile': 95, 'type': 'surface'},
'particulate_matter_1um': {'units': 'µg/m³', 'name': 'PM1', 'cmap': 'Reds', 'vmax_percentile': 95, 'type': 'surface'},
# NO2
'no2': {'units': 'µg/m³', 'name': 'NO₂', 'cmap': 'Reds', 'vmax_percentile': 90, 'type': 'atmospheric'},
'NO2': {'units': 'µg/m³', 'name': 'NO₂', 'cmap': 'Reds', 'vmax_percentile': 90, 'type': 'atmospheric'},
'nitrogen_dioxide': {'units': 'µg/m³', 'name': 'NO₂', 'cmap': 'Reds', 'vmax_percentile': 90, 'type': 'atmospheric'},
'mass_concentration_of_nitrogen_dioxide_in_air': {'units': 'µg/m³', 'name': 'NO₂', 'cmap': 'Reds', 'vmax_percentile': 90, 'type': 'atmospheric'},
# SO2
'so2': {'units': 'µg/m³', 'name': 'SO₂', 'cmap': 'Purples', 'vmax_percentile': 90, 'type': 'atmospheric'},
'SO2': {'units': 'µg/m³', 'name': 'SO₂', 'cmap': 'Purples', 'vmax_percentile': 90, 'type': 'atmospheric'},
'sulphur_dioxide': {'units': 'µg/m³', 'name': 'SO₂', 'cmap': 'Purples', 'vmax_percentile': 90, 'type': 'atmospheric'},
'sulfur_dioxide': {'units': 'µg/m³', 'name': 'SO₂', 'cmap': 'Purples', 'vmax_percentile': 90, 'type': 'atmospheric'},
'mass_concentration_of_sulfur_dioxide_in_air': {'units': 'µg/m³', 'name': 'SO₂', 'cmap': 'Purples', 'vmax_percentile': 90, 'type': 'atmospheric'},
# O3
'o3': {'units': 'µg/m³', 'name': 'O₃', 'cmap': 'Blues', 'vmax_percentile': 90, 'type': 'atmospheric'},
'O3': {'units': 'µg/m³', 'name': 'O₃', 'cmap': 'Blues', 'vmax_percentile': 90, 'type': 'atmospheric'},
'ozone': {'units': 'µg/m³', 'name': 'O₃', 'cmap': 'Blues', 'vmax_percentile': 90, 'type': 'atmospheric'},
'mass_concentration_of_ozone_in_air': {'units': 'µg/m³', 'name': 'O₃', 'cmap': 'Blues', 'vmax_percentile': 90, 'type': 'atmospheric'},
# CO
'co': {'units': 'mg/m³', 'name': 'CO', 'cmap': 'Greens', 'vmax_percentile': 90, 'type': 'atmospheric'},
'CO': {'units': 'mg/m³', 'name': 'CO', 'cmap': 'Greens', 'vmax_percentile': 90, 'type': 'atmospheric'},
'carbon_monoxide': {'units': 'mg/m³', 'name': 'CO', 'cmap': 'Greens', 'vmax_percentile': 90, 'type': 'atmospheric'},
'mass_concentration_of_carbon_monoxide_in_air': {'units': 'mg/m³', 'name': 'CO', 'cmap': 'Greens', 'vmax_percentile': 90, 'type': 'atmospheric'},
# NO (Nitrogen Monoxide)
'no': {'units': 'µg/m³', 'name': 'NO', 'cmap': 'Oranges', 'vmax_percentile': 90, 'type': 'atmospheric'},
'NO': {'units': 'µg/m³', 'name': 'NO', 'cmap': 'Oranges', 'vmax_percentile': 90, 'type': 'atmospheric'},
'nitrogen_monoxide': {'units': 'µg/m³', 'name': 'NO', 'cmap': 'Oranges', 'vmax_percentile': 90, 'type': 'atmospheric'},
# NH3
'nh3': {'units': 'µg/m³', 'name': 'NH₃', 'cmap': 'viridis', 'vmax_percentile': 90, 'type': 'atmospheric'},
'NH3': {'units': 'µg/m³', 'name': 'NH₃', 'cmap': 'viridis', 'vmax_percentile': 90, 'type': 'atmospheric'},
'ammonia': {'units': 'µg/m³', 'name': 'NH₃', 'cmap': 'viridis', 'vmax_percentile': 90, 'type': 'atmospheric'},
'mass_concentration_of_ammonia_in_air': {'units': 'µg/m³', 'name': 'NH₃', 'cmap': 'viridis', 'vmax_percentile': 90, 'type': 'atmospheric'},
# Total Column variables (these are surface-level total column measurements)
'total_column_carbon_monoxide': {'units': 'mol/m²', 'name': 'Total Column CO', 'cmap': 'Greens', 'vmax_percentile': 90, 'type': 'surface'},
'total_column_nitrogen_monoxide': {'units': 'mol/m²', 'name': 'Total Column NO', 'cmap': 'Oranges', 'vmax_percentile': 90, 'type': 'surface'},
'total_column_nitrogen_dioxide': {'units': 'mol/m²', 'name': 'Total Column NO₂', 'cmap': 'Reds', 'vmax_percentile': 90, 'type': 'surface'},
'total_column_ozone': {'units': 'mol/m²', 'name': 'Total Column O₃', 'cmap': 'Blues', 'vmax_percentile': 90, 'type': 'surface'},
'total_column_sulphur_dioxide': {'units': 'mol/m²', 'name': 'Total Column SO₂', 'cmap': 'Purples', 'vmax_percentile': 90, 'type': 'surface'},
# Legacy total column names
'tcno2': {'units': 'mol/m²', 'name': 'Total Column NO₂', 'cmap': 'Reds', 'vmax_percentile': 90, 'type': 'surface'},
'tcso2': {'units': 'mol/m²', 'name': 'Total Column SO₂', 'cmap': 'Purples', 'vmax_percentile': 90, 'type': 'surface'},
'tco3': {'units': 'mol/m²', 'name': 'Total Column O₃', 'cmap': 'Blues', 'vmax_percentile': 90, 'type': 'surface'},
'tcco': {'units': 'mol/m²', 'name': 'Total Column CO', 'cmap': 'Greens', 'vmax_percentile': 90, 'type': 'surface'},
# AOD (Aerosol Optical Depth) - surface measurement
'aod550': {'units': '', 'name': 'AOD 550nm', 'cmap': 'plasma', 'vmax_percentile': 95, 'type': 'surface'},
'aod': {'units': '', 'name': 'AOD', 'cmap': 'plasma', 'vmax_percentile': 95, 'type': 'surface'},
'aerosol_optical_depth': {'units': '', 'name': 'AOD', 'cmap': 'plasma', 'vmax_percentile': 95, 'type': 'surface'},
# === METEOROLOGICAL VARIABLES ===
# Temperature variables
'2t': {'units': 'K', 'name': '2m Temperature', 'cmap': 'RdYlBu', 'vmax_percentile': 95, 'type': 'surface'},
't2m': {'units': 'K', 'name': '2m Temperature', 'cmap': 'RdYlBu', 'vmax_percentile': 95, 'type': 'surface'},
'temperature': {'units': 'K', 'name': 'Temperature', 'cmap': 'RdYlBu', 'vmax_percentile': 95, 'type': 'atmospheric'},
't': {'units': 'K', 'name': 'Temperature', 'cmap': 'RdYlBu', 'vmax_percentile': 95, 'type': 'atmospheric'},
'air_temperature': {'units': 'K', 'name': 'Air Temperature', 'cmap': 'RdYlBu', 'vmax_percentile': 95, 'type': 'atmospheric'},
'sst': {'units': 'K', 'name': 'Sea Surface Temperature', 'cmap': 'coolwarm', 'vmax_percentile': 95, 'type': 'surface'},
# Wind variables
'u': {'units': 'm/s', 'name': 'U-Wind Component', 'cmap': 'coolwarm', 'vmax_percentile': 95, 'type': 'atmospheric'},
'v': {'units': 'm/s', 'name': 'V-Wind Component', 'cmap': 'coolwarm', 'vmax_percentile': 95, 'type': 'atmospheric'},
'u10': {'units': 'm/s', 'name': '10m U-Wind', 'cmap': 'coolwarm', 'vmax_percentile': 95, 'type': 'surface'},
'v10': {'units': 'm/s', 'name': '10m V-Wind', 'cmap': 'coolwarm', 'vmax_percentile': 95, 'type': 'surface'},
'u_component_of_wind': {'units': 'm/s', 'name': 'U-Wind Component', 'cmap': 'coolwarm', 'vmax_percentile': 95, 'type': 'atmospheric'},
'v_component_of_wind': {'units': 'm/s', 'name': 'V-Wind Component', 'cmap': 'coolwarm', 'vmax_percentile': 95, 'type': 'atmospheric'},
'wind_speed': {'units': 'm/s', 'name': 'Wind Speed', 'cmap': 'viridis', 'vmax_percentile': 95, 'type': 'atmospheric'},
'ws': {'units': 'm/s', 'name': 'Wind Speed', 'cmap': 'viridis', 'vmax_percentile': 95, 'type': 'atmospheric'},
# Pressure and geopotential
'msl': {'units': 'Pa', 'name': 'Mean Sea Level Pressure', 'cmap': 'RdYlBu', 'vmax_percentile': 95, 'type': 'surface'},
'sp': {'units': 'Pa', 'name': 'Surface Pressure', 'cmap': 'RdYlBu', 'vmax_percentile': 95, 'type': 'surface'},
'pressure': {'units': 'Pa', 'name': 'Pressure', 'cmap': 'RdYlBu', 'vmax_percentile': 95, 'type': 'atmospheric'},
'z': {'units': 'm²/s²', 'name': 'Geopotential', 'cmap': 'Spectral', 'vmax_percentile': 95, 'type': 'atmospheric'},
'gh': {'units': 'm', 'name': 'Geopotential Height', 'cmap': 'Spectral', 'vmax_percentile': 95, 'type': 'atmospheric'},
# Humidity variables
'r': {'units': '%', 'name': 'Relative Humidity', 'cmap': 'Blues', 'vmax_percentile': 95, 'type': 'atmospheric'},
'rh': {'units': '%', 'name': 'Relative Humidity', 'cmap': 'Blues', 'vmax_percentile': 95, 'type': 'atmospheric'},
'q': {'units': 'kg/kg', 'name': 'Specific Humidity', 'cmap': 'Blues', 'vmax_percentile': 95, 'type': 'atmospheric'},
'sh': {'units': 'kg/kg', 'name': 'Specific Humidity', 'cmap': 'Blues', 'vmax_percentile': 95, 'type': 'atmospheric'},
'd2m': {'units': 'K', 'name': '2m Dewpoint Temperature', 'cmap': 'Blues', 'vmax_percentile': 95, 'type': 'surface'},
# Precipitation and cloud variables
'tp': {'units': 'm', 'name': 'Total Precipitation', 'cmap': 'Blues', 'vmax_percentile': 98, 'type': 'surface'},
'precipitation': {'units': 'm', 'name': 'Precipitation', 'cmap': 'Blues', 'vmax_percentile': 98, 'type': 'surface'},
'tcc': {'units': '%', 'name': 'Total Cloud Cover', 'cmap': 'Blues', 'vmax_percentile': 95, 'type': 'surface'},
'lcc': {'units': '%', 'name': 'Low Cloud Cover', 'cmap': 'Blues', 'vmax_percentile': 95, 'type': 'surface'},
'mcc': {'units': '%', 'name': 'Medium Cloud Cover', 'cmap': 'Blues', 'vmax_percentile': 95, 'type': 'surface'},
'hcc': {'units': '%', 'name': 'High Cloud Cover', 'cmap': 'Blues', 'vmax_percentile': 95, 'type': 'surface'},
# Radiation variables
'ssrd': {'units': 'J/m²', 'name': 'Surface Solar Radiation', 'cmap': 'YlOrRd', 'vmax_percentile': 95, 'type': 'surface'},
'strd': {'units': 'J/m²', 'name': 'Surface Thermal Radiation', 'cmap': 'inferno', 'vmax_percentile': 95, 'type': 'surface'},
'tsr': {'units': 'J/m²', 'name': 'Top Solar Radiation', 'cmap': 'YlOrRd', 'vmax_percentile': 95, 'type': 'surface'},
'ttr': {'units': 'J/m²', 'name': 'Top Thermal Radiation', 'cmap': 'inferno', 'vmax_percentile': 95, 'type': 'surface'},
# Vertical motion
'w': {'units': 'Pa/s', 'name': 'Vertical Velocity (Pressure)', 'cmap': 'coolwarm', 'vmax_percentile': 95, 'type': 'atmospheric'},
'omega': {'units': 'Pa/s', 'name': 'Vertical Velocity (Omega)', 'cmap': 'coolwarm', 'vmax_percentile': 95, 'type': 'atmospheric'},
# Surface variables
'skt': {'units': 'K', 'name': 'Skin Temperature', 'cmap': 'RdYlBu', 'vmax_percentile': 95, 'type': 'surface'},
'swvl1': {'units': 'm³/m³', 'name': 'Soil Water Level 1', 'cmap': 'Blues', 'vmax_percentile': 95, 'type': 'surface'},
'stl1': {'units': 'K', 'name': 'Soil Temperature Level 1', 'cmap': 'RdYlBu', 'vmax_percentile': 95, 'type': 'surface'},
'lsm': {'units': '0-1', 'name': 'Land-Sea Mask', 'cmap': 'viridis', 'vmax_percentile': 100, 'type': 'surface'},
# === OTHER COMMON NETCDF VARIABLES ===
# Generic/Unknown variables (fallback)
'var': {'units': 'unknown', 'name': 'Variable', 'cmap': 'viridis', 'vmax_percentile': 95, 'type': 'unknown'},
'data': {'units': 'unknown', 'name': 'Data', 'cmap': 'viridis', 'vmax_percentile': 95, 'type': 'unknown'},
'field': {'units': 'unknown', 'name': 'Field', 'cmap': 'viridis', 'vmax_percentile': 95, 'type': 'unknown'},
}
# Maintain backward compatibility
AIR_POLLUTION_VARIABLES = {k: v for k, v in NETCDF_VARIABLES.items() if 'pollution' in k.lower() or any(pollutant in k.lower() for pollutant in ['pm', 'no', 'so', 'o3', 'co', 'nh3', 'aod', 'column'])}
# Available color themes for plotting
COLOR_THEMES = {
'YlOrRd': 'Yellow-Orange-Red',
'Oranges': 'Oranges',
'Reds': 'Reds',
'Purples': 'Purples',
'Blues': 'Blues',
'Greens': 'Greens',
'viridis': 'Viridis',
'plasma': 'Plasma',
'inferno': 'Inferno',
'magma': 'Magma',
'cividis': 'Cividis',
'coolwarm': 'Cool-Warm',
'RdYlBu': 'Red-Yellow-Blue',
'Spectral': 'Spectral'
}
# India map boundaries
INDIA_BOUNDS = {
'lat_min': 6.0,
'lat_max': 38.0,
'lon_min': 68.0,
'lon_max': 98.0
}
# Common pressure levels for atmospheric variables (in hPa)
PRESSURE_LEVELS = [50, 100, 150, 200, 250, 300, 400, 500, 600, 700, 850, 925, 1000]
# File upload settings
ALLOWED_EXTENSIONS = {'nc', 'zip'}
MAX_FILE_SIZE = 500 * 1024 * 1024 # 500MB