#!/usr/bin/env python # -*- coding: utf-8 -*- # # Split stream according to an external mask # # Copyright © 2014-2020 Deutsches Elektronen-Synchrotron DESY, # a research centre of the Helmholtz Association. # # Author: # 2014-2017 Thomas White # import sys import optparse from collections import deque import h5py import re prog = re.compile("^\s+([\d-]+)\s+([\d-]+)\s+([\d-]+)\s+[\d\.\-]+\s+[\d\.\-]+\s+[\d\.\-]+\s+[\d\.\-]+\s+([\d\.]+)\s+([\d\.]+)") def process_refln(fline, g, h, mask): match = prog.match(fline) if not match: print('Line not understood, WTF? {}'.format(fline)) return fs = int(round(float(match.group(4)))) ss = int(round(float(match.group(5)))) m = mask[ss][fs] if m: g.write(fline) else: h.write(fline) op = optparse.OptionParser() op.add_option('', '--input', action='store', type='string', dest='ifn', help="Input stream") op.add_option('', '--output1', action='store', type='string', dest='ofn1', help="Output stream", default='mask-split.stream1') op.add_option('', '--output2', action='store', type='string', dest='ofn2', help="Output stream", default='mask-split.stream2') op.add_option('', '--mask', action='store', type='string', dest='mask_fn', help="Filename of mask", default='mask.h5') opt,arg = op.parse_args(sys.argv) if not opt.ifn: print("You need at least --input") exit(1) f = open(opt.ifn, 'r') g = open(opt.ofn1, 'w') h = open(opt.ofn2, 'w') fh = h5py.File(opt.mask_fn, 'r') mask = fh['/data/data'].value fh.close() in_refl = 0 while True: fline = f.readline() if not fline: break if fline.find("End of reflections") != -1: in_refl = 0 if in_refl == 1: process_refln(fline, g, h, mask) else: g.write(fline) h.write(fline) if in_refl == 2: in_refl = 1 if fline.find("Reflections measured after indexing") != -1: in_refl = 2 f.close() g.close()