def setUpClass(cls): cls.isotxsAA = isotxs.readBinary(ISOTXS_AA) cls.gamisoAA = gamiso.readBinary(GAMISO_AA) cls.pmatrxAA = pmatrx.readBinary(PMATRX_AA) cls.xsLib = xsLibraries.IsotxsLibrary() cls.xsLibGenerationErrorStack = None try: cls.xsLib.merge(copy.deepcopy(cls.isotxsAA)) cls.xsLib.merge(copy.deepcopy(cls.gamisoAA)) cls.xsLib.merge(copy.deepcopy(cls.pmatrxAA)) except: cls.xsLibGenerationErrorStack = traceback.format_exc()
def GAMISO(fName="GAMISO"): # load a library that is in the ARMI tree. This should # be a small library with LFPs, Actinides, structure, and coolant from armi.nuclearDataIO import gamiso return gamiso.readBinary(fName)
def mergeXSLibrariesInWorkingDirectory(lib, xsLibrarySuffix="", mergeGammaLibs=False): """ Merge neutron (ISOTXS) and gamma (GAMISO/PMATRX) library data into the provided library. Parameters ---------- lib : obj ISOTXS library object xsLibrarySuffix : str, optional XS library suffix used to determine which ISOTXS files are merged together, typically something like `-doppler`. If empty string, will merge everything without suffix (indicated by a `-`). mergeGammaLibs : bool, optional If True, the GAMISO and PMATRX files that correspond to the ISOTXS library will be merged. Note: if these files do not exist this will fail. """ from armi import nuclearDataIO from armi.nuclearDataIO import isotxs from armi.nuclearDataIO import gamiso from armi.nuclearDataIO import pmatrx xsLibFiles = getISOTXSLibrariesToMerge( xsLibrarySuffix, [iso for iso in glob.glob(_ISOTXS_EXT + "*")]) librariesToMerge = [] neutronVelocities = { } # Dictionary of neutron velocities from each ISOTXS file for xsLibFilePath in sorted(xsLibFiles): xsID = re.search("ISO([A-Z0-9]{2})", xsLibFilePath).group( 1) # get XS ID from the cross section library name xsFileTypes = "ISOTXS" if not mergeGammaLibs else "ISOTXS, GAMISO, and PMATRX" runLog.info("Retrieving {} data for XS ID {}{}".format( xsFileTypes, xsID, xsLibrarySuffix)) if xsLibFilePath in lib.isotxsMetadata.fileNames: runLog.extra( "Skipping merge of {} because data already exists in the library" .format(xsLibFilePath)) continue neutronLibrary = isotxs.readBinary(xsLibFilePath) neutronVelocities[xsID] = neutronLibrary.neutronVelocity librariesToMerge.append(neutronLibrary) if mergeGammaLibs: dummyNuclides = [ nuc for nuc in neutronLibrary.nuclides if isinstance(nuc._base, nuclideBases.DummyNuclideBase) ] # GAMISO data gamisoLibraryPath = nuclearDataIO.getExpectedGAMISOFileName( xsID=xsID) gammaLibrary = gamiso.readBinary(gamisoLibraryPath) addedDummyData = gamiso.addDummyNuclidesToLibrary( gammaLibrary, dummyNuclides) # Add DUMMY nuclide data not produced by MC2-3 if addedDummyData: gamisoDummyPath = os.path.abspath( os.path.join(os.getcwd(), gamisoLibraryPath)) gamiso.writeBinary(gammaLibrary, gamisoDummyPath) gammaLibraryDummyData = gamiso.readBinary(gamisoDummyPath) librariesToMerge.append(gammaLibraryDummyData) else: librariesToMerge.append(gammaLibrary) # PMATRX data pmatrxLibraryPath = nuclearDataIO.getExpectedPMATRXFileName( xsID=xsID) pmatrxLibrary = pmatrx.readBinary(pmatrxLibraryPath) addedDummyData = pmatrx.addDummyNuclidesToLibrary( pmatrxLibrary, dummyNuclides) # Add DUMMY nuclide data not produced by MC2-3 if addedDummyData: pmatrxDummyPath = os.path.abspath( os.path.join(os.getcwd(), pmatrxLibraryPath)) pmatrx.writeBinary(pmatrxLibrary, pmatrxDummyPath) pmatrxLibraryDummyData = pmatrx.readBinary(pmatrxDummyPath) librariesToMerge.append(pmatrxLibraryDummyData) else: librariesToMerge.append(pmatrxLibrary) for library in librariesToMerge: lib.merge(library) return neutronVelocities