def add_potential(self, potential, potential_dict):
        """
        Adds Potential to the potential dict.

        Parameters
        ----------
        potential: <Element Potential at Potentials node in XML>
            etree Element consisting Potential tag.
        potential_dict: dict{}
            Dictionary to parse Potential tag.

        Examples
        -------
        >>> reader = ProbModelXMLReader()
        >>> reader.add_potential(potential, potential_dict)
        """
        potential_type = potential.attrib['type']
        potential_dict['type'] = potential_type
        try:
            potential_dict['role'] = potential.attrib['role']
        except KeyError:
            pass
        if potential.find('Comment') is not None:
            potential_dict['Comment'] = potential.find('Comment').text
        for prop in potential.findall('AdditionalProperties/Property'):
            potential_dict['AdditionalProperties'][prop.attrib['name']] = prop.attrib['value']
        if potential_type == "delta":
            potential_dict['Variable'] = potential.find('Variable').attrib['name']
            if potential.find('State') is not None:
                potential_dict['State'] = potential.find('State').text
            if potential.find('StateIndex') is not None:
                potential_dict['StateIndex'] = potential.find('StateIndex').text
            if potential.find('NumericValue') is not None:
                potential_dict['NumericValue'] = potential.find('NumericValue').text
        else:
            if potential.find('UtilityVariable') is not None:
                potential_dict['UtilityVaribale'] = potential.find('UtilityVariable').attrib['name']
            if len(potential.findall('Variables/Variable')):
                potential_dict['Variables'] = {}
                var_list = []
                for var in potential.findall('Variables/Variable'):
                    var_list.append(var.attrib['name'])
                potential_dict['Variables'][var_list[0]] = var_list[1:]
            if potential.find('Values') is not None:
                potential_dict['Values'] = potential.find('Values').text
            if len(potential.findall('UncertainValues/Value')):
                potential_dict['UncertainValues'] = []
                for value in potential.findall('UncertainValues/Value'):
                    try:
                        potential_dict['UncertainValues'].append(
                            {'distribution': value.attrib['distribution'], 'name': value.attrib['name'],
                             'value': value.text})
                    except KeyError:
                        potential_dict['UncertainValues'].append(
                            {'distribution': value.attrib['distribution'], 'value': value.text})
            if potential.find('TopVariable') is not None:
                potential_dict['TopVariable'] = potential.find('TopVariable').attrib['name']

            if len(potential.findall('Branches/Branch')):
                potential_dict['Branches'] = []
                for branch in potential.findall('Branches/Branch'):
                    branch_dict = {}
                    if len(branch.findall('States/State')):
                        states = []
                        for state in branch.findall('States/State'):
                            states.append({'name': state.attrib['name']})
                        branch_dict['States'] = states
                    if branch.find('Potential') is not None:
                        branch_potential = {}
                        self.add_potential(branch.find('Potential'), branch_potential)
                        branch_dict['Potential'] = branch_potential
                    if branch.find('Label') is not None:
                        label = branch.find('Label').text
                        branch_dict['Label'] = label
                    if branch.find('Reference') is not None:
                        reference = branch.find('Reference').text
                        branch_dict['Reference'] = reference
                    if len(branch.findall('Thresholds/Threshold')):
                        thresholds = []
                        for threshold in branch.findall('Thresholds/Threshold'):
                            try:
                                thresholds.append({
                                    'value': threshold.attrib['value'], 'belongsTo': threshold.attrib['belongsTo']})
                            except KeyError:
                                thresholds.append({'value': threshold.attrib['value']})
                        branch_dict['Thresholds'] = thresholds
                    potential_dict['Branches'].append(branch_dict)

            if potential.find('Model') is not None:
                potential_dict['Model'] = potential.find('Model').text
            if len(potential.findall('Subpotentials/Potential')):
                potential_dict['Subpotentials'] = []
                for subpotential in potential.findall('Subpotentials/Potential'):
                    subpotential_dict = {}
                    self.add_potential(subpotential, subpotential_dict)
                    potential_dict['Subpotentials'].append(subpotential_dict)
            if potential.find('Coefficients') is not None:
                potential_dict['Coefficients'] = potential.find('Coefficients').text
            if potential.find('CovarianceMatrix') is not None:
                potential_dict['CovarianceMatrix'] = potential.find('CovarianceMatrix').text
            if potential.find('Potential') is not None:
                potential_dict['Potential'] = {}
                self.add_potential(potential.find('Potential'), potential_dict['Potential'])
            if len(potential.findall('NumericVariables/Variable')):
                potential_dict['NumericVariables'] = []
                for variable in potential.findall('NumericVariables/Variable'):
                    potential_dict['NumericVariables'].append(variable.attrib['name'])