PRO iondecompose,x,a,el,NUMA=numa

@compile_opt

IF N_ELEMENTS(x) EQ 0 THEN x=''

iso=STRTRIM(x,2)
n=STRLEN(iso)
nn=N_ELEMENTS(n)
a=REPLICATE('',nn)
el=REPLICATE('',nn)
FOR j=0,nn-1 DO BEGIN
    FOR i=0,n[j]-1 DO BEGIN
        c=STRMID(iso[j],i,1)
        IF (c EQ '0') OR (c EQ '1') OR (c EQ '2') OR (c EQ '3') OR (c EQ '4') OR (c EQ '5') OR (c EQ '6') OR (c EQ '7') OR (c EQ '8') OR (c EQ '9') THEN BEGIN
            a[j]+=c
        ENDIF ELSE BEGIN
            IF c NE ' ' THEN el[j]+=c
        ENDELSE
    ENDFOR
    el[j]=STRUPCASE(STRMID(el[j],0,1))+STRLOWCASE(STRMID(el[j],1,STRLEN(el[j])-1))
    IF (el[j] EQ 'A') AND (a[j] EQ '') THEN BEGIN
        a[j]='4'
        el[j]='he'
    ENDIF
    IF (el[j] EQ 'P') AND (a[j] EQ '') THEN BEGIN
        a[j]='1'
        el[j]='h'
    ENDIF
    IF (el[j] EQ 'D') AND (a[j] EQ '') THEN BEGIN
        a[j]='2'
        el[j]='h'
    ENDIF
    IF (el[j] EQ 'T') AND (a[j] EQ '') THEN BEGIN
        a[j]='3'
        el[j]='h'
    ENDIF
    IF (el[j] EQ 'N') AND (a[j] EQ '') THEN BEGIN
        a[j]='1'
    ENDIF
    IF ((el[j] EQ 'E-') OR (el[j] EQ 'B-') OR (el[j] EQ 'Bd') OR (el[j] EQ 'Ec') OR (el[j] EQ 'Ec')) AND (a[j] EQ '') THEN BEGIN
        a[j]='0'
        el[j]='e-'
    ENDIF
    IF ((el[j] EQ 'E+') OR (el[j] EQ 'B+') OR (el[j] EQ 'Pd')) AND (a[j] EQ '') THEN BEGIN
        a[j]='0'
        el[j]='e+'
    ENDIF
ENDFOR

IF nn EQ 1 THEN BEGIN
    el=el[0]
    a=a[0]
ENDIF

IF N_ELEMENTS(numa) EQ 0 THEN numa=0
IF numa NE 0 THEN a=FIX(a)


END

