Взаимодействие питона и Origin lab

Как можно а) с помощью astropy перевести координаты из формата hh mm ss в другую систему координат, и отобразить это всё в Origin Lab?


Ответы (1 шт):

Автор решения: Ohlobistyn

Перевод из формата ra: hh mm ss; dec: deg mm ss:

import pandas as pd
import astropy as ap
import numpy as np
from astropy import units as u
from astropy.coordinates import SkyCoord

df = pd.read_csv('WD.csv')
ra1 = df['icrsra'] #прямое восхождение
dec1 = df['icrsdec'] #склонение
ra2 = ['']*len(ra1)
dec2 = ['']*len(ra1)

for i in range(len(ra1)):
  if not pd.isnull(ra1[i]) and not pd.isnull(dec1[i]): # это убирает пустые значения, по необходимости можно изменить/убрать
    k = ra1[i]

    k = k.split()
    ra2[i] = float(k[0])*15+float(k[1])/4+float(k[2])/4/60
    k = dec1[i].split(' ')
    dec2[i] = float(k[0])+float(k[1])/60+float(k[2])/3600
  else: # ненужные, при необходимости изменить
    ra2[i] = 0
    dec2[i] = 0
c = SkyCoord(ra2*u.degree,dec2*u.degree, frame = 'icrs')

В итоге получаем c как скайкоорд. Это неплохо перевести в нормальный формат:

sky_coords = []
for i in range(len(c)):
    sky_coords.append([c[i].l.degree,c[i].b.degree])

sky_coords в итоге обычный список списков вида [l, b]

my_df = pd.DataFrame(mylist, columns=['col1'])
my_df.to_csv('out33.csv')

Это для вывода списка в отдельный файл

Теперь ориджин. Базовая def f(x):

function double Sos(double m, double q)
{
double sum;
double fx;
sum = 0; 
for(i = 1; i<45; i=i+1)
{
  fx = 2.7255*(1+wcol(1)[i]);
  sum = sum + (wcol(2)[i]-fx)^2/(wcol(3)[i])^2;
}

return sum;
}

Применим:

wcol(7)[7] = Sos(0.03,0.2) 

Циклы for(здесь вложенные) если цикл не работает, то проверь что после for(mi=4;mi<42;mi=mi+1) НЕТ ТОЧКИ С ЗАПЯТОЙ:

for(mi = 4; mi<42; mi=mi+1)
{ m = (mi-1)/100;
  for(qi = 20; qi<41; qi=qi+1)
        {
         q = qi/100;
         wcol(mi)[qi] = Sos(m,q);
        }
}

Пример if-а:

for(i = 1; i<250; i=i+1)
{
    if (wcol(8)[i]>365)
    {wcol(8)[i] = wcol(8)[i] - 365;};
    else
    { };
}

СТРОКИ

Ввод переменных: символ ' НЕ ПОДХОДИТ, ТОЛЬКО "

wcol(7)[7]$ = "privet";

string y$ = "poka";

Работа со строками:

wcol(7)[7]$ = y$ + "privet";

А это позволит wcol[1][899] быть нормальным: (иначе оно как текст, будет wcol(z)[k]$*6)

wcol(1)[899] = wcol(z)[k]$*6;

С условиями всё норм работает:

if (wcol(1)[1]$ == "2023-May-08")
{
    wcol(7)[9] = 1;
}
→ Ссылка