def test_star_type_probability_all_params(self): """ Test for star_type_probability. Inputs and expected outputs created by running generate_files_for_tests.py in beast-examples/metal_small. In this version, all required parameters are present. """ # download cached file star_prob_fname = download_rename( f"{self.basename}_star_type_probability.asdf") with asdf.open(star_prob_fname) as af: star_prob_info = copy.deepcopy(af.tree) # run star_type_probability star_prob = star_type_probability.star_type_probability( self.pdf1d_fname_cache, self.pdf2d_fname_cache, **star_prob_info["input"], ) # expected output table expected_star_prob = Table(star_prob_info["output"]) # compare to new table compare_tables(expected_star_prob, Table(star_prob))
def test_star_type_probability_no_Av(self): """ Test for star_type_probability.py """ # download the needed files pdf2d_fname = download_rename("beast_example_phat_pdf2d_no_Av.fits") star_prob_fname = download_rename( "beast_example_phat_startype_no_Av.fits") # run star_type_probability star_prob = star_type_probability.star_type_probability( self.pdf1d_fname_cache, pdf2d_fname, output_filebase=None, ext_O_star_params={ "min_M_ini": 10, "min_Av": 0.5, "max_Av": 5 }, ) # expected output table expected_star_prob = Table.read(star_prob_fname) # compare to new table compare_tables(expected_star_prob, Table(star_prob))
def test_star_type_probability_all_params(): """ Test for star_type_probability.py """ # download the needed files pdf1d_fname = download_rename("beast_example_phat_pdf1d.fits") pdf2d_fname = download_rename("beast_example_phat_pdf2d.fits") star_prob_fname = download_rename("beast_example_phat_startype.fits") # run star_type_probability star_prob = star_type_probability.star_type_probability( pdf1d_fname, pdf2d_fname, output_filebase=None, ext_O_star_params={ 'min_M_ini': 10, 'min_Av': 0.5, 'max_Av': 5 }) # expected output table expected_star_prob = Table.read(star_prob_fname) # compare to new table compare_tables(expected_star_prob, Table(star_prob))
def test_star_type_probability_no_Av(self): """ Test for star_type_probability. In this version, A_V was not saved in the 2D PDFs. """ # download cached file star_prob_fname = download_rename( f"{self.basename}_star_type_probability.asdf") with asdf.open(star_prob_fname) as af: star_prob_info = copy.deepcopy(af.tree) # edit the 2D PDF file to not have A_V info temp_pdf2d_fname = tempfile.NamedTemporaryFile(suffix=".fits").name temp_hdu_list = [] with fits.open(self.pdf2d_fname_cache) as hdu: for ext in hdu: if "Av+" in ext.name or "+Av" in ext.name: continue temp_hdu_list.append(ext) fits.HDUList(temp_hdu_list).writeto(temp_pdf2d_fname) # edit the expected output to have NaNs in columns that require A_V # (currently, that's all columns) expected_star_prob = Table(star_prob_info["output"]) for col in expected_star_prob.colnames: if col == "ext_O_star": expected_star_prob[col] = np.nan if col == "dusty_agb": expected_star_prob[col] = np.nan # run star_type_probability star_prob = star_type_probability.star_type_probability( self.pdf1d_fname_cache, temp_pdf2d_fname, **star_prob_info["input"], ) # compare to expected table compare_tables(expected_star_prob, Table(star_prob))
def generate_files_for_tests(run_beast=True, run_tools=True): """ Use the metal_small example to generate a full set of files for the BEAST regression tests. Parameters ---------- run_beast : boolean (default=True) if True, run the BEAST run_tools : boolean (default=True) if True, run the code to generate things for tools """ # read in BEAST settings settings_orig = beast_settings.beast_settings("beast_settings.txt") # also make a version with subgrids settings_subgrids = copy.deepcopy(settings_orig) settings_subgrids.n_subgrid = 2 settings_subgrids.project = f"{settings_orig.project}_subgrids" # ========================================== # run the beast for each set of settings # ========================================== if run_beast: for settings in [settings_orig, settings_subgrids]: # ----------------- # physics model # ----------------- create_physicsmodel.create_physicsmodel( settings, nsubs=settings.n_subgrid, nprocs=1, ) # ----------------- # ASTs # ----------------- # currently only works for no subgrids if settings.n_subgrid == 1: make_ast_inputs.make_ast_inputs(settings, pick_method="flux_bin_method") # ----------------- # obs model # ----------------- create_obsmodel.create_obsmodel( settings, use_sd=False, nsubs=settings.n_subgrid, nprocs=1, use_rate=True, ) # ----------------- # trimming # ----------------- # make file names file_dict = create_filenames.create_filenames( settings, use_sd=False, nsubs=settings.n_subgrid) # read in the observed data obsdata = Observations(settings.obsfile, settings.filters, settings.obs_colnames) for i in range(settings.n_subgrid): # get the modesedgrid on which to generate the noisemodel modelsedgridfile = file_dict["modelsedgrid_files"][i] modelsedgrid = SEDGrid(modelsedgridfile) # read in the noise model just created noisemodel_vals = noisemodel.get_noisemodelcat( file_dict["noise_files"][i]) # trim the model sedgrid sed_trimname = file_dict["modelsedgrid_trim_files"][i] noisemodel_trimname = file_dict["noise_trim_files"][i] trim_grid.trim_models( modelsedgrid, noisemodel_vals, obsdata, sed_trimname, noisemodel_trimname, sigma_fac=3.0, ) # ----------------- # fitting # ----------------- run_fitting.run_fitting( settings, use_sd=False, nsubs=settings.n_subgrid, nprocs=1, pdf2d_param_list=["Av", "M_ini", "logT"], pdf_max_nbins=200, ) # ----------------- # merging # ----------------- # it'll automatically skip for no subgrids merge_files.merge_files(settings, use_sd=False, nsubs=settings.n_subgrid) print("\n\n") # ========================================== # reference files for assorted tools # ========================================== if run_tools: # ----------------- # compare_spec_type # ----------------- # the input settings input = { "spec_ra": [72.67213351], "spec_dec": [-67.71720515], "spec_type": ["A"], "spec_subtype": [0], "lumin_class": ["IV"], "match_radius": 0.2, } # run it output = compare_spec_type.compare_spec_type( settings_orig.obsfile, "{0}/{0}_stats.fits".format(settings_orig.project), **input, ) # save the inputs and outputs asdf.AsdfFile({ "input": input, "output": output }).write_to("{0}/{0}_compare_spec_type.asdf".format( settings_orig.project)) # ----------------- # star_type_probability # ----------------- # input settings input = { "output_filebase": None, "ext_O_star_params": { "min_M_ini": 10, "min_Av": 0.5, "max_Av": 5 }, } # run it output = star_type_probability.star_type_probability( "{0}/{0}_pdf1d.fits".format(settings_orig.project), "{0}/{0}_pdf2d.fits".format(settings_orig.project), **input, ) # save the inputs and outputs asdf.AsdfFile({ "input": input, "output": output }).write_to("{0}/{0}_star_type_probability.asdf".format( settings_orig.project)) # ========================================== # asdf file permissions # ========================================== # for unknown reasons, asdf currently writes files with permissions set # to -rw-------. This changes it to -rw-r--r-- (like the rest of the # BEAST files) so Karl can easily copy them over to the cached file # website. # list of asdf files asdf_files = glob.glob("*/*.asdf") # go through each one to change permissions for fname in asdf_files: os.chmod(fname, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH)