// Copyright 2020, the Aether Development Team (see doc/dev_team.md for members) // Full license can be found in License.md #ifndef INCLUDE_TRANSFORM_H_ #define INCLUDE_TRANSFORM_H_ // The armadillo library is to allow the use of 3d cubes and other // array types, with array math built in. This eliminates loops! #include #include "aether.h" using namespace arma; std::string mklower(std::string inString); std::string mkupper(std::string inString); void copy_cube_to_array(arma_cube cube_in, precision_t *array_out); void copy_mat_to_array(arma_mat mat_in, precision_t *array_out, bool isFortran); void copy_array_to_mat(precision_t *array_in, arma_mat &mat_out, bool isFortran); void copy_vector_to_array(std::vector vector_in, int64_t nElements, precision_t *array_out); // This is needed when sending strings to Fortran. // We do this by copying the ascii numbers into an integer array, // then in fortran copy them back into a character array. int* copy_string_to_int(std::string inString); arma_cube calc_magnitude(std::vector xyz); std::vector transform_llr_to_xyz_3d(std::vector llr); std::vector transform_xyz_to_llr_3d(std::vector xyz); std::vector rotate_around_x_3d(std::vector XYZ_in, precision_t angle); std::vector rotate_around_y_3d(std::vector XYZ_in, precision_t angle); std::vector rotate_around_z_3d(std::vector XYZ_in, precision_t angle); void transform_llr_to_xyz(precision_t llr_in[3], precision_t xyz_out[3]); void transform_rot_z(precision_t xyz_in[3], precision_t angle_in, precision_t xyz_out[3]); void transform_rot_y(precision_t xyz_in[3], precision_t angle_in, precision_t xyz_out[3]); void transform_float_vector_to_array(std::vector input, precision_t output[3]); void transform_vector_xyz_to_env(precision_t xyz_in[3], precision_t lon, precision_t lat, precision_t env_out[3]); // These are not really transformations, but are placeholders void vector_diff(precision_t vect_in_1[3], precision_t vect_in_2[3], precision_t vect_out[3]); // ----------------------------------------------------------------------- // Simple 3-element vector addition // ----------------------------------------------------------------------- void vector_add(precision_t vect_in_1[3], precision_t vect_in_2[3], precision_t vect_out[3]); #endif // INCLUDE_TRANSFORM_H_