def run(parser, args): # TODO: Move logging config to separate configuration file # TODO: use setup_logger here instead? # set up logging to file for DEBUG messages and above logging.basicConfig( level=logging.DEBUG, # TODO: args.log_format format="%(levelname)s %(asctime)s %(name)s %(message)s", filename=args.log_file, filemode="w", ) # define a Handler that writes INFO messages or higher to the sys.stderr console = logging.StreamHandler() console.setLevel(logging.INFO) # set a format which is simpler for console use formatter = logging.Formatter(args.log_format) console.setFormatter(formatter) # add the handler to the root logger logging.getLogger("").addHandler(console) # Start by logging sys.argv and the parameters used logger = logging.getLogger("Manager") # logger = setup_logger(__name__, args.log_format, log_file=args.log_file, level=logging.INFO) logger.info(" ".join(sys.argv)) print_args(args, logger=logger) read_until_client = read_until.ReadUntilClient( mk_host=args.host, mk_port=args.port, device=args.device, # one_chunk=args.one_chunk, filter_strands=True, # TODO: test cache_type by passing a function here cache_type=args.read_cache, cache_size=args.cache_size, ) analysis_worker = functools.partial( simple_analysis, client=read_until_client, batch_size=args.batch_size, throttle=args.throttle, unblock_duration=args.unblock_duration, ) results = run_workflow( client=read_until_client, partial_analysis_func=analysis_worker, n_workers=args.workers, run_time=args.run_time, runner_kwargs={ # "min_chunk_size": args.min_chunk_size, "first_channel": args.channels[0], "last_channel": args.channels[-1], }, )
def main(): extra_args = ( ( "--toml", dict( metavar="TOML", required=True, help="TOML file specifying experimental parameters", ), ), ("--paf-log", dict( help="PAF log", default="paflog.log", )), ("--chunk-log", dict( help="Chunk log", default="chunk_log.log", )), ) parser, args = get_parser(extra_args=extra_args, file=__file__) # set up logging to file for DEBUG messages and above logging.basicConfig( level=logging.DEBUG, format="%(asctime)s %(name)s %(message)s", filename=args.log_file, filemode="w", ) # define a Handler that writes INFO messages or higher to the sys.stderr console = logging.StreamHandler() console.setLevel(logging.INFO) # set a format which is simpler for console use formatter = logging.Formatter(args.log_format) console.setFormatter(formatter) # add the handler to the root logger logging.getLogger("").addHandler(console) # Start by logging sys.argv and the parameters used logger = logging.getLogger("Manager") logger.info(" ".join(sys.argv)) print_args(args, logger=logger) # Setup chunk and paf logs chunk_logger = setup_logger("DEC", log_file=args.chunk_log) paf_logger = setup_logger("PAF", log_file=args.paf_log) # Parse configuration TOML # TODO: num_channels is not configurable here, should be inferred from client run_info, conditions, reference, caller_kwargs = get_run_info( args.toml, num_channels=512) live_toml = Path("{}_live".format(args.toml)) # Load Minimap2 index logger.info("Initialising minimap2 mapper") mapper = CustomMapper(reference) logger.info("Mapper initialised") read_until_client = read_until.ReadUntilClient( mk_host=args.host, mk_port=args.port, device=args.device, # one_chunk=args.one_chunk, filter_strands=True, # TODO: test cache_type by passing a function here cache_type=args.read_cache, cache_size=args.cache_size, ) send_message( read_until_client.connection, "Read Until is controlling sequencing on this device. You use it at your own risk.", Severity.WARN, ) for message, sev in describe_experiment(conditions, mapper): logger.info(message) send_message( read_until_client.connection, message, sev, ) """ This experiment has N regions on the flowcell. using reference: /path/to/ref.mmi Region i:NAME (control=bool) has X targets of which Y are found in the reference. reads will be unblocked when [u,v], sequenced when [w,x] and polled for more data when [y,z]. """ # FIXME: currently flowcell size is not included, this should be pulled from # the read_until_client analysis_worker = functools.partial( simple_analysis, read_until_client, unblock_duration=args.unblock_duration, throttle=args.throttle, batch_size=args.batch_size, cl=chunk_logger, pf=paf_logger, live_toml_path=live_toml, dry_run=args.dry_run, run_info=run_info, conditions=conditions, mapper=mapper, caller_kwargs=caller_kwargs, ) results = run_workflow( read_until_client, analysis_worker, args.workers, args.run_time, runner_kwargs={ # "min_chunk_size": args.min_chunk_size, "first_channel": min(args.channels), "last_channel": max(args.channels), }, ) # No results returned send_message( read_until_client.connection, "Read Until is disconnected from this device. Sequencing will proceed normally.", Severity.WARN, )
def main(): extra_args = ( ( "--toml", dict( metavar="TOML", required=True, help="TOML file specifying experimental parameters", ), ), ( "--chunk-log", dict( help="Chunk log", default="chunk_log.log", ) ), ) parser, args = get_parser(extra_args=extra_args, file=__file__) # TODO: Move logging config to separate configuration file # set up logging to file for DEBUG messages and above logging.basicConfig( level=logging.DEBUG, format="%(asctime)s %(name)s %(message)s", filename=args.log_file, filemode="w", ) # define a Handler that writes INFO messages or higher to the sys.stderr console = logging.StreamHandler() console.setLevel(logging.INFO) # set a format which is simpler for console use formatter = logging.Formatter(args.log_format) console.setFormatter(formatter) # add the handler to the root logger logging.getLogger("").addHandler(console) # Start by logging sys.argv and the parameters used logger = logging.getLogger("Manager") logger.info(" ".join(sys.argv)) print_args(args, logger=logger) read_until_client = read_until.ReadUntilClient( mk_host=args.host, mk_port=args.port, device=args.device, # one_chunk=args.one_chunk, filter_strands=True, # TODO: test cache_type by passing a function here cache_type=args.read_cache, cache_size=args.cache_size, ) # FIXME: currently flowcell size is not included, this should be pulled from # the read_until_client analysis_worker = functools.partial( simple_analysis, read_until_client, unblock_duration=args.unblock_duration, throttle=args.throttle, batch_size=args.batch_size, chunk_log=args.chunk_log, toml_path=args.toml, dry_run=args.dry_run, ) results = run_workflow( read_until_client, analysis_worker, args.workers, args.run_time, runner_kwargs={ # "min_chunk_size": args.min_chunk_size, "first_channel": min(args.channels), "last_channel": max(args.channels), }, )