Mercurial > repos > gregor.m > spyboat
comparison output_report.py @ 5:d5a4180410c4 draft default tip
"planemo upload commit 7bc843096b70fe1c8fc149e69d8f87fceac4eb3b"
author | gregor.m |
---|---|
date | Sat, 28 Nov 2020 18:50:09 +0000 |
parents | a4c6fcf2c456 |
children |
comparison
equal
deleted
inserted
replaced
4:a4c6fcf2c456 | 5:d5a4180410c4 |
---|---|
1 ''' Produces plots and a summary html 'headless' ''' | 1 """ Produces plots and a summary html 'headless' """ |
2 | 2 import logging |
3 import os | 3 import os |
4 | |
4 import matplotlib | 5 import matplotlib |
5 # headless plotting and disable latex | |
6 matplotlib.use('Agg') | |
7 matplotlib.rcParams['text.usetex'] = False | |
8 import matplotlib.pyplot as ppl | 6 import matplotlib.pyplot as ppl |
9 | |
10 import logging | |
11 | |
12 import spyboat.plotting as spyplot | 7 import spyboat.plotting as spyplot |
13 | 8 |
9 ppl.switch_backend('Agg') | |
10 matplotlib.rcParams["text.usetex"] = False | |
14 logger = logging.getLogger(__name__) | 11 logger = logging.getLogger(__name__) |
15 | 12 |
16 # figure resolution | 13 # figure resolution |
17 DPI=250 | 14 DPI = 250 |
18 | 15 |
19 def produce_snapshots(input_movie, results, frame, Wkwargs, | 16 |
20 img_path='.'): | 17 def produce_snapshots(input_movie, results, frame, Wkwargs, img_path="."): |
21 | 18 """ |
22 ''' | 19 Takes the *input_movie* and the *results* dictionary |
23 Takes the *input_movie* and the | 20 from spyboat.processing.run_parallel and produces phase, |
24 *results* dictionary from spyboat.processing.run_parallel | 21 period and amplitude snapshot png's. |
25 and produces phase, period and amplitude snapshot png's. | |
26 | 22 |
27 For the period snapshot also the period range is needed, | 23 For the period snapshot also the period range is needed, |
28 hence the analysis dictionary 'Wkwargs' also gets passed. | 24 hence the analysis dictionary 'Wkwargs' also gets passed. |
29 | 25 |
30 The output files name pattern is: | 26 The output files name pattern is: |
31 [input, phase, period, amplitude]_frame{frame}.png | 27 [input, phase, period, amplitude]_frame{frame}.png |
32 and the storage location in *img_path*. | 28 and the storage location in *img_path*. |
33 | 29 |
34 These get picked up by 'create_html' | 30 These get picked up by 'create_html' |
35 ''' | 31 """ |
36 | |
37 | 32 |
38 spyplot.input_snapshot(input_movie[frame]) | 33 spyplot.input_snapshot(input_movie[frame]) |
39 fig = ppl.gcf() | 34 fig = ppl.gcf() |
40 out_path = os.path.join(img_path, f'input_frame{frame}.png') | 35 out_path = os.path.join(img_path, f"input_frame{frame}.png") |
41 fig.savefig(out_path, dpi=DPI) | 36 fig.savefig(out_path, dpi=DPI) |
42 ppl.close(fig) | 37 ppl.close(fig) |
43 | 38 |
44 spyplot.phase_snapshot(results['phase'][frame]) | 39 spyplot.phase_snapshot(results["phase"][frame]) |
45 fig = ppl.gcf() | 40 fig = ppl.gcf() |
46 out_path = os.path.join(img_path, f'phase_frame{frame}.png') | 41 out_path = os.path.join(img_path, f"phase_frame{frame}.png") |
47 fig.savefig(out_path, dpi=DPI) | 42 fig.savefig(out_path, dpi=DPI) |
48 ppl.close(fig) | 43 ppl.close(fig) |
49 | 44 |
50 spyplot.period_snapshot(results['period'][frame], | 45 spyplot.period_snapshot( |
51 Wkwargs['Tmin'],Wkwargs['Tmax'], | 46 results["period"][frame], Wkwargs["Tmin"], |
52 time_unit = 'a.u.') | 47 Wkwargs["Tmax"], time_unit="a.u." |
53 | 48 ) |
54 fig = ppl.gcf() | 49 |
55 out_path = os.path.join(img_path, f'period_frame{frame}.png') | 50 fig = ppl.gcf() |
56 fig.savefig(out_path, dpi=DPI) | 51 out_path = os.path.join(img_path, f"period_frame{frame}.png") |
57 ppl.close(fig) | 52 fig.savefig(out_path, dpi=DPI) |
58 | 53 ppl.close(fig) |
59 spyplot.amplitude_snapshot(results['amplitude'][frame]) | 54 |
60 fig = ppl.gcf() | 55 spyplot.amplitude_snapshot(results["amplitude"][frame]) |
61 out_path = os.path.join(img_path, f'amplitude_frame{frame}.png') | 56 fig = ppl.gcf() |
62 fig.savefig(out_path, dpi=DPI) | 57 out_path = os.path.join(img_path, f"amplitude_frame{frame}.png") |
63 ppl.close(fig) | 58 fig.savefig(out_path, dpi=DPI) |
64 | 59 ppl.close(fig) |
65 logger.info(f'Produced 4 snapshots for frame {frame}..') | 60 |
66 | 61 logger.info(f"Produced 4 snapshots for frame {frame}..") |
67 def produce_distr_plots(results, Wkwargs, img_path='.'): | 62 |
68 | 63 |
69 ''' | 64 def produce_distr_plots(results, Wkwargs, img_path="."): |
65 """ | |
70 Output file names are: | 66 Output file names are: |
71 | 67 |
72 period_distr.png, power_distr.png and phase_distr.png | 68 period_distr.png, power_distr.png and phase_distr.png |
73 ''' | 69 """ |
74 | 70 |
75 spyplot.period_distr_dynamics(results['period'], Wkwargs) | 71 spyplot.period_distr_dynamics(results["period"], Wkwargs) |
76 fig = ppl.gcf() | 72 fig = ppl.gcf() |
77 out_path = os.path.join(img_path, f'period_distr.png') | 73 out_path = os.path.join(img_path, "period_distr.png") |
78 fig.savefig(out_path, dpi=DPI) | 74 fig.savefig(out_path, dpi=DPI) |
79 | 75 |
80 spyplot.power_distr_dynamics(results['power'], Wkwargs) | 76 spyplot.power_distr_dynamics(results["power"], Wkwargs) |
81 fig = ppl.gcf() | 77 fig = ppl.gcf() |
82 out_path = os.path.join(img_path, f'power_distr.png') | 78 out_path = os.path.join(img_path, "power_distr.png") |
83 fig.savefig(out_path, dpi=DPI) | 79 fig.savefig(out_path, dpi=DPI) |
84 | 80 |
85 spyplot.phase_coherence_dynamics(results['phase'], Wkwargs) | 81 spyplot.phase_coherence_dynamics(results["phase"], Wkwargs) |
86 fig = ppl.gcf() | 82 fig = ppl.gcf() |
87 out_path = os.path.join(img_path, f'phase_distr.png') | 83 out_path = os.path.join(img_path, "phase_distr.png") |
88 fig.savefig(out_path, dpi=DPI) | 84 fig.savefig(out_path, dpi=DPI) |
89 | 85 |
90 logger.info(f'Produced 3 distribution plots..') | 86 logger.info("Produced 3 distribution plots..") |
91 | 87 |
92 | 88 |
93 def create_html(frame_nums, html_fname='OutputReport.html'): | 89 def create_html(frame_nums, html_fname="OutputReport.html"): |
94 | 90 """ |
95 ''' | 91 The html generated assumes the respective png's |
96 The html generated assumes the respective png's | |
97 have been created with 'produce_snapshots' and 'produce_distr_plots' | 92 have been created with 'produce_snapshots' and 'produce_distr_plots' |
98 and can be found at the cwd (that's how Galaxy works..) | 93 and can be found at the cwd (that's how Galaxy works..) |
99 ''' | 94 """ |
100 | 95 |
101 # -- create a gallery for every frame in frame_nums -- | 96 # -- create a gallery for every frame in frame_nums -- |
102 | 97 |
103 galleries = '' | 98 galleries = "" |
104 for frame_num in frame_nums: | 99 for frame_num in frame_nums: |
105 new_gal =f''' | 100 new_gal = f""" |
106 <div class="FrameSlides"> | 101 <div class="FrameSlides"> |
107 <h3 style="text-align:center; color=#363333"> Frame Nr. {frame_num} </h3> | 102 <h3 style="text-align:center; color=#363333"> |
103 Frame Nr. {frame_num} </h3> | |
108 | 104 |
109 <div class="snapshot_gallery"> | 105 <div class="snapshot_gallery"> |
110 | 106 |
111 <figure class=”snapshot_gallery__item snapshot_gallery__item--1"> | 107 <figure class=”snapshot_gallery__item |
112 <img src="input_frame{frame_num}.png" alt="The Input" class="snapshot_gallery__img"> | 108 snapshot_gallery__item--1"> |
113 </figure> | 109 <img src="input_frame{frame_num}.png" alt="The Input" |
114 | 110 class="snapshot_gallery__img"> |
115 <figure class=”snapshot_gallery__item snapshot_gallery__item--2"> | 111 </figure> |
116 <img src="phase_frame{frame_num}.png" alt="Phase" class="snapshot_gallery__img"> | 112 |
117 </figure> | 113 <figure class=”snapshot_gallery__item |
118 | 114 snapshot_gallery__item--2"> |
119 <figure class=”snapshot_gallery__item snapshot_gallery__item--3"> | 115 <img src="phase_frame{frame_num}.png" alt="Phase" |
120 <img src="period_frame{frame_num}.png" alt="Period" class="snapshot_gallery__img"> | 116 class="snapshot_gallery__img"> |
121 </figure> | 117 </figure> |
122 | 118 |
123 <figure class=”snapshot_gallery__item snapshot_gallery__item--4"> | 119 <figure class=”snapshot_gallery__item |
124 <img src="amplitude_frame{frame_num}.png" alt="Amplitude" class="snapshot_gallery__img"> | 120 snapshot_gallery__item--3"> |
121 <img src="period_frame{frame_num}.png" | |
122 alt="Period" class="snapshot_gallery__img"> | |
123 </figure> | |
124 | |
125 <figure class=”snapshot_gallery__item | |
126 snapshot_gallery__item--4"> | |
127 <img src="amplitude_frame{frame_num}.png" | |
128 alt="Amplitude" class="snapshot_gallery__img"> | |
125 </figure> | 129 </figure> |
126 </div> | 130 </div> |
127 </div> | 131 </div> |
128 ''' | 132 """ |
129 galleries += new_gal | 133 galleries += new_gal |
130 | 134 |
131 html_string =f''' | 135 html_string = f""" |
132 <html> | 136 <html> |
133 <!-- this file got automatically created by 'output_report.py' --> | 137 <!-- this file got automatically created by 'output_report.py' --> |
134 <title>SpyBOAT Output Report</title> | 138 <title>SpyBOAT Output Report</title> |
135 <head> | 139 <head> |
136 <!-- that doesn't work with galaxy.. --> | 140 <!-- that doesn't work with galaxy.. --> |
150 display: grid; | 154 display: grid; |
151 margin: 0 auto; | 155 margin: 0 auto; |
152 text-align: center; | 156 text-align: center; |
153 /* border: 1px dashed rgba(4, 4, 4, 0.35); */ | 157 /* border: 1px dashed rgba(4, 4, 4, 0.35); */ |
154 grid-template-columns: repeat(3,1fr); | 158 grid-template-columns: repeat(3,1fr); |
155 grid-template-rows: 20vw; | 159 grid-template-rows: 20vw; |
156 grid-gap: 0px; | 160 grid-gap: 0px; |
157 column-gap: 0px | 161 column-gap: 0px |
158 }} | 162 }} |
159 .distr_gallery__img {{ | 163 .distr_gallery__img {{ |
160 width: 100%; | 164 width: 100%; |
184 color:#363333;}} | 188 color:#363333;}} |
185 </style> | 189 </style> |
186 </head> | 190 </head> |
187 <body> | 191 <body> |
188 <h1 style="text-align:center; color:#363333">SpyBOAT Results Report</h1> | 192 <h1 style="text-align:center; color:#363333">SpyBOAT Results Report</h1> |
189 <hr style="width:50%"> | 193 <hr style="width:50%"> |
190 <h1 class="subheader"> Distribution Dynamics </h1> | 194 <h1 class="subheader"> Distribution Dynamics </h1> |
191 <div class="distr_gallery"> | 195 <div class="distr_gallery"> |
192 <figure class=”distr_gallery__item distr_gallery__item--1"> | 196 <figure class=”distr_gallery__item distr_gallery__item--1"> |
193 <img src="period_distr.png" alt="Period" class="distr_gallery__img"> | 197 <img src="period_distr.png" alt="Period" class="distr_gallery__img"> |
194 </figure> | 198 </figure> |
235 x[slideIndex-1].style.display = "block"; | 239 x[slideIndex-1].style.display = "block"; |
236 }} | 240 }} |
237 </script> | 241 </script> |
238 </body> | 242 </body> |
239 </html> | 243 </html> |
240 ''' | 244 """ |
241 | 245 |
242 with open(html_fname, 'w') as OUT: | 246 with open(html_fname, "w") as OUT: |
243 | |
244 OUT.write(html_string) | 247 OUT.write(html_string) |
245 | 248 |
246 logger.info(f'Created html report') | 249 logger.info("Created html report") |
247 return html_string | 250 return html_string |
248 | 251 |
249 # for local testing | 252 # for local testing |
250 # create_html([0,20,40,60,80]) | 253 # create_html([0,20,40,60,80]) |