def generate_responses(isos, flux, struct='wims69', lower=1e-5, upper=2e7, name='response.p', overwrite=False): """This generates response functions for given isotopes, a given spectrum, and a desired group structure.""" if os.path.isfile(name) and not overwrite: return pickle.load(open(directory + '/code/' + name, 'rb')) responses = {} eb = energy_groups(struct, lower, upper) responses['eb'] = eb responses['phi'] = sp.zeros(len(eb) - 1) for i in range(len(eb) - 1): E = sp.logspace(sp.log10(eb[i + 1]), sp.log10(eb[i]), 1e4) x = trapz(flux(E), E) print("->", i, eb[i + 1], eb[i], x) responses['phi'][i] = trapz(flux(E), E) interps = get_cross_section_interps(isos) responses['response'] = {} for iso in isos: print("...response for iso ", iso) responses['response'][iso] = sp.zeros(len(eb) - 1) fun = lambda x: flux(x) * interps[iso](x) for i in range(len(eb) - 1): E = sp.logspace(sp.log10(eb[i + 1]), sp.log10(eb[i]), 1e4) top = trapz(fun(E), E) responses['response'][iso][i] = top / responses['phi'][i] pickle.dump(responses, open(directory + '/code/' + name, 'wb')) return responses
def test_energy_groups_lethargy(self): ''' Test that the lethargy structure produces the correct groups ''' nG = 10 eb = multigroup_utilities.energy_groups('lethargy', groups=nG, upper=1e7) assert len(eb) == nG + 525, 'lethargy has the wrong number of groups' assert all(eb[1:] < eb[:-1]), 'lethargy has groups out of order'
def bin_flux(flux, struct): lower = 1e-5 upper = 2e7 eb = energy_groups(struct, lower, upper) phi = sp.zeros(len(eb) - 1) for i in range(len(eb) - 1): E = sp.logspace(sp.log10(eb[i + 1]), sp.log10(eb[i]), 1e4) x = trapz(flux(E), E) print("->", i, eb[i + 1], eb[i], x) phi[i] = trapz(flux(E), E) phi = phi[::-1] / np.sum(phi) return phi
def test_energy_groups(self): ''' Test that the structures have the correct number of groups in the correct order ''' structures = ['wims69', 'wims56', 'wims172', 'lwr32', 'lwr28', 'phoenix25', 'scale44', 'scale56', 'scale238', 'scale252', 'shem281', 'shem361', 'shem407', 'ga193', 'ga537', 'hr6', 'hr16', 'casmo2', 'casmo3', 'casmo4', 'casmo7', 'casmo8', 'casmo9', 'casmo12', 'casmo14', 'casmo16', 'casmo18', 'casmo23', 'casmo25', 'casmo40', 'casmo70', 'eurlib100', 'ecco1968'] for struc in structures: nG = int(''.join([l for l in struc if l.isdigit()])) eb = multigroup_utilities.energy_groups(struc) assert len(eb) == nG + 1, '{} has the wrong number of groups'.format(struc) assert all(eb[1:] < eb[:-1]), '{} has groups out of order'.format(struc)
def test_energy_groups(self): ''' Test that the structures have the correct number of groups in the correct order ''' structures = [ 'wims69', 'wims56', 'wims172', 'lwr32', 'lwr28', 'phoenix25', 'scale44', 'scale56', 'scale238', 'scale252', 'shem281', 'shem361', 'shem407', 'ga193', 'ga537', 'hr6', 'hr16', 'casmo2', 'casmo3', 'casmo4', 'casmo7', 'casmo8', 'casmo9', 'casmo12', 'casmo14', 'casmo16', 'casmo18', 'casmo23', 'casmo25', 'casmo40', 'casmo70', 'eurlib100', 'ecco1968' ] for struc in structures: nG = int(''.join([l for l in struc if l.isdigit()])) eb = multigroup_utilities.energy_groups(struc) assert len( eb) == nG + 1, '{} has the wrong number of groups'.format( struc) assert all( eb[1:] < eb[:-1]), '{} has groups out of order'.format(struc)
def generate_response_matrix(foil_names, structure='wims69', source='trigaC', filename='response_matrix'): """This function generates a response matrix given a set of foil ids.""" # grab energy groups eb = energy_groups(structure)[::-1] # initialize response matrix response_matrix = np.empty((len(foil_names), len(eb[1:]))) # build foil library foil_lib = build_foil_library('trigaC') # calculate individual foil response functions for i, foil_name in enumerate(foil_names): response_matrix[i], binned_flux = foil_lib[foil_name].discretize(eb) # store data np.save(filename + '.npy', response_matrix) np.save(source + '.npy', binned_flux) return response_matrix