Cómo convertir movimiento propio en AR y Dec a coordenadas galácticas

Estoy tratando de analizar datos estelares en la versión GAIA 2 en coordenadas galácticas y estoy luchando con el componente de velocidad. Intenté seguir la documentación y los documentos en línea, pero terminé con resultados de velocidad con sesgos extraños que indican que probablemente estoy haciendo algo mal. Las fuentes que he usado son: http://adsabs.harvard.edu/full/1987AJ.....93..864J

https://gea.esac.esa.int/archive/documentation//GDR1/Data_processing/chap_cu3ast/sec_cu3ast_intro.html#SS

El conjunto de datos GAIA 2 tiene estas variables relevantes por estrella:

  • ra (de 0 a 360)
  • diciembre (de -90 a 90)
  • pmra
  • pmdec
  • paralaje
  • velocidad_radial

Y este es el código que tengo (C#) para tratar de obtener los componentes de velocidad. Se hace convirtiendo primero pmra y pmdec a velocidades cartesianas basadas en la posición de las estrellas y luego girando esa ubicación a coordenadas galácticas.

double RA = ra * Math.PI / 180.0;
double DEC = (dec + 90) * Math.PI / 90.0;

Microsoft.Xna.Framework.Matrix positionrotation = new Microsoft.Xna.Framework.Matrix();
positionrotation.M11 = (float)(Math.Cos(RA) * Math.Cos(DEC));
positionrotation.M12 = (float)-Math.Sin(RA);
positionrotation.M13 = (float)-(Math.Cos(RA) * Math.Sin(DEC));

positionrotation.M21 = (float)(Math.Sin(RA) * Math.Cos(DEC));
positionrotation.M22 = (float)Math.Cos(RA);
positionrotation.M23 = (float)-(Math.Sin(RA) * Math.Sin(DEC));

positionrotation.M31 = (float)(Math.Sin(DEC));
positionrotation.M32 = 0;
positionrotation.M33 = (float)(Math.Cos(DEC));


Microsoft.Xna.Framework.Vector3 vector = new Microsoft.Xna.Framework.Vector3((float)(radial_velocity), (float)(pmra / parallax), (float)(pmdec/ parallax));
vector = Microsoft.Xna.Framework.Vector3.Transform(vector, positionrotation);

Microsoft.Xna.Framework.Matrix galacticrotation = new Microsoft.Xna.Framework.Matrix();
galacticrotation.M11 = -0.054876f;
galacticrotation.M12 = -0.87347f;
galacticrotation.M13 = -0.483835f;
galacticrotation.M21 = 0.494109f;
galacticrotation.M22 = -0.444830f;
galacticrotation.M23 = 0.746982f;
galacticrotation.M31 = -0.867666f;
galacticrotation.M32 = -0.198076f;
galacticrotation.M33 = 0.455984f;
vector = Microsoft.Xna.Framework.Vector3.Transform(vector, galacticrotation);
Estoy totalmente confundido por tu pregunta. ¿Que estás tratando de hacer? Las velocidades están en km/s. Las coordenadas galácticas se refieren a posiciones. ¿O está hablando de componentes de velocidad UVW galácticos, que su código no aborda en absoluto?
Lo que busco son los componentes de velocidad UVW galácticos. En mi código, se supone que se calculan en el vector final. Cualquier unidad de velocidad está bien siempre que sepa cuál es. La intención de la sección de 'rotación de posición' es rotar pmra, pmdec y velocidad radial a velocidades en el sistema de coordenadas ecuatoriales basado en la posición de la estrella, y el propósito de la rotación galáctica es convertir eso en velocidades en el sistema de coordenadas galácticas. Si ese enfoque es defectuoso, me encantaría aprender cómo lograrlo correctamente.
Yo no diría defectuoso, simplemente poco ortodoxo. Los astrónomos que no han estado siguiendo su proceso de desarrollo pueden encontrar una implementación más directa de las ecuaciones 3.57 - 3.71 más fácil de seguir. Las coordenadas angulares galácticas (l, b) (ecuación 3.63) pueden ser útiles para las visualizaciones.
Terminé sin usar las fórmulas vinculadas ya que no tienen en cuenta la velocidad radial. También me quedé preguntándome cómo usar exactamente el paralaje aquí para obtener los vectores de posición y velocidad reales.

Respuestas (1)

La DECconversión en la pregunta es incorrecta. Prueba esto:

double DEC = dec * Math.PI / 180.0;

positionrotationparece una composición de dos rotaciones que traen (1, 0, 0) al RA y DEC de interés. Parece correcto, pero algo como esto sería más fácil de verificar:

using Microsoft.Xna.Framework.Matrix;

Matrix positionrotation =
    Matrix.CreateRotationZ((float) RA) * Matrix.CreateRotationY((float) -DEC);

Las unidades de entrada vectorestán mezcladas. Según estos documentos de Gaia DR2 , radial_velocityestá en km/s. pmray pmdecestán en mas/año; dividiéndolos (*) por parallaxen mas (1 au de referencia) da resultados en au/año. Prueba esto:

using Microsoft.Xna.Framework.Vector3;

// conversion to km/s
double au_yr = 1.49598e+8 / 3.15576e+7;

Vector3 velocity = new Vector3(
    (float) radial_velocity, // km/s
    (float) pmra / parallax * au_yr,
    (float) pmdec / parallax * au_yr);

Vector3 vel_icrs = Vector3.Transform(velocity, positionrotation);

Si galacticrotationes de la ecuación 3.61 en estos documentos de Gaia DR2 ,

// Matrix galacticrotation as above except
galacticrotation.M12 = -0.873437f;

Vector3 vel_gal = Vector3.transform(vel_ircs, galacticrotation);

(*) La distancia real en parsecs puede diferir del recíproco del paralaje medido en segundos de arco, que puede ser cero o negativo.

¡Muchas gracias! Sus cambios tienen sentido y parecen mejorar los resultados. El método para calcular la matriz de posición-rotación parece tener algunos signos deslizados, pero por lo demás es idéntico. Sin embargo, todavía parece que queda algún problema, la velocidad estelar parece estar fuertemente correlacionada con las posiciones estelares. Aquí hay un diagrama de mapa estelar rápido: puu.sh/Hj7A4/cf8192b8b1.png Los ejes aquí son RA (x) y DEC (y) y el color de las estrellas representa su velocidad a lo largo del eje W.
¿Qué sucede si tomas en cuenta el movimiento del Sol alrededor de la galaxia?
¿No mostraría eso exactamente el mismo patrón? Si el sol se mueve a una velocidad x en la dirección W, ¿no significaría simplemente ajustar todas las velocidades estelares con una -x plana? ¿O hay alguna otra forma de ajustar las velocidades?
Supongo que podrías calcular un vector de velocidad media para una muestra de estrellas y restarlo. Esperaría que redujera el sesgo de todo el hemisferio y hiciera que las variaciones a menor escala fueran más fáciles de ver.
Si los cálculos son correctos ahora, suena como una buena idea para tener en cuenta este sesgo y obtener una fluctuación local más visible. Tal vez haya algún sesgo en los datos mismos. Sin embargo, todavía sospecho que este sesgo indica que queda algún error en mi enfoque que también haría que los datos locales fueran inútiles.
Tales preguntas son parte del proceso científico.