-        
 Frame Nr. 74 
+        
diff -r a4c6fcf2c456 -r d5a4180410c4 SpyBOAT.xml
--- a/SpyBOAT.xml	Thu Nov 26 16:40:47 2020 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,248 +0,0 @@
-
-wavelet transforms image stacks
-  
-    0.1.1
-  
-  
-    
-      spyboat
-    
-    python $__tool_directory__/spyboat_cli.py --version
-     $log
-
-	  ]]>
-    
-    
-        
-
-        
-
-        
-            
-        
-
-        
-            
-        
-
-        
-            
-                
-                
-		
-	    
-            
-	    
-            
-                
-                    
-                
-                
-                    
-                
-            
-            
-                
-                    
-                
-            	    
-        
-
-        
-            
-        
-        
-            
-        
-
-        
-            
-        
-
-        
-            
-        
-
-        
-            
-        
-
-        
-            
-        
-
-        
-            
-                
-                
-	    
-	    
-	    
-	    
-	    
-	    	    
-	
-    
-
-    
-        
-        
-        
-        
-	
-	  save_preprocessed['selection'] == 'Yes'
-	
-	
-        
-	
-
-    
-
-    
-        
-            
-            
-            
-            
-            
-        
-    
-    
-    
-
-      @article{monke2020optimal,
-  title={Optimal time frequency analysis for biological data-pyBOAT},
-  author={M{\"o}nke, Gregor and Sorgenfrei, Frieda A and Schmal, Christoph and Granada, Adri{\'a}n E},
-  journal={bioRxiv},
-  year={2020},
-  publisher={Cold Spring Harbor Laboratory}
-}      
-   
- 
-
diff -r a4c6fcf2c456 -r d5a4180410c4 __pycache__/output_report.cpython-38.pyc
Binary file __pycache__/output_report.cpython-38.pyc has changed
diff -r a4c6fcf2c456 -r d5a4180410c4 output_report.py
--- a/output_report.py	Thu Nov 26 16:40:47 2020 +0000
+++ b/output_report.py	Sat Nov 28 18:50:09 2020 +0000
@@ -1,28 +1,24 @@
-''' Produces plots and a summary html 'headless' '''
+""" Produces plots and a summary html 'headless' """
+import logging
+import os
 
-import os
 import matplotlib
-# headless plotting and disable latex
-matplotlib.use('Agg')
-matplotlib.rcParams['text.usetex'] = False
 import matplotlib.pyplot as ppl
-
-import logging
-
 import spyboat.plotting as spyplot
 
+ppl.switch_backend('Agg')
+matplotlib.rcParams["text.usetex"] = False
 logger = logging.getLogger(__name__)
 
 # figure resolution
-DPI=250
+DPI = 250
 
-def produce_snapshots(input_movie, results, frame, Wkwargs,
-                      img_path='.'):
 
-    '''
-    Takes the *input_movie* and the 
-    *results* dictionary from spyboat.processing.run_parallel
-    and produces phase, period and amplitude snapshot png's.
+def produce_snapshots(input_movie, results, frame, Wkwargs, img_path="."):
+    """
+    Takes the *input_movie* and the *results* dictionary
+    from spyboat.processing.run_parallel and produces phase,
+    period and amplitude snapshot png's.
 
     For the period snapshot also the period range is needed,
     hence the analysis dictionary 'Wkwargs' also gets passed.
@@ -32,103 +28,111 @@
     and the storage location in *img_path*.
 
     These get picked up by 'create_html'
-    '''
-
+    """
 
     spyplot.input_snapshot(input_movie[frame])
     fig = ppl.gcf()
-    out_path = os.path.join(img_path, f'input_frame{frame}.png')
+    out_path = os.path.join(img_path, f"input_frame{frame}.png")
+    fig.savefig(out_path, dpi=DPI)
+    ppl.close(fig)
+
+    spyplot.phase_snapshot(results["phase"][frame])
+    fig = ppl.gcf()
+    out_path = os.path.join(img_path, f"phase_frame{frame}.png")
     fig.savefig(out_path, dpi=DPI)
     ppl.close(fig)
-    
-    spyplot.phase_snapshot(results['phase'][frame])
+
+    spyplot.period_snapshot(
+        results["period"][frame], Wkwargs["Tmin"],
+        Wkwargs["Tmax"], time_unit="a.u."
+    )
+
     fig = ppl.gcf()
-    out_path = os.path.join(img_path, f'phase_frame{frame}.png')    
+    out_path = os.path.join(img_path, f"period_frame{frame}.png")
+    fig.savefig(out_path, dpi=DPI)
+    ppl.close(fig)
+
+    spyplot.amplitude_snapshot(results["amplitude"][frame])
+    fig = ppl.gcf()
+    out_path = os.path.join(img_path, f"amplitude_frame{frame}.png")
     fig.savefig(out_path, dpi=DPI)
     ppl.close(fig)
 
-    spyplot.period_snapshot(results['period'][frame],
-                            Wkwargs['Tmin'],Wkwargs['Tmax'],
-                            time_unit = 'a.u.')
-    
-    fig = ppl.gcf()
-    out_path = os.path.join(img_path, f'period_frame{frame}.png')    
-    fig.savefig(out_path, dpi=DPI)
-    ppl.close(fig)
-    
-    spyplot.amplitude_snapshot(results['amplitude'][frame])
-    fig = ppl.gcf()
-    out_path = os.path.join(img_path, f'amplitude_frame{frame}.png')    
-    fig.savefig(out_path, dpi=DPI)
-    ppl.close(fig)
-        
-    logger.info(f'Produced 4 snapshots for frame {frame}..')
+    logger.info(f"Produced 4 snapshots for frame {frame}..")
+
+
+def produce_distr_plots(results, Wkwargs, img_path="."):
+    """
+    Output file names are:
 
-def produce_distr_plots(results, Wkwargs, img_path='.'):
-
-    '''
-    Output file names are:
-    
-    period_distr.png, power_distr.png and phase_distr.png   
-    '''
+    period_distr.png, power_distr.png and phase_distr.png
+    """
 
-    spyplot.period_distr_dynamics(results['period'], Wkwargs)
+    spyplot.period_distr_dynamics(results["period"], Wkwargs)
     fig = ppl.gcf()
-    out_path = os.path.join(img_path, f'period_distr.png')    
+    out_path = os.path.join(img_path, "period_distr.png")
     fig.savefig(out_path, dpi=DPI)
-    
-    spyplot.power_distr_dynamics(results['power'], Wkwargs)
+
+    spyplot.power_distr_dynamics(results["power"], Wkwargs)
     fig = ppl.gcf()
-    out_path = os.path.join(img_path, f'power_distr.png')    
+    out_path = os.path.join(img_path, "power_distr.png")
     fig.savefig(out_path, dpi=DPI)
 
-    spyplot.phase_coherence_dynamics(results['phase'], Wkwargs)
+    spyplot.phase_coherence_dynamics(results["phase"], Wkwargs)
     fig = ppl.gcf()
-    out_path = os.path.join(img_path, f'phase_distr.png')    
+    out_path = os.path.join(img_path, "phase_distr.png")
     fig.savefig(out_path, dpi=DPI)
-        
-    logger.info(f'Produced 3 distribution plots..')
+
+    logger.info("Produced 3 distribution plots..")
+
 
-    
-def create_html(frame_nums, html_fname='OutputReport.html'):
-
-    '''
-    The html generated assumes the respective png's 
+def create_html(frame_nums, html_fname="OutputReport.html"):
+    """
+    The html generated assumes the respective png's
     have been created with 'produce_snapshots' and 'produce_distr_plots'
     and can be found at the cwd (that's how Galaxy works..)
-    '''
+    """
 
     # -- create a gallery for every frame in frame_nums --
-    
-    galleries = ''
+
+    galleries = ""
     for frame_num in frame_nums:
-        new_gal =f'''
-        
 
-        
 Frame Nr. {frame_num} 
+        new_gal = f"""
+        
+        
+        Frame Nr. {frame_num} 
 
             
         
-        '''
+        """
         galleries += new_gal
-    
-    html_string =f'''
+
+    html_string = f"""
     
     
     
SpyBOAT Output Report
@@ -152,7 +156,7 @@
             text-align: center;
             /* border: 1px dashed rgba(4, 4, 4, 0.35);     */
             grid-template-columns: repeat(3,1fr);
-            grid-template-rows: 20vw;    
+            grid-template-rows: 20vw;
             grid-gap: 0px;
             column-gap: 0px
         }}
@@ -186,7 +190,7 @@
     
     
     
SpyBOAT Results Report
-    
 
+    
     
     
        
@@ -237,13 +241,12 @@
     
     
     
-    '''
+    """
 
-    with open(html_fname, 'w') as OUT:
-
+    with open(html_fname, "w") as OUT:
         OUT.write(html_string)
 
-    logger.info(f'Created html report')
+    logger.info("Created html report")
     return html_string
 
 # for local testing
diff -r a4c6fcf2c456 -r d5a4180410c4 period_out.tif
Binary file period_out.tif has changed
diff -r a4c6fcf2c456 -r d5a4180410c4 phase_out.tif
Binary file phase_out.tif has changed
diff -r a4c6fcf2c456 -r d5a4180410c4 run_tests.sh
--- a/run_tests.sh	Thu Nov 26 16:40:47 2020 +0000
+++ b/run_tests.sh	Sat Nov 28 18:50:09 2020 +0000
@@ -4,7 +4,11 @@
 INPUT_PATH='./test-data/test-movie.tif'
 SCRIPT_PATH='.'
 
-python3 $SCRIPT_PATH/spyboat_cli.py --input_path $INPUT_PATH --phase_out phase_test-movie.tif --period_out period_test-movie.tif --power_out power_test-movie.tif  --amplitude_out amplitude_test-movie.tif --dt 1 --Tmin 20 --Tmax 30 --nT 200 --ncpu 6 --masking dynamic --preprocessed_out preproc_two_sines.tif --gauss_sigma 2 --rescale 80 --Tcutoff 40 --masking static --mask_frame 10 --mask_thresh 300
+# set to galaxy defaults!!
+python3 $SCRIPT_PATH/spyboat_cli.py --input_path $INPUT_PATH --phase_out phase_out.tif --period_out period_out.tif --dt 1 --Tmin 20 --Tmax 30 --nT 150 --ncpu 6 --Tcutoff 40
+
+# additional paramters
+#--masking static --mask_frame 10 --mask_thresh 300 --rescale 80 --gauss_sigma 1
 
 printf "\n"
 # printf "\nError examples:\n"
diff -r a4c6fcf2c456 -r d5a4180410c4 spyboat.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/spyboat.xml	Sat Nov 28 18:50:09 2020 +0000
@@ -0,0 +1,264 @@
+
+wavelet transforms image stacks
+    
+        0.1.1
+    
+    
+        spyboat
+    
+    python '$__tool_directory__/spyboat_cli.py' --version
+     /dev/null &&
+        ## run tool
+        python '$__tool_directory__/spyboat_cli.py'
+        --input_path '$movie'
+        #if str($PreProc.gauss_sigma):
+            --gauss_sigma $PreProc.gauss_sigma
+        #end if
+        #if str($PreProc.rescale_factor):
+            --rescale $PreProc.rescale_factor
+        #end if
+
+        #if $masking.selection_mode == "create_static_mask":
+            --masking static
+            --mask_frame $masking.mask_frame
+            --mask_thresh $masking.mask_thresh
+        #else if $masking.selection_mode == "create_dynamic_mask":
+            --masking dynamic
+            --mask_thresh $masking.mask_thresh
+        #end if
+
+        --dt $wavana.dt
+        --Tmin $wavana.tmin
+        --Tmax $wavana.tmax
+        --nT $wavana.nt
+        #if str($wavana.tcutoff)
+             --Tcutoff $wavana.tcutoff
+        #end if
+        #if str($wavana.win_size):
+             --win_size $wavana.win_size
+        #end if
+
+        #if 'save_phase' in $outputs:
+            --phase_out '$phase_out'
+        #end if
+
+        #if 'save_period' in $outputs:
+            --period_out '$period_out'
+        #end if
+
+        #if 'save_power' in $outputs:
+            --power_out '$power_out'
+        #end if
+
+        #if 'save_amplitude' in $outputs:
+            --amplitude_out '$amplitude_out'
+        #end if
+
+        #if 'save_preprocessed' in $outputs:
+            --preprocessed_out '$preprocessed_out'
+        #end if
+
+        --html_fname '$html_out'
+        --report_img_path '$html_out.extra_files_path'
+
+        --ncpu "\${GALAXY_SLOTS:-8}"
+
+
+      ]]>
+    
+        
+
+        
+        
+        
+        
+            
+                
+                
+                
+            
+            
+            
+                
+                
+            
+            
+                
+            
+        
+        
+            
+            
+            
+            
+            
+        
+    
+
+    
+        
+            'save_phase' in ouputs
+        
+        
+            'save_period' in outputs
+        
+        
+            'save_power' in outputs
+        
+        
+            'save_amplitude' in outputs
+        
+        
+            'save_preprocessed' in outputs
+        
+        
+    
+
+    
+        
+            
+            
+            
+                
+            
+            
+            
+        
+        
+            
+            
+                
+            
+            
+            
+            
+            
+        
+        
+            
+            
+                
+            
+            
+            
+            
+            
+        
+    
+    
+    
+        10.1101/2020.04.29.067744
+   
+
diff -r a4c6fcf2c456 -r d5a4180410c4 spyboat_cli.py
--- a/spyboat_cli.py	Thu Nov 26 16:40:47 2020 +0000
+++ b/spyboat_cli.py	Sat Nov 28 18:50:09 2020 +0000
@@ -1,15 +1,15 @@
 #!/usr/bin/env python
 
-## Gets interfaced by Galaxy or can be used for bash scripting
+# Gets interfaced by Galaxy or can be used for bash scripting
 import argparse
-import sys, os
 import logging
+import os
+import sys
 
-from skimage import io
+import output_report
+import spyboat
 from numpy import float32
-
-import spyboat
-import output_report
+from skimage import io
 
 logging.basicConfig(level=logging.INFO, stream=sys.stdout, force=True)
 logger = logging.getLogger('spyboat-cli')
@@ -20,12 +20,11 @@
 
 # I/O
 parser.add_argument('--input_path', help="Input movie location", required=True)
-parser.add_argument('--phase_out', help='Phase output file name', required=True)
-parser.add_argument('--period_out', help='Period output file name', required=True)
-parser.add_argument('--power_out', help='Power output file name', required=True)
-parser.add_argument('--amplitude_out', help='Amplitude output file name', required=True)
-parser.add_argument('--preprocessed_out', help="Preprocessed-input output file name, 'None'", required=False)
-
+parser.add_argument('--phase_out', help='Phase output file name', required=False)
+parser.add_argument('--period_out', help='Period output file name', required=False)
+parser.add_argument('--power_out', help='Power output file name', required=False)
+parser.add_argument('--amplitude_out', help='Amplitude output file name', required=False)
+parser.add_argument('--preprocessed_out', help="Preprocessed-input output file name", required=False)
 
 # (Optional) Multiprocessing
 
@@ -33,10 +32,11 @@
                     required=False, type=int, default=1)
 
 # Optional spatial downsampling
-parser.add_argument('--rescale', help='Rescale the image by a factor given in %%, None means no rescaling',
+parser.add_argument('--rescale_factor', help='Rescale the image by a factor given in %%, None means no rescaling',
                     required=False, type=int)
 # Optional Gaussian smoothing
-parser.add_argument('--gauss_sigma', help='Gaussian smoothing parameter, None means no smoothing', required=False, type=float)
+parser.add_argument('--gauss_sigma', help='Gaussian smoothing parameter, None means no smoothing', required=False,
+                    type=float)
 
 # Wavelet Analysis Parameters
 parser.add_argument('--dt', help='Sampling interval', required=True, type=float)
@@ -49,14 +49,15 @@
                     required=False, type=float)
 
 # Optional masking
-parser.add_argument('--masking', help="Set to either 'dynamic', 'static' or 'None' which is the default", default='None', required=False, type=str)
+parser.add_argument('--masking', help="Set to either 'dynamic', 'static' or 'None' which is the default",
+                    default='None', required=False, type=str)
 
 parser.add_argument('--mask_frame',
                     help="The frame of the input movie to create a static mask from, needs masking set to 'static'",
                     required=False, type=int)
 
-
-parser.add_argument('--mask_thresh', help='The threshold of the mask, all pixels with less than this value get masked (if masking enabled).',
+parser.add_argument('--mask_thresh',
+                    help='The threshold of the mask, all pixels with less than this value get masked (if masking enabled).',
                     required=False, type=float,
                     default=0)
 
@@ -64,7 +65,8 @@
 parser.add_argument('--html_fname', help="Name of the html report.",
                     default='OutputReport.html', required=False, type=str)
 
-parser.add_argument('--report_img_path', help="For the html report, to be set in Galaxy. Without galaxy leave at cwd!", default='.', required=False, type=str)
+parser.add_argument('--report_img_path', help="For the html report, to be set in Galaxy. Without galaxy leave at cwd!",
+                    default='.', required=False, type=str)
 
 parser.add_argument('--version', action='version', version='0.1.0')
 
@@ -85,7 +87,7 @@
     sys.exit(1)
 # -------- Do (optional) spatial downsampling ---------------------------
 
-scale_factor = arguments.rescale
+scale_factor = arguments.rescale_factor
 
 # defaults to None
 if not scale_factor:
@@ -121,13 +123,13 @@
         sys.exit(1)
 
     else:
-        logger.info(f'Creating static mask from frame {arguments.mask_frame} with threshold {arguments.mask_thresh}')  
+        logger.info(f'Creating static mask from frame {arguments.mask_frame} with threshold {arguments.mask_thresh}')
         mask = spyboat.create_static_mask(movie, arguments.mask_frame,
-                                         arguments.mask_thresh)
+                                          arguments.mask_thresh)
 elif arguments.masking == 'dynamic':
     logger.info(f'Creating dynamic mask with threshold {arguments.mask_thresh}')
     mask = spyboat.create_dynamic_mask(movie, arguments.mask_thresh)
-        
+
 else:
     logger.info('No masking requested..')
 
@@ -135,11 +137,11 @@
 
 Wkwargs = {'dt': arguments.dt,
            'Tmin': arguments.Tmin,
-           'Tmax': arguments.Tmax,           
+           'Tmax': arguments.Tmax,
            'nT': arguments.nT,
-           'T_c' : arguments.Tcutoff, # defaults to None
-           'win_size' : arguments.win_size # defaults to None          
-}
+           'T_c': arguments.Tcutoff,  # defaults to None
+           'win_size': arguments.win_size  # defaults to None
+           }
 
 # --- start parallel processing ---
 
@@ -161,51 +163,55 @@
 
     if arguments.report_img_path != '.':
         logger.info(f'Creating report directory {arguments.report_img_path}')
-        os.mkdir(arguments.report_img_path)    
+        os.mkdir(arguments.report_img_path)
 
-    # 4 snapshots each
+        # 4 snapshots each
     Nsnap = 7
     NFrames = movie.shape[0]
     # show only frames at least one Tmin
     # away from the edge (-effects)
-    start_frame = int(Wkwargs['Tmin']/Wkwargs['dt'])        
-    
-    if (start_frame > NFrames//2):
+    start_frame = int(Wkwargs['Tmin'] / Wkwargs['dt'])
+
+    if (start_frame > NFrames // 2):
         logger.warning("Smallest period already is larger than half the observation time!")
         # set to 0 in this case
         start_frame = 0
-        
-    frame_increment = int( (NFrames - 2*start_frame) / Nsnap)
+
+    frame_increment = int((NFrames - 2 * start_frame) / Nsnap)
     snapshot_frames = range(start_frame, NFrames - start_frame, frame_increment)
 
-    for snapshot_frame in snapshot_frames:  
+    for snapshot_frame in snapshot_frames:
         output_report.produce_snapshots(movie, results, snapshot_frame, Wkwargs, img_path=arguments.report_img_path)
-    
+
     output_report.produce_distr_plots(results, Wkwargs, img_path=arguments.report_img_path)
-    
+
     output_report.create_html(snapshot_frames, arguments.html_fname)
-                          
+
 except FileExistsError as e:
     logger.critical(f"Could not create html report directory: {repr(e)}")
 
-
 # --- save out result movies ---
 
-# save phase movie
-io.imsave(arguments.phase_out, results['phase'], plugin="tifffile")
-logger.info(f'Written {arguments.phase_out}')
-# save period movie
-io.imsave(arguments.period_out, results['period'], plugin="tifffile")
-logger.info(f'Written {arguments.period_out}')
-# save power movie
-io.imsave(arguments.power_out, results['power'], plugin="tifffile")
-logger.info(f'Written {arguments.power_out}')
-# save amplitude movie
-io.imsave(arguments.amplitude_out, results['amplitude'], plugin="tifffile")
-logger.info(f'Written {arguments.amplitude_out}')
+# None means output is filtered from galaxy settings
+if arguments.phase_out is not None:
+    # save phase movie
+    io.imsave(arguments.phase_out, results['phase'], plugin="tifffile")
+    logger.info(f'Written phase to {arguments.phase_out}')
+if arguments.period_out is not None:
+    # save period movie
+    io.imsave(arguments.period_out, results['period'], plugin="tifffile")
+    logger.info(f'Written period to {arguments.period_out}')
+if arguments.power_out is not None:
+    # save power movie
+    io.imsave(arguments.power_out, results['power'], plugin="tifffile")
+    logger.info(f'Written power to {arguments.power_out}')
+if arguments.amplitude_out is not None:
+    # save amplitude movie
+    io.imsave(arguments.amplitude_out, results['amplitude'], plugin="tifffile")
+    logger.info(f'Written amplitude to {arguments.amplitude_out}')
 
 # save out the probably pre-processed (scaled and blurred) input movie for
 # direct comparison to results and coordinate mapping etc.
-if arguments.preprocessed_out:
-    io.imsave(arguments.preprocessed_out, movie, plugin='tifffile')
-    logger.info(f'Written {arguments.preprocessed_out}')
+if arguments.preprocessed_out is not None:
+    io.imsave(arguments.preprocessed_out, movie.astype(float32), plugin='tifffile')
+    logger.info(f'Written preprocessed to {arguments.preprocessed_out}')
diff -r a4c6fcf2c456 -r d5a4180410c4 test-data/output1.html
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/output1.html	Sat Nov 28 18:50:09 2020 +0000
@@ -0,0 +1,334 @@
+
+    
+    
+    SpyBOAT Output Report
+    
+        
+        
+      
+    
+    
+    SpyBOAT Results Report
+    
+    
+    
+       
+          +
+       
+
+       
+          +
+       
+
+       
+          +
+       
+
+    
+        
+        
+    
+
+    
+    
+        
+        
+        Frame Nr. 20 
+
+            
+
+               
+                  +
+               
+
+               
+                  +
+               
+
+               
+                  +
+               
+
+               
+                  +
+               
+            
+        
+        
+        Frame Nr. 28 
+
+            
+
+               
+                  +
+               
+
+               
+                  +
+               
+
+               
+                  +
+               
+
+               
+                  +
+               
+            
+        
+        
+        Frame Nr. 36 
+
+            
+
+               
+                  +
+               
+
+               
+                  +
+               
+
+               
+                  +
+               
+
+               
+                  +
+               
+            
+        
+        
+        Frame Nr. 44 
+
+            
+
+               
+                  +
+               
+
+               
+                  +
+               
+
+               
+                  +
+               
+
+               
+                  +
+               
+            
+        
+        
+        Frame Nr. 52 
+
+            
+
+               
+                  +
+               
+
+               
+                  +
+               
+
+               
+                  +
+               
+
+               
+                  +
+               
+            
+        
+        
+        Frame Nr. 60 
+
+            
+
+               
+                  +
+               
+
+               
+                  +
+               
+
+               
+                  +
+               
+
+               
+                  +
+               
+            
+        
+        
+        Frame Nr. 68 
+
+            
+
+               
+                  +
+               
+
+               
+                  +
+               
+
+               
+                  +
+               
+
+               
+                  +
+               
+            
+        
 
+
+    
+    
+    
+    
+    
\ No newline at end of file
diff -r a4c6fcf2c456 -r d5a4180410c4 test-data/phase_out.tif
Binary file test-data/phase_out.tif has changed