示例#1
0
)
parser.add_argument("--full-stats", action="store_true")
args = parser.parse_args()

comm = mpi.COMM_WORLD
srate = 400.
fmax = srate / 2
ndet = 32 * 33

utils.mkdir(args.odir)

tmp = [[float(tok) for tok in word.split(":")] for word in args.f.split(",")]
bins = np.array([[t[0] - t[1] / 2, t[0] + t[1] / 2] for t in tmp])
rate = [float(w) for w in args.R.split(":")]

filedb.init()
ids = filedb.scans[args.sel]
ntod = len(ids)

cuts = np.zeros([ntod, ndet], dtype=np.uint8)
stats = None
if args.full_stats: stats = np.zeros([ntod, ndet, 4])
for si in range(comm.rank, ntod, comm.size):
    try:
        id = ids[si]
        entry = filedb.data[id]
        ofile = "%s/%s.txt" % (args.odir, id)
        try:
            d = actdata.read(
                entry,
                fields=["gain", "tconst", "cut", "tod", "boresight", "hwp"])
示例#2
0
文件: simtod.py 项目: guanyilun/tenki
def get_scans(area, signal, bore, dets, noise, seed=0, real=None, noise_override=None):
	scans = []
	# Get real scan information if necessary
	L.debug("real")
	if real:
		real_scans = []
		filedb.init()
		db   = filedb.data
		ids  = fileb.scans[real].ids
		for id in ids:
			try:
				real_scans.append(actscan.ACTScan(db[id]))
			except errors.DataMissing as e:
				L.debug("Skipped %s (%s)" % (id, str(e)))
	# Dets
	L.debug("dets")
	sim_dets = []
	toks = dets.split(":")
	if toks[0] == "scattered":
		ngroup, nper, rad = int(toks[1]), int(toks[2]), float(toks[3])
		sim_dets = [scansim.dets_scattered(ngroup, nper,rad=rad*np.pi/180/60)]
		margin   = rad*np.pi/180/60
	elif toks[0] == "real":
		ndet = int(toks[1])
		dslice = slice(0,ndet) if ndet > 0 else slice(None)
		sim_dets = [bunch.Bunch(comps=s.comps[dslice], offsets=s.offsets[dslice]) for s in real_scans]
		margin = np.max([np.sum(s.offsets**2,1)**0.5 for s in sim_dets])
	else: raise ValueError
	# Boresight. Determines our number of scans
	L.debug("bore")
	sim_bore = []
	toks = bore.split(":")
	if toks[0] == "grid":
		nscan, density, short = int(toks[1]), float(toks[2]), float(toks[3])
		for i in range(nscan):
			tbox = shorten(area.box(),i%2,short)
			sim_bore.append(scansim.scan_grid(tbox, density*np.pi/180/60, dir=i, margin=margin))
	elif toks[0] == "ces":
		nscan = int(toks[1])
		azs   = [float(w)*utils.degree for w in toks[2].split(",")]
		els   = [float(w)*utils.degree for w in toks[3].split(",")]
		mjd0  = float(toks[4])
		dur   = float(toks[5])
		azrate= float(toks[6]) if len(toks) > 6 else 1.5*utils.degree
		srate = float(toks[7]) if len(toks) > 7 else 400
		nsamp = utils.nint(dur*srate)
		for i in range(nscan):
			mjd  = mjd0 + dur*(i//(2*len(els)))/(24*3600)
			el   = els[(i//2)%len(els)]
			az1, az2 = azs
			if i%2 == 1: az1, az2 = -az2, -az1
			box = np.array([[az1,el],[az2,el]])
			sim_bore.append(scansim.scan_ceslike(nsamp, box, mjd0=mjd, srate=srate, azrate=azrate))
	elif toks[0] == "real":
		sim_bore = [bunch.Bunch(boresight=s.boresight, hwp_phase=s.hwp_phase, sys=s.sys, site=s.site, mjd0=s.mjd0) for s in real_scans]
	else: raise ValueError
	nsim = len(sim_bore)
	# Make one det info per scan
	sim_dets = sim_dets*(nsim/len(sim_dets))+sim_dets[:nsim%len(sim_dets)]
	# Noise
	L.debug("noise")
	sim_nmat = []
	toks = noise.split(":")
	nonoise = False
	if toks[0] == "1/f":
		sigma, alpha, fknee = [float(v) for v in toks[1:4]]
		nonoise = sigma < 0
		for i in range(nsim):
			sim_nmat.append(scansim.oneoverf_noise(sim_dets[i].comps.shape[0], sim_bore[i].boresight.shape[0], sigma=np.abs(sigma), alpha=alpha, fknee=fknee))
	elif toks[0] == "detcorr":
		sigma, alpha, fknee = [float(v) for v in toks[1:4]]
		nonoise = sigma < 0
		for i in range(nsim):
			sim_nmat.append(scansim.oneoverf_detcorr_noise(sim_dets[i].comps.shape[0], sim_bore[i].boresight.shape[0], sigma=np.abs(sigma), alpha=alpha, fknee=fknee))
	elif toks[0] == "real":
		scale = 1.0 if len(toks) < 2 else float(toks[1])
		for i,s in enumerate(real_scans):
			ndet = len(sim_dets[i].offsets)
			nmat = s.noise[:ndet]*scale**-2
			sim_nmat.append(nmat)
	else: raise ValueError
	noise_scale = not nonoise if noise_override is None else noise_override
	sim_nmat = sim_nmat*(nsim/len(sim_nmat))+sim_nmat[:nsim%len(sim_nmat)]
	# Signal
	L.debug("signal")
	toks = signal.split(":")
	if toks[0] == "none":
		for i in range(nsim):
			scans.append(scansim.SimPlain(sim_bore[i], sim_dets[i], sim_nmat[i], seed=seed+i, noise_scale=noise_scale))
	elif toks[0] == "ptsrc":
		# This one always operates in the same coordinates as 
		nsrc, amp, fwhm = int(toks[1]), float(toks[2]), float(toks[3])
		np.random.seed(seed)
		sim_srcs = scansim.rand_srcs(area.box(), nsrc, amp, abs(fwhm)*np.pi/180/60, rand_fwhm=fwhm<0)
		for i in range(nsim):
			scans.append(scansim.SimSrcs(sim_bore[i], sim_dets[i], sim_srcs, sim_nmat[i], seed=seed+i, noise_scale=noise_scale))
	elif toks[0] == "vsrc":
		# Create a single variable source
		ra, dec, fwhm = float(toks[1])*np.pi/180, float(toks[2])*np.pi/180, float(toks[3])*np.pi/180/60
		amps = [float(t) for t in toks[4].split(",")]
		for i in range(nsim):
			sim_srcs = bunch.Bunch(pos=np.array([[dec,ra]]),amps=np.array([[amps[i],0,0,0]]), beam=np.array([fwhm/(8*np.log(2)**0.5)]))
			scans.append(scansim.SimSrcs(sim_bore[i], sim_dets[i], sim_srcs, sim_nmat[i], seed=seed+i, noise_scale=noise_scale, nsigma=20))
	elif toks[0] == "cmb":
		np.random.seed(seed)
		ps = powspec.read_spectrum(toks[1])
		sim_map  = enmap.rand_map(area.shape, area.wcs, ps)
		for i in range(nsim):
			scans.append(scansim.SimMap(sim_bore[i], sim_dets[i], sim_map,    sim_nmat[i], seed=seed+i, noise_scale=noise_scale))
	else: raise ValueError
	return scans
示例#3
0
from enact import filedb, actdata
config.default("cut_mostly_cut",False)
parser = config.ArgumentParser(os.environ["HOME"] + "/.enkirc")
parser.add_argument("sel")
parser.add_argument("odir")
parser.add_argument("prefix", nargs="?", default=None)
parser.add_argument("-b", "--nbin",       type=int,   default=20000)
parser.add_argument("-f", "--fmax",       type=float, default=200)
parser.add_argument("-B", "--nbin-det",   type=int,   default=100)
parser.add_argument("-Z", "--nbin-zoom",  type=int,   default=100)
parser.add_argument("-F", "--fmax-zoom",  type=float, default=10)
parser.add_argument("-C", "--chunk-size", type=int,   default=250)
parser.add_argument("--no-autocut", action="store_true")
args = parser.parse_args()

filedb.init()
ids   = filedb.scans[args.sel]
comm  = mpi.COMM_WORLD
ntod  = len(ids)
csize = args.chunk_size
nchunk= (ntod+csize-1)/csize
dtype = np.float32

utils.mkdir(args.odir)
prefix = args.odir + "/"
if args.prefix: prefix += args.prefix + "_"

# Read a single array_info to determine max det number
array_info = actdata.read_array_info(filedb.data[ids[0]]).array_info
ndet   = array_info.ndet
示例#4
0
文件: simtod.py 项目: amaurea/tenki
def get_scans(area, signal, bore, dets, noise, seed=0, real=None, noise_override=None):
	scans = []
	# Get real scan information if necessary
	L.debug("real")
	if real:
		real_scans = []
		filedb.init()
		db   = filedb.data
		ids  = fileb.scans[real].ids
		for id in ids:
			try:
				real_scans.append(actscan.ACTScan(db[id]))
			except errors.DataMissing as e:
				L.debug("Skipped %s (%s)" % (id, e.message))
	# Dets
	L.debug("dets")
	sim_dets = []
	toks = dets.split(":")
	if toks[0] == "scattered":
		ngroup, nper, rad = int(toks[1]), int(toks[2]), float(toks[3])
		sim_dets = [scansim.dets_scattered(ngroup, nper,rad=rad*np.pi/180/60)]
		margin   = rad*np.pi/180/60
	elif toks[0] == "real":
		ndet = int(toks[1])
		dslice = slice(0,ndet) if ndet > 0 else slice(None)
		sim_dets = [bunch.Bunch(comps=s.comps[dslice], offsets=s.offsets[dslice]) for s in real_scans]
		margin = np.max([np.sum(s.offsets**2,1)**0.5 for s in sim_dets])
	else: raise ValueError
	# Boresight. Determines our number of scans
	L.debug("bore")
	sim_bore = []
	toks = bore.split(":")
	if toks[0] == "grid":
		nscan, density, short = int(toks[1]), float(toks[2]), float(toks[3])
		for i in range(nscan):
			tbox = shorten(area.box(),i%2,short)
			sim_bore.append(scansim.scan_grid(tbox, density*np.pi/180/60, dir=i, margin=margin))
	elif toks[0] == "ces":
		nscan = int(toks[1])
		azs   = [float(w)*utils.degree for w in toks[2].split(",")]
		els   = [float(w)*utils.degree for w in toks[3].split(",")]
		mjd0  = float(toks[4])
		dur   = float(toks[5])
		azrate= float(toks[6]) if len(toks) > 6 else 1.5*utils.degree
		srate = float(toks[7]) if len(toks) > 7 else 400
		nsamp = utils.nint(dur*srate)
		for i in range(nscan):
			mjd  = mjd0 + dur*(i//(2*len(els)))/(24*3600)
			el   = els[(i//2)%len(els)]
			az1, az2 = azs
			if i%2 == 1: az1, az2 = -az2, -az1
			box = np.array([[az1,el],[az2,el]])
			sim_bore.append(scansim.scan_ceslike(nsamp, box, mjd0=mjd, srate=srate, azrate=azrate))
	elif toks[0] == "real":
		sim_bore = [bunch.Bunch(boresight=s.boresight, hwp_phase=s.hwp_phase, sys=s.sys, site=s.site, mjd0=s.mjd0) for s in real_scans]
	else: raise ValueError
	nsim = len(sim_bore)
	# Make one det info per scan
	sim_dets = sim_dets*(nsim/len(sim_dets))+sim_dets[:nsim%len(sim_dets)]
	# Noise
	L.debug("noise")
	sim_nmat = []
	toks = noise.split(":")
	nonoise = False
	if toks[0] == "1/f":
		sigma, alpha, fknee = [float(v) for v in toks[1:4]]
		nonoise = sigma < 0
		for i in range(nsim):
			sim_nmat.append(scansim.oneoverf_noise(sim_dets[i].comps.shape[0], sim_bore[i].boresight.shape[0], sigma=np.abs(sigma), alpha=alpha, fknee=fknee))
	elif toks[0] == "detcorr":
		sigma, alpha, fknee = [float(v) for v in toks[1:4]]
		nonoise = sigma < 0
		for i in range(nsim):
			sim_nmat.append(scansim.oneoverf_detcorr_noise(sim_dets[i].comps.shape[0], sim_bore[i].boresight.shape[0], sigma=np.abs(sigma), alpha=alpha, fknee=fknee))
	elif toks[0] == "real":
		scale = 1.0 if len(toks) < 2 else float(toks[1])
		for i,s in enumerate(real_scans):
			ndet = len(sim_dets[i].offsets)
			nmat = s.noise[:ndet]*scale**-2
			sim_nmat.append(nmat)
	else: raise ValueError
	noise_scale = not nonoise if noise_override is None else noise_override
	sim_nmat = sim_nmat*(nsim/len(sim_nmat))+sim_nmat[:nsim%len(sim_nmat)]
	# Signal
	L.debug("signal")
	toks = signal.split(":")
	if toks[0] == "none":
		for i in range(nsim):
			scans.append(scansim.SimPlain(sim_bore[i], sim_dets[i], sim_nmat[i], seed=seed+i, noise_scale=noise_scale))
	elif toks[0] == "ptsrc":
		# This one always operates in the same coordinates as 
		nsrc, amp, fwhm = int(toks[1]), float(toks[2]), float(toks[3])
		np.random.seed(seed)
		sim_srcs = scansim.rand_srcs(area.box(), nsrc, amp, abs(fwhm)*np.pi/180/60, rand_fwhm=fwhm<0)
		for i in range(nsim):
			scans.append(scansim.SimSrcs(sim_bore[i], sim_dets[i], sim_srcs, sim_nmat[i], seed=seed+i, noise_scale=noise_scale))
	elif toks[0] == "vsrc":
		# Create a single variable source
		ra, dec, fwhm = float(toks[1])*np.pi/180, float(toks[2])*np.pi/180, float(toks[3])*np.pi/180/60
		amps = [float(t) for t in toks[4].split(",")]
		for i in range(nsim):
			sim_srcs = bunch.Bunch(pos=np.array([[dec,ra]]),amps=np.array([[amps[i],0,0,0]]), beam=np.array([fwhm/(8*np.log(2)**0.5)]))
			scans.append(scansim.SimSrcs(sim_bore[i], sim_dets[i], sim_srcs, sim_nmat[i], seed=seed+i, noise_scale=noise_scale, nsigma=20))
	elif toks[0] == "cmb":
		np.random.seed(seed)
		ps = powspec.read_spectrum(toks[1])
		sim_map  = enmap.rand_map(area.shape, area.wcs, ps)
		for i in range(nsim):
			scans.append(scansim.SimMap(sim_bore[i], sim_dets[i], sim_map,    sim_nmat[i], seed=seed+i, noise_scale=noise_scale))
	else: raise ValueError
	return scans