Files
pipeline/pipeline_disk.py
T
2020-12-14 16:25:42 +01:00

236 lines
7.3 KiB
Python

# coding: utf-8
import os
from shutil import copy
import argparse
import time
import numpy as np
import disk_postprocess as dp
storage_in = "/home/nbrucy/simus/"
storage_out = "/home/nbrucy/visus/"
parser = argparse.ArgumentParser()
parser.add_argument("runs", help="name of runs", nargs="*", default=["015_iso"])
parser.add_argument("-b", "--begin", help="id of first output", type=int, default=1)
parser.add_argument("-e", "--end", help="id of last output", type=int, default=100)
parser.add_argument("-s", "--step", help="step between two output", type=int, default=1)
parser.add_argument("-p", "--project", help="specify project name", default="disk")
parser.add_argument(
"-fr",
"--force_redo",
help="redo plots even if the files already exist",
action="store_true",
)
parser.add_argument(
"-w", "--watch", help="wait and watch for missing outputs", action="store_true"
)
parser.add_argument("--skip", help="skip failed loadings", action="store_true")
parser.add_argument(
"-wt",
"--waiting_time",
help="time between to successive try when watching new outputs (in second)",
type=int,
default=120,
)
parser.add_argument(
"-af",
"--allowed_failures",
help="number of allowed failures when waiting",
default=30,
)
parser.add_argument("-i", "--interactive", help="Interactive mode", action="store_true")
parser.add_argument(
"-d", "--disk", help="do specific disk radial analysis", action="store_true"
)
parser.add_argument("-m", "--maps", help="do generic maps", action="store_true")
parser.add_argument(
"-c", "--compare", help="compare different runs", action="store_true"
)
parser.add_argument(
"-ev",
"--evolution",
help="plot evolution of quantities over time",
action="store_true",
)
parser.add_argument(
"--pdf", help="plot pdf of fluctuations of column density", action="store_true"
)
parser.add_argument(
"--fft", help="use quick and dirty fft rendering", action="store_true"
)
parser.add_argument("--level", help="plot levels", action="store_true")
parser.add_argument("--cpu", help="plot cpu", action="store_true")
parser.add_argument(
"-ms",
"--mapsize",
help="size of the maps created in he map mode (in pixel)",
type=int,
default=1024,
)
parser.add_argument(
"--nb_bin", help="Number of bins for azimuthal averages", type=int, default=50
)
parser.add_argument(
"--binning",
help="Kind of binning (logarithmic or linear)",
choices=["log", "lin"],
default="log",
)
parser.add_argument(
"--rad_ext", help="Value of the highest bin", type=float, default=1.0
)
parser.add_argument(
"-x", help="x position of the central point", type=float, default=1.0
)
parser.add_argument(
"-y", help="y position of the central point", type=float, default=1.0
)
parser.add_argument(
"-z", help="z position of the central point", type=float, default=1.0
)
parser.add_argument(
"--colormap", help="Colormap used", choices=dp.P.colormaps(), default="plasma"
)
parser.add_argument(
"--format",
help="Format of the output",
choices=["png", "jpeg", "pdf", "ps"],
default="jpeg",
)
parser.add_argument("--dpi", help="Resolution of the output", type=int, default=400)
args = parser.parse_args()
project = args.project
runs = args.runs
first = args.begin
last = args.end
step = args.step
# extension for out files
dp.out_ext = "." + args.format
# Plot properties
dp.P.rcParams["image.cmap"] = args.colormap
dp.P.rcParams["savefig.dpi"] = args.dpi
for run in runs:
path_suffix = project + "/" + run
path_in = storage_in + path_suffix
path_out = storage_out + path_suffix
if not os.path.exists(path_out):
os.makedirs(path_out)
try:
copy(path_in + "/disk.nml", path_out)
copy(path_in + "/output_00001/compilation.txt", path_out)
except:
pass
for i in range(first, last + 1, step):
failures = 0
success = False
while not success:
try:
maps_disk = None
if args.maps:
print("[{}, {}] computing maps".format(run, i))
maps_disk = dp.make_image_disk(
path_in,
i,
path_out=path_out,
tag=run,
map_size=args.mapsize,
force=args.force_redo,
level=args.level,
cpu=args.cpu,
pos_star=np.array([args.x, args.y, args.z]),
fft=args.fft,
interactive=args.interactive,
)
print("[{}, {}] maps computed".format(run, i))
if args.disk:
print("[{}, {}] computing disk props".format(run, i))
dp.disk_prop(
path_in,
i,
path_out=path_out,
nb_bin=args.nb_bin,
binning=args.binning,
rad_ext=args.rad_ext,
force=args.force_redo,
pos_star=np.array([args.x, args.y, args.z]),
)
print("[{}, {}] disk_props computed".format(run, i))
if args.disk:
print("[{}, {}] plotting disk props".format(run, i))
dp.plot_disk_prop(
path_out,
i,
tag=run,
force=args.force_redo,
interactive=args.interactive,
)
print("[{}, {}] disk props plotted".format(run, i))
if args.pdf:
print("[{}, {}] computing pdf".format(run, i))
dp.disk_pdf(
path_out,
i,
maps_disk,
pos_star=np.array([args.x, args.y, args.z]),
force=args.force_redo,
tag=run,
interactive=args.interactive,
)
print("[{}, {}] pdf computed".format(run, i))
success = True
except ValueError as e:
print(e)
if args.watch and failures < args.allowed_failures:
failures = failures + 1
print(
"Unable to proceed for run {} output {}. Trying again in {} s ({} tries remaining)".format(
run, i, args.waiting_time, args.allowed_failures - failures
)
)
time.sleep(args.waiting_time)
elif args.skip:
break
else:
raise
if args.evolution:
dp.evolution(
path_out,
range(first, last + 1, step),
force=args.force_redo,
interactive=args.interactive,
)
if args.compare:
path_suffix = project
path = storage_out + path_suffix
for i in range(first, last + 1, step):
dp.compare(
path,
runs,
i,
force=args.force_redo,
interactive=args.interactive,
Q_in_name=(not args.pdf),
pdf=args.pdf,
)