def assemble(filepairs, dname): dat_all = [] for fp in filepairs: bfn = os.path.join(dname, fp[0]) afn = os.path.join(dname, fp[1]) dbin = io.read(bfn).getElements("Data")[0] daos = io.read(afn).getElements("Data")[0] trig= dbin.getData()[:,TRIGCHAN] ind = argmax(trig[1:] - trig[:-1])+1 mfd = dbin.getData()[ind:,MFCHAN] dbin.datinit(mfd, {"SampleType":"timeseries", "StartTime":0.0, "Labels":["MicroFlownVoltage"], "SamplesPerSecond":dbin.fs()}) tsd = smooth(daos.getData(),daos.attrib("SamplesPerSecond")) #remove clicks BEFORE resampling daos.datinit(tsd, {"SampleType":"timeseries", "StartTime":0.0, "Labels":["HairPosition"], "SamplesPerSecond":daos.fs()}) resample(dbin, SIGFS) resample(daos, SIGFS) dat2 = dbin.getData() dat1 = daos.getData() if dat1.shape[0] < dat2.shape[0]: dat2 = dat2[:dat1.shape[0]] elif dat1.shape[0] > dat2.shape[0]: dat1 = dat1[:dat2.shape[0]] dat1 -= dat1.mean() dat2 -= dat2.mean() dd = column_stack([dat1, dat2]) dat_all.append(dd) dat = row_stack(dat_all) ds = miendata.newData(dat, {'SampleType':'timeseries', 'SamplesPerSecond':SIGFS, 'StartTime':0.0, "Labels":['HairPosition', 'MicroFlownVoltage']}) return ds
def knit(dname): if os.path.isfile(os.path.join(dname, 'concat_ex.mdat')): os.unlink(os.path.join(dname, 'concat_ex.mdat')) if os.path.isfile(os.path.join(dname, 'concat.mdat')): os.unlink(os.path.join(dname, 'concat.mdat')) print("=== processing directory %s ===" % dname) dat_all = [] dat_ex = [] mf_allch = [] mdat = [f for f in os.listdir(dname) if f.endswith("_ts.mdat")] date = mdat[0][:10] if all([f[:10] == date for f in mdat]): if os.path.isfile(os.path.join(dname, date+'concat_ex.mdat')): os.unlink(os.path.join(dname, date+'concat_ex.mdat')) if os.path.isfile(os.path.join(dname, date+'concat.mdat')): os.unlink(os.path.join(dname, date+'concat.mdat')) else: print "Multiple experiments present -- aborting. Put separate experiments in different folders." return None bin = [f for f in os.listdir(dname) if f.endswith(".bin")] for f in mdat: ff1=os.path.join(dname, f) f2 = getMatch(f[:-8], bin) if not f2: print("can't match %s" % (f,)) continue ff2 = os.path.join(dname, f2) print("adding file pair %s, %s" % (f, f2)) dat1 = io.read(ff1).getElements("Data")[0] dat2 = io.read(ff2).getElements("Data")[0] dat2 = cropMicroflown(dat2) # crpd = dat2.getData() # ds = miendata.newData(crpd, {'SampleType':'timeseries', 'SamplesPerSecond':10000}) # doc = nmpml.blankDocument() # doc.newElement(ds) # io.write(doc, os.path.join(dname, 'crpd.mdat')) resample(dat1, 1000) resample(dat2, 1000) dat1 = dat1.getData() dat2 = dat2.getData()[:,2] if dat1.shape[0] < dat2.shape[0]: dat2 = dat2[:dat1.shape[0]] elif dat1.shape[0] > dat2.shape[0]: dat1 = dat1[:dat2.shape[0]] dat1 -= dat1.mean() dat2 -= dat2.mean() dd = column_stack([dat1, dat2]) dat_all.append(dd) if not any([q in f.lower() for q in EXCLUDE]): dat_ex.append(dd) dat = row_stack(dat_all) ds = miendata.newData(dat, {'SampleType':'timeseries', 'SamplesPerSecond':1000}) doc = nmpml.blankDocument() doc.newElement(ds) io.write(doc, os.path.join(dname, date+'concat.mdat')) if len(dat_ex) < len(dat_all): dat = row_stack(dat_ex) ds.datinit(dat) io.write(doc, os.path.join(dname, date+'concat_ex.mdat'))