PRO abudataplot, data, $
                 FILLED=filled, $
                 DOTSIZE=dotsize, $
                 LIMITDOTS=limitdots



@compile_opt

IF N_ELEMENTS(limitdots) EQ 0 THEN limitdots=3

ndata=N_ELEMENTS(data)

IF N_ELEMENTS(filled) EQ 0 THEN filled=1
IF (N_ELEMENTS(filled) EQ 1) AND (N_ELEMENTS(data) GT 1) THEN BEGIN
    filled=REPLICATE(filled,ndata)
ENDIF
IF N_ELEMENTS(dotsize) EQ 0 THEN BEGIN 
   dotsize=1.0
ENDIF
IF !D.NAME EQ 'X' THEN dotsize*=1.5
IF (N_ELEMENTS(dotsize) EQ 1) AND (N_ELEMENTS(data) GT 1) THEN BEGIN
    dotsize=REPLICATE(dotsize,ndata)
ENDIF

dec=0.25D0
decfac=[-dec,dec]

scale=CONVERT_COORD([0,1],[0,1],/DEVICE,/TO_DATA)
dx=ABS(scale[0,0]-scale[0,1])
dy=ABS(scale[1,0]-scale[1,1])

scale=dec/dx*dy

alen =7.5*scale
ahead=2.5*scale

ch=CONVERT_COORD([0,!D.X_CH_SIZE],[0,!D.X_CH_SIZE],/DEVICE,/TO_DATA)
ddot=ch[*,1]-ch[*,0]

FOR i=0,ndata-1 DO BEGIN
    z=data[i].z
    abu=data[i].abu
    sigma=data[i].sigma
    fill=filled[i]
    size=dotsize[i]*0.4*ddot
; error bar
    IF sigma GT 0 THEN BEGIN
        IF fill EQ 0 THEN BEGIN
            plots,[1,1]*z,abu+[sigma,size[1]],NOCLIP=0
            plots,[1,1]*z,abu-[sigma,size[1]],NOCLIP=0
        ENDIF ELSE BEGIN
            plots,[1,1]*z,abu+[1,-1]*sigma,NOCLIP=0
        ENDELSE
        plots,decfac+z,[1,1]*(abu+sigma),NOCLIP=0
        plots,decfac+z,[1,1]*(abu-sigma),NOCLIP=0
    ENDIF 
    IF (sigma GE 0) OR (limitdots NE 2) THEN BEGIN
       phi=2*!DPI*dindgen(100)/100.D0
       x=z+cos(phi)*size[0]
       y=abu+sin(phi)*size[1]
       IF fill THEN BEGIN
          polyfill,x,y,NOCLIP=0
       ENDIF ELSE BEGIN
          plots,x,y,NOCLIP=0
       ENDELSE
    ENDIF
; upper limit
    IF sigma LT 0 THEN BEGIN
       IF sigma GT -1.D99 THEN BEGIN 
          veclen=(-sigma)       ;<alen?
       ENDIF ELSE BEGIN
          veclen=alen
       ENDELSE
       IF limitdots EQ 3 THEN BEGIN
          plots,[decfac[0],-size[0]]+z,[1,1]*abu,NOCLIP=0
          plots,[decfac[1],+size[0]]+z,[1,1]*abu,NOCLIP=0
          plots,[1,1]*z,abu+[-size[1],-veclen],NOCLIP=0
       ENDIF ELSE BEGIN
          plots,decfac+z,[1,1]*abu,NOCLIP=0
          plots,[1,1]*z,abu+[0,-1]*veclen,NOCLIP=0
       ENDELSE
       plots,dec*[-1,0,1]+z,[1,0,1]*ahead+abu-veclen,NOCLIP=0
    ENDIF
    IF (sigma LT 0) AND (limitdots EQ 2) THEN BEGIN
       phi=2*!DPI*dindgen(51)/100.D0
       phi=[phi,0]
       x=z+cos(phi)*size[0]
       y=abu+sin(phi)*size[1]
       IF fill THEN BEGIN
          polyfill,x,y,NOCLIP=0
       ENDIF ELSE BEGIN
          plots,x,y,NOCLIP=0
           ENDELSE
    ENDIF
ENDFOR

END

