Fake module

cosmatch.fake.catalog_generator.generate_catalog(name, size=100, random_state=42, other_columns=[], num_flux=0, deviation=1)

Генерирует искусственный каталог. На вход принимает название каталога и его размер и дополнительные колонки.

Parameters:
  • name (str) – Название каталога, которое будет использоваться для обозначения колонок id, ra, dec.

  • size (int) – Размер каталога - количество источников, которые будут в нем содержаться.

  • random_state (int) – np.random.seed().

  • other_columns (list) – Список дополнительных колонок, которые будут заполняться случайными числами. Исключение тут будет колонка ‘poserr’, которая будет браться из нормального распредления (1.7, 1.4). В случае, если вам нужна колонка ‘poserr’, то вам нужно добавить ее в other_columns.

  • num_flux (int) – Количество различных потоков в каталоге. Для каждого потока будет создана колонка ‘Flux_{i}’ и ‘Flux_{i}_err’, где i - это порядковый номер потока. Значения потока примерно соответсвуют потоку рентгеновских источников.

  • deviation (float) – Стандартное отклонение для генерации координат. Чем больше значение, тем выше будет их разброс - меньше кучность.

Return type:

DataFrame

Returns:

Каталог источников с указанными в параметрах колонками. В каталоге также будут указаны основные attrs - [‘name’, ‘id’, ‘ra’, ‘dec’].

Examples

>>> from cosmatch.fake import generate_catalog
>>> opt = generate_catalog(name='opt', size=100)
>>> opt.columns
>>> # Index(['id_opt', 'ra_opt', 'dec_opt'], dtype='object')
>>> opt.shape
>>> # (100, 3)
>>> opt.attrs
>>> # {'name': 'opt', 'id': 'id_opt', 'ra': 'ra_opt', 'dec': 'dec_opt'}

Функция также может создавать различные колонки, в том числе poserr и потоки.

>>> opt = generate_catalog(name=None, size=1000, num_flux=3, other_columns=['some', 'poserr'])
>>> opt.columns
>>> # Index(['id', 'ra', 'dec', 'poserr', 'some', 'Flux_1', 'Flux_1_err',
>>> #        'Flux_2', 'Flux_2_err', 'Flux_3', 'Flux_3_err'],
>>> #       dtype='object')
>>> opt.attrs
>>> # {'name': '', 'id': 'id', 'ra': 'ra', 'dec': 'dec'}

Можно отдельно указать стандартное отклонение для генерации координат.

>>> xray = generate_catalog(name='xray', size=1000, num_flux=1, other_columns=['poserr'], deviation=100)
>>> xray['ra_xray'].std().round(5), opt['ra'].std().round(5)
>>> # (0.29214, 0.00292)

Чем меньше отклонение, тем более кучно располагаются объекты - таким образом, про сопоставлении каталогов будет получаться больше пар между каталогами.

>>> from cosmatch.utils import correlate
>>> opt = generate_catalog(name='opt', size=1000, deviation=1)
>>> xray = generate_catalog(name='xray', size=1000, deviation=1)
>>> cor = correlate(opt, xray, 1)
>>> cor.shape
>>> # (4614, 6)
>>>
>>> opt = generate_catalog(name='opt', size=1000, deviation=10)
>>> xray = generate_catalog(name='xray', size=1000, deviation=10)
>>> cor = correlate(opt, xray, 1)
>>> cor.shape
>>> # (1028, 6)

Заметно, что при увеличении deviation в n раз, количество пар уменьшается в sqrt(n) раз. Происходит это по причине двумерности координат.

cosmatch.fake.catalog_generator.generate_correlated_catalog(name_frame='frame', name_target='target', size_frame=500, size_target=200, random_state=42, num_frame_flux=0, num_target_flux=0, deviation_frame=1, deviation_target=1, other_columns=[], max_distance=15, add_distance=True, add_mark=False, mark_method='nearest', num_usefull_features=0, add_probabilities=False)

Генерирует объединенный каталог из двух каталогов.

Parameters:
  • name_frame (str) – Названия frame каталога, который будет сопоставлен с target каталогом. Название будет непосредственно влиять на имена колонок [‘id’, ‘ra’, ‘dec’] и на attrs.

  • name_target (str) – Аналогично name_frame, только для target каталога.

  • size_frame (int) – Количество объектов frame каталога.

  • size_target (int) – Количество объектов target каталога.

  • random_state (int) – np.random.seed()

  • num_frame_flux (int) – Количество потоков в frame каталоге.

  • num_target_flux (int) – Количество потоков в target каталоге.

  • other_columns (list) – Дополнительные колонки каталога. Например, [‘some’]. В данных колонках будут генерироваться случайные значения.

  • max_distance (float) – Максимальное расстояние между объектами в парах.

  • add_distance (bool) – Добавить расстояние между объектами в парах в выходную таблицу.

  • add_mark (bool) – Добавить ли метку mark правильности сопоставления каталогов. Метка=1, если считается, что пара frame-target является верным отождествлением

  • mark_method (str) – Метод сопоставления, на основе которого ставится метка mark [‘nearest’, ‘random’]. ‘nearest’ - ставить метку 1 для каждого target источника в паре с ближайшим оптическим источником. ‘random’ - ставить метку 1 для случайного target источника в паре с оптическим источником.

Return type:

DataFrame

Returns:

Совмещенный каталог данных frame и target. Содержит колонки frame, target (‘id’, ‘ra’, ‘dec’, [flux]…) и опционально [‘distance’, ‘mark’].

Examples

По умолчанию генерируются только основные колонки, такие как [‘id’, ‘ra’, ‘dec’].

>>> from cosmatch.fake import generate_correlated_catalog
>>> data = generate_correlated_catalog()
>>> data.columns
>>> # Index(['id_frame', 'ra_frame', 'dec_frame', 'id_target', 'ra_target',
>>> #        'dec_target', 'poserr', 'distance'],
>>> #       dtype='object')
>>> data.id_frame.nunique(), data.id_target.nunique()
>>> # (500, 200)
>>> data.attrs
>>> # {'ids': ['id_frame', 'id_target'],
>>> #  'coords': ['ra_frame', 'dec_frame', 'ra_target', 'dec_target'],
>>> #  'name_frame': 'frame', 'id_frame': 'id_frame', 'ra_frame': 'ra_frame', 'dec_frame': 'dec_frame',
>>> #  'name_target': 'target', 'id_target': 'id_target', 'ra_target': 'ra_target', 'dec_target': 'dec_target'}

Вы можете отдельно выбрать названия подкаталогов, потоки в этох подкаталогах и дополнительные колонки.

>>> data = generate_correlated_catalog(name_frame='opt', name_target='xray', num_frame_flux=2, num_target_flux=2, other_columns=['some'])
>>> data.columns
>>> # Index(['id_opt', 'ra_opt', 'dec_opt', 'Flux_1_opt', 'Flux_1_err_opt',
>>> #        'Flux_2_opt', 'Flux_2_err_opt', 'id_xray', 'ra_xray', 'dec_xray',
>>> #        'poserr', 'Flux_1_xray', 'Flux_1_err_xray', 'Flux_2_xray',
>>> #        'Flux_2_err_xray', 'distance', 'some'], dtype='object')
>>> data['Flux_1_opt'].mean(), data['Flux_1_opt'].min(), data['Flux_1_opt'].max()
>>> # (5.131165305927816e-15, 4.9399809344096155e-17, 9.994137257706666e-15)

При генерации совмещенного каталога важно указывать нужную дистанцию между парами (max_distance). При том вы можете получить и маркировку верных отождествлений при помощи параметров add_mark и mark_method.

>>> data = generate_correlated_catalog(name_frame='opt', name_target='xray', max_distance=5, add_mark=True, mark_method='nearest', add_distance=True)
>>> data['mark'].value_counts()
>>> # mark
>>> # 0    7598
>>> # 1     200
>>> # Name: count, dtype: int64
>>> data.query('mark==1')['id_xray'].nunique()
>>> # 200