def run(self): global args, events, hist p = Parse(args.infile) data = None while True: if self._abort_flag: print("Worker aborted") return if self._pause_flag: time.sleep(0.1) continue try: data = p.next() except StopIteration: time.sleep(0.5) continue vals = integrate(data) e_summ, e_baseline = vals.summ, vals.bl if self._notify_window.ready: self._notify_window.ready = False wx.PostEvent(self._notify_window, DataReadyEvent(data)) sys.stderr.write("progress: %2.3f%%\n" % (100.0 * p.progress())) events.append(data) #TODO: if hist: hist.append(e_summ)
def main(): parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawTextHelpFormatter) parser.add_argument('infile', nargs='?', type=str, default='-', help="raw data file (stdin by default)") parser.add_argument('-o', '--outfile', type=lambda x: check_file_not_exists(parser, x), default=sys.stdout, metavar='FILE', help="redirect output to a file") parser.add_argument('-b','--baseline', type=str, default="0:20", metavar = 'A:B', help='a range for baseline samples (int means from the beginning, negative int means from the end)' ) parser.add_argument('-s','--signal', type=str, default=None, metavar = 'C:D', help='a range for signal samples to integrate (default: from baseline to the end, for negative baseline is from 0 to baseline)' ) parser.add_argument('--skip', type=int, default=0, metavar = 'N', help='skip first N events (useful if first timestamps are not consequent)') parser.add_argument('--csv', action='store_true', help='output as a .csv') parser.add_argument('--debug', action='store_true') parser.add_argument('--save-bl', action='store_true', help='save calculated baseline value') parser.add_argument('--save-bl-var', action='store_true', help='save baseline standard deviation (to estimate noise)') parser.add_argument('--save-min', action='store_true', help='save the value of absolute minimum') parser.add_argument('--save-max', action='store_true', help='save the value and the bin number of absolute maximum') parser.add_argument('--save-max-idx', action='store_true', help='save sample index of the maximum value') parser.add_argument('--save-len', action='store_true', help='save a number of values more than baseline around the maximum') parser.add_argument('--progress', action='store_true', help="print progress to stderr") args = parser.parse_args() global debug, nevents # --debug, --outfile debug = args.debug outfile = args.outfile # --baseline, --signal rbaseline = map(int, str.split(args.baseline, ':')) # acceptable values: "0:10", "10" , "-10", "-10:-5" if len(rbaseline) > 2: raise ValueError('rbaseline is a:b') if len(rbaseline) is 1: rbaseline = [0] + rbaseline # [10] -> [0,10] if args.signal: rsignal = map(int, str.split(args.signal, ':')) if len(rsignal) is 1: rsignal = [rbaseline[1] ] + rsignal else: rsignal = (rbaseline[1], None) # from just after baseline to the end # --infile infile = sys.stdin if args.infile != '-': try: infile = io.open(args.infile, 'rb') except IOError as e: sys.stderr.write('Err: ' + e.strerror+': "' + e.filename +'"\n') exit(e.errno) splitter = '\t' # --csv if args.csv: splitter = ';' # --skip skip = args.skip # Init parser try: p = Parse(infile) except ValueError as e: sys.stderr.write("Err: %s \n" % e) exit(1) # Catch Ctrl+C signal.signal(signal.SIGINT, fin) # Parse events nevents = 0 fields = list(Features._fields) if not args.save_max: fields.remove('max') if not args.save_min: fields.remove('min') if not args.save_max_idx: fields.remove('max_idx') if not args.save_bl: fields.remove('bl') if not args.save_bl_var: fields.remove('bl_var') if not args.save_len: fields.remove('len') # Print file header outfile.write('# ' + splitter.join(fields) +'\n') for event in p: nevents += 1 if skip and nevents <= skip: continue vals = rintegrate(event, rbaseline, rsignal, fields) if args.progress and (nevents % 10000 == 0): sys.stderr.write("progress: {0:.1f}%\r".format( 100.0 * p.progress())) vals = [getattr(vals, k) for k in fields ] line = splitter.join( map(str, vals) ) outfile.write(line + '\n') sys.stderr.write("{}: ".format(outfile.name)) fin()