Source code for planetmagfields.utils

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os
import numpy as np

stdDatDir = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'data/')
planetlist = ["mercury", "earth", "jupiter", "saturn", "uranus", "neptune",
              "ganymede"]

[docs] def get_models(planetname,datDir=stdDatDir): """Prints available models for a planet. Parameters ---------- datDir : str Directory where the data file is present. Files are assumed to be named as <planetname>_<modelname>.dat, e.g.: earth_igrf13.dat, jupiter_jrm09.dat etc. planetname : str Name of the planet Returns ------- models : str array Array of available model names """ from glob import glob planetname = planetname.lower() dataFiles = glob(datDir+'/'+planetname+"*.dat") models = [] for k,filename in enumerate(dataFiles): modelname = filename.split('_')[1].split('.dat')[0] models.append(modelname) models = np.sort(models) return models
def is_dark_color(color): """ Determine if a color is dark using relative luminance. Parameters ---------- color : str or tuple Color as hex string ('#RRGGBB'), RGB tuple (r, g, b) with values 0-255, or normalized RGB tuple (r, g, b) with values 0-1. Returns ------- bool True if color is dark, False if light. """ # Parse color to RGB values (0-255) if isinstance(color, str): color = color.lstrip('#') if len(color) == 6: r, g, b = tuple(int(color[i:i+2], 16) for i in (0, 2, 4)) elif len(color) == 3: r, g, b = tuple(int(c*2, 16) for c in color) else: # Named colors import matplotlib.colors as mcolors rgb = mcolors.to_rgb(color) r, g, b = int(rgb[0]*255), int(rgb[1]*255), int(rgb[2]*255) elif isinstance(color, (tuple, list)): if all(0 <= c <= 1 for c in color): # Normalized RGB r, g, b = int(color[0]*255), int(color[1]*255), int(color[2]*255) else: # 0-255 RGB r, g, b = color[0], color[1], color[2] else: raise ValueError(f"Unknown color format: {color}") # Calculate relative luminance (ITU-R BT.709) # Human eye is most sensitive to green, least to blue luminance = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255 # Threshold of 0.5 is standard; can adjust based on preference return luminance < 0.5