def read_waveform(waveform_dir,
                  t_ref,
                  stat,
                  net,
                  baz,
                  channels=['BHU', 'BHV', 'BHW'],
                  location='03'):
    st = Stream()
    inv = read_inventory('inventory.xml')
    t_end = t_ref + t_post
    t_start = t_ref - t_pre
    for channel in channels:
        fnam = (pjoin(
            waveform_dir, channel + '.D', '%s.%s.%s.%s.D.%04d.%03d' %
            (net, stat, location, channel, t_ref.year, t_ref.julday)))
        st += read(fnam, starttime=t_start - 3600, endtime=t_end + 3600)
        # fnam = (pjoin(waveform_dir,
        #               channel+'.D',
        #               '%s.%s.%s.%s.D.%04d.%03d' %
        #               (net, stat, location, channel, t_ref.year, t_ref.julday+1)))
        # st += read(fnam, starttime=t_start-3600, endtime=t_end+3600)
    st.merge()
    st.remove_response(inv, pre_filt=(fmin * 0.8, fmin, 1. / 1.5, 1. / 2))
    st.differentiate()
    #st.filter('lowpass', freq=1. / 2., zerophase=True)
    #st.filter('highpass', freq=fmin, zerophase=True)
    st.trim(starttime=t_start, endtime=t_end)
    #st_ZNE = st.rotate(method='->ZNE', inventory=inv)
    st_ZNE = st._rotate_specific_channels_to_zne(
        network=net,
        station=stat,
        location='03',
        channels=['BHU', 'BHV', 'BHW'],
        inventory=inv)
    st_ZRT = st_ZNE.rotate(method='NE->RT', back_azimuth=baz)
    return st_ZRT