Esempio n. 1
0
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 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