def elemental_abund(self,cycle,zrange=[<NUM_LIT:1>,<NUM_LIT>],ylim=[<NUM_LIT:0>,<NUM_LIT:0>],title_items=None,<EOL>ref=-<NUM_LIT:1>,ref_filename=None,z_pin=None,pin=None,<EOL>pin_filename=None,zchi2=None,logeps=False,dilution=None,show_names=True,label='<STR_LIT>',<EOL>colour='<STR_LIT>',plotlines='<STR_LIT::>',plotlabels=True,mark='<STR_LIT:x>',**kwargs):
<EOL>from . import ascii_table as asci<EOL>plotType=self._classTest()<EOL>offset=<NUM_LIT:0><EOL>if ref_filename!=None:<EOL><INDENT>ref=-<NUM_LIT:2><EOL><DEDENT>if logeps==True:<EOL><INDENT>if zrange[<NUM_LIT:0>]!=<NUM_LIT:1>:<EOL><INDENT>print("<STR_LIT>")<EOL>sys.exit()<EOL><DEDENT>z_pin=<NUM_LIT:1><EOL>ref=-<NUM_LIT:3><EOL><DEDENT>if plotType=='<STR_LIT>':<EOL><INDENT>self.get(cycle,decayed=True)<EOL>z_el=unique(self.z_iso_to_plot)<EOL>zmin_ind=min(where(z_el>=zrange[<NUM_LIT:0>])[<NUM_LIT:0>])<EOL>zmax_ind=max(where(z_el<=zrange[<NUM_LIT:1>])[<NUM_LIT:0>])<EOL>a_el=[]; el_name=[]; el_abu=[]; el_abu_hash={}<EOL>for z in z_el[zmin_ind:zmax_ind]:<EOL><INDENT>el=self.el_iso_to_plot[where(self.z_iso_to_plot==z)[<NUM_LIT:0>].tolist()[<NUM_LIT:0>]]<EOL>X_el=self.abunds[where(self.el_iso_to_plot==el)[<NUM_LIT:0>].tolist()].sum()  <EOL>a_el.append(self.a_iso_to_plot[where(self.z_iso_to_plot==z)[<NUM_LIT:0>].tolist()[<NUM_LIT:0>]])<EOL>el_abu.append(X_el)<EOL>el_name.append(el)<EOL>el_abu_hash[el]=X_el<EOL><DEDENT>fe_abund=self.abunds[where(self.el_iso_to_plot=='<STR_LIT>')[<NUM_LIT:0>].tolist()].sum()    <EOL>self.el_abu_hash = el_abu_hash<EOL>self.el_name     = el_name<EOL>if ref==-<NUM_LIT:2>:<EOL><INDENT>from . import utils<EOL>utils.solar(ref_filename,<NUM_LIT:1>)<EOL>el_abu_sun=np.array(utils.solar_elem_abund)<EOL>el_abu_plot=np.zeros(len(el_abu))<EOL>for zs in z_el[zmin_ind:zmax_ind]:<EOL><INDENT>zelidx=where(z_el[zmin_ind:zmax_ind]==zs)[<NUM_LIT:0>]<EOL>zsolidx=int(zs-<NUM_LIT:1>)<EOL>if el_abu_sun[zsolidx] > <NUM_LIT:0.> :<EOL><INDENT>el_abu_plot[zelidx]=el_abu[zelidx[<NUM_LIT:0>]]/el_abu_sun[zsolidx]<EOL><DEDENT>else:<EOL><INDENT>el_abu_plot[zelidx]=-<NUM_LIT:1><EOL><DEDENT><DEDENT><DEDENT>elif ref>-<NUM_LIT:1>:<EOL><INDENT>self.get(ref,decayed=True)<EOL>z_el_ref=unique(self.z_iso_to_plot)<EOL>zmin_ind=min(where(z_el_ref>=zrange[<NUM_LIT:0>])[<NUM_LIT:0>])<EOL>zmax_ind=max(where(z_el_ref<=zrange[<NUM_LIT:1>])[<NUM_LIT:0>])<EOL>a_el_ref=[]; el_name_ref=[]; el_abu_ref=[]; el_abu_hash_ref={}<EOL>el_abu_plot=np.zeros(len(el_abu))<EOL>for z_ref in z_el[zmin_ind:zmax_ind]:<EOL><INDENT>el_ref=self.el_iso_to_plot[where(self.z_iso_to_plot==z_ref)[<NUM_LIT:0>].tolist()[<NUM_LIT:0>]]<EOL>X_el_ref=self.abunds[where(self.el_iso_to_plot==el_ref)[<NUM_LIT:0>].tolist()].sum()<EOL>a_el_ref.append(self.a_iso_to_plot[where(self.z_iso_to_plot==z_ref)[<NUM_LIT:0>].tolist()[<NUM_LIT:0>]])<EOL>el_abu_ref.append(X_el_ref)<EOL>el_name_ref.append(el_ref)<EOL>el_abu_hash_ref[el_ref]=X_el<EOL><DEDENT>for i in range(len(el_abu)):<EOL><INDENT>el_abu_plot[i-<NUM_LIT:1>]=el_abu[i-<NUM_LIT:1>]/el_abu_ref[i-<NUM_LIT:1>]<EOL><DEDENT><DEDENT>if pin_filename!=None:<EOL><INDENT>print('<STR_LIT>')<EOL>obs_file=asci.readTable(pin_filename,header_char='<STR_LIT:#>')<EOL>xfe_sigma=[]<EOL>el_abu_obs_log=[]<EOL>z_ul=[]<EOL>for z_i in z_el[zmin_ind:zmax_ind]:<EOL><INDENT>try:<EOL><INDENT>obs_file.data['<STR_LIT>']<EOL>x_over='<STR_LIT>'<EOL>sigma='<STR_LIT>'<EOL><DEDENT>except:<EOL><INDENT>x_over='<STR_LIT>'<EOL>sigma='<STR_LIT>'<EOL><DEDENT>zelidx=where(z_el[zmin_ind:zmax_ind]==z_i)[<NUM_LIT:0>]<EOL>zpinidx=where(obs_file.data['<STR_LIT>']==z_i)[<NUM_LIT:0>] <EOL>if len(zpinidx)==<NUM_LIT:0>:<EOL><INDENT>el_abu_obs_log.append([None])<EOL>xfe_sigma.append([None])<EOL>z_ul.append([None])<EOL><DEDENT>elif len(zpinidx)><NUM_LIT:1>:<EOL><INDENT>'''<STR_LIT>'''<EOL>tmp=obs_file.data[x_over][zpinidx]<EOL>el_abu_obs_log.append(tmp.tolist())                            <EOL>tmp=obs_file.data[sigma][zpinidx]<EOL>xfe_sigma.append(tmp.tolist())<EOL>z_ul.append([None])<EOL><DEDENT>else:<EOL><INDENT>if obs_file.data['<STR_LIT>'][zpinidx]==<NUM_LIT:1>: <EOL><INDENT>tmp=obs_file.data[x_over][zpinidx]<EOL>z_ul.append(tmp.tolist())<EOL>tmp=obs_file.data[x_over][zpinidx]<EOL>el_abu_obs_log.append([None])<EOL>xfe_sigma.append([None])<EOL><DEDENT>else:<EOL><INDENT>tmp=obs_file.data[x_over][zpinidx][<NUM_LIT:0>]<EOL>el_abu_obs_log.append([tmp])<EOL>tmp=obs_file.data[sigma][zpinidx][<NUM_LIT:0>]<EOL>xfe_sigma.append([tmp])<EOL>z_ul.append([None])<EOL><DEDENT><DEDENT><DEDENT>el_abu_obs=[]<EOL><DEDENT>if z_pin!=None:<EOL><INDENT>print("<STR_LIT>"+str(z_pin))<EOL>if pin_filename!=None:<EOL><INDENT>for i in range(len(el_abu_obs_log)):<EOL><INDENT>if all(el_abu_obs_log[i])==None:<EOL><INDENT>el_abu_obs.append(None)<EOL><DEDENT>else:<EOL><INDENT>el_abu_obs.append(np.power(<NUM_LIT:10>,el_abu_obs_log[i]))<EOL><DEDENT>el_abu_pin=el_abu_obs<EOL><DEDENT><DEDENT>elif pin!=None:<EOL><INDENT>print('<STR_LIT>')<EOL>pin=np.power(<NUM_LIT:10>,pin)<EOL>el_abu_pin=np.zeros(len(el_abu))<EOL>for i in range(len(el_abu)):<EOL><INDENT>el_abu_pin[i-<NUM_LIT:1>]=pin<EOL><DEDENT><DEDENT>elif logeps==True:<EOL><INDENT>print('<STR_LIT>')<EOL>atomic_mass=[<NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT> , <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>]  <EOL>el_abu_pin=atomic_mass<EOL>el_abu_plot=np.zeros(len(el_abu))<EOL>for i in range(len(el_abu)):<EOL><INDENT>el_abu_plot[i-<NUM_LIT:1>]=el_abu[i-<NUM_LIT:1>]/el_abu_pin[i-<NUM_LIT:1>]<EOL><DEDENT><DEDENT>elif ref==-<NUM_LIT:2>:<EOL><INDENT>print('<STR_LIT>')<EOL>el_abu_pin=np.zeros(len(el_abu))<EOL>for i in range(len(el_abu)):<EOL><INDENT>el_abu_pin[i-<NUM_LIT:1>]=el_abu[i-<NUM_LIT:1>]/el_abu_sun[i-<NUM_LIT:1>]<EOL><DEDENT><DEDENT>elif ref>=<NUM_LIT:0>:<EOL><INDENT>print("<STR_LIT>")<EOL><DEDENT>'''<STR_LIT>'''<EOL>zelidx=where(z_el[zmin_ind:zmax_ind]==z_pin)[<NUM_LIT:0>][<NUM_LIT:0>]<EOL>offset=np.log10(el_abu_pin[zelidx])-np.log10(el_abu_plot[zelidx])<EOL><DEDENT>if ref!=-<NUM_LIT:1> and dilution==None:<EOL><INDENT>el_abu=el_abu_plot<EOL><DEDENT>if dilution!=None:<EOL><INDENT>self.get(<NUM_LIT:0>,decayed=True)<EOL>z_el_ini=unique(self.z_iso_to_plot)<EOL>zmin_ind=min(where(z_el>=zrange[<NUM_LIT:0>])[<NUM_LIT:0>])<EOL>zmax_ind=max(where(z_el<=zrange[<NUM_LIT:1>])[<NUM_LIT:0>])<EOL>a_el_ini=[]; el_name_ini=[]; el_abu_ini=[]; el_abu_hash_ini={}<EOL>for z in z_el_ini:<EOL><INDENT>el_ini=self.el_iso_to_plot[where(self.z_iso_to_plot==z)[<NUM_LIT:0>].tolist()[<NUM_LIT:0>]]<EOL>X_el_ini=self.abunds[where(self.el_iso_to_plot==el_ini)[<NUM_LIT:0>].tolist()].sum()  <EOL>a_el_ini.append(self.a_iso_to_plot[where(self.z_iso_to_plot==z)[<NUM_LIT:0>].tolist()[<NUM_LIT:0>]])<EOL>el_abu_ini.append(X_el_ini)<EOL>el_name_ini.append(el_ini)<EOL>el_abu_hash_ini[el]=X_el_ini<EOL><DEDENT>el_abu_dilution=[]<EOL>for i in range(len(el_abu)):<EOL><INDENT>el_adjusted=(dilution*el_abu[i])+((<NUM_LIT:1>-dilution)*el_abu_ini[zmin_ind+i])<EOL>fe_adjusted=(dilution*fe_abund)+((<NUM_LIT:1>-dilution)*el_abu_ini[<NUM_LIT>])<EOL>num=el_adjusted*el_abu_sun[<NUM_LIT>]<EOL>iadd = <NUM_LIT:1><EOL>if z_el[zmin_ind+i] > <NUM_LIT>:<EOL><INDENT>iadd = <NUM_LIT:2><EOL><DEDENT>if z_el[zmin_ind+i] > <NUM_LIT>:<EOL><INDENT>iadd = <NUM_LIT:3><EOL><DEDENT>denom=fe_adjusted*el_abu_sun[zmin_ind+iadd+i]<EOL>el_abu_dilution.append(num/denom)<EOL><DEDENT>el_abu=el_abu_dilution<EOL><DEDENT>self.el_abu_log = np.log10(el_abu)<EOL>chi2 = <NUM_LIT:0.><EOL>if pin_filename!=None:                                   <EOL><INDENT>for xi,yi,wi  in zip(z_el[zmin_ind:zmax_ind],el_abu_obs_log,xfe_sigma):<EOL><INDENT>pl.scatter([xi]*len(yi),yi,marker='<STR_LIT:o>',s=<NUM_LIT>,color='<STR_LIT>')<EOL>if all(wi)!=None:<EOL><INDENT>pl.errorbar([xi]*len(yi),yi,wi,color='<STR_LIT>',capsize=<NUM_LIT:5>)<EOL>if zchi2 != None:<EOL><INDENT>if xi in zchi2:<EOL><INDENT>zelidx=where(z_el[zmin_ind:zmax_ind]==xi)[<NUM_LIT:0>][<NUM_LIT:0>]<EOL>chi2 += (((sum(yi)/len(yi)) - (np.log10(el_abu[zelidx])+offset))/(sum(wi)/len(wi)))**<NUM_LIT:2><EOL><DEDENT><DEDENT><DEDENT><DEDENT>pl.scatter(z_el[zmin_ind:zmax_ind],z_ul,marker='<STR_LIT:v>',color='<STR_LIT>')<EOL><DEDENT>pl.plot(z_el[zmin_ind:zmax_ind],np.log10(el_abu)+offset,label=label,linestyle=plotlines,color=colour,marker=mark)<EOL>j=<NUM_LIT:0>        <EOL>if plotlabels==True:<EOL><INDENT>for z in z_el[zmin_ind:zmax_ind]:<EOL><INDENT>pl.text(z+<NUM_LIT>,log10(el_abu[j])+offset+<NUM_LIT>,el_name[j])<EOL>j += <NUM_LIT:1><EOL><DEDENT><DEDENT>if title_items is not None:<EOL><INDENT>pl.title(self._do_title_string(title_items,cycle))<EOL><DEDENT>if ylim[<NUM_LIT:0>]==<NUM_LIT:0> and ylim[<NUM_LIT:1>]==<NUM_LIT:0>:<EOL><INDENT>ylim[<NUM_LIT:0>]=max(-<NUM_LIT>,min(np.log10(el_abu)+offset))<EOL>ylim[<NUM_LIT:1>]=max(ylim[<NUM_LIT:0>]+<NUM_LIT:1.0>,max(np.log10(el_abu)+offset))<EOL><DEDENT>pl.ylim(ylim[<NUM_LIT:0>],ylim[<NUM_LIT:1>])<EOL>pl.xlabel('<STR_LIT>')<EOL>pl.grid(True)<EOL>ylab=['<STR_LIT>'+str(ref)+'<STR_LIT>','<STR_LIT>','<STR_LIT>','<STR_LIT>']<EOL>if ref==-<NUM_LIT:2>:<EOL><INDENT>pl.ylabel(ylab[<NUM_LIT:2>])<EOL><DEDENT>elif ref>-<NUM_LIT:1>:<EOL><INDENT>if plotlabels==True:<EOL><INDENT>pl.annotate('<STR_LIT>'+str(offset),xy=(<NUM_LIT>,<NUM_LIT>),xycoords='<STR_LIT>')<EOL><DEDENT>pl.ylabel(ylab[<NUM_LIT:0>])<EOL><DEDENT>elif logeps==True:<EOL><INDENT>pl.ylabel(ylab[<NUM_LIT:3>])<EOL><DEDENT>else:<EOL><INDENT>pl.ylabel(ylab[<NUM_LIT:1>])<EOL><DEDENT>return chi2<EOL><DEDENT>elif plotType=='<STR_LIT>':<EOL><INDENT>self.iso_abund(cycle,elemaburtn=True,**kwargs)<EOL>z_el=unique(self.se.Z)<EOL>zmin_ind=min(where(z_el>=zrange[<NUM_LIT:0>])[<NUM_LIT:0>])<EOL>zmax_ind=max(where(z_el<=zrange[<NUM_LIT:1>])[<NUM_LIT:0>])<EOL>a_el=[]; el_name=[]; el_abu=[]; el_abu_hash={}<EOL>for z in z_el[zmin_ind:zmax_ind]:<EOL><INDENT>el=self.el_iso_to_plot[where(self.se.Z==z)[<NUM_LIT:0>].tolist()[<NUM_LIT:0>]]<EOL>X_el=self.abunds[where(self.el_iso_to_plot==el)[<NUM_LIT:0>].tolist()].sum()<EOL>a_el.append(self.a_iso_to_plot[where(self.z_iso_to_plot==z)[<NUM_LIT:0>].tolist()[<NUM_LIT:0>]])<EOL>el_abu.append(X_el)<EOL>el_name.append(el)<EOL>el_abu_hash[el]=X_el<EOL><DEDENT>if ref==<NUM_LIT:0>:<EOL><INDENT>el_abu_plot=el_abu<EOL>ylab='<STR_LIT>'<EOL><DEDENT>elif ref==<NUM_LIT:1>:<EOL><INDENT>from . import utils<EOL>if ref_filename=='<STR_LIT>':<EOL><INDENT>raise IOError('<STR_LIT>')<EOL><DEDENT>else:<EOL><INDENT>nuutils.solar(ref_filename,<NUM_LIT:1>)<EOL>menow = where(unique(nuutils.z_sol)==<NUM_LIT>)[<NUM_LIT:0>][<NUM_LIT:0>]<EOL>print(<NUM_LIT:1>, menow, nuutils.solar_elem_abund[menow])<EOL>el_abu_sun=np.array(nuutils.solar_elem_abund)<EOL>print(<NUM_LIT:2>, el_abu_sun)<EOL>print(<NUM_LIT:3>, el_abu_sun[<NUM_LIT>])<EOL>el_abu_plot=np.zeros(len(el_abu))<EOL>for zs in z_el[zmin_ind:zmax_ind]:<EOL><INDENT>zelidx=where(z_el[zmin_ind:zmax_ind]==zs)[<NUM_LIT:0>]<EOL>zsolidx=zs-<NUM_LIT:1><EOL>if el_abu_sun[zsolidx] > <NUM_LIT:0.> :<EOL><INDENT>el_abu_plot[zelidx]=old_div(el_abu[zelidx],el_abu_sun[zsolidx])<EOL><DEDENT>else:<EOL><INDENT>el_abu_plot[zelidx]=-<NUM_LIT:1><EOL><DEDENT><DEDENT>ylab='<STR_LIT>'<EOL><DEDENT><DEDENT>else:<EOL><INDENT>raise IOError('<STR_LIT>')<EOL><DEDENT>if label != '<STR_LIT>':<EOL><INDENT>if colour!='<STR_LIT>':<EOL><INDENT>print("<STR_LIT>")<EOL>pl.plot(z_el[zmin_ind:zmax_ind],np.log10(el_abu_plot),<EOL>'<STR_LIT>',label=label,color=colour,markeredgecolor='<STR_LIT:None>')<EOL><DEDENT>else:<EOL><INDENT>pl.plot(z_el[zmin_ind:zmax_ind],np.log10(el_abu_plot)<EOL>,'<STR_LIT>',label=label,markeredgecolor='<STR_LIT:None>')<EOL><DEDENT><DEDENT>else:<EOL><INDENT>if colour!='<STR_LIT>':<EOL><INDENT>pl.plot(z_el[zmin_ind:zmax_ind],np.log10(el_abu_plot),<EOL>'<STR_LIT>',color=colour,markeredgecolor='<STR_LIT:None>')<EOL><DEDENT>else:<EOL><INDENT>pl.plot(z_el[zmin_ind:zmax_ind],np.log10(el_abu_plot),<EOL>'<STR_LIT>',markeredgecolor='<STR_LIT:None>')<EOL><DEDENT><DEDENT>if show_names:<EOL><INDENT>j=<NUM_LIT:0>        <EOL>for z in z_el[zmin_ind:zmax_ind]:<EOL><INDENT>pl.text(z+<NUM_LIT>,log10(el_abu_plot[j])+<NUM_LIT>,el_name[j])<EOL>
Plot the decayed elemental abundance distribution (PPN).
Plot the elemental abundance distribution (nugridse).
(FH, 06/2014; SJ 07/2014)

Parameters
----------
cycle : string, integer or list
    The cycle of interest.  If it is a list of cycles, this
    method will do a plot for each cycle and save them to a
    file.
zrange : list, optional
    A 1x2 array containing the lower and upper atomic number
    limit
ylim : list, optional
    A 1x2 array containing the lower and upper Y limits.  If
    it is [0,0], then ylim will be determined automatically.
    The default is [0,0].
title_items : list, optional
    A list of cycle attributes that will be added to the title.
    For possible cycle attributes see self.cattrs.
ref : integer, optional
    ref = N:    plot abundaces relative to cycle N abundance, similar to the
                'ref_filename' option.
                Cannot be active at the same time as
                the 'ref_filename' option.
ref_filename : string, optional
    plot abundances relative to solar abundance. For this option,
    a cycle number for the 'ref' option must not be provided
z_pin : int, optional
    Charge number for an element to be 'pinned'. An offset will be
    calculated from the difference between the cycle value and the
    value from the pinned reference.
    Can be used with the 'pin_filename' option to import an external
    abundance file in the same format as solar abundances.
    If no file is given, the reference can be either cycle N='ref'
    or the value from the 'ref_filename'.
pin : float, optional
    A manually provided [X/Fe] abundance to pin the element selected with 'z_pin'
pin_filename: string, optional
    use provided file to provide reference to pin an element to. An offset is
    calculated and used to shift the plot.
    The file requires header columns marked by '#', column spacing of '  ', and at minimum two columns
    containing:
        'Z': charge number
        '[X/Fe]': metallicity
zchi2 : list, optional
    A 1x2 array containing atomic numbers of the elements
    for which chi2 test is done when plotType == 'PPN' and pin_filename != None
logeps : boolean, optional
    Plots log eps instead of [X/Fe] charts.
dilution : float, optional
    Provides the dilution factor for mixing nucleosynthesis products to the surface
    Cannot be active at the same time as the 'z_pin' option.
label : string, optional
    The label for the abundance distribution
    The default is '' (i.e. do not show a label)
show_names : boolean, optional
    Whether or not to show the element names on the figure.
colour : string, optional
    In case you want to dictate marker and line colours. Takes cymkrgb
    single-character colours or any other colour string accepted by
    matplotlib. The default is '' (automatic colour selection)
plotlines : string, optional
    In case you want to dictate line style. Takes MatPlotLib linestyles.
mark : string, optional
    In case you want to dictate marker style. Takes MatPlotLib markers.
    Default is 'x'.
kwargs : additional keyword arguments
    These arguments are equivalent to those of iso_abund, e.g.
    mass_range. Routines from iso_abund are called, to perform
    averages and get elemental abundances in the correct form.

Output
------
if plotType == 'PPN' and pin_filename != None
chi2 : float
    chi-squared deviation of predicted abundances from observed ones
if plotType == 'se'
z_el : array
    proton number of elements being returned
el_abu_plot : array
    elemental abundances (as you asked for them, could be ref to something else)

This method adds the following data to the abu_vector instance:
self.el_abu_hash : elemental abundance, dictionary
self.el_name     : element names, can be used as keys in el_abu_hash
self.el_abu_log  : array of log10 of elemental abundance as plotted, including any ref scaling