diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..e7e9d11 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml diff --git a/.idea/dictionaries/vickdw.xml b/.idea/dictionaries/vickdw.xml new file mode 100644 index 0000000..276e7e4 --- /dev/null +++ b/.idea/dictionaries/vickdw.xml @@ -0,0 +1,11 @@ + + + + emplaced + entitysubtypes + entitytypes + geospatial + sustainment + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..dd4c951 --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..692245f --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,13 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..2f8f0e1 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/qgis-milstd2525-plugin.iml b/.idea/qgis-milstd2525-plugin.iml new file mode 100644 index 0000000..0dc4a59 --- /dev/null +++ b/.idea/qgis-milstd2525-plugin.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..325c94a --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/milstd2525/milstd2525symbology.py b/milstd2525/milstd2525symbology.py index 7d0b91d..8361068 100644 --- a/milstd2525/milstd2525symbology.py +++ b/milstd2525/milstd2525symbology.py @@ -48,7 +48,24 @@ def symbolForCode(code, size): for i in range(symbol.symbolLayerCount()): symbol.takeSymbolLayer(0) - echelonCode = code[3] + code[8:10] + # Decode the sidc number to find the symbol + # Referenced https://explorer.milsymb.net/#/explore/ for the decoding + version = code[:2] + standard_identity = code[2:4] + symbol_set = code[4:6] + status = code[6] + hqtffd = code[7] + amplifier_descriptor = code[8:10] + entity = code[10:12] + entity_type = code[12:14] + entity_subtype = code[14:16] + sector_one_modifier = code[16:18] + sector_two_modifier = code[18:20] + + # From Symbol Set, identify which Folder our image is in. + image_dir = getDirectoryFromSymbolSet(symbol_set) + + echelonCode = '1' + amplifier_descriptor echelonLayer = getSymbolLayer('Echelon', echelonCode, size) if echelonLayer is not None: symbol.insertSymbolLayer(0, echelonLayer) @@ -76,23 +93,37 @@ def symbolForCode(code, size): # log.debug('oca: %s %s' % (ocaCode, str(ocaLayer is not None))) mainCode = code[4:6] + code[10:16] - mainLayer = getSymbolLayer('Appendices', mainCode, size) + mainLayer = getSymbolLayer(image_dir, mainCode, size) if mainLayer is not None: symbol.insertSymbolLayer(0, mainLayer) + else: + mainCode = code[4:6] + code[10:16] + '_' + code[4] + mainLayer = getSymbolLayer(image_dir, mainCode, size) + if mainLayer is not None: + symbol.insertSymbolLayer(0, mainLayer) # log.debug('main: %s %s' % (mainCode, str(mainLayer is not None))) modifier1Code = code[4:6] + code[16:18] + '1' - modifier1Layer = getSymbolLayer('Appendices', modifier1Code, size) + modifier1Layer = getSymbolLayer(image_dir + '/mod1', modifier1Code, size) if modifier1Layer is not None: symbol.insertSymbolLayer(0, modifier1Layer) modifier2Code = code[4:6] + code[18:20] + '2' - modifier2Layer = getSymbolLayer('Appendices', modifier2Code, size) + modifier2Layer = getSymbolLayer(image_dir + '/mod2', modifier2Code, size) if modifier2Layer is not None: symbol.insertSymbolLayer(0, modifier2Layer) - frameCode = '%s_%s_%s' % (code[2], code[3:6], code[0]) - frameLayer = getSymbolLayer('Frames', frameCode, size) + if int(status) > 1: + frameCode = '%s_%s_%s' % (code[2], code[3:6], '0') + else: + frameCode = '%s_%s_%s' % (code[2], code[3:6], status) + if int(code[2] == 1): + frameLayer = getSymbolLayer('Frames/Exercise', frameCode, size) + elif int(code[2] == 2): + frameLayer = getSymbolLayer('Frames/Sim', frameCode, size) + else: + frameLayer = getSymbolLayer('Frames', frameCode, size) + if frameLayer is not None: symbol.insertSymbolLayer(0, frameLayer) # log.debug('frame: %s %s' % (frameCode, str(frameLayer is not None))) @@ -105,6 +136,35 @@ def symbolForCode(code, size): return symbol +# noinspection PyPep8Naming +def getDirectoryFromSymbolSet(symbol_set): + image_path = 'Appendices' + if symbol_set in ['01', '02']: + return image_path + '/Air' + if symbol_set in ['05', '06']: + return image_path + '/Space' + if symbol_set in ['10', '11', '15', '20']: + return image_path + '/Land' + if symbol_set in ['25']: + return image_path + '/ControlMeasures' + if symbol_set in ['30']: + return image_path + '/SeaSurface' + if symbol_set in ['35', '36']: + return image_path + '/SeaSubsurface' + if symbol_set in ['40']: + return image_path + '/Activities' + if symbol_set in ['45']: + return image_path + '/METOC/Atmospheric' + if symbol_set in ['46']: + return image_path + '/METOC/Oceanographic' + if symbol_set in ['50', '51', '52', '53', '54']: + return image_path + '/SigInt' + if symbol_set in ['60']: + return image_path + '/Cyberspace' + + return image_path + + # noinspection PyPep8Naming def getSymbolLayer(folder, svg, size): svg = svg + '.svg' @@ -116,6 +176,7 @@ def getSymbolLayer(folder, svg, size): filepath = os.path.join(base, matching[0]) break if filepath is not None: + print('filepath: ' + filepath) symbolLayer = QgsSvgMarkerSymbolLayer(filepath) symbolLayer.setSizeUnit(3) symbolLayer.setSize(size) diff --git a/milstd2525/sidcdialog.py b/milstd2525/sidcdialog.py index 116bb9b..582e760 100644 --- a/milstd2525/sidcdialog.py +++ b/milstd2525/sidcdialog.py @@ -25,142 +25,176 @@ __revision__ = '$Format:%H$' -import os - -from qgis.PyQt import uic from qgis.PyQt.QtGui import QPixmap +from qgis.PyQt.QtWidgets import QDialog from milstd2525.milstd2525symbology import symbolForCode - -WIDGET, BASE = uic.loadUiType( - os.path.join(os.path.dirname(__file__), 'ui', 'sidcdialogbase.ui')) +# WIDGET, BASE = uic.loadUiType( +# os.path.join(os.path.dirname(__file__), 'ui', 'sidcdialogbase.ui')) +from milstd2525.ui.sidcdialogbase import Ui_SidcDialog +import milstd2525.symbolsets as symbol +from collections import OrderedDict # noinspection PyPep8Naming -class SIDCDialog(BASE, WIDGET): +# class SIDCDialog(BASE, WIDGET): +class SIDCDialog(QDialog, Ui_SidcDialog): - standardId1 = { - "Reality": "0", - "Exercise": "1", - "Simulation": "2" + context = { + "0 Reality": "0", + "1 Exercise": "1", + "2 Simulation": "2" } - standardId2 = { - "Pending": "0", - "Unknown": "1", - "Assumed Friend": "2", - "Friend": "3", - "Neutral": "4", - "Suspect/Joker": "5", - "Hostile/Faker": "6" + standardId = { + "0 Pending": "0", + "1 Unknown": "1", + "2 Assumed Friend": "2", + "3 Friend": "3", + "4 Neutral": "4", + "5 Suspect/Joker": "5", + "6 Hostile/Faker": "6" } symbolSet = { - "Unspecified": "00", - "Air": "01", - "Air Missile": "02", - "Space": "05", - "Space Missile": "06", - "Land Unit": "10", - "Land Civilian Unit/Organization": "11", - "Land Equipment": "15", - "Land Installation": "20", - "Sea Surface": "30", - "Sea Subsurface": "35", - "Mine Warfare": "36", - "Activities": "40", - "Oceanographic": "46", - "Signals Intelligence - Space": "50", - "Signals Intelligence - Air": "51", - "Signals Intelligence - Land": "52", - "Signals Intelligence - Surface": "53", - "Signals Intelligence - Subsurface": "54", - "Cyberspace": "60" + "00 Unspecified": "00", + "01 Air": "01", + "02 Air Missile": "02", + "05 Space": "05", + "06 Space Missile": "06", + "10 Land Unit": "10", + "11 Land Civilian Unit/Organization": "11", + "15 Land Equipment": "15", + "20 Land Installation": "20", + "30 Sea Surface": "30", + "35 Sea Subsurface": "35", + "36 Mine Warfare": "36", + "40 Activities": "40", + "45 Atmospheric": "45", + "46 Oceanographic": "46", + "50 Signals Intelligence - Space": "50", + "51 Signals Intelligence - Air": "51", + "52 Signals Intelligence - Land": "52", + "53 Signals Intelligence - Surface": "53", + "54 Signals Intelligence - Subsurface": "54", + "60 Cyberspace": "60" } status = { - "Present": "0", - "Planned/Anticipated/Suspect": "1", - "Present/Fully capable": "2", - "Present/Damaged": "3", - "Present/Destroyed": "4", - "Present/Full to capacity": "5" + "0 Present": "0", + "1 Planned/Anticipated/Suspect": "1", + "2 Present/Fully capable": "2", + "3 Present/Damaged": "3", + "4 Present/Destroyed": "4", + "5 Present/Full to capacity": "5" } hq = { - "Unspecified": "0", - "Feint/Dummy": "1", - "Headquarters": "2", - "Feint/Dummy Headquarters": "3", - "Task Force": "4", - "Feint/Dummy Task Force": "5", - "Task Force Headquarters": "6", - "Feint/Dummy Task Force Headquarters": "7" + "0 Unspecified": "0", + "1 Feint/Dummy": "1", + "2 Headquarters": "2", + "3 Feint/Dummy Headquarters": "3", + "4 Task Force": "4", + "5 Feint/Dummy Task Force": "5", + "6 Task Force Headquarters": "6", + "7 Feint/Dummy Task Force Headquarters": "7" + } + + amplifier = { + "0 Not Applicable": "0", + "1 Echelon at brigade and below": "1", + "2 Echelon at division and above": "2", + "3 Equipment mobility on land": "3", + "4 Equipment mobility on snow": "4", + "5 Equipment mobility on water": "5", + "6 Naval towed array": "6" + } - echelon = { - "Unspecified": "00", - "Team/Crew": "11", - "Squad": "12", - "Section": "13", - "Platoon/detachment": "14", - "Company/battery/troop": "15", - "Battalion/squadron": "16", - "Regiment/group": "17", - "Brigade": "18", - "Division": "21", - "Corps/MEF": "22", - "Army": "23", - "Army Group/front": "24", - "Region/Theater": "25", - "Command": "26", - "Wheeled limited cross country": "31", - "Wheeled cross country": "32", - "Tracked": "33", - "Wheeled and tracked combination": "34", - "Towed": "35", - "Rail": "36", - "Pack animals": "37", - "Over snow (prime mover)": "41", - "Sled": "42", - "Barge": "51", - "Amphibious": "52", - "Short towed array": "61", - "Long towed Array": "62" + descriptor = { + "0 Not Applicable": "0", + '1 Echelon at brigade and below': { + "1 Team/Crew": "1", + "2 Squad": "2", + "3 Section": "3", + "4 Platoon/detachment": "4", + "5 Company/battery/troop": "5", + "6 Battalion/squadron": "6", + "7 Regiment/group": "7", + "8 Brigade": "8", + }, + '2 Echelon at division and above': { + "1 Division": "1", + "2 Corps/MEF": "2", + "3 Army": "3", + "4 Army Group/front": "4", + "5 Region/Theater": "5", + "6 Command": "6", + }, + '3 Equipment mobility on land': { + "1 Wheeled limited cross country": "1", + "2 Wheeled cross country": "2", + "3 Tracked": "3", + "4 Wheeled and tracked combination": "4", + "5 Towed": "5", + "6 Rail": "6", + "7 Pack animals": "7", + }, + '4 Equipment mobility on snow': { + "1 Over snow (prime mover)": "1", + "2 Sled": "2", + }, + '5 Equipment mobility on water': { + "1 Barge": "1", + "2 Amphibious": "2", + }, + '6 Naval towed array': { + "1 Short towed array": "1", + "2 Long towed Array": "2" + } } - entitySubtypes = { - "Unspecified": "00", - "HEADQUARTERS ELEMENT": "95", - "DIVISION AND BELOW SUPPORT": "96", - "CORPS SUPPORT": "97", - "THEATER/ECHELONS ABOVE CORPS SUPPORT": "98" + descriptor0 = { + "0 Not Applicable": "0" } + symbol_set = None + def __init__(self, code=""): super(SIDCDialog, self).__init__() self.setupUi(self) - self.icons = {} - self.m1 = {} - self.m2 = {} + self.comboContext.addItems(self.context.keys()) + self.comboStandardId.addItems(self.standardId.keys()) + self.comboSymbolSet.addItems(self.symbolSet.keys()) + self.comboStatus.addItems(self.status.keys()) + self.comboHQ.addItems(self.hq.keys()) + self.comboAmplifier.addItems(self.amplifier.keys()) + self.comboDescriptor.addItems(self.descriptor0.keys()) + self.comboEntity.addItems(symbol.SymbolSet().entity.keys()) + self.comboEntityType.addItems(symbol.SymbolSet().entityType.keys()) + self.comboEntitySubtype.addItems(symbol.SymbolSet().entitySubType.keys()) + self.comboModifier1.addItems(symbol.SymbolSet().m1.keys()) + self.comboModifier2.addItems(symbol.SymbolSet().m2.keys()) - self.comboStatus.addItems(sorted(self.status.keys())) - self.comboStandardId1.addItems(sorted(self.standardId1.keys())) - self.comboStandardId2.addItems(sorted(self.standardId2.keys())) - self.comboSubtypes.addItems(sorted(self.entitySubtypes.keys())) - self.comboEchelon.addItems(sorted(self.echelon.keys())) - self.comboHQ.addItems(sorted(self.hq.keys())) + self.comboSymbolSet.currentIndexChanged.connect(self.symbolSetChanged) + self.comboAmplifier.currentIndexChanged.connect(self.amplifierChanged) + self.comboEntity.currentIndexChanged.connect(self.entityChanged) + self.comboEntityType.currentIndexChanged.connect(self.entityTypeChanged) self.comboStatus.currentIndexChanged.connect( self.computeCodeFromCombos) - self.comboStandardId1.currentIndexChanged.connect( + self.comboContext.currentIndexChanged.connect( + self.computeCodeFromCombos) + self.comboStandardId.currentIndexChanged.connect( + self.computeCodeFromCombos) + self.comboSymbolSet.currentIndexChanged.connect( self.computeCodeFromCombos) - self.comboStandardId2.currentIndexChanged.connect( + self.comboEntity.currentIndexChanged.connect( self.computeCodeFromCombos) - self.comboSubtypes.currentIndexChanged.connect( + self.comboEntityType.currentIndexChanged.connect( self.computeCodeFromCombos) - self.comboEchelon.currentIndexChanged.connect( + self.comboEntitySubtype.currentIndexChanged.connect( self.computeCodeFromCombos) self.comboHQ.currentIndexChanged.connect( self.computeCodeFromCombos) @@ -168,12 +202,12 @@ def __init__(self, code=""): self.computeCodeFromCombos) self.comboModifier2.currentIndexChanged.connect( self.computeCodeFromCombos) - self.comboIcon.currentIndexChanged.connect( + self.comboAmplifier.currentIndexChanged.connect( self.computeCodeFromCombos) - - self.comboSymbolSet.addItems(sorted(self.symbolSet.keys())) - self.comboSymbolSet.currentIndexChanged.connect(self.symbolSetChanged) - self.symbolSetChanged() + self.comboDescriptor.currentIndexChanged.connect( + self.computeCodeFromCombos) + # self.symbolSetChanged() + # self.amplifierChanged() if code: # noinspection PyBroadException @@ -193,1706 +227,246 @@ def _setComboItem(self, combo, options, value): combo.setCurrentIndex(idx) def setValue(self, code): - stdid1 = code[2] - stdid2 = code[3] + context = code[2] + stdid = code[3] symbolSet = code[4:6] status = code[6] hq = code[7] - echelon = code[8:10] - icon = code[10:16] + amplifier = code[8] + descriptor = code[9] + # icon = code[10:16] + entity = code[10:12] + entity_type = code[12:14] + entity_subtype = code[14:16] m1 = code[16:18] m2 = code[18:20] - self._setComboItem(self.comboStandardId1, self.standardId1, stdid1) - self._setComboItem(self.comboStandardId2, self.standardId2, stdid2) + self._setComboItem(self.comboContext, self.context, context) + self._setComboItem(self.comboStandardId, self.standardId, stdid) self._setComboItem(self.comboSymbolSet, self.symbolSet, symbolSet) self._setComboItem(self.comboStatus, self.status, status) self._setComboItem(self.comboHQ, self.hq, hq) - self._setComboItem(self.comboEchelon, self.echelon, echelon) - self._setComboItem(self.comboIcon, self.icons, icon) + self._setComboItem(self.comboAmplifier, self.amplifier, amplifier) + self._setComboItem(self.comboDescriptor, self.descriptor, descriptor) + # self._setComboItem(self.comboDescriptor, self.icons, icon) + self._setComboItem(self.comboEntity, self.symbol_set.entity, entity) + self._setComboItem(self.comboEntityType, self.symbol_set.entityType, entity_type) + self._setComboItem(self.comboEntitySubtype, self.symbol_set.entitySubType, entity_subtype) self._setComboItem(self.comboModifier1, self.m1, m1) self._setComboItem(self.comboModifier2, self.m2, m2) def computeCodeFromCombos(self): symbolSet = self.symbolSet[self.comboSymbolSet.currentText()] - icon = self.icons[self.comboIcon.currentText()] - sidc = ("10" + self.standardId1[self.comboStandardId1.currentText()] + - self.standardId2[self.comboStandardId2.currentText()] + - symbolSet + - self.status[self.comboStatus.currentText()] + - self.hq[self.comboHQ.currentText()] + - self.echelon[self.comboEchelon.currentText()] + - icon + - self.m1[self.comboModifier1.currentText()] + - self.m2[self.comboModifier2.currentText()]) - if symbolSet == "10" and icon[4:6] == "00": + # descriptor = self.descriptor[self.comboAmplifier.currentText()] + ver = "10" + cont = self.context[self.comboContext.currentText()] + sid = self.standardId[self.comboStandardId.currentText()] + ss = symbolSet + stat = self.status[self.comboStatus.currentText()] + h = self.hq[self.comboHQ.currentText()] + amp = self.amplifier[self.comboAmplifier.currentText()] + desc = self.getDesc() + try: + ent = self.symbol_set.entity[self.comboEntity.currentText()] + except AttributeError: + ent = '00' + entType = self.getEntityType() + entSubType = self.getEntitySubType() + try: + m_1 = self.symbol_set.m1[self.comboModifier1.currentText()] + except AttributeError: + m_1 = '00' + try: + m_2 = self.symbol_set.m2[self.comboModifier2.currentText()] + except AttributeError: + m_2 = '00' + + sidc = (ver + cont + sid + ss + stat + h + amp + desc + ent + entType + entSubType + m_1 + m_2) + + # sidc = ("10" + self.context[self.comboContext.currentText()] + + # self.standardId[self.comboStandardId.currentText()] + + # symbolSet + + # self.status[self.comboStatus.currentText()] + + # self.hq[self.comboHQ.currentText()] + + # self.amplifier[self.comboAmplifier.currentText()] + + # desc + + # self.m1[self.comboModifier1.currentText()] + + # self.m2[self.comboModifier2.currentText()]) + + ampDesc = amp + desc + + if symbolSet == "10" and ampDesc == "00": sidc = sidc[:14] + \ - self.entitySubtypes[self.comboSubtypes.currentText()] + \ + self.getSubType() + \ sidc[16:20] self.txtCode.setText(sidc) self.renderSymbol() + def getSubType(self): + try: + self.symbol_set.entitysubtypes(self.comboEntityType.currentText()) + return self.symbol_set.entitySubType[self.comboEntitySubtype.currentText()] + except KeyError: + return '00' + + def getEntityType(self): + if '00' in self.comboEntity.currentText(): + return '00' + else: + try: + return self.symbol_set.entitytypes(self.comboEntity.currentText())[self.comboEntityType.currentText()] + except KeyError: + return '00' + except TypeError: + return '00' + # return self.symbol_set.entitytypes(self.comboEntity.currentText()) + + def getEntitySubType(self): + if '00' in self.comboEntityType.currentText(): + return '00' + else: + try: + return self.symbol_set.entitysubtypes(self.comboEntityType.currentText())[self.comboEntitySubtype.currentText()] + except KeyError: + return '00' + except TypeError: + return '00' + # return self.symbol_set.entitysubtypes(self.comboEntityType.currentText()) + + def getDesc(self): + amp = self.comboAmplifier.currentText() + descriptor = self.comboDescriptor.currentText() + + if '0' in amp and '0' in descriptor: + return '0' + else: + return self.descriptor[self.comboAmplifier.currentText()][self.comboDescriptor.currentText()] + + def amplifierChanged(self): + self.comboDescriptor.blockSignals(True) + try: + descriptorDict = self.descriptor[self.comboAmplifier.currentText()] + self.comboDescriptor.clear() + self.comboDescriptor.addItems(descriptorDict.keys()) + except KeyError as e: + self.comboDescriptor.clear() + self.comboDescriptor.blockSignals(False) + + def entityChanged(self): + self.comboEntityType.blockSignals(True) + entityTypeDict = self.symbol_set.entitytypes(self.comboEntity.currentText()) + if isinstance(entityTypeDict, dict): + self.symbol_set.entityType.update(entityTypeDict) + self.comboEntityType.clear() + self.comboEntityType.addItems(entityTypeDict.keys()) + self.comboEntityType.blockSignals(False) + + def entityTypeChanged(self): + self.comboEntitySubtype.blockSignals(True) + entitySubTypeDict = self.symbol_set.entitysubtypes(self.comboEntityType.currentText()) + if isinstance(entitySubTypeDict, dict): + self.symbol_set.entitySubType.update(entitySubTypeDict) + self.comboEntitySubtype.clear() + self.comboEntitySubtype.addItems(entitySubTypeDict.keys()) + self.comboEntitySubtype.blockSignals(False) + def symbolSetChanged(self): - symbolSet = self.symbolSet[self.comboSymbolSet.currentText()] + self.comboSymbolSet.blockSignals(True) + selected_symbol_set = self.symbolSet[self.comboSymbolSet.currentText()] # Air - if symbolSet == "01": - self.icons = { - 'Military': '110000', - 'Military.Fixed Wing': '110100', - 'Military.Fixed Wing.Medical Evacuation (MEDEVAC)': '110101', - 'Military.Fixed Wing.Attack/Strike': '110102', - 'Military.Fixed Wing.Bomber': '110103', - 'Military.Fixed Wing.Fighter': '110104', - 'Military.Fixed Wing.Fighter/Bomber': '110105', - 'Military.Fixed Wing.{reserved for future use}': '110106', - 'Military.Fixed Wing.Cargo': '110107', - 'Military.Fixed Wing.Electronic Combat (EC)/Jammer': '110108', - 'Military.Fixed Wing.Tanker': '110109', - 'Military.Fixed Wing.Patrol': '110110', - 'Military.Fixed Wing.Reconnaissance': '110111', - 'Military.Fixed Wing.Trainer': '110112', - 'Military.Fixed Wing.Utility': '110113', - 'Military.Fixed Wing.Vertical or Short Take-off and Landing (VSTOL)': '110114', - 'Military.Fixed Wing.Airborne Command Post (ACP)': '110115', - 'Military.Fixed Wing.Airborne Early Warning (AEW)': '110116', - 'Military.Fixed Wing.Antisurface Warfare': '110117', - 'Military.Fixed Wing.Antisubmarine Warfare': '110118', - 'Military.Fixed Wing.Communications': '110119', - 'Military.Fixed Wing.Combat Search and Rescue (CSAR)': '110120', - 'Military.Fixed Wing.Electronic Support (ES)': '110121', - 'Military.Fixed Wing.Government': '110122', - 'Military.Fixed Wing.Mine Countermeasures (MCM)': '110123', - 'Military.Fixed Wing.Personnel Recovery': '110124', - 'Military.Fixed Wing.Search and Rescue': '110125', - 'Military.Fixed Wing.Special Operations Forces': '110126', - 'Military.Fixed Wing.Ultra Light': '110127', - 'Military.Fixed Wing.Photographic Reconnaissance': '110128', - 'Military.Fixed Wing.Very Important Person (VIP)': '110129', - 'Military.Fixed Wing.Suppression of Enemy Air Defense': '110130', - 'Military.Fixed Wing.Passenger': '110131', - 'Military.Fixed Wing.Escort': '110132', - 'Military.Fixed Wing.Electronic Attack (EA)': '110133', - 'Military.Rotary Wing': '110200', - 'Military.Unmanned Aircraft (UA) / Unmanned Aerial Vehicle (UAV) / Unmanned Aircraft System (UAS) / Remotely Piloted Vehicle (RPV)': '110300', - 'Military.Vertical-Takeoff UAV (VT-UAV)': '110400', - 'Military.Lighter Than Air': '110500', - 'Military.Airship': '110600', - 'Military.Tethered Lighter than Air': '110700', - 'Civilian': '120000', - 'Civilian.Fixed Wing': '120100', - 'Civilian.Rotary Wing': '120200', - 'Civilian.Unmanned Aircraft (UA) / Unmanned Aerial Vehicle (UAV) / Unmanned Aircraft System (UAS) / Remotely Piloted Vehicle (RPV)': '120300', - 'Civilian.Lighter Than Air': '120400', - 'Civilian.Airship': '120500', - 'Civilian.Tethered Lighter than Air': '120600', - 'Weapon': '130000', - 'Weapon.Bomb': '130100', - 'Weapon.Decoy': '130200', - 'Manual Track': '140000' - } - self.m1 = { - 'Not Applicable': '00', - 'Attack/Strike': '01', - 'Bomber': '02', - 'Cargo': '03', - 'Fighter': '04', - 'Interceptor': '05', - 'Tanker': '06', - 'Utility': '07', - 'Vertical or Short Take-off and Landing (VSTOL)/ Vertical Take-off and Landing (VTOL)': '08', - 'Passenger': '09', - 'Ultra Light': '10', - 'Airborne Command Post (ACP)': '11', - 'Airborne Early Warning (AEW)': '12', - 'Government': '13', - 'Medical Evacuation (MEDEVAC)': '14', - 'Escort': '15', - 'Electronic Combat (EC)/Jammer': '16', - 'Patrol': '17', - 'Reconnaissance': '18', - 'Trainer': '19', - 'Photographic (Reconnaissance)': '20', - 'Personnel Recovery ': '21', - 'Antisubmarine Warfare': '22', - 'Communications': '23', - 'Electronic Support (ES)': '24', - 'Mine Countermeasures (MCM)': '25', - 'Search and Rescue': '26', - 'Special Operations Forces': '27', - 'Surface Warfare': '28', - 'Very Important Person (VIP) Transport': '29', - 'Combat Search and Rescue (CSAR)': '30', - 'Suppression of Enemy Air Defenses': '31', - 'Antisurface Warfare': '32', - 'Fighter/Bomber': '33', - 'Intensive Care': '34', - 'Electronic Attack (EA)': '35', - 'Multimission': '36', - 'Hijacking': '37', - 'ASW Helo- LAMPS': '38', - 'ASW Helo - SH-60R': '39' - } - self.m2 = { - 'Not Applicable': '00', - 'Heavy': '01', - 'Medium': '02', - 'Light': '03', - 'Boom-Only': '04', - 'Drogue-Only': '05', - 'Boom and Drogue': '06', - 'Close Range': '07', - 'Short Range': '08', - 'Medium Range': '09', - 'Long Range': '10', - 'Downlinked': '11' - } + if selected_symbol_set == "01": + self.symbol_set = symbol.Air() # Air Missile - if symbolSet == "02": - self.icons = {'Missile': '110000'} - self.m1 = { - 'Unspecified': '00', - 'Air': '01', - 'Surface': '02', - 'Subsurface': '03', - 'Space': '04', - 'Anti-Ballistic': '05', - 'Ballistic': '06', - 'Cruise': '07', - 'Interceptor': '08' - } - self.m2 = { - 'Unspecified': '00', - 'Air': '01', - 'Surface': '02', - 'Subsurface': '03', - 'Space': '04', - 'Launched': '05', - 'Missile': '06', - 'Patriot': '07', - 'Standard Missile-2 (SM-2)': '08', - 'Standard Missile-6 (SM-6)': '09', - 'Evolved Sea Sparrow Missile (ESSM)': '10', - 'Rolling Airframe Missile (RAM)': '11', - 'Short Range': '12', - 'Medium Range': '13', - 'Intermediate Range': '14', - 'Long Range': '15', - 'Intercontinental': '16' - } + if selected_symbol_set == "02": + self.symbol_set = symbol.AirMissle() # Space - if symbolSet == "05": - self.icons = { - 'Military': '110000', - 'Military.Space Vehicle': '110100', - 'Military.Re-Entry Vehicle': '110200', - 'Military.Planet Lander': '110300', - 'Military.Orbiter Shuttle': '110400', - 'Military.Capsule': '110500', - 'Military.Satellite, General': '110600', - 'Military.Satellite': '110700', - 'Military.Antisatellite Weapon': '110800', - 'Military.Astronomical Satellite': '110900', - 'Military.Biosatellite': '111000', - 'Military.Communications Satellite': '111100', - 'Military.Earth Observation Satellite': '111200', - 'Military.Miniaturized Satellite': '111300', - 'Military.Navigational Satellite': '111400', - 'Military.Reconnaissance Satellite': '111500', - 'Military.Space Station': '111600', - 'Military.Tethered Satellite': '111700', - 'Military.Weather Satellite': '111800', - 'Military.Space Launched Vehicle (SLV)': '111900', - 'Civilian': '120000', - 'Civilian.Orbiter Shuttle': '120100', - 'Civilian.Capsule': '120200', - 'Civilian.Satellite': '120300', - 'Civilian.Astronomical Satellite': '120400', - 'Civilian.Biosatellite': '120500', - 'Civilian.Communications Satellite': '120600', - 'Civilian.Earth Observation Satellite': '120700', - 'Civilian.Miniaturized Satellite': '120800', - 'Civilian.Navigational Satellite': '120900', - 'Civilian.Space Station': '121000', - 'Civilian.Tethered Satellite': '121100', - 'Civilian.Weather Satellite': '121200', - 'Manual Track': '130000' - } - self.m1 = { - 'Unspecified': '00', - 'Low Earth Orbit (LEO)': '01', - 'Medium Earth Orbit (MEO)': '02', - 'High Earth Orbit (HEO)': '03', - 'Geosynchronous Orbit (GSO)': '04', - 'Geostationary Orbit (GO)': '05', - 'Molniya Orbit (MO)': '06' - } - self.m2 = { - 'Unspecified': '00', - 'Optical': '01', - 'Infrared': '02', - 'Radar': '03', - 'Signals Intelligence (SIGINT)': '04' - } + if selected_symbol_set == "05": + self.symbol_set = symbol.Space() # Space Missile - if symbolSet == "06": - self.icons = {'Missile': '110000'} - self.m1 = { - 'Unspecified': '00', - 'Ballistic': '01', - 'Space': '02', - 'Interceptor': '03', - 'Reserved for Future Use': '04-98' - } - self.m2 = { - 'Unspecified': '00', - 'Short Range': '01', - 'Medium Range': '02', - 'Intermediate Range': '03', - 'Long Range': '04', - 'Intercontinental ': '05', - 'Arrow': '06', - 'Ground-Based Interceptor (GBI)': '07', - 'Patriot': '08', - 'Standard Missile Terminal Phase (SM-T)': '09', - 'Standard Missile - 3 (SM-3)': '10', - 'Terminal High Altitude Area Defense (THAAD)': '11', - 'Space': '12' - } + if selected_symbol_set == "06": + self.symbol_set = symbol.SpaceMissle() # Land Unit - if symbolSet == "10": - self.icons = { - 'Command and Control': '110000', - 'Command and Control.Broadcast Transmitter Antennae': '110100', - 'Command and Control.Civil Affairs ': '110200', - 'Command and Control.Civil-Military Cooperation ': '110300', - 'Command and Control.Information Operations': '110400', - 'Command and Control.Liaison': '110500', - 'Command and Control.Military Information Support Operations (MISO)': '110600', - 'Command and Control.Military Information Support Operations (MISO).Broadcast Transmitter Antennae': '110601', - 'Command and Control.Radio': '110700', - 'Command and Control.Radio Relay': '110800', - 'Command and Control.Radio Teletype Center': '110900', - 'Command and Control.Signal': '111000', - 'Command and Control.Signal.Radio': '111001', - 'Command and Control.Signal.Radio Relay': '111002', - 'Command and Control.Signal.Teletype': '111003', - 'Command and Control.Signal.Tactical Satellite ': '111004', - 'Command and Control.Signal.Video Imagery (Combat Camera)': '111005', - 'Command and Control.Signal.Headquarters Element': '111095', - 'Command and Control.Signal.Corps Support ': '111097', - 'Command and Control.Signal.Theatre/Echelons Above Corps Support': '111098', - 'Command and Control.Tactical Satellite': '111100', - 'Command and Control.Video Imagery (Combat Camera)': '111200', - 'Movement and Maneuver': '120000', - 'Movement and Maneuver.Air Assault with Organic Lift': '120100', - 'Movement and Maneuver.Air Traffic Services/Airfield Operations': '120200', - 'Movement and Maneuver.Amphibious': '120300', - 'Movement and Maneuver.Antitank/Antiarmor': '120400', - 'Movement and Maneuver.Antitank/Antiarmor.Armored': '120401', - 'Movement and Maneuver.Antitank/Antiarmor.Motorized': '120402', - 'Movement and Maneuver.Armor/Armored/Mechanized/Self-Propelled/ Tracked': '120500', - 'Movement and Maneuver.Armor/Armored/Mechanized/Self-Propelled/ Tracked.Reconnaissance/Cavalry/Scout': '120501', - 'Movement and Maneuver.Armor/Armored/Mechanized/Self-Propelled/ Tracked.Amphibious': '120502', - 'Movement and Maneuver.Armor/Armored/Mechanized/Self-Propelled/ Tracked.Headquarters Element': '120595', - 'Movement and Maneuver.Army Aviation/Aviation Rotary Wing': '120600', - 'Movement and Maneuver.Army Aviation/Aviation Rotary Wing.Reconnaissance': '120601', - 'Movement and Maneuver.Army Aviation/Aviation Rotary Wing.Headquarters Element': '120695', - 'Movement and Maneuver.Army Aviation/Aviation Rotary Wing.Corps Support': '120697', - 'Movement and Maneuver.Army Aviation/Aviation Rotary Wing.Theatre/Echelons Above Corps Support': '120698', - 'Movement and Maneuver.Aviation Composite': '120700', - 'Movement and Maneuver.Aviation Composite.Headquarters Element': '120795', - 'Movement and Maneuver.Aviation Fixed Wing': '120800', - 'Movement and Maneuver.Aviation Fixed Wing.Reconnaissance': '120801', - 'Movement and Maneuver.Aviation Fixed Wing.Headquarters Element': '120895', - 'Movement and Maneuver.Combat': '120900', - 'Movement and Maneuver.Combined Arms': '121000', - 'Movement and Maneuver.Combined Arms.Headquarters Element': '121095', - 'Movement and Maneuver.Infantry': '121100', - 'Movement and Maneuver.Infantry.Amphibious': '121101', - 'Movement and Maneuver.Infantry.Armored/Mechanized/Tracked': '121102', - 'Movement and Maneuver.Infantry.Main Gun System ': '121103', - 'Movement and Maneuver.Infantry.Motorized ': '121104', - 'Movement and Maneuver.Infantry.Infantry Fighting Vehicle': '121105', - 'Movement and Maneuver.Infantry.Headquarters Element ': '121195', - 'Movement and Maneuver.Observer': '121200', - 'Movement and Maneuver.Reconnaissance/Cavalry/Scout': '121300', - 'Movement and Maneuver.Reconnaissance/Cavalry/Scout.Reconnaissance and Surveillance': '121301', - 'Movement and Maneuver.Reconnaissance/Cavalry/Scout.Marine': '121302', - 'Movement and Maneuver.Reconnaissance/Cavalry/Scout.Motorized': '121303', - 'Movement and Maneuver.Reconnaissance/Cavalry/Scout.Headquarters Element': '121395', - 'Movement and Maneuver.Sea Air Land (SEAL)': '121400', - 'Movement and Maneuver.Sniper': '121500', - 'Movement and Maneuver.Surveillance': '121600', - 'Movement and Maneuver.Special Forces': '121700', - 'Movement and Maneuver.Special Forces.Headquarters Element': '121795', - 'Movement and Maneuver.Special Operations Forces (SOF)': '121800', - 'Movement and Maneuver.Special Operations Forces (SOF).Fixed Wing MISO': '121801', - 'Movement and Maneuver.Special Operations Forces (SOF).Ground': '121802', - 'Movement and Maneuver.Special Operations Forces (SOF).Special Boat': '121803', - 'Movement and Maneuver.Special Operations Forces (SOF).Special SSNR': '121804', - 'Movement and Maneuver.Special Operations Forces (SOF).Underwater Demolition Team': '121805', - 'Movement and Maneuver.Unmanned Aerial Systems': '121900', - 'Fires': '130000', - 'Fires.Air Defense': '130100', - 'Fires.Air Defense.Main Gun System': '130101', - 'Fires.Air Defense.Missile': '130102', - 'Fires.Air Defense.Headquarters Element': '130195', - 'Fires.Air/Land Naval Gunfire Liaison': '130200', - 'Fires.Field Artillery': '130300', - 'Fires.Field Artillery.Self-propelled': '130301', - 'Fires.Field Artillery.Target Acquition': '130302', - 'Fires.Field Artillery.Headquarters Element': '130395', - 'Fires.Field Artillery Observer': '130400', - 'Fires.Joint Fire Support': '130500', - 'Fires.Meteorological': '130600', - 'Fires.Missile': '130700', - 'Fires.Mortar': '130800', - 'Fires.Mortar.Armored/Mechanized/Tracked': '130801', - 'Fires.Mortar.Self-Propelled Wheeled': '130802', - 'Fires.Mortar.Towed': '130803', - 'Fires.Survey': '130900', - 'Protection': '140000', - 'Protection.Chemical Biological Radiological Nuclear Defense': '140100', - 'Protection.Chemical Biological Radiological Nuclear Defense.Mechanized': '140101', - 'Protection.Chemical Biological Radiological Nuclear Defense.Motorized': '140102', - 'Protection.Chemical Biological Radiological Nuclear Defense.Reconnaissance': '140103', - 'Protection.Chemical Biological Radiological Nuclear Defense.Reconnaissance Armored': '140104', - 'Protection.Chemical Biological Radiological Nuclear Defense.Reconnaissance Equiped': '140105', - 'Protection.Chemical Biological Radiological Nuclear Defense.Headquarters Element': '140195', - 'Protection.Combat Support (Maneuver Enhancement)': '140200', - 'Protection.Combat Support (Maneuver Enhancement).Headquarters Element': '140295', - 'Protection.Criminal Investigation Division': '140300', - 'Protection.Diving': '140400', - 'Protection.Dog': '140500', - 'Protection.Drilling': '140600', - 'Protection.Engineer': '140700', - 'Protection.Engineer.Mechanized': '140701', - 'Protection.Engineer.Motorized': '140702', - 'Protection.Engineer.Reconnaissance': '140703', - 'Protection.Engineer.Headquarters Element': '140795', - 'Protection.Explosive Ordnance Disposal (EOD)': '140800', - 'Protection.Field Camp Construction': '140900', - 'Protection.Fire Fighting/Fire Protection': '141000', - 'Protection.Geospatial Support/Geospatial Information Support': '141100', - 'Protection.Military Police': '141200', - 'Protection.Military Police.Headquarters Element': '141295', - 'Protection.Mine': '141300', - 'Protection.Mine Clearing': '141400', - 'Protection.Mine Launching': '141500', - 'Protection.Mine Laying': '141600', - 'Protection.Security': '141700', - 'Protection.Security.Mechanized': '141701', - 'Protection.Security.Motorized': '141702', - 'Protection.Search and Rescue': '141800', - 'Protection.Security Police (Air)': '141900', - 'Protection.Shore Patrol': '142000', - 'Protection.Topographic': '142100', - 'Intelligence': '150000', - 'Intelligence.Analysis': '150100', - 'Intelligence.Counterintelligence': '150200', - 'Intelligence.Direction Finding': '150300', - 'Intelligence.Electronic Ranging': '150400', - 'Intelligence.Electronic Warfare': '150500', - 'Intelligence.Electronic Warfare.Analysis': '150501', - 'Intelligence.Electronic Warfare.Direction Finding': '150502', - 'Intelligence.Electronic Warfare.Intercept': '150503', - 'Intelligence.Electronic Warfare.Jamming': '150504', - 'Intelligence.Electronic Warfare.Search': '150505', - 'Intelligence.Intercept (Search and Recording)': '150600', - 'Intelligence.Interrogation': '150700', - 'Intelligence.Jamming': '150800', - 'Intelligence.Joint Intelligence Center': '150900', - 'Intelligence.Military Intelligence': '151000', - 'Intelligence.Military Intelligence.Headquarters Element': '151095', - 'Intelligence.Search': '151100', - 'Intelligence.Sensor': '151200', - 'Sustainment': '160000', - 'Sustainment.Headquarters Element ': '160095', - 'Sustainment.Corps Support ': '160097', - 'Sustainment.Theatre/Echelons Above Corps Support': '160098', - 'Sustainment.Administrative': '160100', - 'Sustainment.Administrative.Corps Support': '160197', - 'Sustainment.Administrative.Theatre/Echelons Above Corps Support': '160198', - 'Sustainment.All Classes of Supply': '160200', - 'Sustainment.Airport of Debarkation/Airport of Embarkation ': '160300', - 'Sustainment.Ammunition': '160400', - 'Sustainment.Band': '160500', - 'Sustainment.Combat Service Support': '160600', - 'Sustainment.Finance': '160700', - 'Sustainment.Finance.Corps Support': '160797', - 'Sustainment.Finance.Theatre/Echelons Above Corps Support': '160798', - 'Sustainment.Judge Advocate General': '160800', - 'Sustainment.Labor': '160900', - 'Sustainment.Laundry/Bath': '161000', - 'Sustainment.Maintenance': '161100', - 'Sustainment.Maintenance.Headquarters Element ': '161195', - 'Sustainment.Maintenance.Corps Support ': '161197', - 'Sustainment.Maintenance.Theatre/Echelons Above Corps Support': '161198', - 'Sustainment.Material': '161200', - 'Sustainment.Medical': '161300', - 'Sustainment.Medical.Headquarters Element ': '161395', - 'Sustainment.Medical.Corps Support ': '161397', - 'Sustainment.Medical.Theatre/Echelons Above Corps Support': '161398', - 'Sustainment.Medical Treatment Facility': '161400', - 'Sustainment.Morale, Welfare and Recreation': '161500', - 'Sustainment.Mortuary Affairs/Graves Registration': '161600', - 'Sustainment.Multiple Classes of Supply': '161700', - 'Sustainment.NATO Supply Class I': '161800', - 'Sustainment.NATO Supply Class II': '161900', - 'Sustainment.NATO Supply Class III': '162000', - 'Sustainment.NATO Supply Class IV': '162100', - 'Sustainment.NATO Supply Class V': '162200', - 'Sustainment.Ordnance': '162300', - 'Sustainment.Ordnance.Headquarters Element ': '162395', - 'Sustainment.Ordnance.Corps Support ': '162397', - 'Sustainment.Ordnance.Theatre/Echelons Above Corps Support': '162398', - 'Sustainment.Personnel Services': '162400', - 'Sustainment.Personnel Services.Headquarters Element': '162495', - 'Sustainment.Petroleum, Oil and Lubricants': '162500', - 'Sustainment.Pipeline': '162600', - 'Sustainment.Postal': '162700', - 'Sustainment.Public Affairs/Public Information': '162800', - 'Sustainment.Quartermaster': '162900', - 'Sustainment.Quartermaster.Headquarters Element ': '162995', - 'Sustainment.Quartermaster.Corps Support ': '162997', - 'Sustainment.Quartermaster.Theatre/Echelons Above Corps Support': '162998', - 'Sustainment.Railhead': '163000', - 'Sustainment.Religious Support': '163100', - 'Sustainment.Replacement Holding Unit': '163200', - 'Sustainment.Sea Port of Debarkation/Sea Port of Embarkation ': '163300', - 'Sustainment.Supply': '163400', - 'Sustainment.Joint Information Bureau': '163500', - 'Sustainment.Joint Information Bureau.Corps Support ': '163597', - 'Sustainment.Joint Information Bureau.Theatre/Echelons Above Corps Support': '163598', - 'Sustainment.Transportation': '163600', - 'Sustainment.Transportation.Headquarters Element ': '163695', - 'Sustainment.Transportation.Corps Support ': '163697', - 'Sustainment.Transportation.Theatre/Echelons Above Corps Support': '163698', - 'Sustainment.US Supply Class I': '163700', - 'Sustainment.US Supply Class II': '163800', - 'Sustainment.US Supply Class III': '163900', - 'Sustainment.US Supply Class IV': '164000', - 'Sustainment.US Supply Class V': '164100', - 'Sustainment.US Supply Class VI': '164200', - 'Sustainment.US Supply Class VII': '164300', - 'Sustainment.US Supply Class VIII': '164400', - 'Sustainment.US Supply Class IX': '164500', - 'Sustainment.US Supply Class X': '164600', - 'Sustainment.Water': '164700', - 'Sustainment.Water Purification': '164800', - 'Sustainment.Broadcast': '164900', - 'Naval ': '170000', - 'Naval .Naval': '170100', - 'Named Headquarters': '180000', - 'Named Headquarters.Allied Command Europe Rapid Reaction Corps (ARRC)': '180100', - 'Named Headquarters.Allied Command Operations': '180200', - 'Named Headquarters.International Security Assistance Force (ISAF)': '180300', - 'Named Headquarters.Multinational (MN)': '180400', - 'Emergency Operation': '190000', - 'Law Enforcement': '200000', - 'Law Enforcement.Bureau of Alcohol, Tobacco, Firearms and Explosives (ATF) (Department of Justice)': '200100', - 'Law Enforcement.Border Patrol': '200200', - 'Law Enforcement.Customs Service': '200300', - 'Law Enforcement.Drug Enforcement Administration (DEA)': '200400', - 'Law Enforcement.Department of Justice (DOJ)': '200500', - 'Law Enforcement.Federal Bureau of Investigation (FBI)': '200600', - 'Law Enforcement.Police': '200700', - 'Law Enforcement.Prison': '200800', - 'Law Enforcement.United States Secret Service (USSS)': '200900', - 'Law Enforcement.Transportation Security Administration (TSA)': '201000', - 'Law Enforcement.Coast Guard': '201100', - 'Law Enforcement.US Marshals Service': '201200', - 'Law Enforcement.Internal Security Force': '201300' - } - self.m1 = { - 'Unspecified': '00', - 'Air Mobile/Air Assault (US only)': '01', - 'Area': '02', - 'Attack': '03', - 'Biological': '04', - 'Border': '05', - 'Bridging': '06', - 'Chemical': '07', - 'Close Protection': '08', - 'Combat': '09', - 'Command and Control': '10', - 'Communications Contingency Package': '11', - 'Construction': '12', - 'Cross Cultural Communication': '13', - 'Crowd and Riot Control': '14', - 'Decontamination': '15', - 'Detention': '16', - 'Direct Communications': '17', - 'Diving': '18', - 'Division': '19', - 'Dog': '20', - 'Drilling': '21', - 'Electro-Optical': '22', - 'Enhanced': '23', - 'Explosive Ordnance Disposal (EOD)': '24', - 'Fire Direction Center': '25', - 'Force': '26', - 'Forward': '27', - 'Ground Station Module': '28', - 'Landing Support': '29', - 'Large Extension Node': '30', - 'Maintenance': '31', - 'Meteorological': '32', - 'Mine Countermeasure': '33', - 'Missile': '34', - 'Mobile Advisor and Support': '35', - 'Mobile Subscriber Equipment': '36', - 'Mobility Support': '37', - 'Movement Control Center': '38', - 'Multinational': '39', - 'Multinational Specialized Unit': '40', - 'Multiple Rocket Launcher': '41', - 'NATO Medical Role 1 ': '42', - 'NATO Medical Role 2': '43', - 'NATO Medical Role 3': '44', - 'NATO Medical Role 4': '45', - 'Naval': '46', - 'Node Center': '47', - 'Nuclear': '48', - 'Operations': '49', - 'Radar': '50', - 'Radio Frequency Identification (RFID) Interrogator / Sensor': '51', - 'Radiological': '52', - 'Search and Rescue': '53', - 'Security': '54', - 'Sensor': '55', - 'Sensor Control Module (SCM)': '56', - 'Signals Intelligence': '57', - 'Single Shelter Switch': '58', - 'Single Rocket Launcher': '59', - 'Smoke': '60', - 'Sniper': '61', - 'Sound Ranging': '62', - 'Special Operations Forces (SOF)': '63', - 'Special Weapons and Tactics': '64', - 'Survey': '65', - 'Tactical Exploitation': '66', - 'Target Acquisition': '67', - 'Topographic': '68', - 'Utility': '69', - 'Video Imagery (Combat Camera)': '70', - 'Accident': '71', - 'Other': '72', - 'Civilian': '73', - 'Antisubmarine Warfare': '74', - 'Medevac': '75', - 'Ranger': '76', - 'Support': '77', - 'Aviation': '78' - } - self.m2 = { - 'Unspecified': '00', - 'Airborne': '01', - 'Arctic': '02', - 'Battle Damage Repair': '03', - 'Bicycle Equipped': '04', - 'Casualty Staging': '05', - 'Clearing': '06', - 'Close Range': '07', - 'Control': '08', - 'Decontamination': '09', - 'Demolition': '10', - 'Dental': '11', - 'Digital': '12', - 'Enhanced Position Location Reporting System (EPLRS)': '13', - 'Equipment': '14', - 'Heavy': '15', - 'High Altitude': '16', - 'Intermodal': '17', - 'Intensive Care': '18', - 'Light': '19', - 'Laboratory': '20', - 'Launcher': '21', - 'Long Range': '22', - 'Low Altitude': '23', - 'Medium': '24', - 'Medium Altitude': '25', - 'Medium Range': '26', - 'Mountain': '27', - 'High to Medium Altitude': '28', - 'Multi�Channel': '29', - 'Optical (Flash)': '30', - 'Pack Animal': '31', - 'Patient Evacuation Coordination': '32', - 'Preventive Maintenance': '33', - 'Psychological': '34', - 'Radio Relay Line of Sight': '35', - 'Railroad': '36', - 'Recovery (Unmanned Systems)': '37', - 'Recovery (Maintenance)': '38', - 'Rescue Coordination Center': '39', - 'Riverine': '40', - 'Single Channel': '41', - 'Ski': '42', - 'Short Range': '43', - 'Strategic': '44', - 'Support': '45', - 'Tactical': '46', - 'Towed': '47', - 'Troop': '48', - 'Vertical or Short Take�Off and Landing (VTOL/VSTOL)': '49', - 'Veterinary': '50', - 'Wheeled': '51', - 'High to Low Altitude': '52', - 'Medium to Low Altitude': '53', - 'Attack': '54', - 'Refuel': '55', - 'Utility': '56', - 'Combat Search and Rescue': '57' - } + if selected_symbol_set == "10": + self.symbol_set = symbol.LandUnit() # Land civilian unit - if symbolSet == "11": - self.icons = { - 'Civilian': '110000', - 'Civilian.Environmental Protection': '110100', - 'Civilian.Governmental Organization': '110200', - 'Civilian.Individual': '110300', - 'Civilian.Organization or Group': '110400', - 'Civilian.Killing Victim': '110500', - 'Civilian.Killing Victims': '110600', - 'Civilian.Victim of an Attempted Crime': '110700', - 'Civilian.Spy': '110800', - 'Civilian.Composite Loss': '110900', - 'Civilian.Emergency Medical Operation': '111000' - } - self.m1 = { - 'Unspecified': '00', - 'Assassination': '01', - 'Execution (Wrongful Killing)': '02', - 'Murder Victims': '03', - 'Hijacking': '04', - 'Kidnapping': '05', - 'Piracy': '06', - 'Rape': '07', - 'Civilian': '08', - 'Displaced Person(s), Refugee(s) and Evacuee(s)': '09', - 'Foreign Fighter(s)': '10', - 'Gang Member or Gang': '11', - 'Government Organization': '12', - 'Leader or Leadership': '13', - 'Nongovernmental Organization Member or Nongovernmental Organization': '14', - 'Coerced/Impressed Recruit': '15', - 'Willing Recruit': '16', - 'Religious or Religious Organization': '17', - 'Targeted Individual or Organization': '18', - 'Terrorist or Terrorist Organization': '19', - 'Speaker': '20', - 'Accident': '21', - 'Combat': '22', - 'Other': '23', - 'Loot': '24' - } - self.m2 = {'Unspecified': '00', 'Leader or Leadership': '01'} + if selected_symbol_set == "11": + self.symbol_set = symbol.LandCivilianUnit() # Land Equipment - if symbolSet == "15": - self.icons = { - 'Weapons/Weapons System': '110000', - 'Weapons/Weapons System.Rifle': '110100', - 'Weapons/Weapons System.Rifle.Single Shot Rifle': '110101', - 'Weapons/Weapons System.Rifle.Semiautomatic Rifle': '110102', - 'Weapons/Weapons System.Rifle.Automatic Rifle': '110103', - 'Weapons/Weapons System.Machine Gun': '110200', - 'Weapons/Weapons System.Machine Gun.Light ': '110201', - 'Weapons/Weapons System.Machine Gun.Medium ': '110202', - 'Weapons/Weapons System.Machine Gun.Heavy': '110203', - 'Weapons/Weapons System.Grenade Launcher': '110300', - 'Weapons/Weapons System.Grenade Launcher.Light': '110301', - 'Weapons/Weapons System.Grenade Launcher.Medium': '110302', - 'Weapons/Weapons System.Grenade Launcher.Heavy': '110303', - 'Weapons/Weapons System.Flame Thrower': '110400', - 'Weapons/Weapons System.Air Defense Gun': '110500', - 'Weapons/Weapons System.Air Defense Gun.Light': '110501', - 'Weapons/Weapons System.Air Defense Gun.Medium': '110502', - 'Weapons/Weapons System.Air Defense Gun.Heavy': '110503', - 'Weapons/Weapons System.Antitank Gun': '110600', - 'Weapons/Weapons System.Antitank Gun.Light': '110601', - 'Weapons/Weapons System.Antitank Gun.Medium': '110602', - 'Weapons/Weapons System.Antitank Gun.Heavy': '110603', - 'Weapons/Weapons System.Direct Fire Gun': '110700', - 'Weapons/Weapons System.Direct Fire Gun.Light': '110701', - 'Weapons/Weapons System.Direct Fire Gun.Medium': '110702', - 'Weapons/Weapons System.Direct Fire Gun.Heavy': '110703', - 'Weapons/Weapons System.Recoilless Gun': '110800', - 'Weapons/Weapons System.Recoilless Gun.Light': '110801', - 'Weapons/Weapons System.Recoilless Gun.Medium': '110802', - 'Weapons/Weapons System.Recoilless Gun.Heavy': '110803', - 'Weapons/Weapons System.Howitzer': '110900', - 'Weapons/Weapons System.Howitzer.Light': '110901', - 'Weapons/Weapons System.Howitzer.Medium': '110902', - 'Weapons/Weapons System.Howitzer.Heavy': '110903', - 'Weapons/Weapons System.Missile Launcher': '111000', - 'Weapons/Weapons System.Missile Launcher.Light': '111001', - 'Weapons/Weapons System.Missile Launcher.Medium': '111002', - 'Weapons/Weapons System.Missile Launcher.Heavy': '111003', - 'Weapons/Weapons System.Air Defense Missile Launcher': '111100', - 'Weapons/Weapons System.Air Defense Missile Launcher.Light': '111101', - 'Weapons/Weapons System.Air Defense Missile Launcher.Light, Light Transporter-Launcher and Radar (TLAR)': '111102', - 'Weapons/Weapons System.Air Defense Missile Launcher.Light, Light Tactical Landing Approach Radar (TELAR)': '111103', - 'Weapons/Weapons System.Air Defense Missile Launcher.Medium': '111104', - 'Weapons/Weapons System.Air Defense Missile Launcher.Medium, TLAR': '111105', - 'Weapons/Weapons System.Air Defense Missile Launcher.Medium, TELAR': '111106', - 'Weapons/Weapons System.Air Defense Missile Launcher.Heavy': '111107', - 'Weapons/Weapons System.Air Defense Missile Launcher.Heavy, TLAR': '111108', - 'Weapons/Weapons System.Air Defense Missile Launcher.Heavy, TELAR': '111109', - 'Weapons/Weapons System.Antitank Missile Launcher': '111200', - 'Weapons/Weapons System.Antitank Missile Launcher.Light': '111201', - 'Weapons/Weapons System.Antitank Missile Launcher.Medium': '111202', - 'Weapons/Weapons System.Antitank Missile Launcher.Heavy': '111203', - 'Weapons/Weapons System.Surface-to-Surface Missile Launcher': '111300', - 'Weapons/Weapons System.Surface-to-Surface Missile Launcher.Light': '111301', - 'Weapons/Weapons System.Surface-to-Surface Missile Launcher.Medium': '111302', - 'Weapons/Weapons System.Surface-to-Surface Missile Launcher.Heavy': '111303', - 'Weapons/Weapons System.Mortar': '111400', - 'Weapons/Weapons System.Mortar.Light': '111401', - 'Weapons/Weapons System.Mortar.Medium': '111402', - 'Weapons/Weapons System.Mortar.Heavy': '111403', - 'Weapons/Weapons System.Single Rocket Launcher': '111500', - 'Weapons/Weapons System.Single Rocket Launcher.Light': '111501', - 'Weapons/Weapons System.Single Rocket Launcher.Medium': '111502', - 'Weapons/Weapons System.Single Rocket Launcher.Heavy': '111503', - 'Weapons/Weapons System.Multiple Rocket Launcher': '111600', - 'Weapons/Weapons System.Multiple Rocket Launcher.Light': '111601', - 'Weapons/Weapons System.Multiple Rocket Launcher.Medium': '111602', - 'Weapons/Weapons System.Multiple Rocket Launcher.Heavy': '111603', - 'Weapons/Weapons System.Antitank Rocket Launcher': '111701', - 'Weapons/Weapons System.Antitank Rocket Launcher.Light': '111701', - 'Weapons/Weapons System.Antitank Rocket Launcher.Medium': '111702', - 'Weapons/Weapons System.Antitank Rocket Launcher.Heavy': '111703', - 'Weapons/Weapons System.Nonlethal Weapon': '111800', - 'Weapons/Weapons System.Taser': '111900', - 'Weapons/Weapons System.Water Cannon': '112000', - 'Vehicle': '120000', - 'Vehicle.Armored': '120100', - 'Vehicle.Armored.Armored Fighting Vehicle': '120101', - 'Vehicle.Armored.Armored Fighting Vehicle Command and Control': '120102', - 'Vehicle.Armored.Armored Personnel Carrier': '120103', - 'Vehicle.Armored.Armored Personnel Carrier Ambulance': '120104', - 'Vehicle.Armored.Armored Protected Vehicle': '120105', - 'Vehicle.Armored.Armored Protected Vehicle Recovery': '120106', - 'Vehicle.Armored.Armored Protected Vehicle Medical Evacuation': '120107', - 'Vehicle.Armored.Armored Personnel Carrier, Recovery': '120108', - 'Vehicle.Armored.Combat Service Support Vehicle': '120109', - 'Vehicle.Armored.Light Wheeled Armored Vehicle': '120110', - 'Vehicle.Tank': '120200', - 'Vehicle.Tank.Light': '120201', - 'Vehicle.Tank.Medium': '120202', - 'Vehicle.Tank.Heavy': '120203', - 'Vehicle.Tank Recovery Vehicle': '120300', - 'Vehicle.Tank Recovery Vehicle.Light': '120301', - 'Vehicle.Tank Recovery Vehicle.Medium': '120302', - 'Vehicle.Tank Recovery Vehicle.Heavy': '120303', - 'Engineer Vehicles and Equipment': '130000', - 'Engineer Vehicles and Equipment.Bridge': '130100', - 'Engineer Vehicles and Equipment.Bridge Mounted on Utility Vehicle': '130200', - 'Engineer Vehicles and Equipment.Fixed Bridge': '130300', - 'Engineer Vehicles and Equipment.Floating Bridge': '130400', - 'Engineer Vehicles and Equipment.Folding Girder Bridge': '130500', - 'Engineer Vehicles and Equipment.Hollow Deck Bridge': '130600', - 'Engineer Vehicles and Equipment.Drill': '130700', - 'Engineer Vehicles and Equipment.Drill.Drill Mounted on Utility Vehicle': '130701', - 'Engineer Vehicles and Equipment.Earthmover': '130800', - 'Engineer Vehicles and Equipment.Earthmover.Multifunctional Earthmover/Digger': '130801', - 'Engineer Vehicles and Equipment.Mine Clearing Equipment': '130900', - 'Engineer Vehicles and Equipment.Mine Clearing Equipment.Trailer Mounted': '130901', - 'Engineer Vehicles and Equipment.Mine Clearing Equipment.Mine Clearing Equipment on Tank Chassis': '130902', - 'Engineer Vehicles and Equipment.Mine Laying Equipment': '131000', - 'Engineer Vehicles and Equipment.Mine Laying Equipment.Mine Laying Equipment on Utility Vehicle': '131001', - 'Engineer Vehicles and Equipment.Mine Laying Equipment.Armored Carrier with Volcano': '131002', - 'Engineer Vehicles and Equipment.Mine Laying Equipment.Truck Mounted with Volcano': '131003', - 'Engineer Vehicles and Equipment.Dozer': '131100', - 'Engineer Vehicles and Equipment.Dozer.Dozer , Armored': '131101', - 'Engineer Vehicles and Equipment.Armored Assault': '131200', - 'Engineer Vehicles and Equipment.Armored Engineer Recon Vehicle (AERV)': '131300', - 'Engineer Vehicles and Equipment.Backhoe': '131400', - 'Engineer Vehicles and Equipment.Construction Vehicle': '131500', - 'Engineer Vehicles and Equipment.Ferry Transporter': '131600', - 'Utility Vehicles': '140000', - 'Utility Vehicles.Utility Vehicle': '140100', - 'Utility Vehicles.Medical': '140200', - 'Utility Vehicles.Medical Evacuation': '140300', - 'Utility Vehicles.Mobile Emergency Physician': '140400', - 'Utility Vehicles.Bus': '140500', - 'Utility Vehicles.Semi-Trailer and Truck': '140600', - 'Utility Vehicles.Semi-Trailer and Truck.Light': '140601', - 'Utility Vehicles.Semi-Trailer and Truck.Medium': '140602', - 'Utility Vehicles.Semi-Trailer and Truck.Heavy': '140603', - 'Utility Vehicles.Limited Cross Country Truck': '140700', - 'Utility Vehicles.Cross Country Truck': '140800', - 'Utility Vehicles.Petroleum, Oil and Lubricant': '140900', - 'Utility Vehicles.Water': '141000', - 'Utility Vehicles.Amphibious Utility Wheeled Vehicle': '141100', - 'Utility Vehicles.Tow Truck': '141200', - 'Utility Vehicles.Tow Truck.Light': '141201', - 'Utility Vehicles.Tow Truck.Heavy': '141202', - 'Train': '150000', - 'Train.Locomotive': '150100', - 'Train.Railcar': '150200', - 'Civilian Vehicle': '160000', - 'Civilian Vehicle.Automobile': '160100', - 'Civilian Vehicle.Automobile.Compact': '160101', - 'Civilian Vehicle.Automobile.Midsize': '160102', - 'Civilian Vehicle.Automobile.Sedan': '160103', - 'Civilian Vehicle.Open-Bed Truck': '160200', - 'Civilian Vehicle.Open-Bed Truck.Pickup': '160201', - 'Civilian Vehicle.Open-Bed Truck.Small': '160202', - 'Civilian Vehicle.Open-Bed Truck.Large': '160203', - 'Civilian Vehicle.Multiple Passenger Vehicle': '160300', - 'Civilian Vehicle.Multiple Passenger Vehicle.Van': '160301', - 'Civilian Vehicle.Multiple Passenger Vehicle.Small Bus': '160302', - 'Civilian Vehicle.Multiple Passenger Vehicle.Large Bus': '160303', - 'Civilian Vehicle.Utility Vehicle': '160400', - 'Civilian Vehicle.Utility Vehicle.Sport Utility Vehicle (SUV)': '160401', - 'Civilian Vehicle.Utility Vehicle.Small Box Truck': '160402', - 'Civilian Vehicle.Utility Vehicle.Large Box Truck': '160403', - 'Civilian Vehicle.Jeep Type Vehicle': '160500', - 'Civilian Vehicle.Jeep Type Vehicle.Small/Light': '160501', - 'Civilian Vehicle.Jeep Type Vehicle.Medium': '160502', - 'Civilian Vehicle.Jeep Type Vehicle.Large/Heavy': '160503', - 'Civilian Vehicle.Tractor Trailer Truck with Box': '160600', - 'Civilian Vehicle.Tractor Trailer Truck with Box.Small/Light': '160601', - 'Civilian Vehicle.Tractor Trailer Truck with Box.Medium': '160602', - 'Civilian Vehicle.Tractor Trailer Truck with Box.Large/Heavy': '160603', - 'Civilian Vehicle.Tractor Trailer Truck with Flatbed Trailer': '160700', - 'Civilian Vehicle.Tractor Trailer Truck with Flatbed Trailer.Small/Light': '160701', - 'Civilian Vehicle.Tractor Trailer Truck with Flatbed Trailer.Medium': '160702', - 'Civilian Vehicle.Tractor Trailer Truck with Flatbed Trailer.Large/Heavy': '160703', - 'Civilian Vehicle.Known Insurgent Vehicle': '160800', - 'Civilian Vehicle.Drug Vehicle': '160900', - 'Law Enforcement': '170000', - 'Law Enforcement.Bureau of Alcohol, Tobacco, Firearms and Explosives (ATF) (Department of Justice)': '170100', - 'Law Enforcement.Border Patrol': '170200', - 'Law Enforcement.Customs Service': '170300', - 'Law Enforcement.Drug Enforcement Administration (DEA)': '170400', - 'Law Enforcement.Department of Justice (DOJ)': '170500', - 'Law Enforcement.Federal Bureau of Investigation (FBI)': '170600', - 'Law Enforcement.Police': '170700', - 'Law Enforcement.United States Secret Service (USSS)': '170800', - 'Law Enforcement.Transportation Security Administration (TSA)': '170900', - 'Law Enforcement.Coast Guard': '171000', - 'Law Enforcement.US Marshals Service': '171100', - 'Pack Animals': '180000', - 'Missile Support': '190000', - 'Missile Support.Transloader': '190100', - 'Missile Support.Transporter': '190200', - 'Missile Support.Crane/Loading Device': '190300', - 'Missile Support.Propellant Transporter': '190400', - 'Missile Support.Warhead Transporter': '190500', - 'Other Equipment': '200000', - 'Other Equipment.Antennae': '200100', - 'Other Equipment.Bomb': '200200', - 'Other Equipment.Booby Trap': '200300', - 'Other Equipment.CBRN Equipment': '200400', - 'Other Equipment.Computer System': '200500', - 'Other Equipment.Command Launch Equipment (CLE)': '200600', - 'Other Equipment.Generator Set': '200700', - 'Other Equipment.Ground-based Midcourse Defense (GMD) Fire Control (GFC) Center': '200800', - 'Other Equipment.In-Flight Interceptor Communications System (IFICS) Data Terminal (IDT)': '200900', - 'Other Equipment.Laser': '201000', - 'Other Equipment.Military Information Support Operations (MISO)': '201100', - 'Other Equipment.Sustainment Shipments': '201200', - 'Other Equipment.Tent': '201300', - 'Other Equipment.Unit Deployment Shipments': '201400', - 'Other Equipment.Emergency Medical Operation': '201500', - 'Other Equipment.Emergency Medical Operation.Medical Evacuation Helicopter': '201501', - 'Land Mines': '210000', - 'Land Mines.Land Mine': '210100', - 'Land Mines.Antipersonnel Land mine (APL)': '210200', - 'Land Mines.Antitank Mine': '210300', - 'Land Mines.Improvised Explosives Device (IED)': '210400', - 'Land Mines.Less than lethal': '210500', - 'Sensors': '220000', - 'Sensors.Sensor': '220100', - 'Sensors.Sensor Emplaced': '220200', - 'Sensors.Radar': '220300', - 'Emergency Operation': '230000', - 'Emergency Operation.Ambulance': '230100', - 'Emergency Operation.Fire Fighting/Fire Protection': '230200', - 'Manual Track': '240000' - } - self.m1 = { - 'Unspecified': '00', - 'Biological': '01', - 'Chemical': '02', - 'Early Warning Radar': '03', - 'Intrusion': '04', - 'Nuclear': '05', - 'Radiological': '06', - 'Upgraded Early Warning Radar': '07', - 'Hijacking': '08', - 'Civilian': '09' - } - self.m2 = {'': '00'} + if selected_symbol_set == "15": + self.symbol_set = symbol.LandEquipment() # Land Installation - if symbolSet == "20": - self.icons = { - 'Military/Civilian': '110000', - 'Military/Civilian.Aircraft Production/Assembly': '110100', - 'Military/Civilian.Ammunition and Explosives/Assembly': '110200', - 'Military/Civilian.Ammunition Cache': '110300', - 'Military/Civilian.Armament Production': '110400', - 'Military/Civilian.Black List Location': '110500', - 'Military/Civilian.Chemical, Biological, Radiological and Nuclear (CBRN)': '110600', - 'Military/Civilian.Engineering Equipment Production': '110700', - 'Military/Civilian.Engineering Equipment Production.Bridge': '110701', - 'Military/Civilian.Equipment Manufacture': '110800', - 'Military/Civilian.Government Leadership': '110900', - 'Military/Civilian.Gray List Location': '111000', - 'Military/Civilian.Mass Grave Site': '111100', - 'Military/Civilian.Materiel': '111200', - 'Military/Civilian.Mine': '111300', - 'Military/Civilian.Missile and Space System Production': '111400', - 'Military/Civilian.Nuclear (Non CBRN Defense)': '111500', - 'Military/Civilian.Printed Media': '111600', - 'Military/Civilian.Safe House': '111700', - 'Military/Civilian.White List Location': '111800', - 'Military/Civilian.Tented Camp': '111900', - 'Military/Civilian.Tented Camp.Displaced Persons/ Refugee/Evacuees Camp': '111901', - 'Military/Civilian.Tented Camp.Training Camp': '111902', - 'Military/Civilian.Warehouse/Storage Facility': '112000', - 'Military/Civilian.Law Enforcement': '112100', - 'Military/Civilian.Law Enforcement.Bureau of Alcohol, Tobacco, Firearms and Explosives (ATF) (Department of Justice)': '112101', - 'Military/Civilian.Law Enforcement.Border Patrol': '112102', - 'Military/Civilian.Law Enforcement.Customs Service': '112103', - 'Military/Civilian.Law Enforcement.Drug Enforcement Administration (DEA)': '112104', - 'Military/Civilian.Law Enforcement.Department of Justice (DOJ)': '112105', - 'Military/Civilian.Law Enforcement.Federal Bureau of Investigation (FBI)': '112106', - 'Military/Civilian.Law Enforcement.Police': '112107', - 'Military/Civilian.Law Enforcement.Prison': '112108', - 'Military/Civilian.Law Enforcement.United States Secret Service (USSS)': '112109', - 'Military/Civilian.Law Enforcement.Transportation Security Administration (TSA)': '112110', - 'Military/Civilian.Law Enforcement.Coast Guard': '112111', - 'Military/Civilian.Law Enforcement.US Marshals Service': '112112', - 'Military/Civilian.Emergency Operation': '112200', - 'Military/Civilian.Emergency Operation.Fire Station': '112201', - 'Military/Civilian.Emergency Operation.Emergency Medical Operation': '112202', - 'Infrastructure': '120000', - 'Infrastructure.Agriculture and Food Infrastructure': '120100', - 'Infrastructure.Agriculture and Food Infrastructure.Agriculture Laboratory': '120101', - 'Infrastructure.Agriculture and Food Infrastructure.Animal Feedlot': '120102', - 'Infrastructure.Agriculture and Food Infrastructure.Commercial Food Distribution Center': '120103', - 'Infrastructure.Agriculture and Food Infrastructure.Farm/Ranch': '120104', - 'Infrastructure.Agriculture and Food Infrastructure.Food Distribution': '120105', - 'Infrastructure.Agriculture and Food Infrastructure.Food Production Center': '120106', - 'Infrastructure.Agriculture and Food Infrastructure.Food Retail': '120107', - 'Infrastructure.Agriculture and Food Infrastructure.Grain Storage': '120108', - 'Infrastructure.Banking Finance and Insurance Infrastructure': '120200', - 'Infrastructure.Banking Finance and Insurance Infrastructure.ATM': '120201', - 'Infrastructure.Banking Finance and Insurance Infrastructure.Bank': '120202', - 'Infrastructure.Banking Finance and Insurance Infrastructure.Bullion Storage': '120203', - 'Infrastructure.Banking Finance and Insurance Infrastructure.Economic Infrastructure Asset': '120204', - 'Infrastructure.Banking Finance and Insurance Infrastructure.Federal Reserve Bank': '120205', - 'Infrastructure.Banking Finance and Insurance Infrastructure.Financial Exchange': '120206', - 'Infrastructure.Banking Finance and Insurance Infrastructure.Financial Services, Other': '120207', - 'Infrastructure.Commercial Infrastructure': '120300', - 'Infrastructure.Commercial Infrastructure.Chemical Plant': '120301', - 'Infrastructure.Commercial Infrastructure.Firearms Manufacturer': '120302', - 'Infrastructure.Commercial Infrastructure.Firearms Retailer': '120303', - 'Infrastructure.Commercial Infrastructure.Hazardous Material Production': '120304', - 'Infrastructure.Commercial Infrastructure.Hazardous Material Storage': '120305', - 'Infrastructure.Commercial Infrastructure.Industrial Site': '120306', - 'Infrastructure.Commercial Infrastructure.Landfill': '120307', - 'Infrastructure.Commercial Infrastructure.Pharmaceutical Manufacturer': '120308', - 'Infrastructure.Commercial Infrastructure.Contaminated Hazardous Waste Site': '120309', - 'Infrastructure.Commercial Infrastructure.Toxic Release Inventory': '120310', - 'Infrastructure.Educational Facilities Infrastructure': '120400', - 'Infrastructure.Educational Facilities Infrastructure.College/University': '120401', - 'Infrastructure.Educational Facilities Infrastructure.School': '120402', - 'Infrastructure.Energy Facility Infrastructure': '120500', - 'Infrastructure.Energy Facility Infrastructure.Electric Power': '120501', - 'Infrastructure.Energy Facility Infrastructure.Generation Station': '120502', - 'Infrastructure.Energy Facility Infrastructure.Natural Gas Facility': '120503', - 'Infrastructure.Energy Facility Infrastructure.Petroleum Facility': '120504', - 'Infrastructure.Energy Facility Infrastructure.Petroleum/Gas/Oil': '120505', - 'Infrastructure.Energy Facility Infrastructure.Propane Facility': '120506', - 'Infrastructure.Government Site Infrastructure': '120600', - 'Infrastructure.Medical Infrastructure': '120700', - 'Infrastructure.Medical Infrastructure.Medical': '120701', - 'Infrastructure.Medical Infrastructure.Medical Treatment Facility (Hospital)': '120702', - 'Infrastructure.Military Infrastructure': '120800', - 'Infrastructure.Military Infrastructure.Military Armory': '120801', - 'Infrastructure.Military Infrastructure.Military Base': '120802', - 'Infrastructure.Postal Services Infrastructure': '120900', - 'Infrastructure.Postal Services Infrastructure.Postal Distribution Center': '120901', - 'Infrastructure.Postal Services Infrastructure.Post Office': '120902', - 'Infrastructure.Public Venues Infrastructure': '121000', - 'Infrastructure.Public Venues Infrastructure.Enclosed Facility': '121001', - 'Infrastructure.Public Venues Infrastructure.Open Facility': '121002', - 'Infrastructure.Public Venues Infrastructure.Recreational Area': '121003', - 'Infrastructure.Public Venues Infrastructure.Religious Institution': '121004', - 'Infrastructure.Special Needs Infrastructure': '121100', - 'Infrastructure.Special Needs Infrastructure.Adult Day Care': '121101', - 'Infrastructure.Special Needs Infrastructure.Child Day Care': '121102', - 'Infrastructure.Special Needs Infrastructure.Elder Care': '121103', - 'Infrastructure.Telecommunications Infrastructure': '121200', - 'Infrastructure.Telecommunications Infrastructure.Broadcast Transmitter Antennae': '121201', - 'Infrastructure.Telecommunications Infrastructure.Telecommunications': '121202', - 'Infrastructure.Telecommunications Infrastructure.Telecommunications Tower': '121203', - 'Infrastructure.Transportation Infrastructure': '121300', - 'Infrastructure.Transportation Infrastructure.Airport/Air Base': '121301', - 'Infrastructure.Transportation Infrastructure.Air Traffic Control Facility': '121302', - 'Infrastructure.Transportation Infrastructure.Bus Station': '121303', - 'Infrastructure.Transportation Infrastructure.Ferry Terminal': '121304', - 'Infrastructure.Transportation Infrastructure.Helicopter Landing Site': '121305', - 'Infrastructure.Transportation Infrastructure.Maintenance Facility': '121306', - 'Infrastructure.Transportation Infrastructure.Railhead/Railroad Station': '121307', - 'Infrastructure.Transportation Infrastructure.Rest Stop': '121308', - 'Infrastructure.Transportation Infrastructure.Sea Port/Naval Base': '121309', - 'Infrastructure.Transportation Infrastructure.Ship Yard': '121310', - 'Infrastructure.Transportation Infrastructure.Toll Facility': '121311', - 'Infrastructure.Transportation Infrastructure.Traffic Inspection Facility': '121312', - 'Infrastructure.Transportation Infrastructure.Tunnel': '121313', - 'Infrastructure.Water Supply Infrastructure': '121400', - 'Infrastructure.Water Supply Infrastructure.Control Valve': '121401', - 'Infrastructure.Water Supply Infrastructure.Dam': '121402', - 'Infrastructure.Water Supply Infrastructure.Discharge Outfall': '121403', - 'Infrastructure.Water Supply Infrastructure.Ground Water Well': '121404', - 'Infrastructure.Water Supply Infrastructure.Pumping Station': '121405', - 'Infrastructure.Water Supply Infrastructure.Reservoir': '121406', - 'Infrastructure.Water Supply Infrastructure.Storage Tower': '121407', - 'Infrastructure.Water Supply Infrastructure.Surface Water Intake': '121408', - 'Infrastructure.Water Supply Infrastructure.Wastewater Treatment Facility': '121409', - 'Infrastructure.Water Supply Infrastructure.Water': '121410', - 'Infrastructure.Water Supply Infrastructure.Water Treatment': '121411' - } - self.m1 = { - 'Unspecified': '00', - 'Biological': '01', - 'Chemical ': '02', - 'Nuclear': '03', - 'Radiological': '04', - 'Decontamination': '05', - 'Coal': '06', - 'Geothermal': '07', - 'Hydroelectric': '08', - 'Natural Gas': '09', - 'Petroleum': '10', - 'Civilian ': '11', - 'Civilian Telephone': '12', - 'Civilian Television': '13' - } - self.m2 = { - 'Unspecified': '00', - 'Biological': '01', - 'Chemical ': '02', - 'Nuclear': '03', - 'Radiological': '04', - 'Atomic Energy Reactor': '05', - 'Nuclear Material Production': '06', - 'Nuclear Material Storage': '07', - 'Weapons Grade': '08' - } + if selected_symbol_set == "20": + self.symbol_set = symbol.LandInstallation() # Surface - if symbolSet == "30": - self.icons = { - 'Military': '110000', - 'Military Combatant': '120000', - 'Military Combatant.Carrier': '120100', - 'Military Combatant.Surface Combatant, Line': '120200', - 'Military Combatant.Surface Combatant, Line.Battleship': '120201', - 'Military Combatant.Surface Combatant, Line.Cruiser': '120202', - 'Military Combatant.Surface Combatant, Line.Destroyer': '120203', - 'Military Combatant.Surface Combatant, Line.Frigate': '120204', - 'Military Combatant.Surface Combatant, Line.Corvette': '120205', - 'Military Combatant.Surface Combatant, Line.Littoral Combatant Ship': '120206', - 'Military Combatant.Amphibious Warfare Ship': '120300', - 'Military Combatant.Amphibious Warfare Ship.Amphibious Command Ship': '120301', - 'Military Combatant.Amphibious Warfare Ship.Amphibious Assault, Non-specified': '120302', - 'Military Combatant.Amphibious Warfare Ship.Amphibious Assault Ship, General': '120303', - 'Military Combatant.Amphibious Warfare Ship.Amphibious Assault Ship, Multipurpose': '120304', - 'Military Combatant.Amphibious Warfare Ship.Amphibious Assault Ship, Helicopter': '120305', - 'Military Combatant.Amphibious Warfare Ship.Amphibious Transport Dock': '120306', - 'Military Combatant.Amphibious Warfare Ship.Landing Ship': '120307', - 'Military Combatant.Amphibious Warfare Ship.Landing Craft': '120308', - 'Military Combatant.Mine Warfare Ship': '120400', - 'Military Combatant.Mine Warfare Ship.Mine Layer': '120401', - 'Military Combatant.Mine Warfare Ship.Mine Sweeper': '120402', - 'Military Combatant.Mine Warfare Ship.Mine Sweeper, Drone': '120403', - 'Military Combatant.Mine Warfare Ship.Mine Hunter': '120404', - 'Military Combatant.Mine Warfare Ship.Mine Countermeasures': '120405', - 'Military Combatant.Mine Warfare Ship.Mine Countermeasures, Support Ship': '120406', - 'Military Combatant.Patrol Boat': '120500', - 'Military Combatant.Patrol Boat.Patrol Craft, Submarine Chaser/Escort, General': '120501', - 'Military Combatant.Patrol Boat.Patrol Ship, General': '120502', - 'Military Combatant.Decoy': '120600', - 'Military Combatant.Unmanned Surface Water Vehicle (USV)': '120700', - 'Military Combatant.Speedboat': '120800', - 'Military Combatant.Speedboat.Rigid-Hull Inflatable Boat (RHIB)': '120801', - 'Military Combatant.Jet Ski': '120900', - 'Military Combatant.Navy Task Organization': '121000', - 'Military Combatant.Navy Task Organization.Navy Task Element': '121001', - 'Military Combatant.Navy Task Organization.Navy Task Force': '121002', - 'Military Combatant.Navy Task Organization.Navy Task Group': '121003', - 'Military Combatant.Navy Task Organization.Navy Task Unit': '121004', - 'Military Combatant.Navy Task Organization.Convoy': '121005', - 'Military Combatant.Sea-Based X-Band Radar': '121100', - 'Military Non Combatant': '130000', - 'Military Non Combatant.Auxiliary Ship': '130100', - 'Military Non Combatant.Auxiliary Ship.Ammunition Ship': '130101', - 'Military Non Combatant.Auxiliary Ship.Naval Stores Ship': '130102', - 'Military Non Combatant.Auxiliary Ship.Auxiliary Flag Ship': '130103', - 'Military Non Combatant.Auxiliary Ship.Intelligence Collector': '130104', - 'Military Non Combatant.Auxiliary Ship.Oceanographic Research Ship': '130105', - 'Military Non Combatant.Auxiliary Ship.Survey Ship': '130106', - 'Military Non Combatant.Auxiliary Ship.Hospital Ship': '130107', - 'Military Non Combatant.Auxiliary Ship.Naval Cargo Ship': '130108', - 'Military Non Combatant.Auxiliary Ship.Combat Support Ship, Fast': '130109', - 'Military Non Combatant.Auxiliary Ship.Oiler, Replenishment': '130110', - 'Military Non Combatant.Auxiliary Ship.Repair Ship': '130111', - 'Military Non Combatant.Auxiliary Ship.Submarine Tender': '130112', - 'Military Non Combatant.Auxiliary Ship.Tug, Ocean Going': '130113', - 'Military Non Combatant.Service Craft/Yard': '130200', - 'Military Non Combatant.Service Craft/Yard.Barge, not Self-Propelled': '130201', - 'Military Non Combatant.Service Craft/Yard.Barge, Self-Propelled': '130202', - 'Military Non Combatant.Service Craft/Yard.Tug, Harbor': '130203', - 'Military Non Combatant.Service Craft/Yard.Launch': '130204', - 'Civilian': '140000', - 'Civilian.Merchant Ship': '140100', - 'Civilian.Merchant Ship.Cargo, General': '140101', - 'Civilian.Merchant Ship.Container Ship': '140102', - 'Civilian.Merchant Ship.Dredge': '140103', - 'Civilian.Merchant Ship.Roll On/Roll Off': '140104', - 'Civilian.Merchant Ship.Ferry': '140105', - 'Civilian.Merchant Ship.Heavy Lift': '140106', - 'Civilian.Merchant Ship.Hovercraft': '140107', - 'Civilian.Merchant Ship.Lash Carrier (with Barges)': '140108', - 'Civilian.Merchant Ship.Oiler/Tanker': '140109', - 'Civilian.Merchant Ship.Passenger': '140110', - 'Civilian.Merchant Ship.Tug, Ocean Going': '140111', - 'Civilian.Merchant Ship.Tow': '140112', - 'Civilian.Merchant Ship.Transport Ship, Hazardous Material': '140113', - 'Civilian.Merchant Ship.Junk/Dhwo': '140114', - 'Civilian.Merchant Ship.Barge, not Self-Propelled': '140115', - 'Civilian.Merchant Ship.Hospital Ship': '140116', - 'Civilian.Fishing Vessel': '140200', - 'Civilian.Fishing Vessel.Drifter': '140201', - 'Civilian.Fishing Vessel.Trawler': '140202', - 'Civilian.Fishing Vessel.Dredger': '140203', - 'Civilian.Law Enforcement Vessel': '140300', - 'Civilian.Leisure Craft, Sailing': '140400', - 'Civilian.Leisure Craft, Motorized': '140500', - 'Civilian.Leisure Craft, Motorized.Rigid-Hull Inflatable Boat (RHIB)': '140501', - 'Civilian.Leisure Craft, Motorized.Speedboat': '140502', - 'Civilian.Jet Ski': '140600', - 'Civilian.Unmanned Surface Water Vehicle (USV)': '140700', - 'Own Ship': '150000', - 'Fused Track': '160000', - 'Manual Track': '170000' - } - self.m1 = { - 'Unspecified': '00', - 'Own Ship': '01', - 'Antiair Warfare': '02', - 'Antisubmarine Warfare': '03', - 'Escort': '04', - 'Electronic Warfare': '05', - 'Intelligence, Surveillance, Reconnaissance': '06', - 'Mine Countermeasures': '07', - 'Missile Defense': '08', - 'Medical': '09', - 'Mine Warfare': '10', - 'Remote Multi-Mission Vehicle (USV-only)': '11', - 'Special Operations Forces (SOF)': '12', - 'Surface Warfare': '13', - 'Ballistic Missile ': '14', - 'Guided Missile ': '15', - 'Other Guided Missile ': '16', - 'Torpedo': '17', - 'Drone-Equipped': '18', - 'Helicopter-Equipped/VSTOL': '19', - 'Ballistic Missile Defense, Shooter ': '20', - 'Ballistic Missile Defense, Long-Range Surveillance and Track (LRS&T)': '21', - 'Sea-Base X-Band': '22', - 'Hijacking': '23' - } - self.m2 = { - 'Unspecified': '00', - 'Nuclear Powered': '01', - 'Heavy': '02', - 'Light': '03', - 'Medium': '04', - 'Dock': '05', - 'Logistics': '06', - 'Tank': '07', - 'Vehicle': '08', - 'Fast': '09', - 'Air-Cushioned (US)': '10', - 'Air-Cushioned (NATO)': '11', - 'Hydrofoil': '12', - 'Autonomous Control': '13', - 'Remotely Piloted': '14', - 'Expendable': '15' - } + if selected_symbol_set == "30": + self.symbol_set = symbol.Surface() # Sub - if symbolSet == "35": - self.icons = { - 'Military': '110000', - 'Military.Submarine': '110100', - 'Military.Submarine.Submarine, Surfaced': '110101', - 'Military.Submarine.Submarine, Snorkeling': '110102', - 'Military.Submarine.Submarine, Bottomed': '110103', - 'Military.Other Submersible': '110200', - 'Military.Nonsubmarine': '110300', - 'Military.Autonomous Underwater Vehicle (AUV)/Unmanned Underwater Vehicle (UUV)': '110400', - 'Military.Diver': '110500', - 'Civilian': '120000', - 'Civilian.Submersible': '120100', - 'Civilian.Autonomous Underwater Vehicle (AUV)/ Unmanned Underwater Vehicle (UUV)': '120200', - 'Civilian.Diver': '120300', - 'Weapon': '130000', - 'Weapon.Torpedo': '130100', - 'Weapon.Improvised Explosive Device (IED)': '130200', - 'Weapon.Decoy': '130300', - 'Echo Tracker Classifier (ETC) / Possible Contact (POSCON)': '140000', - 'Fused Track': '150000', - 'Manual Track': '160000' - } - self.m1 = { - 'Unspecified': '00', - 'Antisubmarine Warfare': '01', - 'Auxiliary': '02', - 'Command and Control': '03', - 'Intelligence, Surveillance, Reconnaissance': '04', - 'Mine Countermeasures': '05', - 'Mine Warfare': '06', - 'Surface Warfare': '07', - 'Attack': '08', - 'Ballistic Missile ': '09', - 'Guided Missile ': '10', - 'Other Guided Missile': '11', - 'Special Operations Forces (SOF)': '12', - 'Possible Submarine Low 1 ': '13', - 'Possible Submarine Low 2': '14', - 'Possible Submarine High 3': '15', - 'Possible Submarine High 4': '16', - 'Probable Submarine': '17', - 'Certain Submarine': '18', - 'Anti-torpedo Torpedo': '19', - 'Hijacking/Highjacked': '20' - } - self.m2 = { - 'Unspecified': '00', - 'Air Independent Propulsion': '01', - 'Diesel Electric, General': '02', - 'Diesel - Type 1': '03', - 'Diesel - Type 2': '04', - 'Diesel - Type 3': '05', - 'Nuclear Powered, General': '06', - 'Nuclear - Type 1': '07', - 'Nuclear - Type 2': '08', - 'Nuclear - Type 3': '09', - 'Nuclear - Type 4': '10', - 'Nuclear - Type 5': '11', - 'Nuclear - Type 6': '12', - 'Nuclear - Type 7': '13', - 'Autonomous Control': '14', - 'Remotely Piloted': '15', - 'Expendable': '16' - } + if selected_symbol_set == "35": + self.symbol_set = symbol.Sub() # Mine Warfare - if symbolSet == "36": - self.icons = { - 'Sea Mine, General': '110000', - 'Sea Mine, General.Sea Mine, Bottom': '110100', - 'Sea Mine, General.Sea Mine, Moored': '110200', - 'Sea Mine, General.Sea Mine, Floating': '110300', - 'Sea Mine, General.Sea Mine, Rising': '110400', - 'Sea Mine, General.Sea Mine, Other Position': '110500', - 'Sea Mine, General.Kingfisher': '110600', - 'Sea Mine, General.Small Object, Mine-Like': '110700', - 'Sea Mine, General.Exercise Mine, General': '110800', - 'Sea Mine, General.Exercise Mine, General.Exercise Mine, Bottom': '110801', - 'Sea Mine, General.Exercise Mine, General.Exercise Mine, Moored': '110802', - 'Sea Mine, General.Exercise Mine, General.Exercise Mine, Floating': '110803', - 'Sea Mine, General.Exercise Mine, General.Exercise Mine, Rising': '110804', - 'Sea Mine, General.Neutralized Mine, General': '110900', - 'Sea Mine, General.Neutralized Mine, General.Neutralized Mine, Bottom': '110901', - 'Sea Mine, General.Neutralized Mine, General.Neutralized Mine, Moored': '110902', - 'Sea Mine, General.Neutralized Mine, General.Neutralized Mine, Floating': '110903', - 'Sea Mine, General.Neutralized Mine, General.Neutralized Mine, Rising': '110904', - 'Sea Mine, General.Neutralized Mine, General.Neutralized Mine, Other Position': '110905', - 'Unexploded Ordnance': '120000', - 'Sea Mine Decoy': '130000', - 'Sea Mine Decoy.Sea Mine Decoy, Bottom': '130100', - 'Sea Mine Decoy.Sea Mine Decoy, Moored': '130200', - 'Mine-Like Contact (MILCO)': '140000', - 'Mine-Like Contact (MILCO).MILCO - General': '140100', - 'Mine-Like Contact (MILCO).MILCO - General.MILCO - General, Confidence.Level 1': '140101', - 'Mine-Like Contact (MILCO).MILCO - General.MILCO - General, Confidence.Level 2': '140102', - 'Mine-Like Contact (MILCO).MILCO - General.MILCO - General, Confidence.Level 3': '140103', - 'Mine-Like Contact (MILCO).MILCO - General.MILCO - General, Confidence.Level 4': '140104', - 'Mine-Like Contact (MILCO).MILCO - General.MILCO - General, Confidence.Level 5': '140105', - 'Mine-Like Contact (MILCO).MILCO - Bottom': '140200', - 'Mine-Like Contact (MILCO).MILCO - Bottom.MILCO - Bottom, ConfidenceLevel 1': '140201', - 'Mine-Like Contact (MILCO).MILCO - Bottom.MILCO - Bottom, Confidence.Level 2': '140202', - 'Mine-Like Contact (MILCO).MILCO - Bottom.MILCO - Bottom, Confidence.Level 3': '140203', - 'Mine-Like Contact (MILCO).MILCO - Bottom.MILCO - Bottom, Confidence.Level 4': '140204', - 'Mine-Like Contact (MILCO).MILCO - Bottom.MILCO - Bottom, ConfidenceLevel 5': '140205', - 'Mine-Like Contact (MILCO).MILCO - Moored': '140300', - 'Mine-Like Contact (MILCO).MILCO - Moored.MILCO - Moored, Confidence.Level 1': '140301', - 'Mine-Like Contact (MILCO).MILCO - Moored.MILCO - Moored, Confidence.Level 2': '140302', - 'Mine-Like Contact (MILCO).MILCO - Moored.MILCO - Moored, Confidence.Level 3': '140303', - 'Mine-Like Contact (MILCO).MILCO - Moored.MILCO - Moored, Confidence.Level 4': '140304', - 'Mine-Like Contact (MILCO).MILCO - Moored.MILCO - Moored, Confidence.Level 5': '140305', - 'Mine-Like Contact (MILCO).MILCO - Floating': '140400', - 'Mine-Like Contact (MILCO).MILCO - Floating.MILCO - Floating, Confidence.Level 1': '140401', - 'Mine-Like Contact (MILCO).MILCO - Floating.MILCO - Floating, Confidence.Level 2': '140402', - 'Mine-Like Contact (MILCO).MILCO - Floating.MILCO - Floating, Confidence.Level 3': '140403', - 'Mine-Like Contact (MILCO).MILCO - Floating.MILCO - Floating, Confidence.Level 4': '140404', - 'Mine-Like Contact (MILCO).MILCO - Floating.MILCO - Floating, Confidence.Level 5': '140405', - 'Mine-Like Echo (MILEC), General': '150000', - 'Mine-Like Echo (MILEC), General.Mine-Like Echo, Bottom': '150100', - 'Mine-Like Echo (MILEC), General.Mine-Like Echo, Moored': '150200', - 'Mine-Like Echo (MILEC), General.Mine-Like Echo, Floating': '150300', - 'Negative Reacquisition, General': '160000', - 'Negative Reacquisition, General.Negative Reacquisition, Bottom': '160100', - 'Negative Reacquisition, General.Negative Reacquisition, Moored': '160200', - 'Negative Reacquisition, General.Negative Reacquisition, Floating': '160300', - 'Obstructor': '170000', - 'Obstructor.Neutralized Obstructor': '170100', - 'General Mine Anchor': '180000', - 'Non-Mine Mine-Like Object (NMLO), General': '190000', - 'Non-Mine Mine-Like Object (NMLO), General.Non-Mine Mine-Like Object, Bottom': '190100', - 'Non-Mine Mine-Like Object (NMLO), General.Non-Mine Mine-Like Object, Moored': '190200', - 'Non-Mine Mine-Like Object (NMLO), General.Non-Mine Mine-Like Object, Floating': '190300', - 'Environmental Report Location': '200000', - 'Dive Report Location': '210000' - } - self.m1 = {'': '00'} - self.m2 = {'': '00'} + if selected_symbol_set == "36": + self.symbol_set = symbol.MineWarfare() # Activities - if symbolSet == "40": - self.icons = { - 'Incident': '110000', - 'Incident.Criminal Activity Incident': '110100', - 'Incident.Criminal Activity Incident.Arrest': '110101', - 'Incident.Criminal Activity Incident.Arson': '110102', - 'Incident.Criminal Activity Incident.Attempted Criminal Activity': '110103', - 'Incident.Criminal Activity Incident.Drive-by Shooting': '110104', - 'Incident.Criminal Activity Incident.Drug Related': '110105', - 'Incident.Criminal Activity Incident.Extortion': '110106', - 'Incident.Criminal Activity Incident.Graffiti': '110107', - 'Incident.Criminal Activity Incident.Killing': '110108', - 'Incident.Criminal Activity Incident.Poisoning': '110109', - 'Incident.Criminal Activity Incident.Civil Rioting': '110110', - 'Incident.Criminal Activity Incident.Booby Trap': '110111', - 'Incident.Criminal Activity Incident.Home Eviction': '110112', - 'Incident.Criminal Activity Incident.Black Marketing': '110113', - 'Incident.Criminal Activity Incident.Vandalism/Loot/Ransack/Plunder': '110114', - 'Incident.Criminal Activity Incident.Jail Break': '110115', - 'Incident.Criminal Activity Incident.Robbery': '110116', - 'Incident.Criminal Activity Incident.Theft': '110117', - 'Incident.Criminal Activity Incident.Burglary': '110118', - 'Incident.Criminal Activity Incident.Smuggling': '110119', - 'Incident.Criminal Activity Incident.Rock Throwing': '110120', - 'Incident.Criminal Activity Incident.Dead Body': '110121', - 'Incident.Criminal Activity Incident.Sabotage': '110122', - 'Incident.Criminal Activity Incident.Suspicious Activity': '110123', - 'Incident.Bomb/Bombing': '110200', - 'Incident.Bomb/Bombing.Bomb Threat': '110201', - 'Incident.IED Event': '110300', - 'Incident.IED Event.IED Explosion': '110301', - 'Incident.IED Event.Premature IED Explosion': '110302', - 'Incident.IED Event.IED Cache': '110303', - 'Incident.IED Event.IED Suicide Bomber': '110304', - 'Incident.Shooting': '110400', - 'Incident.Shooting.Sniping': '110401', - 'Incident.Illegal Drug Operation': '110500', - 'Incident.Illegal Drug Operation.Trafficking': '110501', - 'Incident.Illegal Drug Operation.Illegal Drug Lab': '110502', - 'Incident.Explosion': '110600', - 'Incident.Explosion.Grenade Explosion': '110601', - 'Incident.Explosion.Incendiary Explosion': '110602', - 'Incident.Explosion.Mine Explosion': '110603', - 'Incident.Explosion.Mortar Fire Explosion': '110604', - 'Incident.Explosion.Rocket Explosion': '110605', - 'Incident.Explosion.Bomb Explosion': '110606', - 'Civil Disturbance': '120000', - 'Civil Disturbance.Demonstration': '120100', - 'Operation': '130000', - 'Operation.Patrolling': '130100', - 'Operation.Military Information Support Operation (MISO)': '130200', - 'Operation.Military Information Support Operation (MISO).TV and Radio Propaganda': '130201', - 'Operation.Foraging/Searching': '130300', - 'Operation.Recruitment': '130400', - 'Operation.Recruitment.Willing': '130401', - 'Operation.Recruitment.Coerced/Impressed': '130402', - 'Operation.Mine Laying': '130500', - 'Operation.Spy': '130600', - 'Operation.Warrant Served': '130700', - 'Operation.Exfiltration': '130800', - 'Operation.Infiltration': '130900', - 'Operation.Meeting': '131000', - 'Operation.Meeting.Polling Place/Election': '131001', - 'Operation.Raid on House': '131100', - 'Operation.Emergency Operation': '131200', - 'Operation.Emergency Operation.Emergency Collection Evacuation Point': '131201', - 'Operation.Emergency Operation.Emergency Food Distribution': '131202', - 'Operation.Emergency Operation.Emergency Incident Command Center': '131203', - 'Operation.Emergency Operation.Emergency Operations Center': '131204', - 'Operation.Emergency Operation.Emergency Public Information Center': '131205', - 'Operation.Emergency Operation.Emergency Shelter': '131206', - 'Operation.Emergency Operation.Emergency Staging Area': '131207', - 'Operation.Emergency Operation.Emergency Water Distribution Center': '131208', - 'Operation.Emergency Medical Operation': '131300', - 'Operation.Emergency Medical Operation.EMT Station Location': '131301', - 'Operation.Emergency Medical Operation.Health Department Facility': '131302', - 'Operation.Emergency Medical Operation.Medical Facilities Outpatient': '131303', - 'Operation.Emergency Medical Operation.Morgue': '131304', - 'Operation.Emergency Medical Operation.Pharmacy': '131305', - 'Operation.Emergency Medical Operation.Triage': '131306', - 'Operation.Fire Fighting Operation': '131400', - 'Operation.Fire Fighting Operation.Fire Hydrant': '131401', - 'Operation.Fire Fighting Operation.Fire Station': '131402', - 'Operation.Fire Fighting Operation.Other Water Supply Location': '131403', - 'Operation.Law Enforcement Operation': '131500', - 'Operation.Law Enforcement Operation.Bureau of Alcohol, Tobacco, Firearms and Explosives (ATF) (Department of Justice)': '131501', - 'Operation.Law Enforcement Operation.Border Patrol': '131502', - 'Operation.Law Enforcement Operation.Customs Service': '131503', - 'Operation.Law Enforcement Operation.Drug Enforcement Administration (DEA)': '131504', - 'Operation.Law Enforcement Operation.Department of Justice (DOJ)': '131505', - 'Operation.Law Enforcement Operation.Federal Bureau of Investigation (FBI)': '131506', - 'Operation.Law Enforcement Operation.Police': '131507', - 'Operation.Law Enforcement Operation.Prison': '131508', - 'Operation.Law Enforcement Operation.United States Secret Service(Treas) (USSS)': '131509', - 'Operation.Law Enforcement Operation.Transportation Security Administration (TSA)': '131510', - 'Operation.Law Enforcement Operation.Coast Guard': '131511', - 'Operation.Law Enforcement Operation.US Marshals Service': '131512', - 'Operation.Law Enforcement Operation.Internal Security Force': '131513', - 'Fire Event': '140000', - 'Fire Event.Fire Origin': '140100', - 'Fire Event.Smoke': '140200', - 'Fire Event.Hot Spot': '140300', - 'Fire Event.Non-Residential Fire': '140400', - 'Fire Event.Residential Fire': '140500', - 'Fire Event.School Fire': '140600', - 'Fire Event.Special Needs Fire': '140700', - 'Fire Event.Wild Fire': '140800', - 'Hazardous Materials': '150000', - 'Hazardous Materials.Hazardous Materials Incident': '150100', - 'Hazardous Materials.Hazardous Materials Incident.Chemical Agent': '150101', - 'Hazardous Materials.Hazardous Materials Incident.Corrosive Material': '150102', - 'Hazardous Materials.Hazardous Materials Incident.Hazardous when Wet': '150103', - 'Hazardous Materials.Hazardous Materials Incident.Explosive Material': '150104', - 'Hazardous Materials.Hazardous Materials Incident.Flammable Gas': '150105', - 'Hazardous Materials.Hazardous Materials Incident.Flammable Liquid': '150106', - 'Hazardous Materials.Hazardous Materials Incident.Flammable Solid': '150107', - 'Hazardous Materials.Hazardous Materials Incident.Non-Flammable Gas': '150108', - 'Hazardous Materials.Hazardous Materials Incident.Organic Peroxide': '150109', - 'Hazardous Materials.Hazardous Materials Incident.Oxidizer': '150110', - 'Hazardous Materials.Hazardous Materials Incident.Radioactive Material': '150111', - 'Hazardous Materials.Hazardous Materials Incident.Spontaneously Combustible Material': '150112', - 'Hazardous Materials.Hazardous Materials Incident.Toxic Gas': '150113', - 'Hazardous Materials.Hazardous Materials Incident.Toxic Infectious Material': '150114', - 'Hazardous Materials.Hazardous Materials Incident.Unexploded Ordnance': '150115', - 'Transportation Incident': '160000', - 'Transportation Incident.Air-': '160100', - 'Transportation Incident.Marine-': '160200', - 'Transportation Incident.Rail-': '160300', - 'Transportation Incident.Vehicle-': '160400', - 'Transportation Incident.Wheeled Vehicle Explosion': '160500', - 'Natural Event': '170000', - 'Natural Event.Geologic': '170100', - 'Natural Event.Geologic.Aftershock': '170101', - 'Natural Event.Geologic.Avalanche': '170102', - 'Natural Event.Geologic.Earthquake Epicenter': '170103', - 'Natural Event.Geologic.Landslide': '170104', - 'Natural Event.Geologic.Subsidence': '170105', - 'Natural Event.Geologic.Volcanic Eruption': '170106', - 'Natural Event.Geologic.Volcanic Threat': '170107', - 'Natural Event.Geologic.Cave Entrance': '170108', - 'Natural Event.Hydro-Meteorological': '170200', - 'Natural Event.Hydro-Meteorological.Drought': '170201', - 'Natural Event.Hydro-Meteorological.Flood': '170202', - 'Natural Event.Hydro-Meteorological.Tsunami': '170203', - 'Natural Event.Infestation': '170300', - 'Natural Event.Infestation.Bird': '170301', - 'Natural Event.Infestation.Insect': '170302', - 'Natural Event.Infestation.Microbial': '170303', - 'Natural Event.Infestation.Reptile': '170304', - 'Natural Event.Infestation.Rodent': '170305', - 'Individual': '180000', - 'Individual.Religious Leader': '180100', - 'Individual.Speaker': '180200' - } - self.m1 = { - 'Unspecified': '00', - 'Assassination': '01', - 'Execution (Wrongful Killing)': '02', - 'Hijacking/Hijacked': '03', - 'House-to-House': '04', - 'Kidnapping': '05', - 'Murder': '06', - 'Piracy': '07', - 'Rape': '08', - 'Written Military Information Support Operations': '09', - 'Pirate': '10', - 'False': '11', - 'Find': '12', - 'Found and Cleared': '13', - 'Hoax (Decoy)': '14', - 'Attempted': '15', - 'Accident': '16', - 'Incident': '17', - 'Theft': '18' - } - self.m2 = {'': '00'} - # Signals Intelligence - if symbolSet in ["50", "51", "52", "53", "54"]: - self.icons = { - 'Signal Intercept': '110000', - 'Signal Intercept.Communications': '110100', - 'Signal Intercept.Jammer': '110200', - 'Signal Intercept.Radar': '110300' - } - self.m1 = { - 'Unspecified': '00', - 'Anti-Aircraft Fire Control': '01', - 'Airborne Search and Bombing': '02', - 'Airborne Intercept': '03', - 'Altimeter': '04', - 'Airborne Reconnaissance and Mapping': '05', - 'Air Traffic Control': '06', - 'Beacon Transponder (not IFF)': '07', - 'Battlefield Surveillance': '08', - 'Controlled Approach': '09', - 'Controlled Intercept': '10', - 'Cellular/Mobile': '11', - 'Coastal Surveillance': '12', - 'Decoy/Mimic': '13', - 'Data Transmission': '14', - 'Earth Surveillance': '15', - 'Early Warning': '16', - 'Fire Control': '17', - 'Ground Mapping': '18', - 'Height Finding': '19', - 'Harbor Surveillance': '20', - 'Identification, Friend or Foe (Interrogator)': '21', - 'Instrument Landing System': '22', - 'Ionospheric Sounding': '23', - 'Identification, Friend or Foe (Transponder)': '24', - 'Barrage Jammer': '25', - 'Click Jammer': '26', - 'Deceptive Jammer': '27', - 'Frequency Swept Jammer': '28', - 'Jammer (general)': '29', - 'Noise Jammer': '30', - 'Pulsed Jammer': '31', - 'Repeater Jammer': '32', - 'Spot Noise Jammer': '33', - 'Transponder Jammer': '34', - 'Missile Acquisition': '35', - 'Missile Control': '36', - 'Missile Downlink': '37', - 'Meteorological': '38', - 'Multi-Function': '39', - 'Missile Guidance': '40', - 'Missile Homing': '41', - 'Missile Tracking': '42', - 'Navigational/General': '43', - 'Navigational/Distance Measuring Equipment': '44', - 'Navigation/Terrain Following': '45', - 'Navigational/Weather Avoidance': '46', - 'Omni-Line of Sight (LOS)': '47', - 'Proximity Use': '48', - 'Point-to-Point Line of Sight (LOS)': '49', - 'Instrumentation': '50', - 'Range Only': '51', - 'Sonobuoy': '52', - 'Satellite Downlink': '53', - 'Space': '54', - 'Surface Search': '55', - 'Shell Tracking': '56', - 'Satellite Uplink': '57', - 'Target Acquisition': '58', - 'Target Illumination': '59', - 'Tropospheric Scatter': '60', - 'Target Tracking': '61', - 'Unknown': '62', - 'Video Remoting': '63', - 'Experimental': '64' - } - self.m2 = {'': '00'} + if selected_symbol_set == "40": + self.symbol_set = symbol.Activities() + # Meteorological-Atmospheric + if selected_symbol_set == "45": + self.symbol_set = symbol.MeteorologicalAtmospheric() + # Meteorological-Oceanographic + if selected_symbol_set == "46": + self.symbol_set = symbol.MeteorologicalOceanographic() + # Meteorological-Space + if selected_symbol_set == "47": + self.symbol_set = symbol.MeteorologicalSpace() + # Signals Intelligence - Space + if selected_symbol_set == "50": + self.symbol_set = symbol.SignalsIntelligenceSpace() + # Signals Intelligence - Air + if selected_symbol_set == "51": + self.symbol_set = symbol.SignalsIntelligenceAir() + # Signals Intelligence - Land + if selected_symbol_set == "52": + self.symbol_set = symbol.SignalsIntelligenceLand() + # Signals Intelligence - Surface + if selected_symbol_set == "53": + self.symbol_set = symbol.SignalsIntelligenceSurface() + # Signals Intelligence - SubSurface + if selected_symbol_set == "54": + self.symbol_set = symbol.SignalsIntelligenceSubsurface() # Cyberspace - if symbolSet == "60": - self.icons = { - 'Botnet': '110000', - 'Botnet.Command and Control (C2)': '110100', - 'Botnet.Herder': '110200', - 'Botnet.Callback Domain': '110300', - 'Botnet.Zombie': '110400', - 'Infection': '120000', - 'Infection.Advanced Persistent Threat (APT)': '120100', - 'Infection.Advanced Persistent Threat (APT).APT with C2': '120101', - 'Infection.Advanced Persistent Threat (APT).APT with Self Propagation': '120102', - 'Infection.Advanced Persistent Threat (APT).APT with C2 and Self Propagation': '120103', - 'Infection.Advanced Persistent Threat (APT).APT Other': '120104', - 'Infection.Non-Advanced Persistent Threat (NAPT)': '120200', - 'Infection.Non-Advanced Persistent Threat (NAPT).NAPT with C2': '120201', - 'Infection.Non-Advanced Persistent Threat (NAPT).NAPT with Self Propagation': '120202', - 'Infection.Non-Advanced Persistent Threat (NAPT).NAPT with C2 and Self Propagation': '120203', - 'Infection.Non-Advanced Persistent Threat (NAPT).NAPT Other': '120204', - 'Health and Status': '130000', - 'Health and Status.Normal': '130100', - 'Health and Status.Network Outage': '130200', - 'Health and Status.Unknown': '130300', - 'Health and Status.Impaired': '130400', - 'Device Type': '140000', - 'Device Type.Core Router': '140100', - 'Device Type.Router': '140200', - 'Device Type.Cross Domain Solution': '140300', - 'Device Type.Mail Server': '140400', - 'Device Type.Web Server': '140500', - 'Device Type.Domain Server': '140600', - 'Device Type.File Server': '140700', - 'Device Type.Peer-to-Peer Node': '140800', - 'Device Type.Firewall': '140900', - 'Device Type.Switch': '141000', - 'Device Type.Host': '141100', - 'Device Type.Virtual Private Network (VPN)': '141200', - 'Device Domain': '150000', - 'Device Domain.Department of Defense (DoD)': '150100', - 'Device Domain.Government': '150200', - 'Device Domain.Contractor': '150300', - 'Device Domain.Supervisory Control and Data Acquisition (SCADA)': '150400', - 'Device Domain.Non-Government': '150500', - 'Effect': '160000', - 'Effect.Infection': '160100', - 'Effect.Degradation': '160200', - 'Effect.Data Spoofing': '160300', - 'Effect.Data Manipulation': '160400', - 'Effect.Exfiltration': '160500', - 'Effect.Power Outage': '160600', - 'Effect.Network Outage': '160700', - 'Effect.Service Outage': '160800', - 'Effect.Device Outage': '160900' - } - self.m1 = {'': '00'} - self.m2 = {'': '00'} + if selected_symbol_set == "60": + self.symbol_set = symbol.CyberSpace() - self.comboIcon.blockSignals(True) + self.comboDescriptor.blockSignals(True) + self.comboEntity.blockSignals(True) + self.comboEntityType.blockSignals(True) + self.comboEntitySubtype.blockSignals(True) self.comboModifier1.blockSignals(True) self.comboModifier2.blockSignals(True) - self.comboIcon.clear() + self.comboEntity.clear() + self.comboEntityType.clear() + self.comboEntitySubtype.clear() self.comboModifier1.clear() self.comboModifier2.clear() - self.comboIcon.addItems(sorted(self.icons.keys())) - self.comboModifier1.addItems(sorted(self.m1.keys())) - self.comboModifier2.addItems(sorted(self.m2.keys())) - self.computeCodeFromCombos() - self.comboIcon.blockSignals(False) + self.comboEntity.addItems(self.symbol_set.entity.keys()) + self.comboEntityType.addItems(self.symbol_set.entityType.keys()) + self.comboEntitySubtype.addItems(self.symbol_set.entitySubType.keys()) + self.comboModifier1.addItems(self.symbol_set.m1.keys()) + self.comboModifier2.addItems(self.symbol_set.m2.keys()) + self.comboDescriptor.blockSignals(False) + self.comboEntity.blockSignals(False) + self.comboEntityType.blockSignals(False) + self.comboEntitySubtype.blockSignals(False) self.comboModifier1.blockSignals(False) self.comboModifier2.blockSignals(False) + self.comboSymbolSet.blockSignals(False) self.computeCodeFromCombos() - self.comboSubtypes.setEnabled(self.symbolSet[self.comboSymbolSet.currentText()] == "10") + # self.comboEntitySubtype.setEnabled(self.symbolSet[self.comboSymbolSet.currentText()] == "10") def renderSymbol(self): text = self.txtCode.text() + symbol = symbolForCode(text, 100) if symbol: image = symbol.bigSymbolPreviewImage() @@ -1903,3 +477,12 @@ def renderSymbol(self): def accept(self): self.newCode = self.txtCode.text() self.close() + + +if __name__ == "__main__": + import sys + from qgis.PyQt.QtWidgets import QApplication + app = QApplication(sys.argv) + dlg = SIDCDialog() + dlg.show() + sys.exit(app.exec_()) diff --git a/milstd2525/svg/Frames/0_036_0.svg b/milstd2525/svg/Frames/0_036_0.svg new file mode 100644 index 0000000..086b675 --- /dev/null +++ b/milstd2525/svg/Frames/0_036_0.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/milstd2525/svg/Frames/0_036_0c.svg b/milstd2525/svg/Frames/0_036_0c.svg new file mode 100644 index 0000000..302c6ee --- /dev/null +++ b/milstd2525/svg/Frames/0_036_0c.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/milstd2525/svg/Frames/0_302_0.svg b/milstd2525/svg/Frames/0_302_0.svg new file mode 100644 index 0000000..fe9c8ea --- /dev/null +++ b/milstd2525/svg/Frames/0_302_0.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/milstd2525/svg/Frames/0_302_0c.svg b/milstd2525/svg/Frames/0_302_0c.svg new file mode 100644 index 0000000..9e4609c --- /dev/null +++ b/milstd2525/svg/Frames/0_302_0c.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/milstd2525/svg/Frames/0_302_1.svg b/milstd2525/svg/Frames/0_302_1.svg new file mode 100644 index 0000000..72a4efa --- /dev/null +++ b/milstd2525/svg/Frames/0_302_1.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/milstd2525/svg/Frames/0_302_1c.svg b/milstd2525/svg/Frames/0_302_1c.svg new file mode 100644 index 0000000..0cb20c4 --- /dev/null +++ b/milstd2525/svg/Frames/0_302_1c.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/milstd2525/svg/Frames/0_336_0.svg b/milstd2525/svg/Frames/0_336_0.svg new file mode 100644 index 0000000..ad329ad --- /dev/null +++ b/milstd2525/svg/Frames/0_336_0.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/milstd2525/svg/Frames/0_336_0c.svg b/milstd2525/svg/Frames/0_336_0c.svg new file mode 100644 index 0000000..b5894c9 --- /dev/null +++ b/milstd2525/svg/Frames/0_336_0c.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/milstd2525/svg/Frames/0_336_1.svg b/milstd2525/svg/Frames/0_336_1.svg new file mode 100644 index 0000000..fb7c3c7 --- /dev/null +++ b/milstd2525/svg/Frames/0_336_1.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/milstd2525/svg/Frames/0_336_1c.svg b/milstd2525/svg/Frames/0_336_1c.svg new file mode 100644 index 0000000..3b23f6c --- /dev/null +++ b/milstd2525/svg/Frames/0_336_1c.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/milstd2525/svg/Frames/0_402_0.svg b/milstd2525/svg/Frames/0_402_0.svg new file mode 100644 index 0000000..d83a874 --- /dev/null +++ b/milstd2525/svg/Frames/0_402_0.svg @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/milstd2525/svg/Frames/0_402_0c.svg b/milstd2525/svg/Frames/0_402_0c.svg new file mode 100644 index 0000000..e7ae9df --- /dev/null +++ b/milstd2525/svg/Frames/0_402_0c.svg @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/milstd2525/svg/Frames/0_402_1.svg b/milstd2525/svg/Frames/0_402_1.svg new file mode 100644 index 0000000..1874dfe --- /dev/null +++ b/milstd2525/svg/Frames/0_402_1.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/milstd2525/svg/Frames/0_402_1c.svg b/milstd2525/svg/Frames/0_402_1c.svg new file mode 100644 index 0000000..96fcfdc --- /dev/null +++ b/milstd2525/svg/Frames/0_402_1c.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/milstd2525/symbolsets.py b/milstd2525/symbolsets.py new file mode 100644 index 0000000..1612ca0 --- /dev/null +++ b/milstd2525/symbolsets.py @@ -0,0 +1,3565 @@ +""" +*************************************************************************** + __init__.py + --------------------- + Date : December 2015 + Copyright : (C) 2015-2016 Boundless, http://boundlessgeo.com +*************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +*************************************************************************** +""" + +__author__ = 'David Vick' +__date__ = 'March 2020' +__copyright__ = '(C) 2020 Planet, http://planet.com' + +# This will get replaced with a git SHA1 when you do a git archive + +__revision__ = '$Format:%H$' + +from collections import OrderedDict + + +class SymbolSet: + + def entitytypes(self, entity): + return self.entityType + + def entitysubtypes(self, entity_type): + return self.entitySubType + + def __init__(self): + self.entity = OrderedDict([('00 Not Applicable', '00')]) + self.entityType = OrderedDict([('00 Not Applicable', '00')]) + self.entitySubType = OrderedDict([('00 Not Applicable', '00')]) + self.m1 = OrderedDict([('00 Not Applicable', '00')]) + self.m2 = OrderedDict([('00 Not Applicable', '00')]) + + +class Air(SymbolSet): + + entity_types = { + '11 Military': { + '01 Fixed-Wing': '01', + '02 Rotary-Wing': '02', + '03 Unmanned Aircraft (UA) / Unmanned Aerial Vehicle (UAV) / Unmanned Aircraft System (UAS) / Remotely Piloted Vehicle (RPV)': '03', + '04 Vertical-Takeoff UAC (VT-UAV)': '04', + '05 Lighter Than Air': '05', + '06 Airship': '06', + '07 Tethered Lighter Than Air': '07' + } + } + + entity_subtypes = { + '01 Fixed-Wing': { + '01 Medical Evacuation (MEDEVAC)': '01', + '02 Attack/Strike': '02', + '03 Bomber': '03', + '04 Fighter': '04', + '05 Fighter/Bomber': '05', + '07 Cargo': '07', + '08 Electronic Combat (EC)/Jammer': '08', + '09 Tanker': '09', + '10 Patrol': '10', + '11 Reconnaissance': '11', + '12 Trainer': '12', + '13 Utility': '13', + '14 VSTOL': '14', + '15 Airborne Command Post (ACP)': '15', + '16 Airborne Early Warning (AEW)': '16', + '17 Antisurface Warfare': '17', + '18 Antisubmarine Warfare': '18', + '19 Communications': '19', + '20 Combat Search and Rescue (CSAR)': '20', + '21 Electronic Support (ES)': '21', + '22 Government': '22', + '23 Mine Countermeasures (MCM)': '23', + '24 Personnel Recovery': '24', + '25 Search and Rescue': '25', + '26 Special Operations Forces': '26', + '27 Ultra Light': '27', + '28 Photographic Reconnaissance': '28', + '29 Very Important Person (VIP)': '29', + '30 Suppression of Enemy Air Defense': '30', + '31 Passenger': '31', + '32 Escort': '32', + '33 Electronic Attack': '33' + } + } + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType + + def __init__(self): + super().__init__() + + self.entity.update({ + '11 Military': '11', + '12 Civilian': '12', + '13 Weapon': '13', + '14 Manual Track': '14' + }) + + self.m1.update({ + '01 Attack/Strike': '01', + '02 Bomber': '02', + '03 Cargo': '03', + '04 Fighter': '04', + '05 Interceptor': '05', + '06 Tanker': '06', + '07 Utility': '07', + '08 Vertical or Short Take-off and Landing (VSTOL)/ Vertical Take-off and Landing (VTOL)': '08', + '09 Passenger': '09', + '10 Ultra Light': '10', + '11 Airborne Command Post (ACP)': '11', + '12 Airborne Early Warning (AEW)': '12', + '13 Government': '13', + '14 Medical Evacuation (MEDEVAC)': '14', + '15 Escort': '15', + '16 Electronic Combat (EC)/Jammer': '16', + '17 Patrol': '17', + '18 Reconnaissance': '18', + '19 Trainer': '19', + '20 Photographic (Reconnaissance)': '20', + '21 Personnel Recovery ': '21', + '22 Antisubmarine Warfare': '22', + '23 Communications': '23', + '24 Electronic Support (ES)': '24', + '25 Mine Countermeasures (MCM)': '25', + '26 Search and Rescue': '26', + '27 Special Operations Forces': '27', + '28 Surface Warfare': '28', + '29 Very Important Person (VIP) Transport': '29', + '30 Combat Search and Rescue (CSAR)': '30', + '31 Suppression of Enemy Air Defenses': '31', + '32 Antisurface Warfare': '32', + '33 Fighter/Bomber': '33', + '34 Intensive Care': '34', + '35 Electronic Attack (EA)': '35', + '36 Multimission': '36', + '37 Hijacking': '37', + '38 ASW Helo- LAMPS': '38', + '39 ASW Helo - SH-60R': '39' + }) + + self.m2.update({ + '01 Heavy': '01', + '02 Medium': '02', + '03 Light': '03', + '04 Boom-Only': '04', + '05 Drogue-Only': '05', + '06 Boom and Drogue': '06', + '07 Close Range': '07', + '08 Short Range': '08', + '09 Medium Range': '09', + '10 Long Range': '10', + '11 Downlinked': '11' + }) + + +class AirMissle(SymbolSet): + entity_types = { + '11 Missile': '11' + } + + entity_subtypes = {} + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType + + def __init__(self): + super().__init__() + + self.entity.update({ + '11 Missile': '11' + }) + + self.m1.update({ + '01 Air': '01', + '02 Surface': '02', + '03 Subsurface': '03', + '04 Space': '04', + '05 Anti-Ballistic': '05', + '06 Ballistic': '06', + '07 Cruise': '07', + '08 Interceptor': '08' + }) + + self.m2.update({ + '01 Air': '01', + '02 Surface': '02', + '03 Subsurface': '03', + '04 Space': '04', + '05 Launched': '05', + '06 Missile': '06', + '07 Patriot': '07', + '08 Standard Missile-2 (SM-2)': '08', + '09 Standard Missile-6 (SM-6)': '09', + '10 Evolved Sea Sparrow Missile (ESSM)': '10', + '11 Rolling Airframe Missile (RAM)': '11', + '12 Short Range': '12', + '13 Medium Range': '13', + '14 Intermediate Range': '14', + '15 Long Range': '15', + '16 Intercontinental': '16' + }) + + +class Space(SymbolSet): + entity_types = { + '11 Military': { + '00': '00', + '01 Space Vehicle': '01', + '02 Re-Entry Vehicle': '02', + '03 Planet Lander': '03', + '04 Orbiter Shuttle': '04', + '05 Capsule': '05', + '06 Satellite, General': '06', + '07 Satellite': '07', + '08 Antisatellite Weapon': '08', + '09 Astronomical Satellite': '09', + '10 Biosatellite': '10', + '11 Communications Satellite': '11', + '12 Earth Observation Satellite': '12', + '13 Miniaturized Satellite': '13', + '14 Navigational Satellite': '14', + '15 Reconnaissance Satellite': '15', + '16 Space Station': '16', + '17 Tethered Satellite': '17', + '18 Weather Satellite': '18', + '19 Space Launched Vehicle (SLV)': '19', + }, + '12 Civilian': { + '00': '00', + '01 Orbiter Shuttle': '01', + '02 Capsule': '02', + '03 Satellite': '03', + '04 Astronomical Satellite': '04', + '05 Biosatellite': '05', + '06 Communications Satellite': '06', + '07 Earth Observation Satellite': '07', + '08 Miniaturized Satellite': '08', + '09 Navigational Satellite': '09', + '10 Space Station': '10', + '11 Tethered Satellite': '11', + '12 Weather Satellite': '12', + } + } + + entity_subtypes = {} + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType + + def __init__(self): + super().__init__() + + self.entity.update({ + '11 Military': '11', + '12 Civilian': '12', + '13 Manual Track': '13' + }) + + self.m1.update({ + '01 Low Earth Orbit (LEO)': '01', + '02 Medium Earth Orbit (MEO)': '02', + '03 High Earth Orbit (HEO)': '03', + '04 Geosynchronous Orbit (GSO)': '04', + '05 Geostationary Orbit (GO)': '05', + '06 Molniya Orbit (MO)': '06' + }) + + self.m2.update({ + '00 Unspecified': '00', + '01 Optical': '01', + '02 Infrared': '02', + '03 Radar': '03', + '04 Signals Intelligence (SIGINT)': '04' + }) + + +class SpaceMissle(SymbolSet): + entity_types = {} + + entity_subtypes = {} + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType + + def __init__(self): + super().__init__() + + self.entity.update({ + '11 Military': '11' + }) + + self.m1.update({ + '01 Ballistic': '01', + '02 Space': '02', + '03 Interceptor': '03', + '04 Reserved for Future Use': '04-98' + }) + + self.m2.update({ + '01 Short Range': '01', + '02 Medium Range': '02', + '03 Intermediate Range': '03', + '04 Long Range': '04', + '05 Intercontinental ': '05', + '06 Arrow': '06', + '07 Ground-Based Interceptor (GBI)': '07', + '08 Patriot': '08', + '09 Standard Missile Terminal Phase (SM-T)': '09', + '10 Standard Missile - 3 (SM-3)': '10', + '11 Terminal High Altitude Area Defense (THAAD)': '11', + '12 Space': '12' + }) + + +class LandUnit(SymbolSet): + entity_types = { + '11 Command and Control': { + '00': '00', + '01 Broadcast Transmitter Antennae': '01', + '02 Civil Affairs ': '02', + '03 Civil-Military Cooperation ': '03', + '04 Information Operations': '04', + '05 Liaison': '05', + '06 Military Information Support Operations (MISO)': '06', + '07 Radio': '07', + '08 Radio Relay': '08', + '09 Radio Teletype Center': '09', + '10 Signal': '10', + '11 Tactical Satellite': '11', + '12 Video Imagery (Combat Camera)': '12' + }, + '12 Movement and Maneuver': { + '00': '00', + '01 Air Assault with Organic Lift': '01', + '02 Air Traffic Services/Airfield Operations': '02', + '03 Amphibious': '03', + '04 Antitank/Antiarmor': '04', + '05 Armor/Armored/Mechanized/Self-Propelled/Tracked': '05', + '06 Army Aviation/Aviation Rotary Wing': '06', + '07 Aviation Composite': '07', + '08 Aviation Fixed Wing': '08', + '09 Combat': '09', + '10 Combined Arms': '10', + '11 Infantry': '11', + '12 Observer': '12', + '13 Reconnaissance/Cavalry/Scout': '13', + '14 Sea Air Land (SEAL)': '14', + '15 Sniper': '15', + '16 Surveillance': '16', + '17 Special Forces': '17', + '18 Special Operations Forces (SOF)': '18', + '19 Unmanned Aerial Systems': '19' + }, + "13 Fires": { + '00': '00', + '01 Air Defense': '01', + '02 Air/Land Naval Gunfire Liaison': '02', + '03 Field Artillery': '03', + '04 Field Artillery Observer': '04', + '05 Joint Fire Support': '05', + '06 Meteorological': '06', + '07 Missile': '07', + '08 Mortar': '08', + '09 Survey': '09' + }, + "14 Protection": { + '00': '00', + '01 Chemical Biological Radiological Nuclear Defense': '01', + '02 Combat Support (Maneuver Enhancement)': '02', + '03 Criminal Investigation Division': '03', + '04 Diving': '04', + '05 Dog': '05', + '06 Drilling': '06', + '07 Engineer': '07', + '08 Explosive Ordnance Disposal (EOD)': '08', + '09 Field Camp Construction': '09', + '10 Fire Fighting/Fire Protection': '10', + '11 Geospatial Support/Geospatial Information Support': '11', + '12 Military Police': '12', + '13 Mine': '13', + '14 Mine Clearing': '14', + '15 Mine Launching': '15', + '16 Mine Laying': '16', + '17 Security': '17', + '18 Search and Rescue': '18', + '19 Security Police (Air)': '19', + '20 Shore Patrol': '20', + '21 Topographic': '21' + }, + "15 Intelligence": { + '00': '00', + '01 Analysis': '01', + '02 Counterintelligence': '02', + '03 Direction Finding': '03', + '04 Electronic Ranging': '04', + '05 Electronic Warfare': '05', + '06 Intercept (Search and Recording)': '06', + '07 Interrogation': '07', + '08 Jamming': '08', + '09 Joint Intelligence Center': '09', + '10 Military Intelligence': '10', + '11 Search': '11', + '12 Sensor': '12' + }, + "16 Sustainment": { + '00': '00', + '01 Administrative': '01', + '02 All Classes of Supply': '02', + '03 Airport of Debarkation/Airport of Embarkation ': '03', + '04 Ammunition': '04', + '05 Band': '05', + '06 Combat Service Support': '06', + '07 Finance': '07', + '08 Judge Advocate General': '08', + '09 Labor': '09', + '10 Laundry/Bath': '10', + '11 Maintenance': '11', + '12 Material': '12', + '13 Medical': '13', + '14 Medical Treatment Facility': '14', + '15 Morale, Welfare and Recreation': '15', + '16 Mortuary Affairs/Graves Registration': '16', + '17 Multiple Classes of Supply': '17', + '18 NATO Supply Class I': '18', + '19 NATO Supply Class II': '19', + '20 NATO Supply Class III': '20', + '21 NATO Supply Class IV': '21', + '22 NATO Supply Class V': '22', + '23 Ordnance': '23', + '24 Personnel Services': '24', + '25 Petroleum, Oil and Lubricants': '25', + '26 Pipeline': '26', + '27 Postal': '27', + '28 Public Affairs/Public Information': '28', + '29 Quartermaster': '29', + '30 Railhead': '30', + '31 Religious Support': '31', + '32 Replacement Holding Unit': '32', + '33 Sea Port of Debarkation/Sea Port of Embarkation ': '33', + '34 Supply': '34', + '35 Joint Information Bureau': '35', + '36 Transportation': '36', + '37 US Supply Class I': '37', + '38 US Supply Class II': '38', + '39 US Supply Class III': '39', + '40 US Supply Class IV': '40', + '41 US Supply Class V': '41', + '42 US Supply Class VI': '42', + '43 US Supply Class VII': '43', + '44 US Supply Class VIII': '44', + '45 US Supply Class IX': '45', + '46 US Supply Class X': '46', + '47 Water': '47', + '48 Water Purification': '48', + '49 Broadcast': '49' + }, + "17 Naval": { + '00': '00', + '01 Naval': '01' + }, + "18 Named Headquarters": { + '00': '00', + '01 Allied Command Europe Rapid Reaction Corps (ARRC)': '01', + '02 Allied Command Operations': '02', + '03 International Security Assistance Force (ISAF)': '03', + '04 Multinational (MN)': '04' + }, + "20 Law Enforcement": { + '00': '00', + '01 Bureau of Alcohol, Tobacco, Firearms and Explosives (ATF) (Department of Justice)': '01', + '02 Border Patrol': '02', + '03 Customs Service': '03', + '04 Drug Enforcement Administration (DEA)': '04', + '05 Department of Justice (DOJ)': '05', + '06 Federal Bureau of Investigation (FBI)': '06', + '07 Police': '07', + '08 Prison': '08', + '09 United States Secret Service (USSS)': '09', + '10 Transportation Security Administration (TSA)': '10', + '11 Coast Guard': '11', + '12 US Marshals Service': '12', + '13 Internal Security Force': '13' + } + } + + entity_subtypes = { + '06 Military Information Support Operations (MISO)': { + '00': '00', + '01 Broadcast Transmitter Antennae': '01' + }, + '10 Signal': { + '00': '00', + '01 Radio': '01', + '02 Radio Relay': '02', + '03 Teletype': '03', + '04 Tactical Satellite ': '04', + '05 Video Imagery (Combat Camera)': '05', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '04 Antitank/Antiarmor': { + '00': '00', + '01 Armored': '01', + '02 Motorized': '02' + }, + '05 Armor/Armored/Mechanized/Self-Propelled/Tracked': { + '00': '00', + '01 Reconnaissance/Cavalry/Scout': '01', + '02 Amphibious': '02', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '06 Army Aviation/Aviation Rotary Wing': { + '00': '00', + '01 Reconnaissance': '01', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '07 Aviation Composite': { + '00': '00', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '08 Aviation Fixed Wing': { + '00': '00', + '01 Reconnaissance': '01', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '09 Combat': { + '00': '00', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '10 Combined Arms': { + '00': '00', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '11 Infantry': { + '00': '00', + '01 Amphibious': '01', + '02 Armored/Mechanized/Tracked': '02', + '03 Main Gun System ': '03', + '04 Motorized ': '04', + '05 Infantry Fighting Vehicle': '05', + '95 Headquarters Element ': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '12 Observer': { + '00': '00', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '13 Reconnaissance/Cavalry/Scout': { + '00': '00', + '01 Reconnaissance and Surveillance': '01', + '02 Marine': '02', + '03 Motorized': '03', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '14 Sea Air Land (SEAL)': { + '00': '00', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '15 Sniper': { + '00': '00', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '16 Surveillance': { + '00': '00', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '17 Special Forces': { + '00': '00', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '18 Special Operations Forces (SOF)': { + '00': '00', + '01 Fixed Wing MISO': '01', + '02 Ground': '02', + '03 Special Boat': '03', + '04 Special SSNR': '04', + '05 Underwater Demolition Team': '05', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '19 Unmanned Aerial Systems': { + '00': '00', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '01 Air Defense': { + '00': '00', + '01 Main Gun System': '01', + '02 Missile': '02', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '02 Air/Land Naval Gunfire Liaison': { + '00': '00', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '03 Field Artillery': { + '00': '00', + '01 Self-propelled': '01', + '02 Target Acquisition': '02', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '04 Field Artillery Observer': { + '00': '00', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '05 Joint Fire Support': { + '00': '00', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '06 Meteorological': { + '00': '00', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '07 Missile': { + '00': '00', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '08 Mortar': { + '00': '00', + '01 Armored/Mechanized/Tracked': '01', + '02 Self-Propelled Wheeled': '02', + '03 Towed': '03', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + '09 Survey': { + '00': '00', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + 'Chemical Biological Radiological Nuclear Defense': { + '00': '00', + '01 Mechanized': '01', + '02 Motorized': '02', + '03 Reconnaissance': '03', + '04 Reconnaissance Armored': '04', + '05 Reconnaissance Equipped': '05', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + 'Combat Support (Maneuver Enhancement)': { + '00': '00', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + 'Engineer': { + '00': '00', + '01 Mechanized': '01', + '02 Motorized': '02', + '03 Reconnaissance': '03', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + 'Military Police': { + '00': '00', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + 'Security': { + '00': '00', + '01 Mechanized': '01', + '02 Motorized': '02', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + 'Electronic Warfare': { + '00': '00', + '01 Analysis': '01', + '02 Direction Finding': '02', + '03 Intercept': '03', + '04 Jamming': '04', + '05 Search': '05', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + 'Military Intelligence': { + '00': '00', + '95 Headquarters Element': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theater/Echelon Above Corps Support': '98' + }, + 'Administrative': { + '00': '00', + '95 Headquarters Element ': '95', + '96 Division and Below Support': '96', + '97 Corps Support': '97', + '98 Theatre/Echelons Above Corps Support': '98' + } + } + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType.update({ + '95 HEADQUARTERS ELEMENT': '95', + '96 DIVISION AND BELOW SUPPORT': '96', + '97 CORPS SUPPORT': '97', + '98 THEATER/ECHELONS ABOVE CORPS SUPPORT': '98' + }) + + def __init__(self): + super().__init__() + + self.entity.update({ + '11 Command and Control': '11', + '12 Movement and Maneuver': '12', + '13 Fires': '13', + '14 Protection': '14', + '15 Intelligence': '15', + '16 Sustainment': '16', + '17 Naval': '17', + '18 Named Headquarters': '18', + '19 Emergency Operation': '19', + '20 Law Enforcement': '20' + }) + + self.m1.update({ + '00 Unspecified': '00', + '01 Air Mobile/Air Assault (US only)': '01', + '02 Area': '02', + '03 Attack': '03', + '04 Biological': '04', + '05 Border': '05', + '06 Bridging': '06', + '07 Chemical': '07', + '08 Close Protection': '08', + '09 Combat': '09', + '10 Command and Control': '10', + '11 Communications Contingency Package': '11', + '12 Construction': '12', + '13 Cross Cultural Communication': '13', + '14 Crowd and Riot Control': '14', + '15 Decontamination': '15', + '16 Detention': '16', + '17 Direct Communications': '17', + '18 Diving': '18', + '19 Division': '19', + '20 Dog': '20', + '21 Drilling': '21', + '22 Electro-Optical': '22', + '23 Enhanced': '23', + '24 Explosive Ordnance Disposal (EOD)': '24', + '25 Fire Direction Center': '25', + '26 Force': '26', + '27 Forward': '27', + '28 Ground Station Module': '28', + '29 Landing Support': '29', + '30 Large Extension Node': '30', + '31 Maintenance': '31', + '32 Meteorological': '32', + '33 Mine Countermeasure': '33', + '34 Missile': '34', + '35 Mobile Advisor and Support': '35', + '36 Mobile Subscriber Equipment': '36', + '37 Mobility Support': '37', + '38 Movement Control Center': '38', + '39 Multinational': '39', + '40 Multinational Specialized Unit': '40', + '41 Multiple Rocket Launcher': '41', + '42 NATO Medical Role 1 ': '42', + '43 NATO Medical Role 2': '43', + '44 NATO Medical Role 3': '44', + '45 NATO Medical Role 4': '45', + '46 Naval': '46', + '47 Node Center': '47', + '48 Nuclear': '48', + '49 Operations': '49', + '50 Radar': '50', + '51 Radio Frequency Identification (RFID) Interrogator / Sensor': '51', + '52 Radiological': '52', + '53 Search and Rescue': '53', + '54 Security': '54', + '55 Sensor': '55', + '56 Sensor Control Module (SCM)': '56', + '57 Signals Intelligence': '57', + '58 Single Shelter Switch': '58', + '59 Single Rocket Launcher': '59', + '60 Smoke': '60', + '61 Sniper': '61', + '62 Sound Ranging': '62', + '63 Special Operations Forces (SOF)': '63', + '64 Special Weapons and Tactics': '64', + '65 Survey': '65', + '66 Tactical Exploitation': '66', + '67 Target Acquisition': '67', + '68 Topographic': '68', + '69 Utility': '69', + '70 Video Imagery (Combat Camera)': '70', + '71 Accident': '71', + '72 Other': '72', + '73 Civilian': '73', + '74 Antisubmarine Warfare': '74', + '75 Medevac': '75', + '76 Ranger': '76', + '77 Support': '77', + '78 Aviation': '78' + }) + + self.m2.update({ + '00 Unspecified': '00', + '01 Airborne': '01', + '02 Arctic': '02', + '03 Battle Damage Repair': '03', + '04 Bicycle Equipped': '04', + '05 Casualty Staging': '05', + '06 Clearing': '06', + '07 Close Range': '07', + '08 Control': '08', + '09 Decontamination': '09', + '10 Demolition': '10', + '11 Dental': '11', + '12 Digital': '12', + '13 Enhanced Position Location Reporting System (EPLRS)': '13', + '14 Equipment': '14', + '15 Heavy': '15', + '16 High Altitude': '16', + '17 Intermodal': '17', + '18 Intensive Care': '18', + '19 Light': '19', + '20 Laboratory': '20', + '21 Launcher': '21', + '22 Long Range': '22', + '23 Low Altitude': '23', + '234 Medium': '24', + '25 Medium Altitude': '25', + '26 Medium Range': '26', + '27 Mountain': '27', + '28 High to Medium Altitude': '28', + '29 Multi�Channel': '29', + '30 Optical (Flash)': '30', + '31 Pack Animal': '31', + '32 Patient Evacuation Coordination': '32', + '33 Preventive Maintenance': '33', + '34 Psychological': '34', + '35 Radio Relay Line of Sight': '35', + '36 Railroad': '36', + '37 Recovery (Unmanned Systems)': '37', + '38 Recovery (Maintenance)': '38', + '39 Rescue Coordination Center': '39', + '40 Riverine': '40', + '41 Single Channel': '41', + '42 Ski': '42', + '43 Short Range': '43', + '44 Strategic': '44', + '45 Support': '45', + '46 Tactical': '46', + '47 Towed': '47', + '48 Troop': '48', + '49 Vertical or Short Take�Off and Landing (VTOL/VSTOL)': '49', + '50 Veterinary': '50', + '51 Wheeled': '51', + '52 High to Low Altitude': '52', + '53 Medium to Low Altitude': '53', + '54 Attack': '54', + '55 Refuel': '55', + '56 Utility': '56', + '57 Combat Search and Rescue': '57' + }) + + +class LandCivilianUnit(SymbolSet): + entity_types = { + 'Civilian': { + '01 Environmental Protection': '01', + '02 Governmental Organization': '02', + '03 Individual': '03', + '04 Organization or Group': '04', + '05 Killing Victim': '05', + '06 Killing Victims': '06', + '07 Victim of an Attempted Crime': '07', + '08 Spy': '08', + '09 Composite Loss': '09', + '10 Emergency Medical Operation': '10' + } + } + + entity_subtypes = {} + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType + + def __init__(self): + super().__init__() + self.entity.update({ + '11 Civilian': '11', + }) + + self.m1.update({ + '00 Unspecified': '00', + '01 Assassination': '01', + '02 Execution (Wrongful Killing)': '02', + '03 Murder Victims': '03', + '04 Hijacking': '04', + '05 Kidnapping': '05', + '06 Piracy': '06', + '07 Rape': '07', + '08 Civilian': '08', + '09 Displaced Person(s), Refugee(s) and Evacuee(s)': '09', + '10 Foreign Fighter(s)': '10', + '11 Gang Member or Gang': '11', + '12 Government Organization': '12', + '13 Leader or Leadership': '13', + '14 Nongovernmental Organization Member or Nongovernmental Organization': '14', + '15 Coerced/Impressed Recruit': '15', + '16 Willing Recruit': '16', + '17 Religious or Religious Organization': '17', + '18 Targeted Individual or Organization': '18', + '19 Terrorist or Terrorist Organization': '19', + '20 Speaker': '20', + '21 Accident': '21', + '22 Combat': '22', + '23 Other': '23', + '24 Loot': '24' + }) + self.m2.update({ + '00 Unspecified': '00', + '01 Leader or Leadership': '01' + }) + + +class LandEquipment(SymbolSet): + entity_types = { + 'Weapons/Weapons System': { + '00': '00', + '01 Rifle': '01', + '02 Machine Gun': '02', + '03 Grenade Launcher': '03', + '04 Flame Thrower': '04', + '05 Air Defense Gun': '05', + '06 Antitank Gun': '06', + '07 Direct Fire Gun': '07', + '08 Recoilless Gun': '08', + '09 Howitzer': '09', + '10 Missile Launcher': '10', + '11 Air Defense Missile Launcher': '11', + '12 Antitank Missile Launcher': '12', + '13 Surface-to-Surface Missile Launcher': '13', + '14 Mortar': '14', + '15 Single Rocket Launcher': '15', + '16 Multiple Rocket Launcher': '16', + '17 Antitank Rocket Launcher': '17', + '18 Nonlethal Weapon': '18', + '19 Taser': '19', + '20 Water Cannon': '20', + }, + 'Vehicle': { + '00': '00', + '01 Armored': '01', + '02 Tank': '02', + '03 Tank Recovery Vehicle': '03' + }, + 'Engineer Vehicles and Equipment': { + '00': '00', + '01 Bridge': '01', + '02 Bridge Mounted on Utility Vehicle': '02', + '03 Fixed Bridge': '03', + '04 Floating Bridge': '04', + '05 Folding Girder Bridge': '05', + '06 Hollow Deck Bridge': '06', + '07 Drill': '07', + '08 Earthmover': '08', + '09 Mine Clearing Equipment': '09', + '10 Mine Laying Equipment': '10', + '11 Dozer': '11', + '12 Armored Assault': '12', + '13 Armored Engineer Recon Vehicle (AERV)': '13', + '14 Backhoe': '14', + '15 Construction Vehicle': '15', + '16 Ferry Transporter': '16', + }, + 'Utility Vehicles': { + '00': '00', + '01 Utility Vehicle': '01', + '02 Medical': '02', + '03 Medical Evacuation': '03', + '04 Mobile Emergency Physician': '04', + '05 Bus': '05', + '06 Semi-Trailer and Truck': '06', + '07 Limited Cross Country Truck': '07', + '08 Cross Country Truck': '08', + '09 Petroleum, Oil and Lubricant': '09', + '10 Water': '10', + '11 Amphibious Utility Wheeled Vehicle': '11', + '12 Tow Truck': '12' + }, + 'Train': { + '00': '00', + '01 Locomotive': '01', + '02 Railcar': '02' + }, + 'Civilian Vehicle': { + '00': '00', + '01 Automobile': '01', + '02 Open-Bed Truck': '02', + '03 Multiple Passenger Vehicle': '03', + '04 Utility Vehicle': '04', + '05 Jeep Type Vehicle': '05', + '06 Tractor Trailer Truck with Box': '06', + '07 Tractor Trailer Truck with Flatbed Trailer': '07', + '08 Known Insurgent Vehicle': '08', + '09 Drug Vehicle': '09' + }, + 'Law Enforcement': { + '00': '00', + '01 Bureau of Alcohol, Tobacco, Firearms and Explosives (ATF) (Department of Justice)': '01', + '02 Border Patrol': '02', + '03 Customs Service': '03', + '04 Drug Enforcement Administration (DEA)': '04', + '05 Department of Justice (DOJ)': '05', + '06 Federal Bureau of Investigation (FBI)': '06', + '07 Police': '07', + '08 United States Secret Service (USSS)': '08', + '09 Transportation Security Administration (TSA)': '09', + '10 Coast Guard': '10', + '11 US Marshals Service': '11' + }, + 'Missile Support': { + '00': '00', + '01 Transloader': '01', + '02 Transporter': '02', + '03 Crane/Loading Device': '03', + '04 Propellant Transporter': '04', + '05 Warhead Transporter': '05' + }, + 'Other Equipment': { + '00': '00', + '01 Antennae': '01', + '02 Bomb': '02', + '03 Booby Trap': '03', + '04 CBRN Equipment': '04', + '05 Computer System': '05', + '06 Command Launch Equipment (CLE)': '06', + '07 Generator Set': '07', + '08 Ground-based Midcourse Defense (GMD) Fire Control (GFC) Center': '08', + '09 In-Flight Interceptor Communications System (IFICS) Data Terminal (IDT)': '09', + '10 Laser': '10', + '11 Military Information Support Operations (MISO)': '11', + '12 Sustainment Shipments': '12', + '13 Tent': '13', + '14 Unit Deployment Shipments': '14', + '15 Emergency Medical Operation': '15' + }, + 'Land Mines': { + '00': '00', + '01 Land Mine': '01', + '02 Antipersonnel Land mine (APL)': '02', + '03 Antitank Mine': '03', + '04 Improvised Explosives Device (IED)': '04', + '05 Less than lethal': '05' + }, + 'Sensors': { + '00': '00', + '01 Sensor': '01', + '02 Sensor Emplaced': '02', + '03 Radar': '03' + }, + 'Emergency Operation': { + '00': '00', + '01 Ambulance': '01', + '02 Fire Fighting/Fire Protection': '02' + } + } + + entity_subtypes = { + 'Rifle': { + '00': '00', + '01 Single Shot Rifle': '01', + '02 Semiautomatic Rifle': '02', + '03 Automatic Rifle': '03' + }, + 'Machine Gun': { + '00': '00', + '01 Light ': '01', + '02 Medium ': '02', + '03 Heavy': '03' + }, + 'Grenade Launcher': { + '00': '00', + '01 Light ': '01', + '02 Medium ': '02', + '03 Heavy': '03' + }, + 'Air Defense Gun': { + '00': '00', + '01 Light ': '01', + '02 Medium ': '02', + '03 Heavy': '03' + }, + 'Antitank Gun': { + '00': '00', + '01 Light ': '01', + '02 Medium ': '02', + '03 Heavy': '03' + }, + 'Direct Fire Gun': { + '00': '00', + '01 Light ': '01', + '02 Medium ': '02', + '03 Heavy': '03' + }, + 'Recoilless Gun': { + '00': '00', + '01 Light ': '01', + '02 Medium ': '02', + '03 Heavy': '03' + }, + 'Howitzer': { + '00': '00', + '01 Light ': '01', + '02 Medium ': '02', + '03 Heavy': '03' + }, + 'Missile Launcher': { + '00': '00', + '01 Light ': '01', + '02 Medium ': '02', + '03 Heavy': '03' + }, + 'Antitank Missile Launcher': { + '00': '00', + '01 Light ': '01', + '02 Medium ': '02', + '03 Heavy': '03' + }, + 'Surface-to-Surface Missile Launcher': { + '00': '00', + '01 Light ': '01', + '02 Medium ': '02', + '03 Heavy': '03' + }, + 'Mortar': { + '00': '00', + '01 Light ': '01', + '02 Medium ': '02', + '03 Heavy': '03' + }, + 'Single Rocket Launcher': { + '00': '00', + '01 Light ': '01', + '02 Medium ': '02', + '03 Heavy': '03' + }, + 'Multiple Rocket Launcher': { + '00': '00', + '01 Light ': '01', + '02 Medium ': '02', + '03 Heavy': '03' + }, + 'Antitank Rocket Launcher': { + '00': '00', + '01 Light ': '01', + '02 Medium ': '02', + '03 Heavy': '03' + }, + 'Air Defense Missile Launcher': { + '00': '00', + '01 Light': '01', + '02 Light, Light Transporter-Launcher and Radar (TLAR)': '02', + '03 Light, Light Tactical Landing Approach Radar (TELAR)': '03', + '04 Medium': '04', + '05 Medium, TLAR': '05', + '06 Medium, TELAR': '06', + '07 Heavy': '07', + '08 Heavy, TLAR': '08', + '09 Heavy, TELAR': '09' + }, + 'Armored': { + '00': '00', + '01 Armored Fighting Vehicle': '01', + '02 Armored Fighting Vehicle Command and Control': '02', + '03 Armored Personnel Carrier': '03', + '04 Armored Personnel Carrier Ambulance': '04', + '05 Armored Protected Vehicle': '05', + '06 Armored Protected Vehicle Recovery': '06', + '07 Armored Protected Vehicle Medical Evacuation': '07', + '08 Armored Personnel Carrier, Recovery': '08', + '09 Combat Service Support Vehicle': '09', + '10 Light Wheeled Armored Vehicle': '10' + }, + 'Tank': { + '00': '00', + '01 Light ': '01', + '02 Medium ': '02', + '03 Heavy': '03' + }, + 'Tank Recovery Vehicle': { + '00': '00', + '01 Light ': '01', + '02 Medium ': '02', + '03 Heavy': '03' + }, + 'Drill': { + '00': '00', + '01 Drill Mounted on Utility Vehicle': '01' + }, + 'Earthmover': { + '00': '00', + '01 Multifunctional Earthmover/Digger': '01' + }, + 'Mine Clearing Equipment': { + '00': '00', + '01 Trailer Mounted': '01', + '02 Mine Clearing Equipment on Tank Chassis': '02' + }, + 'Mine Laying Equipment': { + '00': '00', + '01 Mine Laying Equipment on Utility Vehicle': '01', + '02 Armored Carrier with Volcano': '02', + '03 Truck Mounted with Volcano': '03' + }, + 'Dozer': { + '00': '00', + '01 Dozer , Armored': '01' + }, + 'Semi-Trailer and Truck': { + '00': '00', + '01 Light': '01', + '02 Medium': '02', + '03 Heavy': '03' + }, + 'Tow Truck': { + '00': '00', + '01 Light': '01', + '02 Heavy': '02' + }, + 'Automobile': { + '00': '00', + '01 Compact': '01', + '02 Midsize': '02', + '03 Sedan': '03' + }, + 'Open-Bed Truck': { + '00': '00', + '01 Pickup': '01', + '02 Small': '02', + '03 Large': '03' + }, + 'Multiple Passenger Vehicle': { + '00': '00', + '01 Van': '01', + '02 Small Bus': '02', + '03 Large Bus': '03' + }, + 'Utility Vehicle': { + '00': '00', + '01 Sport Utility Vehicle (SUV)': '01', + '02 Small Box Truck': '02', + '03 Large Box Truck': '03' + }, + 'Jeep Type Vehicle': { + '00': '00', + '01 Small/Light': '01', + '02 Medium': '02', + '03 Large/Heavy': '03' + }, + 'Tractor Trailer Truck with Box': { + '00': '00', + '01 Small/Light': '01', + '02 Medium': '02', + '03 Large/Heavy': '03' + }, + 'Tractor Trailer Truck with Flatbed Trailer': { + '00': '00', + '01 Small/Light': '01', + '02 Medium': '02', + '03 Large/Heavy': '03' + }, + 'Emergency Medical Operation': { + '00': '00', + '01 Medical Evacuation Helicopter': '01' + } + } + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType + + def __init__(self): + super().__init__() + self.entity.update({ + '11 Weapons/Weapons System': '11', + '12 Vehicle': '12', + '13 Engineer Vehicles and Equipment': '13', + '14 Utility Vehicles': '14', + '15 Train': '15', + '16 Civilian Vehicle': '16', + '17 Law Enforcement': '17', + '18 Pack Animals': '18', + '19 Missile Support': '19', + '20 Other Equipment': '20', + '21 Land Mines': '21', + '22 Sensors': '22', + '23 Emergency Operation': '23', + '24 Manual Track': '24' + }) + + self.m1.update({ + '00 Unspecified': '00', + '01 Biological': '01', + '02 Chemical': '02', + '03 Early Warning Radar': '03', + '04 Intrusion': '04', + '05 Nuclear': '05', + '06 Radiological': '06', + '07 Upgraded Early Warning Radar': '07', + '08 Hijacking': '08', + '09 Civilian': '09' + }) + + +class LandInstallation(SymbolSet): + entity_types = { + 'Military/Civilian': { + '00': '00', + '01 Aircraft Production/Assembly': '01', + '02 Ammunition and Explosives/Assembly': '02', + '03 Ammunition Cache': '03', + '04 Armament Production': '04', + '05 Black List Location': '05', + '06 Chemical, Biological, Radiological and Nuclear (CBRN)': '06', + '07 Engineering Equipment Production': '07', + '08 Equipment Manufacture': '08', + '09 Government Leadership': '09', + '10 Gray List Location': '10', + '11 Mass Grave Site': '11', + '12 Materiel': '12', + '13 Mine': '13', + '14 Missile and Space System Production': '14', + '15 Nuclear (Non CBRN Defense)': '15', + '16 Printed Media': '16', + '17 Safe House': '17', + '18 White List Location': '18', + '19 Tented Camp': '19', + '20 Warehouse/Storage Facility': '20', + '21 Law Enforcement': '21', + '22 Emergency Operation': '22' + }, + 'Infrastructure': { + '00': '00', + '01 Agriculture and Food Infrastructure': '01', + '02 Banking Finance and Insurance Infrastructure': '02', + '03 Commercial Infrastructure': '03', + '04 Educational Facilities Infrastructure': '04', + '05 Energy Facility Infrastructure': '05', + '06 Infrastructure.Government Site Infrastructure': '06', + '07 Medical Infrastructure': '07', + '08 Military Infrastructure': '08', + '09 Postal Services Infrastructure': '09', + '10 Public Venues Infrastructure': '10', + '11 Special Needs Infrastructure': '11', + '12 Telecommunications Infrastructure': '12', + '13 Transportation Infrastructure': '13', + '14 Water Supply Infrastructure': '14' + } + } + + entity_subtypes = { + 'Engineering Equipment Production': { + '00': '00', + '01 Bridge': '01', + }, + 'Tented Camp': { + '00': '00', + '01 Displaced Persons/ Refugee/Evacuees Camp': '01', + '02 Training Camp': '02' + }, + 'Law Enforcement': { + '00': '00', + '01 Bureau of Alcohol, Tobacco, Firearms and Explosives (ATF) (Department of Justice)': '01', + '02 Border Patrol': '02', + '03 Customs Service': '03', + '04 Drug Enforcement Administration (DEA)': '04', + '05 Department of Justice (DOJ)': '05', + '06 Federal Bureau of Investigation (FBI)': '06', + '07 Police': '07', + '08 Prison': '08', + '09 United States Secret Service (USSS)': '09', + '10 Transportation Security Administration (TSA)': '10', + '11 Coast Guard': '11', + '12 US Marshals Service': '12' + }, + 'Emergency Operation': { + '00': '00', + '01 Fire Station': '01', + '02 Emergency Medical Operation': '02' + }, + 'Agriculture and Food Infrastructure': { + '00': '00', + '01 Agriculture Laboratory': '01', + '02 Animal Feedlot': '02', + '03 Commercial Food Distribution Center': '03', + '04 Farm/Ranch': '04', + '05 Food Distribution': '05', + '06 Food Production Center': '06', + '07 Food Retail': '07', + '08 Grain Storage': '08' + }, + 'Banking Finance and Insurance Infrastructure': { + '00': '00', + '01 ATM': '01', + '02 Bank': '02', + '03 Bullion Storage': '03', + '04 Economic Infrastructure Asset': '04', + '05 Federal Reserve Bank': '05', + '06 Financial Exchange': '06', + '07 Financial Services, Other': '07' + + }, + 'Commercial Infrastructure': { + '00': '00', + '01 Chemical Plant': '01', + '02 Firearms Manufacturer': '02', + '03 Firearms Retailer': '03', + '04 Hazardous Material Production': '04', + '05 Hazardous Material Storage': '05', + '06 Industrial Site': '06', + '07 Landfill': '07', + '08 Pharmaceutical Manufacturer': '08', + '09 Contaminated Hazardous Waste Site': '09', + '10 Toxic Release Inventory': '10' + }, + 'Educational Facilities Infrastructure': { + '00': '00', + '01 College/University': '01', + '02 School': '02' + }, + 'Energy Facility Infrastructure': { + '00': '00', + '01 Electric Power': '01', + '02 Generation Station': '02', + '03 Natural Gas Facility': '03', + '04 Petroleum Facility': '04', + '05 Petroleum/Gas/Oil': '05', + '06 Propane Facility': '06' + }, + 'Medical Infrastructure': { + '00': '00', + '01 Medical': '01', + '02 Medical Treatment Facility (Hospital)': '02' + }, + 'Military Infrastructure': { + '00': '00', + '01 Military Armory': '01', + '02 Military Base': '02' + }, + 'Postal Services Infrastructure': { + '00': '00', + '01 Postal Distribution Center': '01', + '02 Post Office': '02' + }, + 'Public Venues Infrastructure': { + '00': '00', + '01 Enclosed Facility': '01', + '02 Open Facility': '02', + '03 Recreational Area': '03', + '04 Religious Institution': '04' + }, + 'Special Needs Infrastructure': { + '00': '00', + '01 Adult Day Care': '01', + '02 Child Day Care': '02', + '03 Elder Care': '03' + }, + 'Telecommunications Infrastructure': { + '00': '00', + '01 Broadcast Transmitter Antennae': '01', + '02 Telecommunications': '02', + '03 Telecommunications Tower': '03' + }, + 'Transportation Infrastructure': { + '00': '00', + '01 Airport/Air Base': '01', + '02 Air Traffic Control Facility': '02', + '03 Bus Station': '03', + '04 Ferry Terminal': '04', + '05 Helicopter Landing Site': '05', + '06 Maintenance Facility': '06', + '07 Railhead/Railroad Station': '07', + '08 Rest Stop': '08', + '09 Sea Port/Naval Base': '09', + '10 Ship Yard': '10', + '11 Toll Facility': '11', + '12 Traffic Inspection Facility': '12', + '13 Tunnel': '13' + }, + 'Water Supply Infrastructure': { + '00': '00', + '01 Control Valve': '01', + '02 Dam': '02', + '03 Discharge Outfall': '03', + '04 Ground Water Well': '04', + '05 Pumping Station': '05', + '06 Reservoir': '06', + '07 Storage Tower': '07', + '08 Surface Water Intake': '08', + '09 Wastewater Treatment Facility': '09', + '10 Water': '10', + '11 Water Treatment': '11' + } + } + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType + + def __init__(self): + super().__init__() + + self.entity.update({ + '11 Military/Civilian': '11', + '12 Infrastructure': '12' + }) + + self.m1.update({ + '00 Unspecified': '00', + '01 Biological': '01', + '02 Chemical ': '02', + '03 Nuclear': '03', + '04 Radiological': '04', + '05 Decontamination': '05', + '06 Coal': '06', + '07 Geothermal': '07', + '08 Hydroelectric': '08', + '09 Natural Gas': '09', + '10 Petroleum': '10', + '11 Civilian ': '11', + '12 Civilian Telephone': '12', + '13 Civilian Television': '13' + }) + + self.m2.update({ + '00 Unspecified': '00', + '01 Biological': '01', + '02 Chemical ': '02', + '03 Nuclear': '03', + '04 Radiological': '04', + '05 Atomic Energy Reactor': '05', + '06 Nuclear Material Production': '06', + '07 Nuclear Material Storage': '07', + '08 Weapons Grade': '08' + }) + + +class Surface(SymbolSet): + entity_types = { + 'Military Combatant': { + '00': '00', + '01 Carrier': '01', + '02 Surface Combatant, Line': '02', + '03 Amphibious Warfare Ship': '03', + '04 Mine Warfare Ship': '04', + '05 Patrol Boat': '05', + '06 Decoy': '06', + '07 Unmanned Surface Water Vehicle (USV)': '07', + '08 Speedboat': '08', + '09 Jet Ski': '09', + '10 Navy Task Organization': '10', + '11 Sea-Based X-Band Radar': '11', + }, + 'Military Non Combatant': { + '00': '00', + '01 Auxiliary Ship': '01', + '02 Service Craft/Yard': '02' + }, + 'Civilian': { + '00': '00', + '01 Merchant Ship': '01', + '02 Fishing Vessel': '02', + '03 Law Enforcement Vessel': '03', + '04 Leisure Craft, Sailing': '04', + '05 Leisure Craft, Motorized': '05', + '06 Jet Ski': '06', + '07 Unmanned Surface Water Vehicle (USV)': '07' + } + } + + entity_subtypes = { + 'Surface Combatant, Line': { + '00': '00', + '01 Battleship': '01', + '02 Cruiser': '02', + '03 Destroyer': '03', + '04 Frigate': '04', + '05 Corvette': '05', + '06 Littoral Combatant Ship': '06' + }, + 'Amphibious Warfare Ship': { + '00': '00', + '01 Amphibious Command Ship': '01', + '02 Amphibious Assault, Non-specified': '02', + '03 Amphibious Assault Ship, General': '03', + '04 Amphibious Assault Ship, Multipurpose': '04', + '05 Amphibious Assault Ship, Helicopter': '05', + '06 Amphibious Transport Dock': '06', + '07 Landing Ship': '07', + '08 Landing Craft': '08', + }, + 'Mine Warfare Ship': { + '00': '00', + '01 Mine Layer': '01', + '02 Mine Sweeper': '02', + '03 Mine Sweeper, Drone': '03', + '04 Mine Hunter': '04', + '05 Mine Countermeasures': '05', + '06 Mine Countermeasures, Support Ship': '06' + }, + 'Patrol Boat': { + '00': '00', + '01 Patrol Craft, Submarine Chaser/Escort, General': '01', + '02 Patrol Ship, General': '02' + }, + 'Speedboat': { + '00': '00', + '01 Rigid-Hull Inflatable Boat (RHIB)': '01' + }, + 'Navy Task Organization': { + '00': '00', + '01 Navy Task Element': '01', + '02 Navy Task Force': '02', + '03 Navy Task Group': '03', + '04 Navy Task Unit': '04', + '05 Convoy': '05' + }, + 'Auxiliary Ship': { + '00': '00', + '01 Ammunition Ship': '01', + '02 Naval Stores Ship': '02', + '03 Auxiliary Flag Ship': '03', + '04 Intelligence Collector': '04', + '05 Oceanographic Research Ship': '05', + '06 Survey Ship': '06', + '07 Hospital Ship': '07', + '08 Naval Cargo Ship': '08', + '09 Combat Support Ship, Fast': '09', + '10 Oiler, Replenishment': '10', + '11 Repair Ship': '11', + '12 Submarine Tender': '12', + '13 Tug, Ocean Going': '13' + }, + 'Service Craft/Yard': { + '00': '00', + '01 Barge, not Self-Propelled': '01', + '02 Barge, Self-Propelled': '02', + '03 Tug, Harbor': '03', + '04 Launch': '04' + }, + 'Merchant Ship': { + '00': '00', + '01 Cargo, General': '01', + '02 Container Ship': '02', + '03 Dredge': '03', + '04 Roll On/Roll Off': '04', + '05 Ferry': '05', + '06 Heavy Lift': '06', + '07 Hovercraft': '07', + '08 Lash Carrier (with Barges)': '08', + '09 Oiler/Tanker': '09', + '10 Passenger': '10', + '11 Tug, Ocean Going': '11', + '12 Tow': '12', + '13 Transport Ship, Hazardous Material': '13', + '14 Junk/Dhwo': '14', + '15 Barge, not Self-Propelled': '15', + '16 Hospital Ship': '16' + }, + 'Fishing Vessel': { + '00': '00', + '01 Drifter': '01', + '02 Trawler': '02', + '03 Dredger': '03', + }, + 'Leisure Craft, Motorized': { + '00': '00', + '01 Rigid-Hull Inflatable Boat (RHIB)': '01', + '02 Speedboat': '02' + } + } + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType + + def __init__(self): + super().__init__() + + self.entity.update({ + '11 Military': '11', + '12 Military Combatant': '12', + '13 Military Non Combatant': '13', + '14 Civilian': '14', + '15 Own Ship': '15', + '16 Fused Track': '16', + '17 Manual Track': '17' + }) + + self.m1.update({ + '00 Unspecified': '00', + '01 Own Ship': '01', + '02 Antiair Warfare': '02', + '03 Antisubmarine Warfare': '03', + '04 Escort': '04', + '05 Electronic Warfare': '05', + '06 Intelligence, Surveillance, Reconnaissance': '06', + '07 Mine Countermeasures': '07', + '08 Missile Defense': '08', + '09 Medical': '09', + '10 Mine Warfare': '10', + '11 Remote Multi-Mission Vehicle (USV-only)': '11', + '12 Special Operations Forces (SOF)': '12', + '13 Surface Warfare': '13', + '14 Ballistic Missile ': '14', + '15 Guided Missile ': '15', + '16 Other Guided Missile ': '16', + '17 Torpedo': '17', + '18 Drone-Equipped': '18', + '19 Helicopter-Equipped/VSTOL': '19', + '20 Ballistic Missile Defense, Shooter ': '20', + '21 Ballistic Missile Defense, Long-Range Surveillance and Track (LRS&T)': '21', + '22 Sea-Base X-Band': '22', + '23 Hijacking': '23' + }) + + self.m2.update({ + '00 Unspecified': '00', + '01 Nuclear Powered': '01', + '02 Heavy': '02', + '03 Light': '03', + '04 Medium': '04', + '05 Dock': '05', + '06 Logistics': '06', + '07 Tank': '07', + '08 Vehicle': '08', + '09 Fast': '09', + '10 Air-Cushioned (US)': '10', + '11 Air-Cushioned (NATO)': '11', + '12 Hydrofoil': '12', + '13 Autonomous Control': '13', + '14 Remotely Piloted': '14', + '15 Expendable': '15' + }) + + +class Sub(SymbolSet): + entity_types = { + 'Military': { + '01 Submarine': '01', + '02 Other Submersible': '02', + '03 Nonsubmarine': '03', + '04 Autonomous Underwater Vehicle (AUV)/Unmanned Underwater Vehicle (UUV)': '04', + '05 Diver': '05' + }, + 'Civilian': { + '01 Submersible': '01', + '02 Autonomous Underwater Vehicle (AUV)/ Unmanned Underwater Vehicle (UUV)': '02', + '03 Diver': '03' + }, + 'Weapon': { + '01 Torpedo': '01', + '02 Improvised Explosive Device (IED)': '02', + '03 Decoy': '03' + } + } + + entity_subtypes = { + 'Submarine': { + '01 Submarine, Surfaced': '01', + '02 Submarine, Snorkeling': '02', + '03 Submarine, Bottomed': '03' + } + } + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType + + def __init__(self): + super().__init__() + + self.entity.update({ + '11 Military': '11', + '12 Civilian': '12', + '13 Weapon': '13', + '14 Echo Tracker Classifier (ETC) / Possible Contact (POSCON)': '14', + '15 Fused Track': '15', + '16 Manual Track': '16' + }) + + self.m1.update({ + '00 Unspecified': '00', + '01 Antisubmarine Warfare': '01', + '02 Auxiliary': '02', + '03 Command and Control': '03', + '04 Intelligence, Surveillance, Reconnaissance': '04', + '05 Mine Countermeasures': '05', + '06 Mine Warfare': '06', + '07 Surface Warfare': '07', + '08 Attack': '08', + '09 Ballistic Missile ': '09', + '10 Guided Missile ': '10', + '11 Other Guided Missile': '11', + '12 Special Operations Forces (SOF)': '12', + '13 Possible Submarine Low 1 ': '13', + '14 Possible Submarine Low 2': '14', + '15 Possible Submarine High 3': '15', + '16 Possible Submarine High 4': '16', + '17 Probable Submarine': '17', + '18 Certain Submarine': '18', + '19 Anti-torpedo Torpedo': '19', + '20 Hijacking/Highjacked': '20' + }) + + self.m2.update({ + '00 Unspecified': '00', + '01 Air Independent Propulsion': '01', + '02 Diesel Electric, General': '02', + '03 Diesel - Type 1': '03', + '04 Diesel - Type 2': '04', + '05 Diesel - Type 3': '05', + '06 Nuclear Powered, General': '06', + '07 Nuclear - Type 1': '07', + '08 Nuclear - Type 2': '08', + '09 Nuclear - Type 3': '09', + '10 Nuclear - Type 4': '10', + '11 Nuclear - Type 5': '11', + '12 Nuclear - Type 6': '12', + '13 Nuclear - Type 7': '13', + '14 Autonomous Control': '14', + '15 Remotely Piloted': '15', + '16 Expendable': '16' + }) + + +class MineWarfare(SymbolSet): + entity_types = { + 'Sea Mine, General': { + '01 Sea Mine, Bottom': '01', + '02 Sea Mine, Moored': '02', + '03 Sea Mine, Floating': '03', + '04 Sea Mine, Rising': '04', + '05 Sea Mine, Other Position': '05', + '06 Kingfisher': '06', + '07 Small Object, Mine-Like': '07', + '08 Exercise Mine, General': '08', + '09 Neutralized Mine, General': '09' + }, + 'Sea Mine Decoy': { + '01 Sea Mine Decoy, Bottom': '01', + '02 Sea Mine Decoy, Moored': '02' + }, + 'Mine-Like Contact (MILCO)': { + '01 MILCO - General': '01', + '02 MILCO - Bottom': '02', + '03 MILCO - Moored': '03', + '04 MILCO - Floating': '04' + }, + 'Mine-Like Echo (MILEC), General': { + '01 Mine-Like Echo, Bottom': '01', + '02 Mine-Like Echo, Moored': '02', + '03 Mine-Like Echo, Floating': '03', + }, + 'Negative Reacquisition, General': { + '01 Negative Reacquisition, Bottom': '01', + '02 Negative Reacquisition, Moored': '02', + '03 Negative Reacquisition, Floating': '03' + }, + 'Obstructor': { + '01 Neutralized Obstructor': '01' + }, + 'Non-Mine Mine-Like Object (NMLO), General': { + '01 Non-Mine Mine-Like Object, Bottom': '01', + '02 Non-Mine Mine-Like Object, Moored': '02', + '03 Non-Mine Mine-Like Object, Floating': '03' + } + } + + entity_subtypes = { + 'Exercise Mine, General': { + '01 Exercise Mine, Bottom': '01', + '02 Exercise Mine, Moored': '02', + '03 Exercise Mine, Floating': '03', + '04 Exercise Mine, Rising': '04' + }, + 'Neutralized Mine, General': { + '01 Neutralized Mine, Bottom': '01', + '02 Neutralized Mine, Moored': '02', + '03 Neutralized Mine, Floating': '03', + '04 Neutralized Mine, Rising': '04', + '05 Neutralized Mine, Other Position': '05' + }, + 'MILCO - General': { + '01 MILCO - General, Confidence.Level 1': '01', + '02 MILCO - General, Confidence.Level 2': '02', + '03 MILCO - General, Confidence.Level 3': '03', + '04 MILCO - General, Confidence.Level 4': '04', + '05 MILCO - General, Confidence.Level 5': '05' + }, + 'MILCO - Bottom': { + '01 MILCO - Bottom, ConfidenceLevel 1': '01', + '02 MILCO - Bottom, Confidence.Level 2': '02', + '03 MILCO - Bottom, Confidence.Level 3': '03', + '04 MILCO - Bottom, Confidence.Level 4': '04', + '05 MILCO - Bottom, ConfidenceLevel 5': '05' + + }, + 'MILCO - Moored': { + '01 MILCO - Moored, Confidence.Level 1': '01', + '02 MILCO - Moored, Confidence.Level 2': '02', + '03 MILCO - Moored, Confidence.Level 3': '03', + '04 MILCO - Moored, Confidence.Level 4': '04', + '05 MILCO - Moored, Confidence.Level 5': '05' + }, + 'MILCO - Floating': { + '01 MILCO - Floating, Confidence.Level 1': '01', + '02 MILCO - Floating, Confidence.Level 2': '02', + '03 MILCO - Floating, Confidence.Level 3': '03', + '04 MILCO - Floating, Confidence.Level 4': '04', + '05 MILCO - Floating, Confidence.Level 5': '05' + } + } + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType + + def __init__(self): + super().__init__() + self.entity.update({ + '11 Sea Mine, General': '11', + '12 Unexploded Ordnance': '12', + '13 Sea Mine Decoy': '13', + '14 Mine-Like Contact (MILCO)': '14', + '15 Mine-Like Echo (MILEC), General': '15', + '16 Negative Reacquisition, General': '16', + '17 Obstructor': '17', + '18 General Mine Anchor': '18', + '19 Non-Mine Mine-Like Object (NMLO), General': '19', + '20 Environmental Report Location': '20', + '21 Dive Report Location': '21' + }) + + +class Activities(SymbolSet): + entity_types = { + '11 Incident': { + '00': '00', + '01 Criminal Activity Incident': '01', + '02 Bomb/Bombing': '02', + '03 IED Event': '03', + '04 Shooting': '04', + '05 Illegal Drug Operation': '05', + '06 Explosion': '06' + }, + '12 Civil Disturbance': { + '00': '00', + '01 Demonstration': '01' + }, + '13 Operation': { + '00': '00', + '01 Patrolling': '01', + '02 Military Information Support Operation (MISO)': '02', + '03 Foraging/Searching': '03', + '04 Recruitment': '04', + '05 Mine Laying': '05', + '06 Spy': '06', + '07 Warrant Served': '07', + '08 Exfiltration': '08', + '09 Infiltration': '09', + '10 Meeting': '10', + '11 Raid on House': '11', + '12 Emergency Operation': '12', + '13 Emergency Medical Operation': '13', + '14 Fire Fighting Operation': '14', + '15 Law Enforcement Operation': '15' + }, + '14 Fire Event': { + '00': '00', + '01 Fire Origin': '01', + '02 Smoke': '02', + '03 Hot Spot': '03', + '04 Non-Residential Fire': '04', + '05 Residential Fire': '05', + '06 School Fire': '06', + '07 Special Needs Fire': '07', + '08 Wild Fire': '08', + }, + '15 Hazardous Materials': { + '00': '00', + '01 Hazardous Materials Incident': '01', + }, + '16 Transportation Incident': { + '00': '00', + '01 Air': '01', + '02 Marine': '02', + '03 Rail': '03', + '04 Vehicle': '04', + '05 Wheeled Vehicle Explosion': '05' + }, + '17 Natural Event': { + '00': '00', + '01 Geologic': '01', + '02 Hydro-Meteorological': '02', + '03 Infestation': '03' + }, + '18 Individual': { + '00': '00', + '01 Religious Leader': '01', + '02 Speaker': '02' + } + } + + entity_subtypes = { + '01 Criminal Activity Incident': { + '00': '00', + '01 Arrest': '01', + '02 Arson': '02', + '03 Attempted Criminal Activity': '03', + '04 Drive-by Shooting': '04', + '05 Drug Related': '05', + '06 Extortion': '06', + '07 Graffiti': '07', + '08 Killing': '08', + '09 Poisoning': '09', + '10 Civil Rioting': '10', + '11 Booby Trap': '11', + '12 Home Eviction': '12', + '13 Black Marketing': '13', + '14 Vandalism/Loot/Ransack/Plunder': '14', + '15 Jail Break': '15', + '16 Robbery': '16', + '17 Theft': '17', + '18 Burglary': '18', + '19 Smuggling': '19', + '20 Rock Throwing': '20', + '21 Dead Body': '21', + '22 Sabotage': '22', + '23 Suspicious Activity': '23' + }, + '02 Bomb/Bombing': { + '00': '00', + '01 Bomb/Bombing.Bomb Threat': '01' + }, + '03 IED Event': { + '00': '00', + '01 IED Explosion': '01', + '02 Premature IED Explosion': '02', + '03 IED Cache': '03', + '04 IED Suicide Bomber': '04' + }, + '04 Shooting': { + '00': '00', + '01 Sniping': '01' + }, + '05 Illegal Drug Operation': { + '00': '00', + '01 Trafficking': '01', + '02 Illegal Drug Lab': '02', + }, + '06 Explosion': { + '00': '00', + '01 Grenade Explosion': '01', + '02 Incendiary Explosion': '02', + '03 Mine Explosion': '03', + '04 Mortar Fire Explosion': '04', + '05 Rocket Explosion': '05', + '06 Bomb Explosion': '06' + }, + '02 Military Information Support Operation (MISO)': { + '00': '00', + '01 TV and Radio Propaganda': '01' + }, + '04 Recruitment': { + '00': '00', + '01 Willing': '01', + '02 Coerced/Impressed': '02' + }, + '10 Meeting': { + '00': '00', + '01 Polling Place/Election': '01' + }, + '12 Emergency Operation': { + '00': '00', + '01 Emergency Collection Evacuation Point': '01', + '02 Emergency Food Distribution': '02', + '03 Emergency Incident Command Center': '03', + '04 Emergency Operations Center': '04', + '05 Emergency Public Information Center': '05', + '06 Emergency Shelter': '06', + '07 Emergency Staging Area': '07', + '08 Emergency Water Distribution Center': '08' + }, + '13 Emergency Medical Operation': { + '00': '00', + '01 EMT Station Location': '01', + '02 Health Department Facility': '02', + '03 Medical Facilities Outpatient': '03', + '04 Morgue': '04', + '05 Pharmacy': '05', + '06 Triage': '06' + }, + '14 Fire Fighting Operation': { + '00': '00', + '01 Fire Hydrant': '01', + '02 Fire Station': '02', + '03 Other Water Supply Location': '03' + }, + '15 Law Enforcement Operation': { + '00': '00', + '01 Bureau of Alcohol, Tobacco, Firearms and Explosives (ATF) (Department of Justice)': '01', + '02 Border Patrol': '02', + '03 Customs Service': '03', + '04 Drug Enforcement Administration (DEA)': '04', + '05 Department of Justice (DOJ)': '05', + '06 Federal Bureau of Investigation (FBI)': '06', + '07 Police': '07', + '08 Prison': '08', + '09 United States Secret Service(Treas) (USSS)': '09', + '10 Transportation Security Administration (TSA)': '10', + '11 Coast Guard': '11', + '12 US Marshals Service': '12', + '13 Internal Security Force': '13' + }, + '01 Hazardous Materials Incident': { + '00': '00', + '01 Chemical Agent': '01', + '02 Corrosive Material': '02', + '03 Hazardous when Wet': '03', + '04 Explosive Material': '04', + '05 Flammable Gas': '05', + '06 Flammable Liquid': '06', + '07 Flammable Solid': '07', + '08 Non-Flammable Gas': '08', + '09 Organic Peroxide': '09', + '10 Oxidizer': '10', + '11 Radioactive Material': '11', + '12 Spontaneously Combustible Material': '12', + '13 Toxic Gas': '13', + '14 Toxic Infectious Material': '14', + '15 Unexploded Ordnance': '15' + }, + '01 Geologic': { + '00': '00', + '01 Aftershock': '01', + '02 Avalanche': '02', + '03 Earthquake Epicenter': '03', + '04 Landslide': '04', + '05 Subsidence': '05', + '06 Volcanic Eruption': '06', + '07 Volcanic Threat': '07', + '08 Cave Entrance': '08' + }, + '02 Hydro-Meteorological': { + '00': '00', + '01 Drought': '01', + '02 Flood': '02', + '03 Tsunami': '03' + }, + '03 Infestation': { + '00': '00', + '01 Bird': '01', + '02 Insect': '02', + '03 Microbial': '03', + '04 Reptile': '04', + '05 Rodent': '05' + } + } + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType + + def __init__(self): + super().__init__() + + self.entity.update({ + '11 Incident': '11', + '12 Civil Disturbance': '12', + '13 Operation': '13', + '14 Fire Event': '14', + '15 Hazardous Materials': '15', + '16 Transportation Incident': '16', + '17 Natural Event': '17', + '18 Individual': '18', + }) + + self.m1.update({ + '00 Unspecified': '00', + '01 Assassination': '01', + '02 Execution (Wrongful Killing)': '02', + '03 Hijacking/Hijacked': '03', + '04 House-to-House': '04', + '05 Kidnapping': '05', + '06 Murder': '06', + '07 Piracy': '07', + '08 Rape': '08', + '09 Written Military Information Support Operations': '09', + '10 Pirate': '10', + '11 False': '11', + '12 Find': '12', + '13 Found and Cleared': '13', + '14 Hoax (Decoy)': '14', + '15 Attempted': '15', + '16 Accident': '16', + '17 Incident': '17', + '18 Theft': '18' + }) + + +class MeteorologicalAtmospheric(SymbolSet): + entity_types = { + '11 Pressure Systems': { + '00': '00', + '01 Low Pressure Center': '01', + '02 High Pressure Center': '02', + '03 Frontal Systems': '03', + '04 Lines': '04', + '05 Pressure Tendency': '05', + }, + '12 Turbulence': { + '00': '00', + '01 Light': '01', + '02 Moderate': '02', + '03 Severe': '03', + '04 Extreme': '04', + '05 Mountain Waves': '05' + }, + '13 Icing': { + '00': '00', + '01 Clear Icing': '01', + '02 Rime Icing': '02', + '03 Mixed Icing': '03' + }, + '14 Winds': { + '00': '00', + '01 Calm Winds': '01', + '02 Wind Plot': '02', + '03 Jet Stream': '03', + '04 Stream Line': '04' + }, + '15 Cloud Cover': { + '00': '00', + '01 Cloud Coverage Symbols': '01' + }, + '16 Weather Symbols': { + '00': '00', + '01 Rain': '01', + '02 Freezing Rain': '02', + '03 Rain Showers': '03', + '04 Drizzle': '04', + '05 Freezing Drizzle': '05', + '06 Rain and Snow Mixed': '06', + '07 Snow': '07', + '08 Snow Grains': '08', + '09 Snow Showers': '09', + '10 Hail': '10', + '11 Ice Crystals (Diamond Dust)': '11', + '12 Ice Pellets (Sleet)': '12', + '13 Inversion': '13', + '14 Storms': '14', + '15 Fog': '15', + '16 Mist': '16', + '17 Smoke': '17', + '18 Haze': '18', + '19 Dust or Sand': '19', + '20 Tropical Storm Systems': '20', + '21 Volcanic Eruption': '21', + '22 Tropopause Level': '22', + '23 Freezing Level': '23', + '24 Precipitation of Unknown Type and Intensity': '24' + }, + '17 Bounded Areas of Weather': { + '00': '00', + '01 Instrument Flight Rule (IFR)': '01', + '02 Marginal Visual Flight Rule (MVFR)': '02', + '03 Turbulence': '03', + '04 Icing': '04', + '05 Liquid Precipitation - Non-Convective Continuous or Intermittent': '05', + '06 Freezing /Frozen Precipitation': '06', + '07 Thunderstorm': '07', + '08 Fog': '08', + '09 Dust or Sand': '09', + '10 Operator-Defined Freeform': '10' + }, + '18 Isopleths': { + '00': '00', + '01 Isobar - Surface': '01', + '02 Contour - Upper Air': '02', + '03 Isotherm': '03', + '04 Isotach': '04', + '05 Isodrosotherm': '05', + '06 Thickness': '06', + '07 Operator-Defined Freeform': '07' + }, + '19 State of the Ground': { + '00': '00', + '01 Without Snow or Measurable Ice Cover': '01', + '02 With Snow or Measurable Ice Cover': '02' + } + } + + entity_subtypes = { + '01 Low Pressure Center': { + '00': '00', + '01 Cyclone Center': '01', + '02 Tropopause Low': '02' + }, + '02 High Pressure Center': { + '00': '00', + '01 Anticyclone Center': '01', + '02 Tropopause High': '02' + }, + '03 Frontal Systems': { + '00': '00', + '01 Cold Front': '01', + '02 Upper Cold Front': '02', + '03 Cold Frontogenesis': '03', + '04 Cold Frontolysis': '04', + '05 Warm Front': '05', + '06 Upper Warm Front': '06', + '07 Warm Frontogenesis': '07', + '08 Warm Frontolysis': '08', + '09 Occluded Front': '09', + '10 Upper Occluded Front': '10', + '11 Occluded Frontolysis': '11', + '12 Stationary Front': '12', + '13 Upper Stationary Front': '13', + '14 Stationary Frontogenesis': '14', + '15 Stationary Frontolysis': '15' + }, + '04 Lines': { + '00': '00', + '01 Trough Axis': '01', + '02 Upper Trough Axis': '02', + '03 Ridge Axis': '03', + '04 Severe Squall Line': '04', + '05 Instability Line': '05', + '06 Shear Line': '06', + '07 Inter-Tropical Convergence Zone': '07', + '08 Convergence Line': '08', + '09 Inter-Tropical Discontinuity': '09' + }, + '05 Pressure Tendency': { + '00': '00', + '01 Rise Then Fall Higher': '01', + '02 Rise Then Steady': '02', + '03 Rise': '03', + '04 Rise Then Rise Higher': '04', + '05 Steady': '05', + '06 Fall Then Rise Lower': '06', + '07 Fall Then Steady': '07', + '08 Fall': '08', + '09 Rise Then Fall Lower': '09' + }, + '01 Clear Icing': { + '00': '00', + '01 Light': '01', + '02 Moderate': '02', + '03 Severe': '03' + }, + '02 Rime Icing': { + '00': '00', + '01 Light': '01', + '02 Moderate': '02', + '03 Severe': '03' + }, + '03 Mixed Icing': { + '00': '00', + '01 Light': '01', + '02 Moderate': '02', + '03 Severe': '03' + }, + '01 Cloud Coverage Symbols': { + '00': '00', + '01 Clear Sky': '01', + '02 Few Coverage': '02', + '03 Scattered Coverage': '03', + '04 Broken Coverage': '04', + '05 Overcast Coverage': '05', + '06 Sky Totally or Partially Obscured': '06' + }, + '01 Rain': { + '00': '00', + '01 Intermittent Light': '01', + '02 Continuous Light': '02', + '03 Intermittent Moderate': '03', + '04 Intermittent Moderate/Continuous Moderate': '04', + '05 Intermittent Heavy': '05', + '06 Intermittent Heavy/Continuous Heavy': '06', + }, + '02 Freezing Rain': { + '00': '00', + '01 Light': '01', + '02 Moderate/Heavy': '02' + }, + '03 Rain Showers': { + '00': '00', + '01 Light': '01', + '02 Moderate/Heavy': '02', + '03 Torrential': '03' + }, + '04 Drizzle': { + '00': '00', + '01 Intermittent Light': '01', + '02 Intermittent Light/Continuous Light': '02', + '03 Intermittent Moderate': '03', + '04 Intermittent Moderate/Continuous Moderate': '04', + '05 Intermittent Heavy': '05', + '06 Intermittent Heavy/Continuous Heavy': '06', + }, + '05 Freezing Drizzle': { + '00': '00', + '01 Light': '01', + '02 Moderate/Heavy': '02', + }, + '06 Rain and Snow Mixed': { + '00': '00', + '01 Rain or Drizzle and Snow - Light': '01', + '02 Rain or Drizzle and Snow - Moderate/Heavy': '02', + '03 Rain and Snow Showers - Light': '03', + '04 Rain and Snow Showers - Moderate/Heavy': '04' + }, + '07 Snow': { + '00': '00', + '01 Intermittent Light': '01', + '02 Intermittent Light/Continuous Light': '02', + '03 Intermittent Moderate': '03', + '04 Intermittent Moderate/Continuous Moderate': '04', + '05 Intermittent Heavy': '05', + '06 Intermittent Heavy/Continuous Heavy': '06', + '07 Blowing Snow - Light/Moderate': '07', + '08 Blowing Snow - Heavy': '08' + }, + '09 Snow Showers': { + '00': '00', + '01 Light': '01', + '02 Moderate/Heavy': '02' + }, + '10 Hail': { + '00': '00', + '01 Light not Associated with Thunder': '01', + '02 Moderate/Heavy not Associated with Thunder': '02' + }, + '12 Ice Pellets (Sleet)': { + '00': '00', + '01 Light': '01', + '02 Moderate': '02', + '03 Heavy': '03' + }, + '14 Storms': { + '00': '00', + '01 Thunderstorm - No Precipitation': '01', + '02 Thunderstorm Light to Moderate with Rain/Snow - No Hail': '02', + '03 Thunderstorm Heavy with Rain/Snow - No Hail': '03', + '04 Thunderstorm Light to Moderate - With Hail': '04', + '05 Thunderstorm Heavy - With Hail': '05', + '06 Funnel Cloud (Tornado/Waterspout)': '06', + '07 Squall': '07', + '08 Lightning': '08' + }, + '15 Fog': { + '00': '00', + '01 Shallow Patches': '01', + '02 Shallow Continuous': '02', + '03 Patchy': '03', + '04 Sky Visible': '04', + '05 Sky Obscured': '05', + '06 Freezing-Sky Visible': '06', + '07 Freezing-Sky Obscured': '07' + }, + '19 Dust or Sand': { + '00': '00', + '01 Light to Moderate': '01', + '02 Severe': '02', + '03 Dust Devil': '03', + '04 Blowing Dust or Sand': '04' + }, + '20 Tropical Storm Systems': { + '00': '00', + '01 Tropical Depression': '01', + '02 Tropical Storm': '02', + '03 Hurricane/Typhoon': '03', + '04 Tropical Storm Wind Areas and Date/Time Labels': '04' + }, + '21 Volcanic Eruption': { + '00': '00', + '01 Volcanic Ash': '01' + }, + '05 Liquid Precipitation - Non-Convective Continuous or Intermittent': { + '00': '00', + '01 Liquid Precipitation - Convective': '01' + }, + '01 Without Snow or Measurable Ice Cover': { + '00': '00', + '01 Surface Dry Without Cracks or Appreciable Dust or Loose Sand': '01', + '02 Surface Moist': '02', + '03 Surface Wet-Standing Water in Small or Large Pools': '03', + '04 Surface Flooded': '04', + '05 Surface Frozen': '05', + '06 Glaze (Thin Ice) on Ground': '06', + '07 Loose Dry Dust or Sand not Covering Ground Completely': '07', + '08 Thin Loose Dry Dust or Sand Covering Ground Completely': '08', + '09 Moderate/Thick Loose Dry Dust or Sand Covering Ground Completely': '09', + '10 Extremely Dry with Cracks': '10' + }, + '02 With Snow or Measurable Ice Cover': { + '00': '00', + '01 Predominately Ice Covered': '01', + '02 Compact or Wet Snow (with or without Ice) Covering Less Than One-Half of Ground': '02', + '03 Compact or Wet Snow (with or without Ice) Covering at Least One-Half of Ground-but Ground not Completely Covered': '03', + '04 Even Layer of Compact or Wet Snow Covering Ground Completely': '04', + '05 Uneven Layer of Compact or Wet Snow Covering Ground Completely': '05', + '06 Loose Dry Snow Covering Less Than One-Half of Ground': '06', + '07 Loose Dry Snow Covering at Least One-Half of Ground-but Ground not Completely Covered': '07', + '08 Even Layer of Loose Dry Snow Covering Ground Completely': '08', + '09 Uneven Layer of Loose Dry Snow Covering Ground Completely': '09', + '10 Snow Covering Ground Completely-Deep Drifts': '10' + } + } + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType + + def __init__(self): + super().__init__() + + self.entity.update({ + '11 Pressure Systems': '11', + '12 Turbulence': '12', + '13 Icing': '13', + '14 Winds': '14', + '15 Cloud Cover': '15', + '16 Weather Symbols': '16', + '17 Bounded Areas of Weather': '17', + '18 Isopleths': '18', + '19 State of the Ground': '19' + }) + + +class MeteorologicalOceanographic(SymbolSet): + entity_types = { + '11 Ice Systems': { + '00': '00', + '01 Icebergs': '01', + '02 Ice Concentration': '02', + '03 Dynamic Processes': '03', + '04 Sea Ice': '04', + '05 Limits': '05', + '06 Openings in the Ice': '06', + '07 Snow Cover': '07', + '08 Topographical Features': '08' + }, + '12 Hydrography': { + '00': '00', + '01 Depth': '01', + '02 Coastal Hydrography': '02', + '03 Ports and Harbors': '03', + '04 Aids to Navigation': '04', + '05 Dangers/Hazards': '05', + '06 Bottom Features': '06', + '07 Tide and Current': '07' + }, + '13 Oceanography': { + '00': '00', + '01 Bioluminescence': '01', + '02 Beach Slope': '02' + }, + '14 Geophysics/Acoustics': { + '00': '00', + '01 Mine Warfare (MIW) Bottom Descriptors': '01' + }, + '15 Limits': { + '00': '00', + '01 Maritime Limit Boundary': '01', + '02 Maritime Area': '02', + '03 Restricted Area': '03', + '04 Swept Area': '04', + '05 Training Area': '05', + '06 Operator-Defined': '06' + }, + '16 Man-Made Structures': { + '00': '00', + '01 Submarine Cable': '01', + '02 Submerged Crib': '02', + '03 Canal': '03', + '04 Ford': '04', + '05 Lock': '05', + '06 Oil/Gas Rig': '06', + '07 Oil/Gas Rig Field': '07', + '08 Pipelines/Pipe': '08', + '09 Pile/Piling/Post': '09', + } + } + + entity_subtypes = { + '01 Icebergs': { + '00': '00', + '01 Many Icebergs': '01', + '02 Belts and Strips': '02', + '03 General': '03', + '04 Many Icebergs - General': '04', + '05 Bergy Bit': '05', + '06 Many Bergy Bits': '06', + '07 Growler': '07', + '08 Many Growlers': '08', + '09 Floeberg': '09', + '10 Ice Island': '10' + }, + '02 Ice Concentration': { + '00': '00', + '01 Bergy Water': '01', + '02 Water with Radar Targets': '02', + '03 Ice Free': '03' + }, + '03 Dynamic Processes': { + '00': '00', + '01 Convergence': '01', + '02 Divergence': '02', + '03 Shearing or Shear Zone': '03', + '04 Ice Drift (Direction)': '04' + }, + '04 Sea Ice': { + '00': '00', + '01 Ice Thickness (Observed)': '01', + '02 Ice Thickness (Estimated)': '02', + '03 Melt Puddles or Flooded Ice': '03' + }, + '05 Limits': { + '00': '00', + '01 Limits of Visual Observation': '01', + '02 Limits of Under Cast': '02', + '03 Limits of Radar Observation': '03', + '04 Observed Ice Edge or Boundary': '04', + '05 Estimated Ice Edge or Boundary': '05', + '06 Ice Edge or Boundary From Radar': '06' + }, + '06 Openings in the Ice': { + '00': '00', + '01 Cracks': '01', + '02 Cracks at a Specific Location': '02', + '03 Lead': '03', + '04 Frozen Lead': '04' + }, + '07 Snow Cover': { + '00': '00', + '01 Sastrugi (with Orientation)': '01' + }, + '08 Topographical Features': { + '00': '00', + '01 Ridges or Hummocks': '01', + '02 Rafting': '02', + '03 Jammed Brash Barrier': '03' + }, + '01 Depth': { + '00': '00', + '01 Soundings': '01', + '02 Depth Curve': '02', + '03 Depth Contour': '03', + '04 Depth Area': '04' + }, + '02 Coastal Hydrography': { + '00': '00', + '01 Coastline': '01', + '02 Island': '02', + '03 Beach': '03', + '04 Water': '04', + '05 Foreshore - Line': '05', + '06 Foreshore - Area': '06' + }, + '03 Ports and Harbors': { + '00': '00', + '01 Ports': '01', + '02 Berths (Onshore)': '02', + '03 Berths (Anchor)': '03', + '04 Anchorage - Point': '04', + '05 Anchorage - Line': '05', + '06 Anchorage - Area': '06', + '07 Call in Point': '07', + '08 Pier/Wharf/Quay': '08', + '09 Fishing Harbor - Point': '09', + '10 Fish Weirs - Point': '10', + '11 Fish Stakes - Point': '11', + '12 Fish Traps - Area': '12', + '13 Facilities': '13', + '14 Drydock': '14', + '15 Landing Place': '15', + '16 Offshore Loading Facility - Point': '16', + '17 Offshore Loading Facility - Line': '17', + '18 Offshore Loading Facility - Area': '18', + '19 Ramp - Above Water': '19', + '20 Ramp - Below Water': '20', + '21 Landing Ring': '21', + '22 Ferry Crossing': '22', + '23 Cable Ferry Crossing': '23', + '24 Dolphin': '24', + '25 Shoreline Protection': '25', + '26 Breakwater/Groin/Jetty - Above Water': '26', + '27 Breakwater/Groin/Jetty - Below Water': '27', + '28 Seawall': '28' + }, + '04 Aids to Navigation': { + '00': '00', + '01 Beacon': '01', + '02 Buoy Default': '02', + '03 Marker': '03', + '04 Perches/Stakes - Point': '04', + '05 Perches/Stakes - Area': '05', + '06 Light': '06', + '07 Leading Line': '07', + '08 Light Vessel/Light Ship': '08', + '09 Lighthouse': '09' + }, + '05 Dangers/Hazards': { + '00': '00', + '01 Rock Submerged': '01', + '02 Rock Awashed': '02', + '03 Underwater Danger/Hazard': '03', + '04 Foul Ground - Point': '04', + '05 Foul Ground - Area': '05', + '06 Kelp/Seaweed - Point': '06', + '07 Kelp/Seaweed - Area': '07', + '08 Snags/Stumps': '08', + '09 Wreck (Uncovers)': '09', + '10 Wreck (Submerged)': '10', + '11 Breakers': '11', + '12 Reef': '12', + '13 Eddies/Overfalls/Tide Rips': '13', + '14 Discolored Water': '14' + }, + '06 Bottom Features': { + '00': '00', + '01 Bottom Characteristics - Sand': '01', + '02 Bottom Characteristics - Mud': '02', + '03 Bottom Characteristics - Clay': '03', + '04 Bottom Characteristics - Silt': '04', + '05 Bottom Characteristics - Stones': '05', + '06 Bottom Characteristics - Gravel': '06', + '07 Bottom Characteristics - Pebbles': '07', + '08 Bottom Characteristics - Cobbles': '08', + '09 Bottom Characteristics - Rock': '09', + '10 Bottom Characteristics - Coral': '10', + '11 Bottom Characteristics - Shell': '11', + '12 Qualifying Terms - Fine': '12', + '13 Qualifying Terms - Medium': '13', + '14 Qualifying Terms - Coarse': '14' + }, + '07 Tide and Current': { + '00': '00', + '01 Water Turbulence': '01', + '02 Current Flow - Ebb': '02', + '03 Current Flow - Flood': '03', + '04 Tide Data Point': '04', + '05 Tide Gauge': '05', + }, + '01 Bioluminescence': { + '00': '00', + '01 Visual Detection Ratio (VDR) Level 1-2': '01', + '02 VDR Level 2-3': '02', + '03 VDR Level 3-4': '03', + '04 VDR Level 4-5': '04', + '05 VDR Level 5-6': '05', + '06 VDR Level 6-7': '06', + '07 VDR Level 7-8': '07', + '08 VDR Level 8-9': '08', + '09 VDR Level 9-10': '09' + }, + '02 Beach Slope': { + '00': '00', + '01 Flat': '01', + '02 Gentle': '02', + '03 Moderate': '03', + '04 Steep': '04' + }, + '01 Mine Warfare (MIW) Bottom Descriptors': { + '00': '00', + '01 MIW Bottom Sediments - Solid Rock': '01', + '02 MIW Bottom Sediments - Clay': '02', + '03 MIW Bottom Sediments - Very Coarse Sand': '03', + '04 MIW Bottom Sediments - Coarse Sand': '04', + '05 MIW Bottom Sediments - Medium Sand': '05', + '06 MIW Bottom Sediments - Fine Sand': '06', + '07 MIW Bottom Sediments - Very Fine Sand': '07', + '08 MIW Bottom Sediments - Very Fine Silt': '08', + '09 MIW Bottom Sediments - Fine Silt': '09', + '10 MIW Bottom Sediments - Medium Silt': '10', + '11 MIW Bottom Sediments - Coarse Silt': '11', + '12 MIW Bottom Sediments - Boulders': '12', + '13 MIW Bottom Sediments - Cobbles-Oyster Shells': '13', + '14 MIW Bottom Sediments - Pebbles-Shells': '14', + '15 MIW Bottom Sediments - Sand and Shells': '15', + '16 MIW Bottom Sediment - Land': '16', + '17 MIW Bottom Sediment - No Data': '17', + '18 Bottom Roughness - Smooth': '18', + '19 Bottom Roughness - Moderate': '19', + '20 Bottom Roughness - Rough': '20', + '21 Clutter (Bottom) - Low': '21', + '22 Clutter (Bottom) - Medium': '22', + '23 Clutter (Bottom) - High': '23', + '24 Impact Burial - 0%': '24', + '25 Impact Burial - 0-10%': '25', + '26 Impact Burial - 10-20%': '26', + '27 Impact Burial - 20-75%': '27', + '28 Impact Burial - >75%': '28', + '29 MIW Bottom Category A': '29', + '30 MIW Bottom Category B': '30', + '31 MIW Bottom Category C': '31', + '32 MIW Bottom Type A1': '32', + '33 MIW Bottom Type A2': '33', + '34 MIW Bottom Type A3': '34', + '35 MIW Bottom Type B1': '35', + '36 MIW Bottom Type B2': '36', + '37 MIW Bottom Type B3': '37', + '38 MIW Bottom Type C1': '38', + '39 MIW Bottom Type C2': '39', + '40 MIW Bottom Type C3': '40' + } + } + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType + + def __init__(self): + super().__init__() + + self.entity.update({ + '11 Ice Systems': '11', + '12 Hydrography': '12', + '13 Oceanography': '13', + '14 Geophysics/Acoustics': '14', + '15 Limits': '15', + '16 Man-Made Structures': '16' + }) + + +class MeteorologicalSpace(SymbolSet): + entity_types = {} + + entity_subtypes = {} + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType + + def __init__(self): + super().__init__() + + self.entity.update({ + '11 Space': '11' + }) + + +class SignalsIntelligenceSpace(SymbolSet): + entity_types = { + '11 Signal Intercept': { + '00': '00', + '01 Communications': '01', + '02 Jammer': '02', + '03 Radar': '03' + } + } + + entity_subtypes = {} + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType + + def __init__(self): + super().__init__() + + self.entity.update({ + '11 Signal Intercept': '11' + }) + self.m1.update({ + '00': '00', + '14 Data Transmission': '14', + '15 Earth Surveillance': '15', + '21 Identification Friend or Foe (Interrogator)': '21', + '24 Identification Friend or Foe (Transponder)': '24', + '25 Barrage Jammer': '25', + '26 Click Jammer': '26', + '27 Deceptive Jammer': '27', + '28 Frequency Swept Jammer': '28', + '29 Jammer (General)': '29', + '30 Noise Jammer': '30', + '31 Pulsed Jammer': '31', + '32 Repeater Jammer': '32', + '33 Spot Noise Jammer': '33', + '34 Transponder Jammer': '34', + '36 Missile Control': '36', + '39 Multi-Function': '39', + '42 Missile Tracking': '42', + '43 Navigational/General': '43', + '44 Navigational/Distance Measuring Equipment': '44', + '45 Navigation/Terrain Following': '45', + '49 Point-to-Point Line of Sight (LOS)': '49', + '50 Instrumentation': '50', + '51 Range Only': '51', + '53 Satellite Downlink': '53', + '54 Space': '54', + '55 Surface Search': '55', + '58 Target Acquisition': '58', + '61 Target Tracking': '61', + '62 Unknown': '62', + '63 Video Remoting': '63', + '64 Experimental': '64' + }) + + +class SignalsIntelligenceAir(SymbolSet): + entity_types = { + '11 Signal Intercept': { + '00': '00', + '01 Communications': '01', + '02 Jammer': '02', + '03 Radar': '03' + } + } + + entity_subtypes = {} + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType + + def __init__(self): + super().__init__() + + self.entity.update({ + '11 Signal Intercept': '11' + }) + + self.m1.update({ + '00': '00', + '02 Airborne Search and Bombing': '02', + '03 Airborne Intercept': '03', + '04 Altimeter': '04', + '05 Airborne Reconnaissance and Mapping': '05', + '06 Air Traffic Control': '06', + '07 Beacon Transponder (not IFF)': '07', + '08 Battlefield Surveillance': '08', + '10 Controlled Intercept': '10', + '11 Cellular/Mobile': '11', + '12 Coastal Surveillance': '12', + '13 Decoy/Mimic': '13', + '14 Data Transmission': '14', + '16 Early Warning': '16', + '17 Fire Control': '17', + '18 Ground Mapping': '18', + '21 Identification Friend or Foe (Interrogator)': '21', + '23 Ionospheric Sounding': '23', + '24 Identification Friend or Foe (Transponder)': '24', + '25 Barrage Jammer': '25', + '26 Click Jammer': '26', + '27 Deceptive Jammer': '27', + '28 Frequency Swept Jammer': '28', + '29 Jammer (General)': '29', + '30 Noise Jammer': '30', + '31 Pulsed Jammer': '31', + '32 Repeater Jammer': '32', + '33 Spot Noise Jammer': '33', + '34 Transponder Jammer': '34', + '35 Missile Acquisition': '35', + '36 Missile Control': '36', + '37 Missile Downlink': '37', + '38 Meteorological': '38', + '39 Multi-Function': '39', + '40 Missile Guidance': '40', + '41 Missile Homing': '41', + '42 Missile Tracking': '42', + '43 Navigational/General': '43', + '44 Navigational/Distance Measuring Equipment': '44', + '45 Navigation/Terrain Following': '45', + '46 Navigational/Weather Avoidance': '46', + '47 Omni-Line of Sight (LOS)': '47', + '48 Proximity Use': '48', + '49 Point-to-Point Line of Sight (LOS)': '49', + '50 Instrumentation': '50', + '51 Range Only': '51', + '54 Space': '54', + '55 Surface Search': '55', + '57 Satellite Uplink': '57', + '58 Target Acquisition': '58', + '59 Target Illumination': '59', + '61 Target Tracking': '61', + '62 Unknown': '62', + '63 Video Remoting': '63', + '64 Experimental': '64' + }) + + +class SignalsIntelligenceLand(SymbolSet): + entity_types = { + '11 Signal Intercept': { + '00': '00', + '01 Communications': '01', + '02 Jammer': '02', + '03 Radar': '03' + } + } + + entity_subtypes = {} + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType + + def __init__(self): + super().__init__() + + self.entity.update({ + '11 Signal Intercept': '11' + }) + + self.m1.update({ + '00': '00', + '01 Anti-Aircraft Fire Control': '01', + '06 Air Traffic Control': '06', + '07 Beacon Transponder (not IFF)': '07', + '08 Battlefield Surveillance': '08', + '09 Controlled Approach': '09', + '10 Controlled Intercept': '10', + '11 Cellular/Mobile': '11', + '13 Decoy/Mimic': '13', + '14 Data Transmission': '14', + '16 Early Warning': '16', + '17 Fire Control': '17', + '19 Height Finding': '19', + '20 Harbor Surveillance': '20', + '21 Identification Friend or Foe (Interrogator)': '21', + '22 Instrument Landing System': '22', + '23 Ionospheric Sounding': '23', + '24 Identification Friend or Foe (Transponder)': '24', + '25 Barrage Jammer': '25', + '26 Click Jammer': '26', + '27 Deceptive Jammer': '27', + '28 Frequency Swept Jammer': '28', + '29 Jammer (General)': '29', + '30 Noise Jammer': '30', + '31 Pulsed Jammer': '31', + '32 Repeater Jammer': '32', + '33 Spot Noise Jammer': '33', + '34 Transponder Jammer': '34', + '35 Missile Acquisition': '35', + '36 Missile Control': '36', + '38 Meteorological': '38', + '39 Multi-Function': '39', + '40 Missile Guidance': '40', + '42 Missile Tracking': '42', + '43 Navigational/General': '43', + '44 Navigational/Distance Measuring Equipment': '44', + '45 Navigation/Terrain Following': '45', + '46 Navigational/Weather Avoidance': '46', + '47 Omni-Line of Sight (LOS)': '47', + '49 Point-to-Point Line of Sight (LOS)': '49', + '50 Instrumentation': '50', + '51 Range Only': '51', + '54 Space': '54', + '55 Surface Search': '55', + '56 Shell Tracking': '56', + '57 Satellite Uplink': '57', + '58 Target Acquisition': '58', + '59 Target Illumination': '59', + '60 Tropospheric Scatter': '60', + '61 Target Tracking': '61', + '62 Unknown': '62', + '63 Video Remoting': '63', + '64 Experimental': '64' + }) + + +class SignalsIntelligenceSurface(SymbolSet): + entity_types = { + '11 Signal Intercept': { + '00': '00', + '01 Communications': '01', + '02 Jammer': '02', + '03 Radar': '03' + } + } + + entity_subtypes = {} + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType + + def __init__(self): + super().__init__() + + self.entity.update({ + '11 Signal Intercept': '11' + }) + + self.m1.update({ + '00': '00', + '01 Anti-Aircraft Fire Control': '01', + '06 Air Traffic Control': '06', + '07 Beacon Transponder (not IFF)': '07', + '09 Controlled Approach': '09', + '10 Controlled Intercept': '10', + '11 Cellular/Mobile': '11', + '13 Decoy/Mimic': '13', + '14 Data Transmission': '14', + '16 Early Warning': '16', + '17 Fire Control': '17', + '19 Height Finding': '19', + '21 Identification Friend or Foe (Interrogator)': '21', + '22 Instrument Landing System': '22', + '24 Identification Friend or Foe (Transponder)': '24', + '25 Barrage Jammer': '25', + '26 Click Jammer': '26', + '27 Deceptive Jammer': '27', + '28 Frequency Swept Jammer': '28', + '29 Jammer (General)': '29', + '30 Noise Jammer': '30', + '31 Pulsed Jammer': '31', + '32 Repeater Jammer': '32', + '33 Spot Noise Jammer': '33', + '34 Transponder Jammer': '34', + '35 Missile Acquisition': '35', + '36 Missile Control': '36', + '38 Meteorological': '38', + '39 Multi-Function': '39', + '40 Missile Guidance': '40', + '42 Missile Tracking': '42', + '43 Navigational/General': '43', + '44 Navigational/Distance Measuring Equipment': '44', + '45 Navigation/Terrain Following': '45', + '46 Navigational/Weather Avoidance': '46', + '47 Omni-Line of Sight (LOS)': '47', + '49 Point-to-Point Line of Sight (LOS)': '49', + '50 Instrumentation': '50', + '51 Range Only': '51', + '52 Sonobuoy': '52', + '54 Space': '54', + '55 Surface Search': '55', + '57 Satellite Uplink': '57', + '58 Target Acquisition': '58', + '59 Target Illumination': '59', + '61 Target Tracking': '61', + '62 Unknown': '62', + '63 Video Remoting': '63', + '64 Experimental': '64' + }) + + +class SignalsIntelligenceSubsurface(SymbolSet): + entity_types = { + '11 Signal Intercept': { + '00': '00', + '01 Communications': '01', + '02 Jammer': '02', + '03 Radar': '03' + } + } + + entity_subtypes = {} + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType + + def __init__(self): + super().__init__() + + self.entity.update({ + '11 Signal Intercept': '11' + }) + + self.m1.update({ + '00': '00', + '07 Beacon Transponder (not IFF)': '07', + '11 Cellular/Mobile': '11', + '13 Decoy/Mimic': '13', + '14 Data Transmission': '14', + '16 Early Warning': '16', + '21 Identification Friend or Foe (Interrogator)': '21', + '24 Identification Friend or Foe (Transponder)': '24', + '25 Barrage Jammer': '25', + '26 Click Jammer': '26', + '27 Deceptive Jammer': '27', + '28 Frequency Swept Jammer': '28', + '29 Jammer (General)': '29', + '30 Noise Jammer': '30', + '31 Pulsed Jammer': '31', + '32 Repeater Jammer': '32', + '33 Spot Noise Jammer': '33', + '34 Transponder Jammer': '34', + '36 Missile Control': '36', + '39 Multi-Function': '39', + '42 Missile Tracking': '42', + '43 Navigational/General': '43', + '44 Navigational/Distance Measuring Equipment': '44', + '45 Navigation/Terrain Following': '45', + '46 Navigational/Weather Avoidance': '46', + '47 Omni-Line of Sight (LOS)': '47', + '49 Point-to-Point Line of Sight (LOS)': '49', + '50 Instrumentation': '50', + '51 Range Only': '51', + '52 Sonobuoy': '52', + '54 Space': '54', + '55 Surface Search': '55', + '57 Satellite Uplink': '57', + '58 Target Acquisition': '58', + '61 Target Tracking': '61', + '62 Unknown': '62', + '63 Video Remoting': '63', + '64 Experimental': '64' + }) + + +class CyberSpace(SymbolSet): + entity_types = { + '11 Botnet': { + '00': '00', + '01 Command and Control (C2)': '01', + '02 Herder': '02', + '03 Callback Domain': '03', + '04 Zombie': '04', + }, + '12 Infection': { + '00': '00', + '01 Advanced Persistent Threat (APT)': '01', + '02 Non-Advanced Persistent Threat (NAPT)': '02', + }, + '13 Health and Status': { + '00': '00', + '01 Normal': '01', + '02 Network Outage': '02', + '03 Unknown': '03', + '04 Impaired': '04', + }, + '14 Device Type': { + '00': '00', + '01 Core Router': '01', + '02 Router': '02', + '03 Cross Domain Solution': '03', + '04 Mail Server': '04', + '05 Web Server': '05', + '06 Domain Server': '06', + '07 File Server': '07', + '08 Peer-to-Peer Node': '08', + '09 Firewall': '09', + '10 Switch': '10', + '11 Host': '11', + '12 Virtual Private Network (VPN)': '12', + }, + '15 Device Domain': { + '00': '00', + '01 Department of Defense (DoD)': '01', + '02 Government': '02', + '03 Contractor': '03', + '04 Supervisory Control and Data Acquisition (SCADA)': '04', + '05 Non-Government': '05', + }, + '16 Effect': { + '00': '00', + '01 Infection': '01', + '02 Degradation': '02', + '03 Data Spoofing': '03', + '04 Data Manipulation': '04', + '05 Exfiltration': '05', + '06 Power Outage': '06', + '07 Network Outage': '07', + '08 Service Outage': '08', + '09 Device Outage': '09' + } + } + + entity_subtypes = { + '01 Advanced Persistent Threat (APT)': { + '00': '00', + '01 APT with C2': '01', + '02 APT with Self Propagation': '02', + '03 APT with C2 and Self Propagation': '03', + '04 APT Other': '04' + }, + '02 Non-Advanced Persistent Threat (NAPT)': { + '00': '00', + '01 NAPT with C2': '01', + '02 NAPT with Self Propagation': '02', + '03 NAPT with C2 and Self Propagation': '03', + '04 NAPT Other': '04' + } + } + + def entitytypes(self, entity): + if entity in self.entity_types: + return self.entity_types[entity] + else: + return self.entityType + + def entitysubtypes(self, entity_type): + if entity_type in self.entity_subtypes: + return self.entity_subtypes[entity_type] + else: + return self.entitySubType + + def __init__(self): + super().__init__() + + self.entity.update({ + '11 Botnet': '11', + '12 Infection': '12', + '13 Health and Status': '13', + '14 Device Type': '14', + '15 Device Domain': '15', + '16 Effect': '16' + }) diff --git a/milstd2525/ui/sidcdialogbase.py b/milstd2525/ui/sidcdialogbase.py new file mode 100644 index 0000000..1aa9b17 --- /dev/null +++ b/milstd2525/ui/sidcdialogbase.py @@ -0,0 +1,187 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'milstd2525/ui/sidcdialogbase.ui' +# +# Created by: PyQt5 UI code generator 5.9.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt5 import QtCore, QtGui, QtWidgets + +class Ui_SidcDialog(object): + def setupUi(self, SidcDialog): + SidcDialog.setObjectName("SidcDialog") + SidcDialog.resize(617, 672) + self.verticalLayout = QtWidgets.QVBoxLayout(SidcDialog) + self.verticalLayout.setObjectName("verticalLayout") + self.gridLayout = QtWidgets.QGridLayout() + self.gridLayout.setObjectName("gridLayout") + self.label_2 = QtWidgets.QLabel(SidcDialog) + self.label_2.setObjectName("label_2") + self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1) + self.comboHQ = QtWidgets.QComboBox(SidcDialog) + self.comboHQ.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToMinimumContentsLength) + self.comboHQ.setObjectName("comboHQ") + self.gridLayout.addWidget(self.comboHQ, 4, 1, 1, 1) + self.label_12 = QtWidgets.QLabel(SidcDialog) + self.label_12.setObjectName("label_12") + self.gridLayout.addWidget(self.label_12, 10, 0, 1, 1) + self.comboStatus = QtWidgets.QComboBox(SidcDialog) + self.comboStatus.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToMinimumContentsLength) + self.comboStatus.setObjectName("comboStatus") + self.gridLayout.addWidget(self.comboStatus, 3, 1, 1, 1) + self.label_6 = QtWidgets.QLabel(SidcDialog) + self.label_6.setObjectName("label_6") + self.gridLayout.addWidget(self.label_6, 4, 0, 1, 1) + self.comboSymbolSet = QtWidgets.QComboBox(SidcDialog) + self.comboSymbolSet.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToMinimumContentsLength) + self.comboSymbolSet.setObjectName("comboSymbolSet") + self.gridLayout.addWidget(self.comboSymbolSet, 2, 1, 1, 1) + self.comboContext = QtWidgets.QComboBox(SidcDialog) + self.comboContext.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToMinimumContentsLength) + self.comboContext.setObjectName("comboContext") + self.gridLayout.addWidget(self.comboContext, 0, 1, 1, 1) + self.label_8 = QtWidgets.QLabel(SidcDialog) + self.label_8.setObjectName("label_8") + self.gridLayout.addWidget(self.label_8, 6, 0, 1, 1) + self.label_7 = QtWidgets.QLabel(SidcDialog) + self.label_7.setObjectName("label_7") + self.gridLayout.addWidget(self.label_7, 5, 0, 1, 1) + self.comboAmplifier = QtWidgets.QComboBox(SidcDialog) + self.comboAmplifier.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToMinimumContentsLength) + self.comboAmplifier.setObjectName("comboAmplifier") + self.gridLayout.addWidget(self.comboAmplifier, 5, 1, 1, 1) + self.label_10 = QtWidgets.QLabel(SidcDialog) + self.label_10.setObjectName("label_10") + self.gridLayout.addWidget(self.label_10, 8, 0, 1, 1) + self.label_11 = QtWidgets.QLabel(SidcDialog) + self.label_11.setObjectName("label_11") + self.gridLayout.addWidget(self.label_11, 9, 0, 1, 1) + self.label_5 = QtWidgets.QLabel(SidcDialog) + self.label_5.setObjectName("label_5") + self.gridLayout.addWidget(self.label_5, 3, 0, 1, 1) + self.label_9 = QtWidgets.QLabel(SidcDialog) + self.label_9.setObjectName("label_9") + self.gridLayout.addWidget(self.label_9, 7, 0, 1, 1) + self.label_3 = QtWidgets.QLabel(SidcDialog) + self.label_3.setObjectName("label_3") + self.gridLayout.addWidget(self.label_3, 0, 0, 1, 1) + self.label_4 = QtWidgets.QLabel(SidcDialog) + self.label_4.setObjectName("label_4") + self.gridLayout.addWidget(self.label_4, 2, 0, 1, 1) + self.comboStandardId = QtWidgets.QComboBox(SidcDialog) + self.comboStandardId.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToMinimumContentsLength) + self.comboStandardId.setObjectName("comboStandardId") + self.gridLayout.addWidget(self.comboStandardId, 1, 1, 1, 1) + self.label_13 = QtWidgets.QLabel(SidcDialog) + self.label_13.setObjectName("label_13") + self.gridLayout.addWidget(self.label_13, 11, 0, 1, 1) + self.comboModifier2 = QtWidgets.QComboBox(SidcDialog) + self.comboModifier2.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToMinimumContentsLength) + self.comboModifier2.setObjectName("comboModifier2") + self.gridLayout.addWidget(self.comboModifier2, 11, 1, 1, 1) + self.comboModifier1 = QtWidgets.QComboBox(SidcDialog) + self.comboModifier1.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToMinimumContentsLength) + self.comboModifier1.setObjectName("comboModifier1") + self.gridLayout.addWidget(self.comboModifier1, 10, 1, 1, 1) + self.comboEntitySubtype = QtWidgets.QComboBox(SidcDialog) + self.comboEntitySubtype.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToMinimumContentsLength) + self.comboEntitySubtype.setObjectName("comboEntitySubtype") + self.gridLayout.addWidget(self.comboEntitySubtype, 9, 1, 1, 1) + self.comboEntity = QtWidgets.QComboBox(SidcDialog) + self.comboEntity.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToMinimumContentsLength) + self.comboEntity.setObjectName("comboEntity") + self.gridLayout.addWidget(self.comboEntity, 7, 1, 1, 1) + self.comboEntityType = QtWidgets.QComboBox(SidcDialog) + self.comboEntityType.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToMinimumContentsLength) + self.comboEntityType.setObjectName("comboEntityType") + self.gridLayout.addWidget(self.comboEntityType, 8, 1, 1, 1) + self.comboDescriptor = QtWidgets.QComboBox(SidcDialog) + self.comboDescriptor.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToMinimumContentsLength) + self.comboDescriptor.setObjectName("comboDescriptor") + self.gridLayout.addWidget(self.comboDescriptor, 6, 1, 1, 1) + self.verticalLayout.addLayout(self.gridLayout) + self.line = QtWidgets.QFrame(SidcDialog) + self.line.setFrameShape(QtWidgets.QFrame.HLine) + self.line.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line.setObjectName("line") + self.verticalLayout.addWidget(self.line) + self.horizontalLayout = QtWidgets.QHBoxLayout() + self.horizontalLayout.setObjectName("horizontalLayout") + self.label = QtWidgets.QLabel(SidcDialog) + font = QtGui.QFont() + font.setPointSize(12) + self.label.setFont(font) + self.label.setObjectName("label") + self.horizontalLayout.addWidget(self.label) + self.txtCode = QtWidgets.QLineEdit(SidcDialog) + self.txtCode.setEnabled(False) + font = QtGui.QFont() + font.setPointSize(12) + self.txtCode.setFont(font) + self.txtCode.setFrame(False) + self.txtCode.setObjectName("txtCode") + self.horizontalLayout.addWidget(self.txtCode) + self.verticalLayout.addLayout(self.horizontalLayout) + spacerItem = QtWidgets.QSpacerItem(311, 53, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout.addItem(spacerItem) + self.horizontalLayout_2 = QtWidgets.QHBoxLayout() + self.horizontalLayout_2.setObjectName("horizontalLayout_2") + spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_2.addItem(spacerItem1) + self.labelImg = QtWidgets.QLabel(SidcDialog) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.labelImg.sizePolicy().hasHeightForWidth()) + self.labelImg.setSizePolicy(sizePolicy) + self.labelImg.setMinimumSize(QtCore.QSize(100, 100)) + self.labelImg.setMaximumSize(QtCore.QSize(100, 100)) + self.labelImg.setBaseSize(QtCore.QSize(100, 100)) + self.labelImg.setFrameShape(QtWidgets.QFrame.Box) + self.labelImg.setText("") + self.labelImg.setObjectName("labelImg") + self.horizontalLayout_2.addWidget(self.labelImg) + spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_2.addItem(spacerItem2) + self.verticalLayout.addLayout(self.horizontalLayout_2) + spacerItem3 = QtWidgets.QSpacerItem(311, 52, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout.addItem(spacerItem3) + self.buttonBox = QtWidgets.QDialogButtonBox(SidcDialog) + self.buttonBox.setOrientation(QtCore.Qt.Horizontal) + self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) + self.buttonBox.setObjectName("buttonBox") + self.verticalLayout.addWidget(self.buttonBox) + + self.retranslateUi(SidcDialog) + self.buttonBox.accepted.connect(SidcDialog.accept) + self.buttonBox.rejected.connect(SidcDialog.reject) + QtCore.QMetaObject.connectSlotsByName(SidcDialog) + + def retranslateUi(self, SidcDialog): + _translate = QtCore.QCoreApplication.translate + SidcDialog.setWindowTitle(_translate("SidcDialog", "SIDC code")) + self.label_2.setText(_translate("SidcDialog", "Standard Identity")) + self.label_12.setText(_translate("SidcDialog", "Sector 1 Modifer")) + self.label_6.setText(_translate("SidcDialog", "Headquarters/task force/dummy (HQTF)")) + self.label_8.setText(_translate("SidcDialog", "Descriptor")) + self.label_7.setText(_translate("SidcDialog", "Amplifier")) + self.label_10.setText(_translate("SidcDialog", "Entity type")) + self.label_11.setText(_translate("SidcDialog", "Entity subtype")) + self.label_5.setText(_translate("SidcDialog", "Status")) + self.label_9.setText(_translate("SidcDialog", "Entity")) + self.label_3.setText(_translate("SidcDialog", "Context")) + self.label_4.setText(_translate("SidcDialog", "Symbol set")) + self.label_13.setText(_translate("SidcDialog", "Sector 2 Modifer")) + self.label.setText(_translate("SidcDialog", "SIDC code")) + + +if __name__ == "__main__": + import sys + app = QtWidgets.QApplication(sys.argv) + SidcDialog = QtWidgets.QDialog() + ui = Ui_SidcDialog() + ui.setupUi(SidcDialog) + SidcDialog.show() + sys.exit(app.exec_()) + diff --git a/milstd2525/ui/sidcdialogbase.ui b/milstd2525/ui/sidcdialogbase.ui index 7798210..af3a6f6 100644 --- a/milstd2525/ui/sidcdialogbase.ui +++ b/milstd2525/ui/sidcdialogbase.ui @@ -1,13 +1,13 @@ - Dialog - + SidcDialog + 0 0 617 - 497 + 672 @@ -15,9 +15,51 @@ - + + + + + Standard Identity + + + + + + + QComboBox::AdjustToMinimumContentsLength + + + + + + + Sector 1 Modifer + + + + + + + QComboBox::AdjustToMinimumContentsLength + + + + + + + Headquarters/task force/dummy (HQTF) + + + + + + + QComboBox::AdjustToMinimumContentsLength + + + - + QComboBox::AdjustToMinimumContentsLength @@ -26,28 +68,35 @@ - Icon + Descriptor - - + + - Special entity subtypes + Amplifier - - + + + + QComboBox::AdjustToMinimumContentsLength + + + + + - StandardIdentity2 + Entity type - - + + - Headquarters/task force/dummy + Entity subtype @@ -58,17 +107,17 @@ - - + + - Echelon/mobility/towed array + Entity - StandardIdentity1 + Context @@ -79,78 +128,57 @@ - - + + QComboBox::AdjustToMinimumContentsLength - - + + - Icon modifier 1 + Sector 2 Modifer - + QComboBox::AdjustToMinimumContentsLength - - - - Icon modifier 2 - - - - - - - QComboBox::AdjustToMinimumContentsLength - - - - - + + QComboBox::AdjustToMinimumContentsLength - - + + QComboBox::AdjustToMinimumContentsLength - - + + QComboBox::AdjustToMinimumContentsLength - - + + QComboBox::AdjustToMinimumContentsLength - - - QComboBox::AdjustToMinimumContentsLength - - - - - + QComboBox::AdjustToMinimumContentsLength @@ -303,7 +331,7 @@ buttonBox accepted() - Dialog + SidcDialog accept() @@ -319,7 +347,7 @@ buttonBox rejected() - Dialog + SidcDialog reject() diff --git a/milstd2525/ui/trash.py b/milstd2525/ui/trash.py new file mode 100644 index 0000000..0647c44 --- /dev/null +++ b/milstd2525/ui/trash.py @@ -0,0 +1,54 @@ +import json + + +def main(): + with open("/Users/vickdw/Downloads/symbolSets.json") as f: + symbolSets = json.load(f) + for s in symbolSets: + ent = {} + ent_type = {} + ent_subtype = {} + textfile = open("/Users/vickdw/Downloads/" + s['label'] + ".txt", "w") + textfile.write("entities:\n") + textfile.write("{\n") + for e in s['entities']: + x = "'" + e['digits'] + " " + e['label'] + "': '" + e['digits'] + "'," + textfile.write(x + "\n") + textfile.write("}\n") + + for e in s['entities']: + if len(e['entityTypes']) > 0: + textfile.write("entity-types:\n") + textfile.write(" '" + e['digits'] + ' ' + e['label'] + "': {\n") + textfile.write(" '00': '00',\n") + for et in e['entityTypes']: + x = " '" + et['digits'] + " " + et['label'] + "': '" + et['digits'] + "'," + textfile.write(x + "\n") + textfile.write("}\n") + if len(e['entityTypes']) > 0: + for et in e['entityTypes']: + if len(et['entitySubTypes']) > 0: + textfile.write("entity-subtypes:\n") + textfile.write(" '" + et['digits'] + " " + et['label'] + "': {\n") + textfile.write(" '00': '00',\n") + for est in et['entitySubTypes']: + x = " '" + est['digits'] + " " + est['label'] + "': '" + est['digits'] + "'," + textfile.write(x + "\n") + textfile.write("}\n") + textfile.write("Modifiers 1:\n") + textfile.write("{\n") + for m in s['sectorOneModifiers']: + x = "'" + m['digits'] + " " + m['label'] + "': '" + m['digits'] + "'," + textfile.write(x + "\n") + textfile.write("}\n\n") + + textfile.write("Modifiers 2:\n") + textfile.write("{\n") + for m in s['sectorTwoModifiers']: + x = "'" + m['digits'] + " " + m['label'] + "': '" + m['digits'] + "'," + textfile.write(x + "\n") + textfile.write("}\n") + + +if __name__ == "__main__": + main()