From 8c1be11274b028eda3f2fd4ddd80635a5ed1dfdd Mon Sep 17 00:00:00 2001
From: Christopher Schmied <schmied@mpi-cbg.de>
Date: Wed, 27 May 2015 15:07:40 +0200
Subject: [PATCH] Fixed bug in resave_hdf5 and hdf5_xml

calculation of job number is performed in export.bsh script
---
 spim_registration/timelapse/Snakefile         | 91 +++++++++++++++++--
 spim_registration/timelapse/export.bsh        | 22 ++++-
 spim_registration/timelapse/export_output.bsh | 84 +++++++++++++++++
 spim_registration/timelapse/tomancak_czi.json | 27 ++++++
 4 files changed, 213 insertions(+), 11 deletions(-)
 create mode 100755 spim_registration/timelapse/export_output.bsh

diff --git a/spim_registration/timelapse/Snakefile b/spim_registration/timelapse/Snakefile
index 1fd2528..c4f0b8c 100755
--- a/spim_registration/timelapse/Snakefile
+++ b/spim_registration/timelapse/Snakefile
@@ -70,7 +70,7 @@ rule define_xml_czi:
 	jdir=JOBDIR,
 	path_bsh=config["common"]["bsh_directory"] + config["define_xml_czi"]["bsh_file"])
 	
-	cmd_string += "> {log} 2>&1 && touch {output}"
+	cmd_string += "> {log} 2>&1"
         shell(cmd_string)
         
 # defining xml for tif dataset
@@ -104,7 +104,7 @@ rule define_xml_tif:
 	jdir=JOBDIR,
 	path_bsh=config["common"]["bsh_directory"] + config["define_xml_tif"]["bsh_file"])
 	
-	cmd_string +="> {log} 2>&1 && touch {output}"
+	cmd_string +="> {log} 2>&1"
 	shell(cmd_string)
 
 ruleorder: define_xml_tif > define_xml_czi 
@@ -113,7 +113,7 @@ ruleorder: define_xml_tif > define_xml_czi
 rule hdf5_xml:
     input: config["common"]["first_xml_filename"] + ".xml" 
     output: expand("{dataset}.{suffix}",dataset=[ config["common"]["hdf5_xml_filename"].strip('\"')], suffix=["xml","h5"]),
-            expand("{xml_base}-0{file_id}-00.h5_empty", xml_base=[ config["common"]["hdf5_xml_filename"].strip('\"') ],file_id=range(int(config["common"]["ntimepoints"]))) # problematic needs padding of file_id
+            expand("{xml_base}-0{file_id}-00.h5_empty", xml_base=[ config["common"]["hdf5_xml_filename"].strip('\"') ], file_id=range(int(config["common"]["ntimepoints"]))) # problematic needs padding of file_id
     log: "hdf5_xml.log"
     run:
         part_string = produce_string(
@@ -130,7 +130,8 @@ rule hdf5_xml:
                 -Dtimepoints_per_partition={timepoints_per_partition} \
                 -Dsetups_per_partition={setups_per_partition} \
                 -Drun_only_job_number=0 \
-                -- --no-splash {path_bsh}""", # the & submits everyting at once
+                -Djob_type=xml \
+                -- --no-splash {path_bsh}""", 
            config["common"],
            config["define_xml_czi"],
            config["resave_hdf5"],
@@ -142,10 +143,10 @@ rule hdf5_xml:
 
         #create dummy files according to the number of timepoints found
         for index in range(int(config["common"]["ntimepoints"])):
-           shell("touch {basename}-0{file_id}-00.h5_empty".format(basename=config["common"]["hdf5_xml_filename"], file_id=index)) # problematic needs padding of file_id
+           shell("touch {basename}-{file_id}-00.h5_empty".format(basename=config["common"]["hdf5_xml_filename"], file_id="%02d" % index)) # problematic needs padding of file_id
         
 
-# resave .czi dataset as hdf5	
+# resave  .czi/.tif dataset as hdf5	
 rule resave_hdf5:
     input: "{xml_base}-{file_id,\d+}-00.h5_empty" # rules.hdf5_xml.output
     output: "{xml_base}-{file_id,\d+}-00.h5"
@@ -166,6 +167,7 @@ rule resave_hdf5:
         -Dtimepoints_per_partition={timepoints_per_partition} \
         -Dsetups_per_partition={setups_per_partition} \
         -Drun_only_job_number={job_number} \
+        -Djob_type=hdf5 \
         -- --no-splash {path_bsh}""", # the & submits everyting at once
            config["common"],
            config["define_xml_czi"],
@@ -173,12 +175,12 @@ rule resave_hdf5:
            jdir=JOBDIR,
            path_bsh=config["common"]["bsh_directory"] + config["resave_hdf5"]["bsh_file"],
            input_xml_base="{wildcards.xml_base}",
-           job_number=int("{wildcards.file_id}")+1) # problematic calculation not possible in cannot deal wiht wildcards file_id
+           job_number="{wildcards.file_id}") # problematic calculation not possible in cannot deal wiht wildcards file_id
    	part_string += "> {log} 2>&1"
         shell(part_string) 
        	       	
 rule registration:
-    input:  "{xml_base}-{file_id}-00.h5" # rules.resave_hdf5.output 
+    input:  rules.resave_hdf5.output # "{xml_base}-{file_id,\d+}-00.h5" 
     #input: rules.resave_hdf5.output, "{xml_base}-{file_id}-00.h5"
     output: "{xml_base}-{file_id,\d+}-00.h5_registered", #"{xml_base}.job_{file_id,\d+}.xml"
     log: "{xml_base}-{file_id}-registration.log"
@@ -393,6 +395,77 @@ rule deconvolution:
         )
         cmd_string += "> {log} 2>&1 && touch {output}"
         shell(cmd_string)
-  
+        
+rule hdf5_output_define_xml:
+    input: glob.glob('*.tif'), "{xml_base}-{file_id,\d+}-00.h5_" + config["common"]["fusion_switch"]
+    output: config["hdf5_output"]["output_xml"] + ".xml"
+    message: "Execute define_xml_tif on the following files {input}"
+    log: "hdf5_output_define_xml.log"
+    run:
+        cmd_string = produce_string(
+        	"""{fiji-prefix} {fiji-app} \
+        -Dimage_file_directory={jdir} \
+        -Dtimepoints={output_timepoints} \
+        -Dchannels={output_channels} \
+        -Dimage_file_pattern={output_image_file_pattern} \
+        -Dpixel_distance_x={output_pixel_distance_x} \
+        -Dpixel_distance_y={output_pixel_distance_y} \
+        -Dpixel_distance_z={output_pixel_distance_z} \
+        -Dpixel_unit={output_pixel_unit} \
+       	-Dxml_filename={output_xml} \
+        -Dtype_of_dataset={output_type_of_dataset} \
+        -Dmultiple_timepoints={output_multiple_timepoints} \
+        -Dmultiple_channels={output_multiple_channels} \
+        -Dmultiple_illumination_directions={output_illumination_directions} \
+        -Dmultiple_angles={output_multiple_angles} \
+        -Dimglib_container={output_imglib_container} \
+	-- --no-splash {path_bsh}""",
+	config["common"],
+	config["hdf5_output"],
+	jdir=JOBDIR,
+	path_bsh=config["common"]["bsh_directory"] + config["define_xml_tif"]["bsh_file"])
+	
+	cmd_string +="> {log} 2>&1 && touch {output}"
+	shell(cmd_string)
+
+ruleorder: define_xml_tif > define_xml_czi 
+
+# create mother .xml/.h5
+rule hdf5_output_define_hdf5:
+    input: config["hdf5_output"]["output_xml"] + ".xml" 
+    output: expand("{dataset}.{suffix}",dataset=[ config["hdf5_output"]["output_hdf5_xml"].strip('\"')], suffix=["xml","h5"]),
+            expand("{xml_base}-{file_id}-00.h5_empty", xml_base=[ config["hdf5_output"]["output_hdf5_xml"].strip('\"') ],file_id=range(int(config["common"]["ntimepoints"]))) # problematic needs padding of file_id
+    log: "hdf5_output_define_hdf5.log"
+    run:
+        part_string = produce_string(
+        	"""{fiji-prefix} {fiji-app} \
+                -Dimage_file_directory={jdir} \
+                -Dfirst_xml_filename={output_xml} \
+                -Dhdf5_xml_filename={output_hdf5_xml} \
+                -Dresave_angle={resave_angle} \
+                -Dresave_channel={resave_channel} \
+                -Dresave_illumination={resave_illumination} \
+                -Dresave_timepoint={resave_timepoint} \
+                -Dsubsampling_factors={subsampling_factors} \
+                -Dhdf5_chunk_sizes={hdf5_chunk_sizes} \
+                -Dtimepoints_per_partition={timepoints_per_partition} \
+                -Dsetups_per_partition={setups_per_partition} \
+                -Drun_only_job_number=0 \
+                -Doutput_data_type={output_data_type} \
+                -- --no-splash {path_bsh}""", # the & submits everyting at once
+           config["common"],
+           config["define_xml_czi"],
+           config["resave_hdf5"],
+           config["hdf5_output"],
+           jdir=JOBDIR,
+           path_bsh=config["common"]["bsh_directory"] + config["resave_hdf5"]["bsh_file"])
+
+        part_string += "> {log} 2>&1"
+        shell(part_string)
+
+        #create dummy files according to the number of timepoints found
+        for index in range(int(config["common"]["ntimepoints"])):
+           shell("touch {basename}-{file_id}-00.h5_empty".format(basename=config["common"]["hdf5_xml_filename"], file_id="%02d" % index)) # problematic needs padding of file_id
+
 rule distclean:
     shell : "rm -rf *registered *tif *log *_deconvolved *.xml~* interestpoints "+str(" ".join(xml_merge_in))
diff --git a/spim_registration/timelapse/export.bsh b/spim_registration/timelapse/export.bsh
index ddfb174..6ba5f1c 100755
--- a/spim_registration/timelapse/export.bsh
+++ b/spim_registration/timelapse/export.bsh
@@ -45,14 +45,32 @@ subsampling_factors = System.getProperty( "subsampling_factors" );
 hdf5_chunk_sizes = System.getProperty( "hdf5_chunk_sizes" );
 timepoints_per_partition = System.getProperty( "timepoints_per_partition" );
 setups_per_partition = System.getProperty( "setups_per_partition" );
-int run_only_job_number =  Integer.parseInt( System.getProperty( "run_only_job_number" ) );
+
 
 System.out.println( "subsampling_factors=" + subsampling_factors);
 System.out.println( "hdf5_chunk_sizes=" + hdf5_chunk_sizes );
 System.out.println( "timepoints_per_partition=" + timepoints_per_partition );
 System.out.println( "setups_per_partition=" + setups_per_partition );
+
+
+// job switch
+
+int run_only_job_number =  Integer.parseInt( System.getProperty( "run_only_job_number" ) );
 System.out.println( "run_only_job_number=" + run_only_job_number );
 
+job_type = System.getProperty( "job_type" );
+System.out.println( "Job type = " + job_type );
+
+if ( job_type.equalsIgnoreCase( "xml" ) )
+	{
+		job_number = 0;
+	}
+else if ( job_type.equalsIgnoreCase( "hdf5" ) )
+	{
+		job_number = run_only_job_number + 1;
+	}
+
+
 // Activate cluster processing
 System.out.println("=========================================================");
 try{
@@ -80,7 +98,7 @@ IJ.run("As HDF5",
 	"split_hdf5 " +
 	"timepoints_per_partition=" + timepoints_per_partition + " " +
 	"setups_per_partition=" + setups_per_partition + " " +
-	"run_only_job_number=" + run_only_job_number + " " +
+	"run_only_job_number=" + job_number + " " +
 	"use_deflate_compression " +
 	"export_path=" + image_file_directory + hdf5_xml_filename );
 }
diff --git a/spim_registration/timelapse/export_output.bsh b/spim_registration/timelapse/export_output.bsh
new file mode 100755
index 0000000..e43fe32
--- /dev/null
+++ b/spim_registration/timelapse/export_output.bsh
@@ -0,0 +1,84 @@
+// Load Fiji dependencies
+import ij.IJ; 		// calls imagej
+import ij.Prefs; 	// calls imagej settings
+import ij.ImagePlus;
+import java.lang.Runtime;
+import java.io.File;
+import java.io.FilenameFilter;
+
+runtime = Runtime.getRuntime();
+System.out.println(runtime.availableProcessors() + " cores available for multi-threading");
+
+Prefs.setThreads(1); 	// defines the number of threads allowed 
+print("Threads: "+Prefs.getThreads()); // prints thread setting in output
+
+System.out.println("Start loading parameters");
+
+// Directory, and first .czi
+System.out.println("=========================================================");
+System.out.println("Directory:");
+image_file_directory = System.getProperty( "image_file_directory" );
+first_xml_filename = System.getProperty( "first_xml_filename" );
+hdf5_xml_filename = System.getProperty( "hdf5_xml_filename" );
+
+System.out.println( "dir=" + image_file_directory );
+System.out.println( "xml_filename=" + first_xml_filename );
+System.out.println( "hdf5_xml_filename=" + hdf5_xml_filename );
+
+// Dataset settings
+System.out.println("=========================================================");
+System.out.println("Dataset:");
+resave_angle = System.getProperty( "resave_angle" );
+resave_channel = System.getProperty( "resave_channel" );
+resave_illumination = System.getProperty( "resave_illumination" );
+resave_timepoint = System.getProperty( "resave_timepoint" );
+
+System.out.println( "resave_angle=" + resave_angle );
+System.out.println( "resave_channel=" + resave_channel );
+System.out.println( "resave_illumination=" + resave_illumination );
+System.out.println( "resave_timepoint=" + resave_timepoint);
+
+// Hdf5 settings
+System.out.println("=========================================================");
+System.out.println("Hdf5 settings:");
+subsampling_factors = System.getProperty( "subsampling_factors" );
+hdf5_chunk_sizes = System.getProperty( "hdf5_chunk_sizes" );
+timepoints_per_partition = System.getProperty( "timepoints_per_partition" );
+setups_per_partition = System.getProperty( "setups_per_partition" );
+run_only_job_number = System.getProperty( "run_only_job_number" );
+
+System.out.println( "subsampling_factors=" + subsampling_factors);
+System.out.println( "hdf5_chunk_sizes=" + hdf5_chunk_sizes );
+System.out.println( "timepoints_per_partition=" + timepoints_per_partition );
+System.out.println( "setups_per_partition=" + setups_per_partition );
+System.out.println( "run_only_job_number=" + run_only_job_number );
+
+// Add a switch for choosing between 16 or 32 bit
+
+// Activate cluster processing
+System.out.println("=========================================================");
+System.out.println("Cluster setting:");
+IJ.run("Toggle Cluster Processing", "display_cluster");
+
+// Executes Fiji plugin
+System.out.println("=========================================================");
+System.out.println("Start plugin:");
+IJ.run("As HDF5",
+	"select_xml=" + image_file_directory + first_xml_filename + ".xml " +
+	"resave_angle=[" + resave_angle + "] " +
+	"resave_channel=[" + resave_channel + "] " +
+	"resave_illumination=[" + resave_illumination + "] " +
+	"resave_timepoint=[" + resave_timepoint + "] " +
+	"manual_mipmap_setup " +
+	"subsampling_factors=[" + subsampling_factors + "] " +
+	"hdf5_chunk_sizes=[" + hdf5_chunk_sizes + "] " +
+	"split_hdf5 " +
+	"timepoints_per_partition=" + timepoints_per_partition + " " +
+	"setups_per_partition=" + setups_per_partition + " " +
+	"run_only_job_number=" + run_only_job_number + " " +
+	"use_deflate_compression " +
+	"export_path=" + image_file_directory + hdf5_xml_filename );
+
+/* shutdown */
+System.exit(0);
+
diff --git a/spim_registration/timelapse/tomancak_czi.json b/spim_registration/timelapse/tomancak_czi.json
index 9f01889..5a46e1c 100755
--- a/spim_registration/timelapse/tomancak_czi.json
+++ b/spim_registration/timelapse/tomancak_czi.json
@@ -171,6 +171,33 @@
 	"psf_size_x" : "19",
 	"psf_size_y" : "19",
 	"psf_size_z" : "25"
+    },
+    
+    "hdf5_output" :
+    {
+    	    "output_image_file_pattern" : "TP{t}_Ch{c}_Ill0_Ang0,72,144,216,288.tif",
+    	    "output_data_type" : "16Bit",
+    	    "output_xml" : "\"fused_Dual_Channel\"",
+    	    "output_hdf5_xml" : "\"hdf5_fused_Stock68\"",
+    	    "output_multiple_channels" : "\"NO (one channel)\"",	
+    	    "output_timepoints" : "0-1",
+    	    "output_channels" : "green",
+    	    "output_pixel_distance_x" : "0.5718", 	
+    	    "output_pixel_distance_y" : "0.5718", 	
+    	    "output_pixel_distance_z" : "0.5718", 	
+    	    "output_pixel_unit" : "um",			
+    	    "output_multiple_timepoints" : "\"YES (one file per time-point)\"",   	
+    	    "output_illumination_directions" : "\"NO (one illumination direction)\"",	
+    	    "output_multiple_angles" : "\"NO (one angle)\"",					
+    	    "output_type_of_dataset" : "\"Image Stacks (ImageJ Opener)\"", 		
+    	    "output_imglib_container" : "\"ArrayImg (faster)\"",
+    	    "fusion_output_export" : "/export_output.bsh", 	
+    	    "convert_32bit" : "\"[Use min/max of first image (might saturate intenities over time)]\""
+    	    
     }
+
+    
+    
+    
     
 }
-- 
GitLab