2026-07-13 23:03:35 +02:00
|
|
|
"""Aggiunge ai CSV dell'ultimo ciclo due colonne derivate dalla corrente:
|
|
|
|
|
Corrente / sqrt(velocita' di scansione) e (Corrente / sqrt(v)) / v.
|
2026-07-13 22:59:29 +02:00
|
|
|
|
|
|
|
|
La velocita' di scansione (V/s) viene cercata nel nome del file (es. "0.5Vs").
|
|
|
|
|
Per ogni file viene chiesto conferma: premere invio per usare il valore
|
|
|
|
|
trovato, oppure digitarne uno diverso e premere invio. I file vengono
|
|
|
|
|
sovrascritti.
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
import csv
|
|
|
|
|
import math
|
|
|
|
|
import re
|
|
|
|
|
import sys
|
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
|
|
INPUT_SUFFIX = "_ultimo_ciclo"
|
|
|
|
|
SCAN_RATE_PATTERN = re.compile(r"(\d+(?:\.\d+)?)\s*[Vv][Ss]\b")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def find_scan_rate_in_filename(name: str) -> float | None:
|
|
|
|
|
match = SCAN_RATE_PATTERN.search(name)
|
|
|
|
|
return float(match.group(1)) if match else None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def ask_scan_rate(filename: str) -> float:
|
|
|
|
|
found = find_scan_rate_in_filename(filename)
|
|
|
|
|
|
|
|
|
|
if found is not None:
|
|
|
|
|
prompt = f"Velocita' di scansione trovata nel nome file: {found} V/s. Premi invio per usarla, oppure inserisci un valore: "
|
|
|
|
|
else:
|
|
|
|
|
prompt = "Velocita' di scansione non trovata nel nome file. Inserisci un valore (V/s): "
|
|
|
|
|
|
|
|
|
|
while True:
|
|
|
|
|
raw = input(prompt).strip()
|
|
|
|
|
if raw == "" and found is not None:
|
|
|
|
|
return found
|
|
|
|
|
try:
|
|
|
|
|
return float(raw)
|
|
|
|
|
except ValueError:
|
|
|
|
|
print("Valore non valido, inserisci un numero (es. 0.5).")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def add_current_over_sqrt_scanrate(path: Path, scan_rate: float) -> None:
|
|
|
|
|
with path.open("r", encoding="utf-8", newline="") as f:
|
|
|
|
|
reader = csv.reader(f, delimiter=";")
|
|
|
|
|
header = next(reader)
|
|
|
|
|
rows = [tuple(row) for row in reader]
|
|
|
|
|
|
2026-07-13 23:03:35 +02:00
|
|
|
header = [*header, "Current/sqrt(scan rate)", "Current/sqrt(scan rate)/scan rate"]
|
2026-07-13 22:59:29 +02:00
|
|
|
sqrt_scan_rate = math.sqrt(scan_rate)
|
|
|
|
|
|
|
|
|
|
new_rows = []
|
|
|
|
|
for row in rows:
|
|
|
|
|
current = float(row[1].replace(",", "."))
|
2026-07-13 23:03:35 +02:00
|
|
|
value_d = current / sqrt_scan_rate
|
|
|
|
|
value_e = value_d / scan_rate
|
|
|
|
|
new_rows.append((
|
|
|
|
|
*row,
|
|
|
|
|
f"{value_d:.4e}".replace(".", ","),
|
|
|
|
|
f"{value_e:.4e}".replace(".", ","),
|
|
|
|
|
))
|
2026-07-13 22:59:29 +02:00
|
|
|
|
|
|
|
|
with path.open("w", encoding="utf-8", newline="") as f:
|
|
|
|
|
writer = csv.writer(f, delimiter=";")
|
|
|
|
|
writer.writerow(header)
|
|
|
|
|
writer.writerows(new_rows)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def main(argv: list[str]) -> None:
|
|
|
|
|
folder = Path(argv[1]) if len(argv) > 1 else Path(__file__).parent
|
|
|
|
|
csv_files = sorted(
|
|
|
|
|
p for p in folder.glob("*.csv") if p.stem.endswith(INPUT_SUFFIX)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if not csv_files:
|
|
|
|
|
print(f"Nessun file *{INPUT_SUFFIX}.csv trovato in {folder}")
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
for csv_file in csv_files:
|
|
|
|
|
scan_rate = ask_scan_rate(csv_file.name)
|
|
|
|
|
add_current_over_sqrt_scanrate(csv_file, scan_rate)
|
2026-07-13 23:03:35 +02:00
|
|
|
print(f"OK {csv_file.name} (colonne Current/sqrt(scan rate) e Current/sqrt(scan rate)/scan rate aggiunte con v={scan_rate} V/s)")
|
2026-07-13 22:59:29 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
main(sys.argv)
|