def main(args=None): '''Run CellProfiler args - command-line arguments, e.g. sys.argv ''' if args is None: args = sys.argv import cellprofiler.preferences as cpprefs cpprefs.set_awt_headless(True) exit_code = 0 switches = ('--work-announce', '--knime-bridge-address') if any( [any([arg.startswith(switch) for switch in switches]) for arg in args]): # # Go headless ASAP # cpprefs.set_headless() for i, arg in enumerate(args): if arg == "--ij-plugins-directory" and len(args) > i + 1: cpprefs.set_ij_plugin_directory(args[i + 1]) break import cellprofiler.worker cellprofiler.worker.aw_parse_args() cellprofiler.worker.main() sys.exit(exit_code) options, args = parse_args(args) if options.print_version: from cellprofiler.utilities.version import \ dotted_version, version_string, git_hash, version_number print "CellProfiler %s" % dotted_version print "Git %s" % git_hash print "Version %s" % version_number print "Built %s" % version_string.split(" ")[0] sys.exit(exit_code) # # Important to go headless ASAP # if (not options.show_gui) or options.write_schema_and_exit: import cellprofiler.preferences as cpprefs cpprefs.set_headless() # What's there to do but run if you're running headless? # Might want to change later if there's some headless setup options.run_pipeline = True if options.jvm_heap_size is not None: from cellprofiler.preferences import set_jvm_heap_mb set_jvm_heap_mb(options.jvm_heap_size, False) set_log_level(options) if options.print_groups_file is not None: print_groups(options.print_groups_file) return if options.batch_commands_file is not None: get_batch_commands(options.batch_commands_file) return if options.add_message_for_user: if len(args) != 3: sys.stderr.write("Usage: (for add_message-for-user)\n") sys.stderr.write( "CellProfiler --add-message-for-user <caption> <message> <pipeline-or-project>\n" ) sys.stderr.write("where:\n") sys.stderr.write(" <caption> - the message box caption\n") sys.stderr.write( " <message> - the message displayed inside the message box\n" ) sys.stderr.write( " <pipeline-or-project> - the path to the pipeline or project file to modify\n" ) return caption = args[0] message = args[1] path = args[2] import h5py using_hdf5 = h5py.is_hdf5(path) if using_hdf5: import cellprofiler.measurement as cpmeas m = cpmeas.Measurements(filename=path, mode="r+") pipeline_text = m[cpmeas.EXPERIMENT, "Pipeline_Pipeline"] else: with open(path, "r") as fd: pipeline_text = fd.read() header, body = pipeline_text.split("\n\n", 1) pipeline_text = header + \ ("\nMessageForUser:%s|%s\n\n" % (caption, message)) + body if using_hdf5: m[cpmeas.EXPERIMENT, "Pipeline_Pipeline"] = pipeline_text m.close() else: with open(path, "w") as fd: fd.write(pipeline_text) print "Message added to %s" % path return # necessary to prevent matplotlib trying to use Tkinter as its backend. # has to be done before CellProfilerApp is imported from matplotlib import use as mpluse mpluse('WXAgg') if options.omero_credentials is not None: set_omero_credentials_from_string(options.omero_credentials) if options.plugins_directory is not None: cpprefs.set_plugin_directory(options.plugins_directory, globally=False) if options.ij_plugins_directory is not None: cpprefs.set_ij_plugin_directory(options.ij_plugins_directory, globally=False) if options.temp_dir is not None: if not os.path.exists(options.temp_dir): os.makedirs(options.temp_dir) cpprefs.set_temporary_directory(options.temp_dir, globally=False) if not options.allow_schema_write: cpprefs.set_allow_schema_write(False) # # After the crucial preferences are established, we can start the VM # from cellprofiler.utilities.cpjvm import cp_start_vm cp_start_vm() # # Not so crucial preferences... # if options.image_set_file is not None: cpprefs.set_image_set_file(options.image_set_file) try: # --------------------------------------- # # Handle command-line tasks that that need to load the modules to run # if options.output_html: from cellprofiler.gui.html.manual import generate_html webpage_path = options.output_directory if options.output_directory else None generate_html(webpage_path) return if options.print_measurements: print_measurements(options) return if not hasattr(sys, "frozen") and options.code_statistics: print_code_statistics() return if options.write_schema_and_exit: write_schema(options.pipeline_filename) return # # ------------------------------------------ if options.show_gui: import wx wx.Log.EnableLogging(False) from cellprofiler.gui.app import App from cellprofiler.workspace import is_workspace_file if options.pipeline_filename: if is_workspace_file(options.pipeline_filename): workspace_path = os.path.expanduser( options.pipeline_filename) pipeline_path = None else: pipeline_path = os.path.expanduser( options.pipeline_filename) workspace_path = None elif options.new_project: workspace_path = False pipeline_path = None else: workspace_path = None pipeline_path = None app = App(0, workspace_path=workspace_path, pipeline_path=pipeline_path) if options.data_file is not None: cpprefs.set_data_file(os.path.abspath(options.data_file)) from cellprofiler.utilities.version import version_string, version_number logging.root.info("Version: %s / %d" % (version_string, version_number)) if options.run_pipeline and not options.pipeline_filename: raise ValueError("You must specify a pipeline filename to run") if options.output_directory: if not os.path.exists(options.output_directory): os.makedirs(options.output_directory) cpprefs.set_default_output_directory(options.output_directory) if options.image_directory: cpprefs.set_default_image_directory(options.image_directory) if options.show_gui: if options.run_pipeline: app.frame.pipeline_controller.do_analyze_images() app.MainLoop() return elif options.run_pipeline: run_pipeline_headless(options, args) except Exception, e: logging.root.fatal("Uncaught exception in CellProfiler.py", exc_info=True) exit_code = -1
def main(args): '''Run CellProfiler args - command-line arguments, e.g. sys.argv ''' import cellprofiler.preferences as cpprefs cpprefs.set_awt_headless(True) switches = ('--work-announce', '--knime-bridge-address') if any([any([arg.startswith(switch) for switch in switches]) for arg in args]): # # Go headless ASAP # cpprefs.set_headless() for i, arg in enumerate(args): if arg == "--ij-plugins-directory" and len(args) > i+1: cpprefs.set_ij_plugin_directory(args[i+1]) break import cellprofiler.analysis_worker cellprofiler.analysis_worker.aw_parse_args() cellprofiler.analysis_worker.main() sys.exit(0) if any([arg.startswith('--xml-test-file=') for arg in sys.argv]): import cpnose cpnose.main(*sys.argv) return options, args = parse_args(args) if options.print_version: from cellprofiler.utilities.version import \ dotted_version, version_string, git_hash, version_number print "CellProfiler %s" % dotted_version print "Git %s" % git_hash print "Version %s" % version_number print "Built %s" % version_string.split(" ")[0] sys.exit(0) # # Important to go headless ASAP # if (not options.show_gui) or options.write_schema_and_exit: import cellprofiler.preferences as cpprefs cpprefs.set_headless() # What's there to do but run if you're running headless? # Might want to change later if there's some headless setup options.run_pipeline = True if options.jvm_heap_size is not None: from cellprofiler.preferences import set_jvm_heap_mb set_jvm_heap_mb(options.jvm_heap_size, False) set_log_level(options) if options.print_groups_file is not None: print_groups(options.print_groups_file) return if options.batch_commands_file is not None: get_batch_commands(options.batch_commands_file) return if options.run_ilastik: run_ilastik() return if options.add_message_for_user: if len(args) != 3: sys.stderr.write("Usage: (for add_message-for-user)\n") sys.stderr.write("CellProfiler --add-message-for-user <caption> <message> <pipeline-or-project>\n") sys.stderr.write("where:\n") sys.stderr.write(" <caption> - the message box caption\n") sys.stderr.write(" <message> - the message displayed inside the message box\n") sys.stderr.write(" <pipeline-or-project> - the path to the pipeline or project file to modify\n") return caption = args[0] message = args[1] path = args[2] import h5py using_hdf5 = h5py.is_hdf5(path) if using_hdf5: import cellprofiler.measurements as cpmeas m = cpmeas.Measurements( filename = path, mode="r+") pipeline_text = m[cpmeas.EXPERIMENT, "Pipeline_Pipeline"] else: with open(path, "r") as fd: pipeline_text = fd.read() header, body = pipeline_text.split("\n\n", 1) pipeline_text = header + \ ("\nMessageForUser:%s|%s\n\n" % (caption, message)) + body if using_hdf5: m[cpmeas.EXPERIMENT, "Pipeline_Pipeline"] = pipeline_text m.close() else: with open(path, "w") as fd: fd.write(pipeline_text) print "Message added to %s" % path return # necessary to prevent matplotlib trying to use Tkinter as its backend. # has to be done before CellProfilerApp is imported from matplotlib import use as mpluse mpluse('WXAgg') if (not hasattr(sys, 'frozen')) and options.fetch_external_dependencies: import external_dependencies external_dependencies.fetch_external_dependencies(options.overwrite_external_dependencies) if (not hasattr(sys, 'frozen')) and options.build_extensions: build_extensions() if options.build_and_exit: return if options.omero_credentials is not None: set_omero_credentials_from_string(options.omero_credentials) if options.plugins_directory is not None: cpprefs.set_plugin_directory(options.plugins_directory, globally=False) if options.ij_plugins_directory is not None: cpprefs.set_ij_plugin_directory(options.ij_plugins_directory, globally=False) if options.temp_dir is not None: if not os.path.exists(options.temp_dir): os.makedirs(options.temp_dir) cpprefs.set_temporary_directory(options.temp_dir, globally=False) if not options.allow_schema_write: cpprefs.set_allow_schema_write(False) # # After the crucial preferences are established, we can start the VM # from cellprofiler.utilities.cpjvm import cp_start_vm, cp_stop_vm cp_start_vm() # # Not so crucial preferences... # if options.image_set_file is not None: cpprefs.set_image_set_file(options.image_set_file) try: #--------------------------------------- # # Handle command-line tasks that that need to load the modules to run # if options.output_html: from cellprofiler.gui.html.manual import generate_html webpage_path = options.output_directory if options.output_directory else None generate_html(webpage_path) return if options.print_measurements: print_measurements(options) return if not hasattr(sys, "frozen") and options.code_statistics: print_code_statistics() return if options.write_schema_and_exit: write_schema(options.pipeline_filename) return # #------------------------------------------ if options.show_gui: import wx wx.Log.EnableLogging(False) from cellprofiler.cellprofilerapp import CellProfilerApp from cellprofiler.workspace import is_workspace_file show_splashbox = (options.pipeline_filename is None and (not options.new_project) and options.show_splashbox) if options.pipeline_filename: if is_workspace_file(options.pipeline_filename): workspace_path = os.path.expanduser(options.pipeline_filename) pipeline_path = None else: pipeline_path = os.path.expanduser(options.pipeline_filename) workspace_path = None elif options.new_project: workspace_path = False pipeline_path = None else: workspace_path = None pipeline_path = None App = CellProfilerApp( 0, check_for_new_version = (options.pipeline_filename is None), show_splashbox = show_splashbox, workspace_path = workspace_path, pipeline_path = pipeline_path) if options.data_file is not None: cpprefs.set_data_file(os.path.abspath(options.data_file)) from cellprofiler.utilities.version import version_string, version_number logging.root.info("Version: %s / %d" % (version_string, version_number)) if options.run_pipeline and not options.pipeline_filename: raise ValueError("You must specify a pipeline filename to run") if options.output_directory: if not os.path.exists(options.output_directory): os.makedirs(options.output_directory) cpprefs.set_default_output_directory(options.output_directory) if options.image_directory: cpprefs.set_default_image_directory(options.image_directory) if options.show_gui: if options.run_pipeline: App.frame.pipeline_controller.do_analyze_images() App.MainLoop() return elif options.run_pipeline: run_pipeline_headless(options, args) except Exception, e: logging.root.fatal("Uncaught exception in CellProfiler.py", exc_info=True) raise
import logging.config logging.root.setLevel(logging.INFO) if len(logging.root.handlers) == 0: logging.root.addHandler(logging.StreamHandler()) import os import uuid import csv import matplotlib matplotlib.use('Agg') import Image import cellprofiler.preferences as cpprefs cpprefs.set_headless() # ASAP cpprefs.set_allow_schema_write(False) from cellprofiler.pipeline import Pipeline from cellprofiler.utilities.cpjvm import cp_start_vm, cp_stop_vm import pydoop.mapreduce.api as api import pydoop.mapreduce.pipes as pp from pydoop.avrolib import AvroContext from pyfeatures.bioimg import BioImgPlane # basename of the pipeline file, to be uploaded via distributed cache PIPELINE_BN = 'it.crs4.features.cppipe' # --- FIXME: the following info should be extracted from the pipeline file CHANNEL_TAGS = ['D.TIF', 'F.TIF', 'R.TIF'] SET_SIZE = len(CHANNEL_TAGS)