def test_lsq_with_covar(): # NOTE: This only fits the velocity field.... # Read the data to fit data_root = remote_data_file() kin = manga.MaNGAGasKinematics.from_plateifu(8138, 12704, cube_path=data_root, maps_path=data_root, covar=True) print('Forcing covariance to be positive definite.') kin.vel_covar = util.impose_positive_definite(kin.vel_covar) # Set the rotation curve rc = HyperbolicTangent(lb=numpy.array([0., 1e-3]), ub=numpy.array([500., kin.max_radius()])) # Set the disk velocity field disk = AxisymmetricDisk(rc=rc) #, dc=dc) # Fit it with a non-linear least-squares optimizer # import time # t = time.perf_counter() disk.lsq_fit(kin, sb_wgt=True) # print(f'First fit (no covar): {time.perf_counter()-t} s') # Rejected based on error-weighted residuals, accounting for intrinsic scatter resid = kin.vel - kin.bin(disk.model()) err = 1/numpy.sqrt(kin.vel_ivar) scat = scatter.IntrinsicScatter(resid, err=err, gpm=disk.vel_gpm) sig, rej, gpm = scat.iter_fit(fititer=5) #, verbose=2) # Check assert sig > 8., 'Different intrinsic scatter' assert numpy.sum(rej) == 19, 'Different number of pixels were rejected' # Refit with new mask, include scatter and covariance kin.vel_mask = numpy.logical_not(gpm) p0 = disk.par # t = time.perf_counter() disk.lsq_fit(kin, scatter=sig, sb_wgt=True, p0=p0, ignore_covar=False, assume_posdef_covar=True) #, verbose=2) # print(f'Second fit (w/ covar): {time.perf_counter()-t} s') # Reject resid = kin.vel - kin.bin(disk.model()) scat = scatter.IntrinsicScatter(resid, covar=kin.vel_covar, gpm=disk.vel_gpm, assume_posdef_covar=True) sig, rej, gpm = scat.iter_fit(fititer=5) #, verbose=2) # Check assert sig > 5., 'Different intrinsic scatter' assert numpy.sum(rej) == 7, 'Different number of pixels were rejected' # Model parameters assert numpy.all(numpy.absolute(disk.par[:2]) < 0.1), 'Center changed' assert 165. < disk.par[2] < 167., 'PA changed' assert 56. < disk.par[3] < 58., 'Inclination changed' assert 249. < disk.par[5] < 252., 'Projected rotation changed'
def test_lsq_psf(): # Read the data to fit data_root = remote_data_file() kin = manga.MaNGAGasKinematics.from_plateifu(8138, 12704, cube_path=data_root, maps_path=data_root) # Set the rotation curve rc = HyperbolicTangent(lb=numpy.array([0., 1e-3]), ub=numpy.array([500., kin.max_radius()])) # Set the disk velocity field disk = AxisymmetricDisk(rc=rc) # Fit it with a non-linear least-squares optimizer disk.lsq_fit(kin) #, verbose=2) assert numpy.all(numpy.absolute(disk.par[:2]) < 0.1), 'Center changed' assert 165. < disk.par[2] < 167., 'PA changed' assert 55. < disk.par[3] < 59., 'Inclination changed' assert 252. < disk.par[5] < 255., 'Projected rotation changed'
def test_lsq_nopsf(): # Read the data to fit data_root = remote_data_file() kin = manga.MaNGAGasKinematics.from_plateifu(8078, 12703, cube_path=data_root, maps_path=data_root) nrun = 100 for i in range(nrun): print('{0}/{1}'.format(i + 1, nrun), end='\r') # Set the rotation curve rc = HyperbolicTangent() # Set the disk velocity field disk = AxisymmetricDisk(rc) # Fit it with a non-linear least-squares optimizer disk.lsq_fit(kin) print('{0}/{0}'.format(nrun))