Ejemplo n.º 1
0
def filter_events_on_sync_time(data, st=None, mintime=0, maxtime=int(500e3),
    channel=0, marker = False):
    """
    delete all events (photons only) whose arrival times (= times after sync) are out of limits.
    note that the time unit is ps!
    """
    if len(data) == 0:
        return np.zeros((0, 3), dtype='u8'), np.array([], dtype='u8')

    mintime = int(mintime)
    maxtime = int(maxtime)

    t0 = time.time()
    print '* filtering time of channel-{:d} events ({:d}--{:d} ps)...'.format(channel, mintime, maxtime),
    
    delete_idxs = T2_tools.get_outofwindow_event_idxs(data, st, mintime, maxtime, channel, marker)
    print 'delete {} records...'.format(len(delete_idxs)),
    data = np.delete(data, delete_idxs, axis=0)
    
    if st != None:
        st = np.delete(st, delete_idxs)

    t1 = time.time() - t0 
    print 'done ({:.2f} s).'.format(t1)

    if st != None:
        return data, st
    else:
        return data
Ejemplo n.º 2
0
def get_sync_time(data):
    """
    Get for each record the time (in ps) since the last sync.
    """
    if len(data) == 0:
        return np.zeros((0, 3), dtype='u8')

    t0 = time.time()
    print '* get times relative to previous syncs... ',
    st = T2_tools.get_sync_time_ps(data)
    t1 = time.time() - t0 
    print 'done ({:.2f} s).'.format(t1)

    return st
Ejemplo n.º 3
0
def coincidences(data, max_tau=(5*11.6e6 + 1e6)):
    taus = T2_tools.get_coincidence_intervals(data, max_tau)

    # make a histogram with one bin per 10us (interval between fake photons)
    # such that expected coincidence intervals are centered in the bin
    h,e = np.histogram(taus * 1e-3, bins=np.arange(6)*11.6e3 - 11.6e3/2)

    print 
    print 'Coincidence intervals'
    print 'bin edges (ns): '
    print e
    print 'events:         '
    print h
    print 
Ejemplo n.º 4
0
def delete_solitary_syncs(data):
    """
    Delete all sync events that are followed directly by the next sync event,
    i.e., are useless.
    """
    if len(data) == 0:
        return np.zeros((0, 3), dtype='u8')

    t0 = time.time()
    print '* delete solitary syncs... ',
    idxs = T2_tools.delete_solitary_syncs(data)
    data = np.delete(data, idxs, axis=0)
    t1 = time.time() - t0 
    print 'done ({:.2f} s).'.format(t1)

    return data
Ejemplo n.º 5
0
    def measurement_loop(self):
        self.HH.start_T2_mode()
        self.HH.calibrate()
        rawdata_idx = 1
        t_ofl = 0
        t_lastsync = 0

        # note: for the live data, 32 bit is enough ('u4') since timing uses overflows.
        dset_hhtime = self.h5data.create_dataset('HH_time-{}'.format(rawdata_idx), 
            (0,), 'u8', maxshape=(None,))
        dset_hhchannel = self.h5data.create_dataset('HH_channel-{}'.format(rawdata_idx), 
            (0,), 'u1', maxshape=(None,))
        dset_hhspecial = self.h5data.create_dataset('HH_special-{}'.format(rawdata_idx), 
            (0,), 'u1', maxshape=(None,))
        dset_hhsynctime = self.h5data.create_dataset('HH_sync_time-{}'.format(rawdata_idx), 
            (0,), 'u8', maxshape=(None,))
        
        current_dset_length = 0

        self.HH.StartMeas(int(MSMT_TIME*1e3))

        while self.HH.get_MeasRunning():
            _length, _data = self.HH.get_TTTR_Data()
            
            if _length > 0:
                _t, _c, _s = self._HH_decode(_data[:_length])
                hhtime, hhchannel, hhspecial, sync_time, newlength, t_ofl, t_lastsync = \
                    T2_tools.LDE_live_filter(_t, _c, _s, t_ofl, t_lastsync)

                if newlength > 0:

                    dset_hhtime.resize((current_dset_length+newlength,))
                    dset_hhchannel.resize((current_dset_length+newlength,))
                    dset_hhspecial.resize((current_dset_length+newlength,))
                    dset_hhsynctime.resize((current_dset_length+newlength,))

                    dset_hhtime[current_dset_length:] = hhtime
                    dset_hhchannel[current_dset_length:] = hhchannel
                    dset_hhspecial[current_dset_length:] = hhspecial
                    dset_hhsynctime[current_dset_length:] = sync_time

                    current_dset_length += newlength
                    self.h5data.flush()
Ejemplo n.º 6
0
def convert_to_real_time(data, delete_ofls=True):
    """
    Change the event time of each record into the actual time (since starting)
    the measurment, given in ps.
    """
    if len(data) == 0:
        return np.zeros((0, 3), dtype='u8')

    t0 = time.time()
    print '* convert event time to real time... ',
    data = T2_tools.convert_to_real_time_ps(data)
    t1 = time.time() - t0 
    print 'done ({:.2f} s).'.format(t1)
    
    if delete_ofls:
        t0 = time.time()
        print '* delete overflows... ',
        data = np.delete(data, np.where(data[:,1]==63)[0], axis=0)
        t1 = time.time() - t0 
        print 'done ({:.2f} s).'.format(t1)

    return data
Ejemplo n.º 7
0
def delete_all_syncs(data, st=None):
    """
    Delete all sync events. We can do this after all sufficient pre-filtering has been done,
    after that all relevant timing information is in absolute time and sync time.
    """
    if len(data) == 0:
        return np.zeros((0, 3), dtype='u8'), np.array([], dtype='u8')

    t0 = time.time()
    print '* delete all syncs... ',
    
    delete_idxs = T2_tools.get_sync_idxs(data)
    data = np.delete(data, delete_idxs, axis=0)

    if st != None:
        st = np.delete(st, delete_idxs)

    t1 = time.time() - t0 
    print 'done ({:.2f} s).'.format(t1)

    if st != None:
        return data, st
    else:
        return data