Есть ли способ применить совпадения позиций каталога в RA и DEC, найденные с помощью astropy.coordinates, к остальным данным в двух наборах данных? - PullRequest
0 голосов
/ 29 марта 2019

Я работаю над проектом, в котором нахожу исходные совпадения на основе RA и DEC между тремя наборами астрономических данных, относящихся к конкретной галактике. Я в состоянии найти совпадения источников и вывести сопоставленные значения RA и DEC для каждого набора данных без проблем, но у меня возникают проблемы с выяснением того, как применить сопоставленные источники к остальным данным в моих файлах (величина, поток и т. д.), чтобы у меня были только данные, соответствующие соответствующим источникам. Я использую пакет astropy.coordinates и match_coordinates_sky. Есть ли способ, которым я могу взять мои теперь согласованные значения RA и DEC и использовать их для получения их соответствующих потоков и величин из моих наборов данных? Я думал, что какой-то цикл for может быть правильным подходом, но я совсем новичок в python.

В настоящее время я сопоставляю только RA и DEC для каждого набора данных, но я хотел бы получить файл с этими совпадающими значениями RA и DEC и соответствующими им значениями магнитуды и магнитного потока в виде различных столбцов. Это означает, что в моих данных каждый параметр (RA, DEC, величина, поток) является столбцом, а каждый источник соответствует строке.

Мои данные имеют вид F435W.csv, F550M.csv и F625W.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_matches и c_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?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...