Пример #1
0
dmap = doppler.Map.rfits(doppler.afits(args.map))
ddat = doppler.Data.rfits(doppler.afits(args.data))

# make copies
cmap = copy.deepcopy(dmap)
cdat = copy.deepcopy(ddat)

for i in xrange(args.ntrial):

    # fill map with random noise
    for image in dmap.data:
        image.data = np.asarray(
            np.random.normal(size=image.data.shape),dtype=np.float32)

    #  enact opus
    doppler.comdat(dmap, cdat)

    # fill data with random noise
    for spectra in ddat.data:
        spectra.flux = np.asarray(
            np.random.normal(size=spectra.flux.shape),dtype=np.float32)

    #  enact tropus
    doppler.datcom(ddat, cmap)

    # now compute quadratic forms
    qform1 = 0.
    dnorm1 = 0.
    dnorm2 = 0.
    for spectra1, spectra2 in zip(ddat.data, cdat.data):
        qform1 += (spectra1.flux*spectra2.flux).sum()
Пример #2
0
    osfacs = []
    for ni, image in enumerate(dmap.data):
        for ns in xrange(len(image.scale)):
            sindices.append((ni,ns))
            osfacs.append(image.scale[ns])
            image.scale[ns] = 0.

    # compute a set of data vectors with each scale factor
    # set to 1 with all others set = 0, one by one
    dvecs = []
    for ni, ns in sindices:
        dmap.data[ni].scale[ns] = 1.0

        # compute data equivelent to data
        dvec = copy.deepcopy(data)
        doppler.comdat(dmap, dvec)
        dvecs.append(retarr(dvec)[0])

        dmap.data[ni].scale[ns] = 0.0

    # compile least-squares matrix & right-hand vector
    nvec = len(dvecs)
    A = np.empty((nvec,nvec))
    b = np.empty((nvec))
    for j in xrange(nvec):
        b[j] = (wgt[ok]*dvecs[j]*flux[ok]).sum()
        for i in xrange(j+1):
            A[j][i] = (wgt[ok]*dvecs[j]*dvecs[i]).sum()
            A[i][j] = A[j][i]

    nsfacs = linalg.solve(A,b)
Пример #3
0
parser.add_argument('-n', dest='noise', action='store_true',
                    help='add noise according to uncertainty array in template')

# OK, done with arguments.
args = parser.parse_args()

# load map and data
dmap  = doppler.Map.rfits(doppler.afits(args.map))
dtemp = doppler.Data.rfits(doppler.afits(args.dtemp))

flux = dtemp.data[0].flux
ferr = dtemp.data[0].ferr

# compute data
dcopy = copy.deepcopy(dtemp)
doppler.comdat(dmap, dtemp)

# optionally add noise
if args.noise:
    for spectra in dtemp.data:
        spectra.flux = np.random.normal(spectra.flux, np.abs(spectra.ferr))
else:
    chisq = 0.
    ndata = 0
    for cspec, dspec in zip(dtemp.data, dcopy.data):
        ok = dspec.ferr > 0.
        chisq += (((dspec.flux[ok]-cspec.flux[ok])/dspec.ferr[ok])**2).sum()
        ndata += cspec.flux.size

    print 'Chi**2 = ',chisq,', chi**2/N =',chisq/ndata,', N =',ndata
Пример #4
0
quad   = 0.
wave   = model.data[0].wave
gamma  = model.data[0].gamma
scale  = model.data[0].scale

grid = doppler.Grid(head,dat,tzero,period,quad,vgrid,fratio,wave,gamma,scale)

# computations

# first the frequency array
tbase  = data.data[0].time.max() - data.data[0].time.min()
nfreq  = int((fhigh-flow)*tbase/delta)
fs     = np.linspace(flow,fhigh,nfreq)

# compute data without noise
doppler.comdat(model, data)

# space for the data with noise
buffer = []
nbuff = 0
for spectra in data.data:
    buffer.append(np.empty((nmonte,
                            spectra.flux.shape[0],spectra.flux.shape[1])))
    nbuff += buffer[-1].size

# nmonte realisations
for nd, spectra in enumerate(data.data):
    for nm in xrange(nmonte):
        buffer[nd][nm] = np.random.normal(spectra.flux, spectra.ferr)

# allocate space for results as we need to complete all