def addIterativeIonPair(object1, object2, interaction, version):
    """
    Adding the Coulomb 'iterative' interaction (an acid-base pair):
    the pKa of the acid is lowered & the pKa of the base is raised
    """
    values = interaction[1]
    annihilation = interaction[2]
    hbond_value = values[0]
    coulomb_value = values[1]
    Q1 = object1.Q
    Q2 = object2.Q
    comp1 = object1.pKa_old + annihilation[0] + Q1 * coulomb_value
    comp2 = object2.pKa_old + annihilation[1] + Q2 * coulomb_value
    if (object1.resName not in version.parameters.
        exclude_sidechain_interactions):
        comp1 += Q1 * hbond_value
    if (object2.resName not in version.parameters.
        exclude_sidechain_interactions):
        comp2 += Q2 * hbond_value
    if Q1 == -1.0 and comp1 < comp2:
        add_term = True
    elif Q1 == 1.0 and comp1 > comp2:
        add_term = True
    else:
        add_term = False
    annihilation[0] = 0.0
    annihilation[1] = 0.0
    if add_term == True:
        if coulomb_value > 0.005:
            interaction = [object2, Q1 * coulomb_value]
            annihilation[0] += -Q1 * coulomb_value
            object1.determinants['coulomb'].append(interaction)
            interaction = [object1, Q2 * coulomb_value]
            annihilation[1] += -Q2 * coulomb_value
            object2.determinants['coulomb'].append(interaction)
        if hbond_value > 0.005:
            if (object1.resName not in version.parameters.
                exclude_sidechain_interactions):
                interaction = [object2, Q1 * hbond_value]
                annihilation[0] += -Q1 * hbond_value
                object1.determinants['sidechain'].append(interaction)
            if (object2.resName not in version.parameters.
                exclude_sidechain_interactions):
                interaction = [object1, Q2 * hbond_value]
                annihilation[1] += -Q2 * hbond_value
                object2.determinants['sidechain'].append(interaction)
