/usr/share/gnudatalanguage/astrolib/autohist.pro is in gdl-astrolib 2018.02.16+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | PRO AUTOHIST,V, ZX,ZY,XX,YY, NOPLOT=whatever,_EXTRA = _extra
;
;+
; NAME:
; AUTOHIST
;
; PURPOSE:
; Draw a histogram using automatic bin-sizing.
; EXPLANATION
; AUTOHIST chooses a number of bins (initially, SQRT(2*N). If this leads
; to a histogram in which > 1/5 of the central 50% of the bins are empty,
; it decreases the number of bins and tries again. The minimum # bins is
; 5. The max=199. Called by HISTOGAUSS and HALFAGAUSS.
;
; CALLING SEQUENCE:
; AUTOHIST, Sample, XLines, Ylines, XCenters, YCenters, [/NOPLOT, ]
; ...Plotting Keywords
; INPUT:
; Sample = the vector to be histogrammed
;
; OUTPUT:
; XLINES = vector of x coordinates of the points that trace the rectangular
; histogram bins
; YLINES = vector of y coordinates. To draw the histogram plot YLINES vs
; XLINES
; XCENTERS = the x values of the bin centers
; YCENTERS = the corresponding y values
;
; OPTIONAL INPUT KEYWORDS:
; /NOPLOT If set, nothing is drawn
;
; Any plotting keywords (e.g. XTITLE) may be supplied to AUTOHIST through
; the _EXTRA facility.
; REVISION HISTORY:
; Written, H. Freudenreich, STX, 1/91
; 1998 March 17 - Changed shading of histogram. RSH, RSTX
; V5.0 update, _EXTRA keywords W. Landsman April 2002
; Added NOCLIP keyword for POLYFILL call C. Paxson/W. Landsman July 2003
; Use Coyote graphics W. Landsman Feb 2011
;-
ON_ERROR,2
compile_opt idl2
if N_params() LT 1 then begin
print,'Syntax - AUTOHIST, Sample, XLines, Ylines, XCenters, YCenters, [ '
print,' /NOPLOT, Plotting keywords... ]'
return
endif
MINBIN=5
N = N_ELEMENTS(V)
NB = FIX(SQRT(2.*N)) < 199
NB = NB > MINBIN
X1 = MIN(V, MAX = X2)
tryagain:
DX = (X2-X1)/NB
XX = FINDGEN(NB)*DX + DX/2. + X1
IND = (V-X1)/DX > 0 <(NB-1)
; Compute the histogram for the current binning
YY = HISTOGRAM(IND,MIN=0,MAX = NB-1)
; Count the fraction of empty bins in the middle half of the histogram:
X14 = (XX[NB-1]-XX[0])/4.+X1
X34 = XX[NB-1]-(XX[NB-1]-XX[0])/4.
Q=WHERE( (YY EQ 0.) AND (XX GT X14) AND (XX LT X34), COUNT )
IF (COUNT GT NB/10) AND (NB GT MINBIN) THEN BEGIN ; 20% EMPTY
NB = 3*NB/4
IF NB LT (2*N) THEN GOTO,tryagain
ENDIF
; Fill in ZX,ZY:
MB = 2*NB+2
ZX = FLTARR(MB) & ZY = FLTARR(MB)
IT = INDGEN(NB)*2 + 1
ZY[IT] = YY & ZY[IT+1] = YY
ZX[0] = X1
ZX[IT] = XX - DX/2. & ZX[IT+1] = XX + DX/2.
ZX[MB-1] = X2
IF KEYWORD_SET(WHATEVER) THEN RETURN
; Plot, then fill, the bins:
YTOP = MAX(YY[1:NB-2])
YY[0] = YY[0] < YTOP
YY[NB-1] = YY[NB-1] < YTOP
cgPLOT,XX,YY,XRAN=[X1-DX,X2+DX],YRAN=[0.,1.1*YTOP],PSYM=10,_EXTRA=_extra
FOR J=0,NB-1 DO BEGIN
IF YY[J] GT 0 THEN BEGIN
A=[XX[J]-DX/2.,XX[J]+DX/2.,XX[J]+DX/2.,XX[J]-DX/2.]
B=[0.,0.,YY[J],YY[J]]
cgcolorFILL,A,B,orientation=45,noclip=0
ENDIF
ENDFOR
RETURN
END
|