有没有办法在RA和DEC中应用目录位置匹配天文坐标两个数据集中的其余数据?

2024-05-23 16:23:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个项目,在这个项目中,我正在寻找与特定星系相关的三组天文数据之间基于RA和DEC的源匹配。我能够找到源匹配,并输出匹配的RA和DEC值为每个数据集没有问题,但我有困难,找出如何将匹配的源应用到我的文件中的其余数据(幅度,通量等),使我只有数据对应的匹配源。我使用的软件包是天文坐标匹配天空坐标。有没有一种方法可以把我现在匹配的RA和DEC值从我的数据集中得到它们相应的通量和震级?我在想某种for循环可能是正确的方法,但我对python还很陌生。你知道吗

目前,我只为每个数据集匹配了RA和DEC,但我希望最后得到一个文件,其中包含那些匹配的RA和DEC值以及它们相应的幅值和通量值,作为不同的列。这意味着在我的数据中,每个参数(RA,DEC,magnitude,flux)是一列,每个源对应一行。你知道吗

我的数据的格式是F435W.csvF550M.csvF625W.csv。其中第13列和第14列分别为RA和DEC。其余的列是磁、通量和x、y位置的变化。数据看起来与此类似,这也是我需要的新匹配数据的外观:

1,2017.013,0.01242859,-8.2618,0,51434.12,0.3269918,-11.7781,0,0.01957931,1387.9406,541.916,49.9898514,41.5266996,8.81E+01,1.63E+03,1.44E+02,40.535,8.65,84.72,0.00061,0.00035,62.14
2,84.73392,0.01245409,-4.8201,0.0002,112.9723,0.04012135,-5.1324,0.0004,-0.002142646,150.306,146.7986,49.9942613,41.5444392,4.92E+00,5.60E+00,-2.02E-01,2.379,2.206,-74.69,0.00339,0.0029,88.88
3,215.1939,0.01242859,-5.8321,0.0001,262.2751,0.03840466,-6.0469,0.0002,-0.002961465,3248.686,52.8478,50.003155,41.5019044,4.77E+00,5.05E+00,-1.63E-01,2.263,2.166,-65.29,0.002,0.0019,-66.78
4,0.3796681,0.01240305,1.0515,0.0355,0.5823653,0.05487975,0.587,0.1023,-0.00425157,3760.344,11.113,50.0051049,41.4949256,1.93E+00,1.02E+00,-7.42E-02,1.393,1.007,-4.61,0.05461,0.03818,-6.68
5,0.9584663,0.01249223,0.0461,0.0142,1.043696,0.0175857,-0.0464,0.0183,-0.004156116,4013.2063,9.1225,50.0057256,41.4914444,1.12E+00,9.75E-01,1.09E-01,1.085,0.957,28.34,0.01934,0.01745,44.01
6,2.379565,0.01249223,-0.9412,0.0057,0.231205,0.02710035,1.59,0.1273,-0.004135321,3824.3706,9.0756,50.0052903,41.4940468,7.81E-01,6.99E-02,4.27E-02,0.885,0.26,3.42,0.01265,0.00622,15.52
7,0.3171223,0.01250492,1.2469,0.0428,0.5233852,0.05406558,0.7029,0.1122,-0.00399635,4097.3604,7.0301,50.0059585,41.4902884,9.61E-01,1.63E+00,-3.94E-01,1.346,0.883,-65.16,0.06171,0.04005,-65.05
8,0.289245,0.0125176,1.3468,0.047,0.2744479,0.02238134,1.4039,0.0886,-0.004173243,3904.7402,7.3912,50.0055069,41.4929422,7.90E-01,2.38E-01,7.13E-02,0.894,0.479,7.24,0.04501,0.02071,8.29
9,0.3543034,0.01247953,1.1266,0.0383,0.7666836,0.06376094,0.2885,0.0903,-0.004009248,4107.0684,3.259,50.0060503,41.4901611,3.53E+00,1.28E+00,-4.60E-01,1.903,1.09,-11.12,0.06873,0.03955,-11.22
10,1.308331,0.01250492,-0.2918,0.0104,-0.005209296,0.004877397,99,99,-0.004193406,3933.9834,6,50.0056001,41.4925416,5.78E-01,8.33E-02,0.00E+00,0.76,0.289,0,0.01272,0.00424,0

在我的代码中,idx是指向catalog的索引,它们是距离c中每个坐标最近的对象,sep2d是它们之间的空中距离。catalog_matchesc_matches打印出RA和DEC作为列,其中每行对应一个源。我使用分离约束是因为我知道没有匹配是完全匹配。你知道吗

import numpy as np

my_csv1 = np.loadtxt(open("F435W.csv"), delimiter=",") #reading in first data set
my_csv2 = np.loadtxt(open("F550M.csv"), delimiter=",") #reading in second data set

from astropy.coordinates import SkyCoord
from astropy import units as u
from astropy.coordinates import match_coordinates_sky

c = SkyCoord(my_csv1[:, 12], my_csv1[:, 13], frame='icrs', unit='deg') 
catalog = SkyCoord(my_csv2[:, 12], my_csv2[:, 13], frame='icrs', unit='deg')

max_sep = 1.0*u.arcsec  #maximum separation between values to be considered a match
idx, sep2d, _ = c.match_to_catalog_sky(catalog)  #matching
sep_constraint = sep2d < max_sep
c_matches = c[sep_constraint]  #matched RA and DEC values for F435W.csv
catalog_matches = catalog[idx[sep_constraint]]  #matched RA and DEC values for F550M.csv

print (len(c_matches), len(catalog_matches))  #print lengths of the arrays containing the matched values
#lengths should be the same, and they are, so this works.  How do I apply this to the rest of the data?

Tags: csvthe数据importformysepdec