Commit 9ee1a64b authored by Holcomb, Andrew's avatar Holcomb, Andrew
Browse files

Add generator code

parents
Loading
Loading
Loading
Loading
+57 −0
Original line number Diff line number Diff line
diff --git a/DataContainers/summary_gpdc.json b/DataContainers/summary_gpdc.json
index b959258..7eccb87 100644
--- a/DataContainers/summary_gpdc.json
+++ b/DataContainers/summary_gpdc.json
@@ -565,7 +565,7 @@
             },
             "interpolation": {
                 "__class__": "nodes.Attribute",
-                "default": "\\attr{lin-lin}",
+                "default": "lin-lin",
                 "description": [
                     "Defines the interpolation to be used between consecutive domain points along this axis.  ",
                     "Note, this attribute is required when \\element{style} is \\attr{points} or \\attr{boundaries} and ",
diff --git a/PoPs/summary_pops.json b/PoPs/summary_pops.json
index 672cab5..3417bb8 100644
--- a/PoPs/summary_pops.json
+++ b/PoPs/summary_pops.json
@@ -1152,7 +1152,7 @@
         },
         "unit": {
             "__class__": "nodes.Attribute",
-            "default": " \\kern-1ex",
+            "default": "kern-1ex",
             "description": "Internal conversion or pair production coefficient unit and is usually dimensionless.",
             "name": "unit",
             "required": false,
@@ -1539,7 +1539,7 @@
         },
         "unit": {
             "__class__": "nodes.Attribute",
-            "default": " \\kern-1ex",
+            "default": "kern-1ex",
             "description": "Usually dimensionless",
             "name": "unit",
             "required": true,
diff --git a/TopLevel/summary_transport.json b/TopLevel/summary_transport.json
index 42fdc3a..b44e3a9 100644
--- a/TopLevel/summary_transport.json
+++ b/TopLevel/summary_transport.json
@@ -949,7 +949,7 @@
             "LLNLAngularEnergy": {
                 "__class__": "nodes.ChildNode",
                 "description": "The distribution is the product of $P(\\mu,E) \\times P(E' | E,\\mu)$. This is used in legacy (ENDL) evaluations at LLNL. It is similar to the \\element{angularEnergyMC} node and may be merged with that node in the future.",
-                "name": "angularEnergy",
+                "name": "angularEnergyLLNL",
                 "occurrence": "choice",
                 "required": false
             },
@@ -1601,7 +1601,7 @@
                     "Each formulation is also an energy distribution."
                 ],
                 "name": "weighted",
-                "occurrence": "1",
+                "occurrence": "1+",
                 "required": true
             }
         },
+17 −0
Original line number Diff line number Diff line
Styles/summary_styles.json                     
DataContainers/summary_basic.json               
DataContainers/summary_gpdc.json                
Documentation/summary_documentation.json        
TopLevel/summary_appData.json                  
TopLevel/summary_atomic.json                   
TopLevel/summary_common.json                   
TopLevel/summary_covariance.json               
TopLevel/summary_cpTransport.json              
TopLevel/summary_fissionTransport.json            
TopLevel/summary_fpy.json                      
TopLevel/summary_processed.json                
TopLevel/summary_resonance.json                
TopLevel/summary_transport.json                
TopLevel/summary_tsl.json                                         
Conventions/summary_abstract.json
Pops/summary_pops.json                         
+125 −0
Original line number Diff line number Diff line
import argparse
import json
import os
import NameSpaceList as nsl
import MakeEnumeration as mEnum
import MakeClassInclude as mInc
import MakeClassDefinition as mClass
import Utils as util

def process_args():
    """Process command line options"""
    parser = argparse.ArgumentParser(description="""Generate C++ access classes for GNDS.""")
    parser.add_argument('inFile', type=str,
                        help='File containining the Json files to read')
    parser.add_argument('formatDir', type=str, help='The directory containing the formats.')
    parser.add_argument('outDir', type=str, help='The directory to put the generated access files.')
    return parser.parse_args()

def fillNamespaceData(enumList, classList):
    """ Retrieve the list of enumerations and classes from the GNDS
    definitions

    Parameters
    ----------
    enumList : nsl.NameSpaceList
        on ouput all the enumerations available in GNDS
    classList : nsl.NameSpaceList
            on ouput all the classes available in GNDS
    """
    prefix = args.formatDir
    with open(args.inFile) as overview:
        for line in overview:
            jsonFile = prefix + "/" + line.rstrip()
            with open(jsonFile) as f:
                data = json.load(f)
            context = "default"
            if '__namespace__' in data:
                context = data['__namespace__']
            for key in data:
                value = data[key]
                if '__class__' in value:
                    if value['__class__'] == 'nodes.EnumeratedTypeNode':
                        enumList.addObject(value, key, context)
                    elif value['__class__'] == 'nodes.ElementaryTypeNode':
                        pass
                    else:
                        classList.addObject(value, key, context)


if __name__ == "__main__":
    args = process_args()
    prefix = args.formatDir
    spec =  args.inFile
    outDir = args.outDir
    enumList = nsl.NameSpaceList(True)
    classList = nsl.NameSpaceList(False)
    fillNamespaceData(enumList, classList)

    for c in enumList.contextList:
        for e in enumList.contextList[c]:
            writer = mEnum.MakeEnumeration(e, c, enumList)
            writer.writeInclude(enumList.contextList[c][e], outDir)

    for c in classList.contextList:
        for e in classList.contextList[c]:
            writer = mInc.MakeClassInclude(e, c, enumList, classList)
            writer.writeClass(classList.contextList[c][e], outDir)
            writerC = mClass.MakeClassDefinition(e, c, enumList, classList)
            writerC.writeClass(classList.contextList[c][e], outDir)

    # generate a test environment so that we can compile the classes
    # without AMPX environment
    scriptDir = os.path.dirname(os.path.realpath(__file__))
    utilInfo = util.UtilityClass(None, None)
    file = open(outDir + '/main.' + utilInfo.classExtension,'w')

    cmake_min_version = '2.6'
    qt_min_version = '4.4.3'
    cpp_standard = 'c++11'

    file.write('#include <iostream>\n')
    file.write('#include <fstream>\n')
    file.write('#include \"xml/XmlEndfReader.h\"\n')
    file.write('#include \"Definitions.h\"\n')
    file.write('#include \"Container.h\"\n')
    file.write('int main(int argc, char** argv) {\n')
    file.write('    if( argc < 2){\n')
    file.write('        std::cout<<"Please supply endf file name"<<std::endl;\n')
    file.write('        return -1;\n')
    file.write('    }\n')
    file.write('\n')
    file.write('    std::fstream in(argv[1]);\n')
    file.write('    try{\n')
    file.write('        std::fstream in(argv[1]);\n')
    file.write('        std::string name(argv[1]);\n')
    file.write('        std::shared_ptr<const endfgnd::EndfDocument> reactionData =  endfgnd::getEndfDocument(in, argv[1]);\n')
    file.write('       if( reactionData == NULL) throw endfgnd::gnd_error("Failed to load xml endf data");\n')
    file.write('        std::shared_ptr<const endfgnd::Element>  root  = reactionData->getRootElement();\n')
    file.write('     }\n')
    file.write('    catch(endfgnd::gnd_error & e){\n')
    file.write('       std::cout<<" Error: "<<e.what()<<std::endl;\n')
    file.write('    }\n')
    file.write('   return 0;\n')
    file.write('}\n')
    file.close()

    file = open(outDir + '/CMakeLists.txt', 'w')
    file.write('cmake_minimum_required (VERSION '+cmake_min_version+')\n')
    file.write('project (GNPDS_PARSER)\n')
    file.write('SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} \"-std='+cpp_standard+'\")\n\n')
    file.write('FILE(GLOB OURS ${CMAKE_CURRENT_SOURCE_DIR}/*.' + utilInfo.classExtension + ')\n')
    file.write('INCLUDE_DIRECTORIES(' + scriptDir + '/../  ./)\n')
    file.write('SET (SOURCES \n')
    file.write('    ${OURS}\n')
    file.write('    ' +  scriptDir + '/../xml/XmlElement.cpp\n')
    file.write('    ' +  scriptDir + '/../xml/XmlEndfReader.cpp\n')
    file.write('    ' +  scriptDir + '/../Container.cpp\n')
    file.write('    ' +  scriptDir + '/../ArrayContainer.cpp\n')
    file.write('    ' +  scriptDir + '/../TableContainer.cpp\n')
    file.write('    ' +  scriptDir + '/../ValuesContainer.cpp\n')
    file.write(')\n\n')
    file.write('find_package(Qt4 ' + qt_min_version + ' REQUIRED QtGui QtXml)\n\n')
    file.write('add_executable(GndsParser ${SOURCES})\n')
    file.write('target_link_libraries(GndsParser Qt4::QtXml Qt4::QtXmlPatterns)\n')
    file.close()
+1 −0
Original line number Diff line number Diff line
#cmakedefine JSON_GNDS_SOURCE_DIR "@JSON_GNDS_SOURCE_DIR@"
+0 −0

File added.

Preview size limit exceeded, changes collapsed.