Esempio n. 1
0
    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)
Esempio n. 2
0
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()