Source code for tools21cm.irate_file

from . import const
import numpy as np
from .helper_functions import print_msg

[docs] class IonRateFile: ''' A C2Ray IonRates3 file. Use the read_from_file method to load an IonRates3 file, or pass the filename to the constructor. Attributes: irate (numpy array): the ionization rate z (float): the redshift of the file (-1 if it couldn't be determined from the file name) ''' def __init__(self, filename = None, old_format=False, binary_format=False): ''' Initialize the file. If filename is given, read data. Otherwise, do nothing. Parameters: filename = None (string): the file to read from. old_format = False (bool): whether to use the old-style file format. Returns: Nothing ''' if filename: self.read_from_file(filename, old_format, binary_format)
[docs] def read_from_file(self, filename, old_format=False, binary_format=False): ''' Read data from file. Parameters: filename (string): the file to read from. old_format = False (bool): whether to use the old-style (32 bits) file format. Returns: Nothing ''' print_msg('Reading IonRates3 file:%s...' % filename) self.filename = filename f = open(filename, 'rb') if(binary_format): temp_mesh = np.fromfile(f, count=3, dtype='int32') self.mesh_x, self.mesh_y, self.mesh_z = temp_mesh else: temp_mesh = np.fromfile(f, count=6, dtype='int32') self.mesh_x, self.mesh_y, self.mesh_z = temp_mesh[1:4] if old_format: self.irate = np.fromfile(f, dtype='float32') else: self.irate = np.fromfile(f, count=self.mesh_x*self.mesh_y*self.mesh_z, dtype='float32') self.irate = self.irate.reshape((self.mesh_x, self.mesh_y, self.mesh_z), order='F') f.close() print_msg('...done') #Store the redshift from the filename import os.path try: name = os.path.split(filename)[1] self.z = float(name.split('_')[1][:-4]) except: print_msg('Could not determine redshift from file name') self.z = -1