# `analysis.eccentricity` module

Plot the eccentricity of the orbits of the particles in an encounter

Source code

    """Plot the eccentricity of the orbits of the particles in an encounter"""

    import matplotlib.pyplot as plt
    import numpy as np

    from analysis import utils
    from analysis.segmentation import segmentEncounter

    # Segment the encounter
    data = utils.loadData('200mass', 15000)
    (bridgeMask, stolenMask, orbittingMask, tailMask), _, _ = segmentEncounter(data)
    # Avoid central masses
    orbittingMask, stolenMask = orbittingMask[1:], stolenMask[1:]

    # Calculate the eccentricities
    tailE = utils.calculateEccentricity(1.0, data['r_vec'][0], data['v_vec'][0],
            data['r_vec'][tailMask], data['v_vec'][tailMask])
    stolenE = utils.calculateEccentricity(2.0, data['r_vec'][1], data['v_vec'][1],
            data['r_vec'][stolenMask], data['v_vec'][stolenMask])
    orbittingE = utils.calculateEccentricity(1.0, data['r_vec'][0], data['v_vec'][0],
            data['r_vec'][orbittingMask], data['v_vec'][orbittingMask])

    # Plotting
    f, ax = plt.subplots(1, 1)
    bins = np.linspace(0, 10, 301)
    style = {'linestyle':'solid', 'normed':True, 'color':'black'}
    ax.hist(tailE, bins=bins, histtype='step', label='tail', **style)
    ax.hist(stolenE, bins=bins, histtype='step', label='stolen', **style)
    ax.hist(orbittingE, bins=bins, histtype='step', label='orbitting', **style)

    # Plotting styling
    utils.setSize(ax, x=(0,2))
    utils.setAxes(ax, x='Eccentricity', y='Density of particles',
            xcoords=(.85,-0.08), ycoords=(-0.1,.65))
    ax.legend(loc='upper right')
    utils.stylizePlot([ax])
    ax.axvline(x=1, c='black')
    plt.show()

    # Summarize the results
    print('Not shown, fraction of particles in tail with e>2.0:',
            np.sum(tailE > 2)/len(tailE))
    print('Tail, higher than e>1:', np.sum(tailE > 1)/len(tailE))
    print('Stolen, higher than e>1:', np.sum(stolenE > 1)/len(stolenE))
    print('Orbitting, higher than e>1:', np.sum(orbittingE > 1)/len(orbittingE))