From da1a8915b3ae5ca40af13102ebcab829d1f5e027 Mon Sep 17 00:00:00 2001 From: chrisjonesbsu Date: Mon, 6 Nov 2023 11:49:01 -0700 Subject: [PATCH 1/4] add ffmpeg wrapper --- cmeutils/visualize.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/cmeutils/visualize.py b/cmeutils/visualize.py index 41e9def..15d109d 100644 --- a/cmeutils/visualize.py +++ b/cmeutils/visualize.py @@ -1,3 +1,4 @@ +import ffmpeg import fresnel import gsd.hoomd import numpy as np @@ -434,3 +435,15 @@ def path_trace(self, width=300, height=300, samples=64, light_samples=1): samples=samples, light_samples=light_samples, ) + + +def movie_maker( + file_dir, img_file_type, mov_file_name, pattern_type="glob", framerate=25 +): + """""" + input_arg = f"{file_dir}*.{img_file_type}" + ( + ffmpeg.input(input_arg, pattern_type=pattern_type, framerate=framerate) + .output(mov_file_name) + .run() + ) From bc111117c4e577bc67bfbb3b9a4d54b8b4982d64 Mon Sep 17 00:00:00 2001 From: chrisjonesbsu Date: Mon, 6 Nov 2023 12:33:55 -0700 Subject: [PATCH 2/4] start dp movie maker --- cmeutils/structure.py | 11 ++++++++++- cmeutils/visualize.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/cmeutils/structure.py b/cmeutils/structure.py index 3ac6766..f8eb188 100644 --- a/cmeutils/structure.py +++ b/cmeutils/structure.py @@ -582,7 +582,16 @@ def diffraction_pattern( grid_size=grid_size, output_size=output_size ) with gsd.hoomd.open(gsdfile) as trajectory: - for frame in trajectory[start:stop]: + if start != stop: + for frame in trajectory[start:stop]: + system = frame_to_freud_system( + frame=frame, ref_length=ref_length + ) + for view in views: + dp.compute( + system=system, view_orientation=view, reset=False + ) + else: system = frame_to_freud_system(frame=frame, ref_length=ref_length) for view in views: dp.compute(system=system, view_orientation=view, reset=False) diff --git a/cmeutils/visualize.py b/cmeutils/visualize.py index 15d109d..5e5d139 100644 --- a/cmeutils/visualize.py +++ b/cmeutils/visualize.py @@ -1,7 +1,12 @@ +import os + import ffmpeg import fresnel import gsd.hoomd import numpy as np +from PIL import Image + +from cmeutils.structure import diffraction_pattern class FresnelGSD: @@ -437,6 +442,43 @@ def path_trace(self, width=300, height=300, samples=64, light_samples=1): ) +def diffraction_pattern_movie( + gsdfile, + start, + stop, + stride, + views, + ref_length, + grid_size, + output_size, + mov_file_name, + framerate, + clean_up=True, +): + """""" + img_path = os.path.join(os.getcwd(), "images") + os.mkdir(img_path) + for i in range(start, stop, stride): + dp = diffraction_pattern( + gsdfile=gsdfile, + views=views, + start=i, + stop=i, + ref_length=ref_length, + grid_size=grid_size, + output_size=output_size, + ) + img = Image.fromarray(dp.to_img(), "RGBA") + img.save(os.path.join(img_path, f"{i}.png")) + + movie_maker( + file_dir=img_path, + img_file_type="png", + mov_file_name=mov_file_name, + framerate=framerate, + ) + + def movie_maker( file_dir, img_file_type, mov_file_name, pattern_type="glob", framerate=25 ): From f86ccc7a9e9b0a74a89e096f2615603972c6e922 Mon Sep 17 00:00:00 2001 From: chrisjonesbsu Date: Mon, 6 Nov 2023 13:13:24 -0700 Subject: [PATCH 3/4] fixing a couple things --- cmeutils/structure.py | 1 + cmeutils/visualize.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/cmeutils/structure.py b/cmeutils/structure.py index f8eb188..1ac0168 100644 --- a/cmeutils/structure.py +++ b/cmeutils/structure.py @@ -592,6 +592,7 @@ def diffraction_pattern( system=system, view_orientation=view, reset=False ) else: + frame = trajectory[start] system = frame_to_freud_system(frame=frame, ref_length=ref_length) for view in views: dp.compute(system=system, view_orientation=view, reset=False) diff --git a/cmeutils/visualize.py b/cmeutils/visualize.py index 5e5d139..44108e7 100644 --- a/cmeutils/visualize.py +++ b/cmeutils/visualize.py @@ -456,7 +456,7 @@ def diffraction_pattern_movie( clean_up=True, ): """""" - img_path = os.path.join(os.getcwd(), "images") + img_path = os.path.join(os.getcwd(), "images/") os.mkdir(img_path) for i in range(start, stop, stride): dp = diffraction_pattern( @@ -468,7 +468,7 @@ def diffraction_pattern_movie( grid_size=grid_size, output_size=output_size, ) - img = Image.fromarray(dp.to_img(), "RGBA") + img = Image.fromarray(dp.to_image(), "RGBA") img.save(os.path.join(img_path, f"{i}.png")) movie_maker( From 8bdaf68ab8cc32aee5f798ed0eba8d711ee5d517 Mon Sep 17 00:00:00 2001 From: chrisjonesbsu Date: Tue, 7 Nov 2023 10:40:09 -0700 Subject: [PATCH 4/4] save entire matplotlib figure instead of just the diff image --- cmeutils/visualize.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/cmeutils/visualize.py b/cmeutils/visualize.py index 44108e7..be8ccee 100644 --- a/cmeutils/visualize.py +++ b/cmeutils/visualize.py @@ -1,10 +1,11 @@ import os +import shutil import ffmpeg import fresnel import gsd.hoomd +import matplotlib import numpy as np -from PIL import Image from cmeutils.structure import diffraction_pattern @@ -456,20 +457,20 @@ def diffraction_pattern_movie( clean_up=True, ): """""" + matplotlib.use("Agg") img_path = os.path.join(os.getcwd(), "images/") os.mkdir(img_path) - for i in range(start, stop, stride): + for idx, frame in enumerate(range(start, stop, stride)): dp = diffraction_pattern( gsdfile=gsdfile, views=views, - start=i, - stop=i, + start=frame, + stop=frame, ref_length=ref_length, grid_size=grid_size, output_size=output_size, ) - img = Image.fromarray(dp.to_image(), "RGBA") - img.save(os.path.join(img_path, f"{i}.png")) + dp.plot().figure.savefig(os.path.join(img_path, f"{idx}.png")) movie_maker( file_dir=img_path, @@ -477,6 +478,9 @@ def diffraction_pattern_movie( mov_file_name=mov_file_name, framerate=framerate, ) + # Remove dir and images + if clean_up: + shutil.rmtree(img_path) def movie_maker(