ooiservices/app/uframe/vocab.py
def preprocess_vocab_data(vocabs):
    """ Process uframe vocab items, build code dict. Apply uframe data updates. Return vocab and codes dict.

    http://ooiufs01.ooi.rutgers.edu:12576/sensor/inv
    subsites which are on production but missing from subsites dict:
    [
    "GA02HYPM", "SSRSPACC", "GP02HYPM", "GP05MOAS", "CE02SHBP", "CP04OSPM", "GS03FLMB",
    "RS03AXPS", "GI03FLMA", "GS03FLMA", "CE07SHSM", "CE04OSPD", "GI01SUMO", "CE07SHSP",
    "RS03AXBS", "RS03AXPD", "CE05MOAS", "GI05MOAS", "GA03FLMA", "RS03ASHS", "RS01SBPD",
    "GS05MOAS", "RS01SHBP", "RS03AXSM", "GS01SUMO", "CP05MOAS", "CE04OSBP", "GA03FLMB",
    "CE09OSPM", "CE02SHSP", "RS01SBPS", "CE02SHSM", "CE04OSSM", "RS03CCAL", "CP02PMCI",
    "RS03ECAL", "CE01ISSM", "CE01ISSP", "CP02PMCO", "GA05MOAS", "CE09OSSM", "RS03INT1",
    "RS03INT2", "GI02HYPM", "CE04OSPS", "RS01OSBP", "GP03FLMB", "RS01SHDR", "GP03FLMA",
    "CP03ISSM", "RS01SUM2", "CP03ISSP", "RS01SUM1", "CE06ISSP", "GI03FLMB", "CP02PMUI",
    "RS01SLBS", "CP01CNSM", "CE06ISSM", "GS02HYPM", "CP02PMUO", "CP01CNSP", "GA01SUMO",
    "CP04OSSM"
    ]

    Moorings with subsites not in codes (subsites: 'PACC', 'OSPD', 'AXPD', 'SBPD', 'AXSM', 'SHDR'):
    "SSRSPACC", "CE04OSPD", "RS03AXPD", "RS01SBPD", "RS03AXSM", "RS01SHDR"


    RS01SBPD-DP01A-03-FLCDRA102
    RS03AXPD-DP03A-04-FLNTUA302
    """

    extra_classes = {
        "CTDAV": "CTD AUV",
        "FLOBN": "Benthic Fluid Flow",
        "MASSP": "Mass Spectrometer",
        "OBSBK": "Broadband Ocean Bottom Seismometer",
        "OBSSK": "Short-Period Ocean Bottom Seismometer",
        "OSMOI": "Osmosis-Based Water Sampler",
        "PPSDN": "Particulate DNA Sampler",
        "RASFL": "Hydrothermal Vent Fluid Interactive Sampler",
        "ZPLSG": "Bio-acoustic Sonar (Global)",
        "HYDLF": "Low Frequency Acoustic Receiver (Hydrophone)",
        "FLCDR": "FLCDR",
        "FLNTU": "FLNTU"
    }

    extra_subsites = {
    "PACC": "PACC",
    "OSPD": "Offshore Profiler Dock",
    "AXPD": "Axial Base Profiler Dock",
    "SBPD": "Slope Base Profiler Dock",
    "AXSM": "Axial Base Surface Mooring",
    "SHDR": "Shelf Cabled DR",
    "ASPI": "ASPI"
    }

    extra_nodes = {
        "GP": "GP",
        "GL": "Coastal Glider",
        "PG": "Profiling Glider",
        "SC": "SC",
        "DP": "Deep Profiler",
        "PD": "PD",
        "XX": "Bench Instrument"
    }

    bad_slope_base = ['RS01SLBS-LJ01A-10-ADCPTE101', 'RS01SLBS-LJ01A-11-OPTAAC103',
    'RS01SLBS-LJ01A-12-CTDPFB101', 'RS01SLBS-MJ01A-05-HYDLFA101', 'RS01SLBS-MJ01A-05-OBSBBA102',
    'RS01SLBS-MJ01A-06-PRESTA101', 'RS01SLBS-MJ01A-12-VEL3DB101']

    extra_space = ['RS03AXPS-PC03A-05-ADCPTD302', 'RS03AXPS-PC03A-07-CAMDSC302', 'RS03AXPS-PC03A-08-HYDBBA303',
    'RS03AXPS-PC03A-4A-CTDPFA303', 'RS03AXPS-PC03A-4B-PHSENA302', 'RS03AXPS-PC03A-4C-FLORDD303',
    'RS03AXPS-SF03A-2A-CTDPFA302', 'RS03AXPS-SF03A-2D-PHSENA301', 'RS03AXPS-SF03A-3A-FLORTD301',
    'RS03AXPS-SF03A-3B-OPTAAD301', 'RS03AXPS-SF03A-3C-PARADA301', 'RS03AXPS-SF03A-3D-SPKIRA301',
    'RS03AXPS-SF03A-4A-NUTNRA301', 'RS03AXPS-SF03A-4B-VELPTD302', 'RS03AXPS-SF03A-4F-PCO2WA301']

    # vocab ids: 972, 973, 974 - Correct spelling error in axial seamount ('Disctrict' should be 'District')

    # Codes processing
    codes = {'arrays': {}, 'subsites': {}, 'nodes': {}, 'classes': {}}
    arrays = {}
    subsites = {}
    nodes = {}
    classes = {}
    results = []
    try:
        for item in vocabs:

            # Process each vocab item from uframe
            rd = item['refdes']
            len_rd = len(rd)
            if len_rd != 27:
                continue

            vocab = item.copy()

            # Correct bad records
            if APPLY_VOCAB_CORRECTIONS:

                # Correct spelling error in axial seamount ('Disctrict' should be 'District')
                a, b, c = rd.split('-', 2)
                if 'INT' in a:
                    if 'Disctrict' in vocab['tocL2']:
                        vocab['tocL2'] = vocab['tocL2'].replace('Disctrict','District')

                # Check for reference designators which have errant vocab data
                if rd == 'RS01SBPS-PC01A-06-VADCPA101' or \
                   rd == 'RS01SLBS-LJ01A-05-HPIESA101' or \
                   rd == 'RS03AXBS-LJ03A-05-HPIESA301' or \
                   rd == 'RS03AXPS-PC03A-06-VADCPA301' or \
                   rd in bad_slope_base or rd in extra_space:

                    vocab = provide_vocab_correction(vocab)

            results.append(vocab)

            # - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
            # -- Compile codes for dynamic display name generation
            # - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
            subsite, node, instr = rd.split('-', 2)  # subsite = 'CE01ISSM', node = 'MFC31'
            array_code = rd[:2]
            subsite_code = subsite[4:8]
            node_code = node[0:2]
            port, instrument = instr.split('-')
            instr_class = instrument[0:5]

            if array_code not in arrays:
                arrays[array_code] = vocab['tocL1']

            if subsite_code not in subsites:

                subsite_text = vocab['tocL2']

                # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                # Remove context specific text in subsite (for endurance array).
                #   prefix = '' for 'CE05'
                #   prefix = 'OR ' for 'CE01', 'CE02', 'CE04'
                #   prefix = 'WA ' for 'CE06', 'CE07', 'CE09'
                # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                key = rd[0:4]
                if key == 'CE01' or key == 'CE02' or key == 'CE04' or \
                    key == 'CE06' or key == 'CE07' or key == 'CE09':
                    subsite_text = vocab['tocL2']
                    if subsite_text[0:3] == 'OR ' or subsite_text[0:3] == 'WA ':
                        subsite_text = subsite_text[3:]

                subsites[subsite_code] = subsite_text

            if node_code not in nodes:
                nodes[node_code] = vocab['tocL3']

            if instr_class not in classes:
                classes[instr_class] = vocab['instrument']

        # - - - - - - - - - - - - - - - - - - - - - - - - -
        # Extra classes - if not included in classes, add.
        # - - - - - - - - - - - - - - - - - - - - - - - - -
        for k, v in extra_classes.iteritems():
            if k not in classes:
                classes[k] = v

        # - - - - - - - - - - - - - - - - - - - - - - - - -
        # Extra subsites - if not included in subsites, add.
        # - - - - - - - - - - - - - - - - - - - - - - - - -
        for k, v in extra_subsites.iteritems():
            if k not in subsites:
                subsites[k] = v

        # - - - - - - - - - - - - - - - - - - - - - - - - -
        # Extra subsites - if not included in subsites, add.
        # - - - - - - - - - - - - - - - - - - - - - - - - -
        for k, v in extra_nodes.iteritems():
            if k not in nodes:
                nodes[k] = v

        # Compile information into codes dictionary.
        codes['arrays'] = arrays
        codes['subsites'] = subsites
        codes['nodes'] = nodes
        codes['classes'] = classes

        return results, codes

    except Exception as err:
        message = 'Error processing vocabulary data for \'vocab_codes\'. %s' % str(err)
        print '\n ', message
        current_app.logger.info(message)
        return vocabs, codes
 Process uframe vocab items, build code dict. Apply uframe data updates. Return vocab and codes dict.

    http://ooiufs01.ooi.rutgers.edu:12576/sensor/inv
    subsites which are on production but missing from subsites dict:
    [
    "GA02HYPM", "SSRSPACC", "GP02HYPM", "GP05MOAS", "CE02SHBP", "CP04OSPM", "GS03FLMB",
    "RS03AXPS", "GI03FLMA", "GS03FLMA", "CE07SHSM", "CE04OSPD", "GI01SUMO", "CE07SHSP",
    "RS03AXBS", "RS03AXPD", "CE05MOAS", "GI05MOAS", "GA03FLMA", "RS03ASHS", "RS01SBPD",
    "GS05MOAS", "RS01SHBP", "RS03AXSM", "GS01SUMO", "CP05MOAS", "CE04OSBP", "GA03FLMB",
    "CE09OSPM", "CE02SHSP", "RS01SBPS", "CE02SHSM", "CE04OSSM", "RS03CCAL", "CP02PMCI",
    "RS03ECAL", "CE01ISSM", "CE01ISSP", "CP02PMCO", "GA05MOAS", "CE09OSSM", "RS03INT1",
    "RS03INT2", "GI02HYPM", "CE04OSPS", "RS01OSBP", "GP03FLMB", "RS01SHDR", "GP03FLMA",
    "CP03ISSM", "RS01SUM2", "CP03ISSP", "RS01SUM1", "CE06ISSP", "GI03FLMB", "CP02PMUI",
    "RS01SLBS", "CP01CNSM", "CE06ISSM", "GS02HYPM", "CP02PMUO", "CP01CNSP", "GA01SUMO",
    "CP04OSSM"
    ]

    Moorings with subsites not in codes (subsites: 'PACC', 'OSPD', 'AXPD', 'SBPD', 'AXSM', 'SHDR'):
    "SSRSPACC", "CE04OSPD", "RS03AXPD", "RS01SBPD", "RS03AXSM", "RS01SHDR"


    RS01SBPD-DP01A-03-FLCDRA102
    RS03AXPD-DP03A-04-FLNTUA302
    
Process uframe vocab items, build code dict. Apply uframe data updates. Return vocab and codes dict.




Process uframe vocab items build code dict . Apply uframe data updates . Return vocab and codes dict .
def preprocess_vocab_data(vocabs):
    extra_classes = {
        "CTDAV": "CTD AUV",
        "FLOBN": "Benthic Fluid Flow",
        "MASSP": "Mass Spectrometer",
        "OBSBK": "Broadband Ocean Bottom Seismometer",
        "OBSSK": "Short-Period Ocean Bottom Seismometer",
        "OSMOI": "Osmosis-Based Water Sampler",
        "PPSDN": "Particulate DNA Sampler",
        "RASFL": "Hydrothermal Vent Fluid Interactive Sampler",
        "ZPLSG": "Bio-acoustic Sonar (Global)",
        "HYDLF": "Low Frequency Acoustic Receiver (Hydrophone)",
        "FLCDR": "FLCDR",
        "FLNTU": "FLNTU"
    }
    extra_subsites = {
    "PACC": "PACC",
    "OSPD": "Offshore Profiler Dock",
    "AXPD": "Axial Base Profiler Dock",
    "SBPD": "Slope Base Profiler Dock",
    "AXSM": "Axial Base Surface Mooring",
    "SHDR": "Shelf Cabled DR",
    "ASPI": "ASPI"
    }
    extra_nodes = {
        "GP": "GP",
        "GL": "Coastal Glider",
        "PG": "Profiling Glider",
        "SC": "SC",
        "DP": "Deep Profiler",
        "PD": "PD",
        "XX": "Bench Instrument"
    }
    bad_slope_base = ['RS01SLBS-LJ01A-10-ADCPTE101', 'RS01SLBS-LJ01A-11-OPTAAC103',
    'RS01SLBS-LJ01A-12-CTDPFB101', 'RS01SLBS-MJ01A-05-HYDLFA101', 'RS01SLBS-MJ01A-05-OBSBBA102',
    'RS01SLBS-MJ01A-06-PRESTA101', 'RS01SLBS-MJ01A-12-VEL3DB101']
    extra_space = ['RS03AXPS-PC03A-05-ADCPTD302', 'RS03AXPS-PC03A-07-CAMDSC302', 'RS03AXPS-PC03A-08-HYDBBA303',
    'RS03AXPS-PC03A-4A-CTDPFA303', 'RS03AXPS-PC03A-4B-PHSENA302', 'RS03AXPS-PC03A-4C-FLORDD303',
    'RS03AXPS-SF03A-2A-CTDPFA302', 'RS03AXPS-SF03A-2D-PHSENA301', 'RS03AXPS-SF03A-3A-FLORTD301',
    'RS03AXPS-SF03A-3B-OPTAAD301', 'RS03AXPS-SF03A-3C-PARADA301', 'RS03AXPS-SF03A-3D-SPKIRA301',
    'RS03AXPS-SF03A-4A-NUTNRA301', 'RS03AXPS-SF03A-4B-VELPTD302', 'RS03AXPS-SF03A-4F-PCO2WA301']
    codes = {'arrays': {}, 'subsites': {}, 'nodes': {}, 'classes': {}}
    arrays = {}
    subsites = {}
    nodes = {}
    classes = {}
    results = []
    try:
        for item in vocabs:
            rd = item['refdes']
            len_rd = len(rd)
            if len_rd != 27:
                continue
            vocab = item.copy()
            if APPLY_VOCAB_CORRECTIONS:
                a, b, c = rd.split('-', 2)
                if 'INT' in a:
                    if 'Disctrict' in vocab['tocL2']:
                        vocab['tocL2'] = vocab['tocL2'].replace('Disctrict','District')
                if rd == 'RS01SBPS-PC01A-06-VADCPA101' or \
                   rd == 'RS01SLBS-LJ01A-05-HPIESA101' or \
                   rd == 'RS03AXBS-LJ03A-05-HPIESA301' or \
                   rd == 'RS03AXPS-PC03A-06-VADCPA301' or \
                   rd in bad_slope_base or rd in extra_space:
                    vocab = provide_vocab_correction(vocab)
            results.append(vocab)
            subsite, node, instr = rd.split('-', 2)  
            array_code = rd[:2]
            subsite_code = subsite[4:8]
            node_code = node[0:2]
            port, instrument = instr.split('-')
            instr_class = instrument[0:5]
            if array_code not in arrays:
                arrays[array_code] = vocab['tocL1']
            if subsite_code not in subsites:
                subsite_text = vocab['tocL2']
                 - - -
                 - - -
                key = rd[0:4]
                if key == 'CE01' or key == 'CE02' or key == 'CE04' or \
                    key == 'CE06' or key == 'CE07' or key == 'CE09':
                    subsite_text = vocab['tocL2']
                    if subsite_text[0:3] == 'OR ' or subsite_text[0:3] == 'WA ':
                        subsite_text = subsite_text[3:]
                subsites[subsite_code] = subsite_text
            if node_code not in nodes:
                nodes[node_code] = vocab['tocL3']
            if instr_class not in classes:
                classes[instr_class] = vocab['instrument']
        for k, v in extra_classes.iteritems():
            if k not in classes:
                classes[k] = v
        for k, v in extra_subsites.iteritems():
            if k not in subsites:
                subsites[k] = v
        for k, v in extra_nodes.iteritems():
            if k not in nodes:
                nodes[k] = v
        codes['arrays'] = arrays
        codes['subsites'] = subsites
        codes['nodes'] = nodes
        codes['classes'] = classes
        return results, codes
    except Exception as err:
        message = 'Error processing vocabulary data for \'vocab_codes\'. %s' % str(err)
        print '\n ', message
        current_app.logger.info(message)
        return vocabs, codes
def preprocess_vocab_data ( vocabs ) : extra_classes = { "CTDAV" : "CTD AUV" , "FLOBN" : "Benthic Fluid Flow" , "MASSP" : "Mass Spectrometer" , "OBSBK" : "Broadband Ocean Bottom Seismometer" , "OBSSK" : "Short-Period Ocean Bottom Seismometer" , "OSMOI" : "Osmosis-Based Water Sampler" , "PPSDN" : "Particulate DNA Sampler" , "RASFL" : "Hydrothermal Vent Fluid Interactive Sampler" , "ZPLSG" : "Bio-acoustic Sonar (Global)" , "HYDLF" : "Low Frequency Acoustic Receiver (Hydrophone)" , "FLCDR" : "FLCDR" , "FLNTU" : "FLNTU" } extra_subsites = { "PACC" : "PACC" , "OSPD" : "Offshore Profiler Dock" , "AXPD" : "Axial Base Profiler Dock" , "SBPD" : "Slope Base Profiler Dock" , "AXSM" : "Axial Base Surface Mooring" , "SHDR" : "Shelf Cabled DR" , "ASPI" : "ASPI" } extra_nodes = { "GP" : "GP" , "GL" : "Coastal Glider" , "PG" : "Profiling Glider" , "SC" : "SC" , "DP" : "Deep Profiler" , "PD" : "PD" , "XX" : "Bench Instrument" } bad_slope_base = [ 'RS01SLBS-LJ01A-10-ADCPTE101' , 'RS01SLBS-LJ01A-11-OPTAAC103' , 'RS01SLBS-LJ01A-12-CTDPFB101' , 'RS01SLBS-MJ01A-05-HYDLFA101' , 'RS01SLBS-MJ01A-05-OBSBBA102' , 'RS01SLBS-MJ01A-06-PRESTA101' , 'RS01SLBS-MJ01A-12-VEL3DB101' ] extra_space = [ 'RS03AXPS-PC03A-05-ADCPTD302' , 'RS03AXPS-PC03A-07-CAMDSC302' , 'RS03AXPS-PC03A-08-HYDBBA303' , 'RS03AXPS-PC03A-4A-CTDPFA303' , 'RS03AXPS-PC03A-4B-PHSENA302' , 'RS03AXPS-PC03A-4C-FLORDD303' , 'RS03AXPS-SF03A-2A-CTDPFA302' , 'RS03AXPS-SF03A-2D-PHSENA301' , 'RS03AXPS-SF03A-3A-FLORTD301' , 'RS03AXPS-SF03A-3B-OPTAAD301' , 'RS03AXPS-SF03A-3C-PARADA301' , 'RS03AXPS-SF03A-3D-SPKIRA301' , 'RS03AXPS-SF03A-4A-NUTNRA301' , 'RS03AXPS-SF03A-4B-VELPTD302' , 'RS03AXPS-SF03A-4F-PCO2WA301' ] codes = { 'arrays' : { } , 'subsites' : { } , 'nodes' : { } , 'classes' : { } } arrays = { } subsites = { } nodes = { } classes = { } results = [ ] try : for item in vocabs : rd = item [ 'refdes' ] len_rd = len ( rd ) if len_rd != 27 : continue vocab = item . copy ( ) if APPLY_VOCAB_CORRECTIONS : a , b , c = rd . split ( '-' , 2 ) if 'INT' in a : if 'Disctrict' in vocab [ 'tocL2' ] : vocab [ 'tocL2' ] = vocab [ 'tocL2' ] . replace ( 'Disctrict' , 'District' ) if rd == 'RS01SBPS-PC01A-06-VADCPA101' or rd == 'RS01SLBS-LJ01A-05-HPIESA101' or rd == 'RS03AXBS-LJ03A-05-HPIESA301' or rd == 'RS03AXPS-PC03A-06-VADCPA301' or rd in bad_slope_base or rd in extra_space : vocab = provide_vocab_correction ( vocab ) results . append ( vocab ) subsite , node , instr = rd . split ( '-' , 2 ) array_code = rd [ : 2 ] subsite_code = subsite [ 4 : 8 ] node_code = node [ 0 : 2 ] port , instrument = instr . split ( '-' ) instr_class = instrument [ 0 : 5 ] if array_code not in arrays : arrays [ array_code ] = vocab [ 'tocL1' ] if subsite_code not in subsites : subsite_text = vocab [ 'tocL2' ] key = rd [ 0 : 4 ] if key == 'CE01' or key == 'CE02' or key == 'CE04' or key == 'CE06' or key == 'CE07' or key == 'CE09' : subsite_text = vocab [ 'tocL2' ] if subsite_text [ 0 : 3 ] == 'OR ' or subsite_text [ 0 : 3 ] == 'WA ' : subsite_text = subsite_text [ 3 : ] subsites [ subsite_code ] = subsite_text if node_code not in nodes : nodes [ node_code ] = vocab [ 'tocL3' ] if instr_class not in classes : classes [ instr_class ] = vocab [ 'instrument' ] for k , v in extra_classes . iteritems ( ) : if k not in classes : classes [ k ] = v for k , v in extra_subsites . iteritems ( ) : if k not in subsites : subsites [ k ] = v for k , v in extra_nodes . iteritems ( ) : if k not in nodes : nodes [ k ] = v codes [ 'arrays' ] = arrays codes [ 'subsites' ] = subsites codes [ 'nodes' ] = nodes codes [ 'classes' ] = classes return results , codes except Exception as err : message = 'Error processing vocabulary data for \'vocab_codes\'. %s' % str ( err ) print '\n ' , message current_app . logger . info ( message ) return vocabs , codes
Process uframe vocab items, build code dict.
Process uframe vocab items build code dict .
""" Process uframe vocab items, build code dict. Apply uframe data updates. Return vocab and codes dict.

    http://ooiufs01.ooi.rutgers.edu:12576/sensor/inv
    subsites which are on production but missing from subsites dict:
    [
    "GA02HYPM", "SSRSPACC", "GP02HYPM", "GP05MOAS", "CE02SHBP", "CP04OSPM", "GS03FLMB",
    "RS03AXPS", "GI03FLMA", "GS03FLMA", "CE07SHSM", "CE04OSPD", "GI01SUMO", "CE07SHSP",
    "RS03AXBS", "RS03AXPD", "CE05MOAS", "GI05MOAS", "GA03FLMA", "RS03ASHS", "RS01SBPD",
    "GS05MOAS", "RS01SHBP", "RS03AXSM", "GS01SUMO", "CP05MOAS", "CE04OSBP", "GA03FLMB",
    "CE09OSPM", "CE02SHSP", "RS01SBPS", "CE02SHSM", "CE04OSSM", "RS03CCAL", "CP02PMCI",
    "RS03ECAL", "CE01ISSM", "CE01ISSP", "CP02PMCO", "GA05MOAS", "CE09OSSM", "RS03INT1",
    "RS03INT2", "GI02HYPM", "CE04OSPS", "RS01OSBP", "GP03FLMB", "RS01SHDR", "GP03FLMA",
    "CP03ISSM", "RS01SUM2", "CP03ISSP", "RS01SUM1", "CE06ISSP", "GI03FLMB", "CP02PMUI",
    "RS01SLBS", "CP01CNSM", "CE06ISSM", "GS02HYPM", "CP02PMUO", "CP01CNSP", "GA01SUMO",
    "CP04OSSM"
    ]

    Moorings with subsites not in codes (subsites: 'PACC', 'OSPD', 'AXPD', 'SBPD', 'AXSM', 'SHDR'):
    "SSRSPACC", "CE04OSPD", "RS03AXPD", "RS01SBPD", "RS03AXSM", "RS01SHDR"


    RS01SBPD-DP01A-03-FLCDRA102
    RS03AXPD-DP03A-04-FLNTUA302
    """ # vocab ids: 972, 973, 974 - Correct spelling error in axial seamount ('Disctrict' should be 'District') # Codes processing # Process each vocab item from uframe # Correct bad records # Correct spelling error in axial seamount ('Disctrict' should be 'District') # Check for reference designators which have errant vocab data # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # -- Compile codes for dynamic display name generation # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # subsite = 'CE01ISSM', node = 'MFC31' # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Remove context specific text in subsite (for endurance array). #   prefix = '' for 'CE05' #   prefix = 'OR ' for 'CE01', 'CE02', 'CE04' #   prefix = 'WA ' for 'CE06', 'CE07', 'CE09' # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - # Extra classes - if not included in classes, add. # - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - # Extra subsites - if not included in subsites, add. # - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - # Extra subsites - if not included in subsites, add. # - - - - - - - - - - - - - - - - - - - - - - - - - # Compile information into codes dictionary.
vocabs