def create_new_filterbank(fnfil, telescope='Apertif'): if telescope in ('ASKAP', 'Askap', 'askap'): filhdr = filhdr_ASKAP elif telescope in ('Apertif', 'APERTIF', 'apertif'): filhdr = filhdr_Apertif elif telescope in ('CHIME', 'Chime', 'chime'): filhdr = filhdr_CHIME else: raise ValueError("Could not find telescope name") try: import sigproc filhdr['rawdatafile'] = fnfil newhdr = "" newhdr += sigproc.addto_hdr("HEADER_START", None) for k, v in filhdr.items(): newhdr += sigproc.addto_hdr(k, v) newhdr += sigproc.addto_hdr("HEADER_END", None) print("Writing new header to '%s'" % fnfil) outfile = open(fnfil, 'wb') outfile.write(newhdr) spectrum = np.zeros([filhdr['nchans']], dtype=np.uint8) outfile.write(spectrum) outfile.close() except: print("Either could not load sigproc or create filterbank")
def create_filterbank_file(outfn, header, spectra=None, nbits=8, verbose=False): """Write filterbank header and spectra to file. Input: outfn: The outfile filterbank file's name. header: A dictionary of header paramters and values. spectra: Spectra to write to file. (Default: don't write any spectra - i.e. write out header only) nbits: The number of bits per sample of the filterbank file. (Default: 8 - i.e. each sample is an 8-bit integer) verbose: If True, be verbose (Default: be quiet) Output: fbfile: The resulting FilterbankFile object opened in read-write mode. """ dtype = get_dtype(nbits) # Get dtype. This will check to ensure # 'nbits' is valid. header['nbits'] = nbits outfile = open(outfn, 'wb') outfile.write(sigproc.addto_hdr("HEADER_START", None)) for paramname in header.keys(): if verbose: print "Writing header param (%s)" % paramname value = header[paramname] outfile.write(sigproc.addto_hdr(paramname, value)) outfile.write(sigproc.addto_hdr("HEADER_END", None)) if spectra: spectra.flatten().astype(dtype).tofile(outfile) outfile.close() return FilterbankFile(outfn, read_only=False)
def create_new_filterbank(fnh5, fn_fil_out, telescope='LOFAR'): f = h5py.File(fnh5,'r') dt=f['SUB_ARRAY_POINTING_000/BEAM_000/COORDINATES/COORDINATE_0/'].attrs['INCREMENT'] freqaxis=f['SUB_ARRAY_POINTING_000/BEAM_000/COORDINATES/COORDINATE_1/'].attrs['AXIS_VALUES_WORLD'] freqaxis *= 1e-6 nchans=len(freqaxis) foff=np.diff(freqaxis)[0] filhdr['tsamp'] = dt filhdr['nchans'] = nchans filhdr['fch1'] = freqaxis[-1] filhdr['foff'] = foff filhdr['nbits'] = 32 print(filhdr) print(freqaxis) try: import sigproc filhdr['rawdatafile'] = fn_fil_out newhdr = "" newhdr += sigproc.addto_hdr("HEADER_START", None) for k,v in filhdr.items(): newhdr += sigproc.addto_hdr(k, v) newhdr += sigproc.addto_hdr("HEADER_END", None) print("Writing new header to '%s'" % fn_fil_out) outfile = open(fn_fil_out, 'wb') outfile.write(newhdr) spectrum = np.zeros([filhdr['nchans']], dtype='f4') outfile.write(spectrum) outfile.close() except: print("Either could not load sigproc or create filterbank")
def create_filterbank_file(outfn, header, spectra=None, nbits=8, \ verbose=False, mode='append'): """Write filterbank header and spectra to file. Input: outfn: The outfile filterbank file's name. header: A dictionary of header paramters and values. spectra: Spectra to write to file. (Default: don't write any spectra - i.e. write out header only) nbits: The number of bits per sample of the filterbank file. This value always overrides the value in the header dictionary. (Default: 8 - i.e. each sample is an 8-bit integer) verbose: If True, be verbose (Default: be quiet) mode: Mode for writing (can be 'append' or 'write') Output: fbfile: The resulting FilterbankFile object opened in read-write mode. """ dtype = get_dtype(nbits) # Get dtype. This will check to ensure # 'nbits' is valid. header['nbits'] = nbits outfile = open(outfn, 'wb') outfile.write(sigproc.addto_hdr("HEADER_START", None)) for paramname in header.keys(): if paramname not in sigproc.header_params: # Only add recognized parameters continue if verbose: print "Writing header param (%s)" % paramname value = header[paramname] outfile.write(sigproc.addto_hdr(paramname, value)) outfile.write(sigproc.addto_hdr("HEADER_END", None)) if spectra is not None: spectra.flatten().astype(dtype).tofile(outfile) outfile.close() return FilterbankFile(outfn, mode=mode)
def write_header(outfbfile, header_params, header): """Given list of input filterbank objects and an output file object write the new filterbank header. """ for hp in header_params: hdrval = sigproc.addto_hdr(hp, header[hp]) outfbfile.write(hdrval)
def write_header(outfbfile, header_params, header): """Given list of header flags and values and an output file object write the new filterbank header. """ for hp in header_params: hdrval = sigproc.addto_hdr(hp, header[hp]) outfbfile.write(hdrval)
def create_new_filterbank(fnfil): try: import sigproc newhdr = "" newhdr += sigproc.addto_hdr("HEADER_START", None) for k, v in filhdr.items(): newhdr += sigproc.addto_hdr(k, v) newhdr += sigproc.addto_hdr("HEADER_END", None) print("Writing new header to '%s'" % fnfil) outfile = open(fnfil, 'wb') outfile.write(newhdr) spectrum = np.zeros([filhdr['nchans']], dtype=np.uint8) outfile.write(spectrum) outfile.close() except: print("Either could not load sigproc or create filterbank")
def write_header(infbfiles, outfbfile): """Given list of input filterbank objects and an output file object write the new filterbank header. """ infbfiles = sort_fb_files(infbfiles) for hp in infbfiles[0].header_params: if hp == 'nchans': val = sum([f.header['nchans'] for f in infbfiles]) else: val = infbfiles[0].header[hp] hdrval = sigproc.addto_hdr(hp, val) outfbfile.write(hdrval)
infile.seek(0, 2) infilelen = infile.tell() infile.seek(0, 0) outfile = open(basefilenm+"_DS%d.fil"%DS_fact, 'wb') # Loop over the values in the .fil file while 1: param, val = sigproc.read_hdr_val(infile, stdout=False) filhdr[param] = val if param=="tsamp": val *= DS_fact # Append to the new hdr string newhdr += sigproc.addto_hdr(param, val) # Break out of the loop if the header is over if param=="HEADER_END": break # Write the new header to the output file outfile.write(newhdr) nchans = filhdr['nchans'] # Remove the header length from infilelen and then # determine how many spectra are in the file infilelen -= infile.tell() numspec = infilelen / nchans if infilelen % nchans: