Skip to content

Commit 116d105

Browse files
committed
2 parents 9d544c4 + 95316f3 commit 116d105

File tree

3 files changed

+122
-21
lines changed

3 files changed

+122
-21
lines changed

src/scripts/mknemo.d/hdf4

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
version=4.2.14 # 2018-06-26
2525
version=4.2.15 # 2020-03-03
2626
version=4.2.16 # 2023-03-06 (this fixed missing xdr problems on ubuntu22)
27+
version=4.2.16-2 # 2023-03-06
2728

2829
wget=wgetc
2930

src/scripts/mknemo.d/valkey

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
#
1+
#! /usr/bin/env bash
22

33
url=https://github.com/valkey-io/valkey
4+
version=git
45

56
cd $NEMO/local
67
git clone $url
78
cd valkey
89

910
make distclean
1011
make PROG_SUFFIX="_nemo" PREFIX=$NEMO/opt install
12+
13+
echo valkey $version `date` >> $NEMO/opt/mknemo.log

src/scripts/python/fitsplot.py

Lines changed: 117 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,35 +5,132 @@
55
import os
66
import sys
77
import aplpy
8+
import argparse
9+
import numpy as np
10+
import matplotlib.pyplot as plt
11+
from astropy.io import fits
812

9-
# dims for an [ra,dec,vel] cube
10-
dims = [0,1] # ra-dec
11-
#dims = [1,2] # dec-vel
12-
#dims = [0,2] # ra-vel
1313

14-
fitsfile = sys.argv[1]
15-
if len(sys.argv) > 2:
16-
plane = int(sys.argv[2])
14+
help_main = ["Simple color plot of a FITS image",
15+
"with options to pick a plane (if a cube) or slicing method",
16+
"colormaps and plot file extension can also be changed",
17+
"plot file name is derived from input FITS file",
18+
]
19+
20+
help_color = ['Popular colors: viridis, gist_heat gist_ncar (default)',
21+
' rainbow, jet, nipy_spectral',
22+
'https://matplotlib.org/stable/tutorials/colors/colormaps.html']
23+
24+
25+
parser = argparse.ArgumentParser(description="\n".join(help_main),
26+
formatter_class=argparse.RawTextHelpFormatter)
27+
# formatter_class=argparse.ArgumentDefaultsHelpFormatter)
28+
29+
30+
31+
parser.add_argument('fitsfile', help="input FITS file", default=None)
32+
parser.add_argument('--plane', help="plane (if cube) [-1]", default=-1, type=int)
33+
parser.add_argument('--pvar', help="plane var (x,y,[z])", default='z')
34+
parser.add_argument('--color', help="\n".join(help_color), default='gist_ncar')
35+
parser.add_argument('--ext', help="plot type ([png],pdf)", default='png')
36+
parser.add_argument('--hist', help="add histogram", action="store_true")
37+
parser.add_argument('--size', help="plot size (inch)", default=8, type=float)
38+
39+
args = parser.parse_args()
40+
41+
42+
fitsfile = args.fitsfile
43+
plane = args.plane
44+
color = args.color
45+
ext = args.ext
46+
pvar = args.pvar
47+
size = args.size
48+
49+
if pvar == 'z':
50+
dims = [0,1] # ra-dec
51+
elif pvar == 'y':
52+
dims = [0,2] # ra-vel
53+
elif pvar == 'x':
54+
dims = [1,2] # dec-vel
1755
else:
18-
plane = -1
19-
56+
dims = [0,1]
57+
58+
hdu = fits.open(fitsfile)
2059
if plane < 0:
21-
f = aplpy.FITSFigure(fitsfile)
60+
data = hdu[0].data
2261
else:
23-
f = aplpy.FITSFigure(fitsfile, slices=[plane], dimensions=dims)
62+
data = hdu[0].data[plane]
63+
64+
data = data[~np.isnan(data)]
65+
data = data[data != 0]
66+
67+
dmin = np.min(data)
68+
dmax = np.max(data)
69+
dmean = np.mean(data)
70+
dstd = np.std(data)
71+
print("Data min/max/mean/sig: %g %g %g %g" % (dmin,dmax,dmean,dstd))
72+
dmin = dmean - 3*dstd;
73+
dmax = dmean + 3*dstd;
74+
print("Data min/max: %g %g" % (dmin,dmax))
75+
bins = np.linspace(dmin, dmax, 32)
76+
if args.hist:
77+
print("BINS: ",bins)
78+
79+
if args.hist:
80+
# side by side
81+
f=0.7
82+
#box1 = [0.1,0.1,0.8,0.8] # full size, image
83+
box2 = [0.05,0.1,0.5/f,0.5/f] # left side, image
84+
box3 = [0.55/f,0.1,0.2,f] # right side, histo
85+
else:
86+
# just a square image
87+
box1 = [0.1,0.1,0.8,0.8] # full size, image
88+
#box2 = [0.1,0.1,0.5,0.5] # left side, image
89+
#box3 = [0.7,0.15,0.2,0.4] # right side, histo
90+
91+
try:
92+
if args.hist:
93+
fig = plt.figure(figsize=(size, f*size))
94+
else:
95+
fig = plt.figure(figsize=(size, size))
2496

25-
f.show_grayscale()
26-
f.show_colorscale(cmap='gist_heat')
27-
f.add_colorbar()
28-
# Cannot show beam when WCS is not celestial
29-
# perhaps doesn't like VRAD, but our fits files are not good enough
30-
# for 2D maps, ccdfits ndim=2 will help
97+
if plane < 0:
98+
if args.hist:
99+
f1 = aplpy.FITSFigure(fitsfile, figure=fig, subplot=box2)
100+
ax_hist = fig.add_axes(box3)
101+
ax_hist.hist(data, bins=bins, orientation='horizontal', facecolor='blue',log=True)
102+
else:
103+
f1 = aplpy.FITSFigure(fitsfile, figure=fig, subplot=box1)
104+
else:
105+
if args.hist:
106+
f1 = aplpy.FITSFigure(fitsfile, slices=[plane], dimensions=dims, figure=fig, subplot=box2)
107+
ax_hist = fig.add_axes(box3)
108+
ax_hist.hist(data, bins=bins, orientation='horizontal', facecolor='blue',log=True)
109+
else:
110+
f1 = aplpy.FITSFigure(fitsfile, slices=[plane], dimensions=dims, figure=fig, subplot=box1)
111+
except:
112+
print("problem processing %s in %s" % (fitsfile,os.getcwd()))
113+
sys.exit(0)
114+
115+
f1.show_grayscale()
116+
f1.show_colorscale(cmap=color)
117+
f1.add_colorbar()
31118

32119
try:
33-
f.add_beam()
120+
f1.add_beam()
34121
except:
35122
pass
36123

37124
# f.show_contour(fitsfile, levels=10)
38-
f.add_grid()
39-
f.save(fitsfile + ".pdf")
125+
f1.add_grid()
126+
fig.canvas.draw()
127+
128+
idx = fitsfile.rfind('.fits')
129+
if plane < 0:
130+
pfile = fitsfile[:idx] + ".%s" % ext
131+
else:
132+
pfile = fitsfile[:idx] + ".%04d.%s" % (plane,ext)
133+
# fig.subplots_adjust(right=0.15)
134+
fig.savefig(pfile)
135+
print("Writing ",pfile)
136+
# plt.show()

0 commit comments

Comments
 (0)