有没有一种方法可以将使用astropy.coordinates找到的RA和DEC中的目录位置匹配应用于两个数据集中的其余数据?

时间:2019-03-28 21:33:30

标签: python match matching astronomy astropy

我正在做一个项目,在其中我找到了基于RA和DEC的,与特定星系有关的三组天文数据之间的源匹配。我能够找到源匹配项并为每个数据集输出匹配的RA和DEC值,这没有问题,但是我很难弄清楚如何将匹配的源应用于文件中的其余数据(大小,通量)等等),这样我只有与匹配来源相对应的数据。我使用的软件包是astropy.coordinates和match_coordinates_sky。有什么方法可以获取我现在匹配的RA和DEC值,并使用这些值从我的数据集中获取它们相应的通量和大小?我以为某种for循环可能是正确的方法,但是我对python还是很陌生。

当前,我只为每个数据集匹配了RA和DEC,但是我想最终得到一个文件,其中包含那些匹配的RA和DEC值以及它们对应的幅度和通量值作为不同的列。这意味着在我的数据中,每个参数(RA,DEC,幅度,通量)都是一列,而每个来源都对应于一行。

我的数据采用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

在我的代码中,idxcatalog的索引,是最接近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?

0 个答案:

没有答案