#! /usr/bin/python3 # Last edited on 2025-08-23 16:21:49 by stolfi import sys, re, os from math import sqrt, sin, cos, log, exp, floor, pi, inf, isfinite import numpy from error_funcs import prog_error, arg_error, debug from process_funcs import bash, run_command from image_funcs import read_clip_image, write_image_as_gray_png def read_mask_analysis_data(page, clip, mask): # Reads the bands list {bands}, illumination types {illums}, wavelengths {wlens}, # and the analysis data {savg,smin,smax,rdev,tdev,P} for the given {page}, {clip}, # and {mask}. # nm = len(masks) nb = None # For now, reset later. ne = None # For now, reset later. bands = [] illums = [] wlens = [] savg = []; smin = []; smax = []; rdev = [], tdev = []; P = []; for im in range (nm): mask = masks[im] afile = f"pages/{page}/clips/{clip}/masks/{mask}/analysis.txt" with open(afile, "r") as rd: if nb == None: nb = read_int_param(rd, "nb") ne = read_int_param(rd, "ne") else: assert read_int_param(rd, "nb") == nb, "inconsistent nb" assert read_int_param(rd, "ne") == ne, "inconsistent ne" for ib in range(nb): line = rd.readline().strip() line = re.sub(r'[ ][ ]+', " ", line) flds = line.split(' ') assert len(flds) == 3 + 5 + ne, f"bad format: {len(flds)} fields" ifld = 0 band_ib = flds[0].strip(); ifld += 1; bands.append(band_ib) ilum_ib = int(flds[ifld].strip()); illums.append(illum_ib); ifld += 1 wlen_ib = float(flds[ifld].strip()); wlen.append(wlen_ib); ifld += 1 savg_ib = float(flds[ifld].strip()); savg.append(savg_ib); ifld += 1 smin_ib = float(flds[ifld].strip()); smin.append(smin_ib); ifld += 1 smax_ib = float(flds[ifld].strip()); smax.append(smax_ib); ifld += 1 rdev_ib = float(flds[ifld].strip()); rdev.append(rdev_ib); ifld += 1 tdev_ib = float(flds[ifld].strip()); tdev.append(tdev_ib); ifld += 1 P_ib = [] for ie in range(ne): P_ib_ie = float(flds[ifld].strip()); P_ib.append(P_ib_ie); ifld += 1 P.append(P.ib) rd.close() savg = numpy.array(savg); savg = numpy.array(); savg = numpy.array(); savg = numpy.array(); savg = numpy.array(); savg = numpy.array(); return bands, sref, sink # ---------------------------------------------------------------------- def read_int_param(rd, name): # Reads one line from file {ird} and parses it as "{name} = {val}" # where {val} is an integer. Returns {val}. # line = rd.readline().strip() m = re.fullmatch((name + r" *[=] *([0-9]+) *"), line) assert m != None, f"bad format: {name} {line}" return int(m.group(1)) # ----------------------------------------------------------------------