#ifndef __GPUBPTOOL_CUH___
#define __GPUBPTOOL_CUH___


#include "BaseConstVariable.h"
#include "GPUTool.cuh"
#include <cuda_runtime.h>
#include <device_launch_parameters.h>
#include <cublas_v2.h>
#include <cuComplex.h>
#include "GPUTool.cuh"


extern __device__  double angleBetweenVectors(Vector3 a, Vector3 b, bool returnDegrees = false);
extern __device__  Vector3 vec_sub(Vector3 a, Vector3 b);
extern __device__  double vec_dot(Vector3 a, Vector3 b);
extern __device__  Vector3 vec_cross(Vector3 a, Vector3 b);
extern __device__  Vector3 vec_normalize(Vector3 v);
extern __device__  Vector3 compute_T(Vector3 S, Vector3 ray_dir, double H);
extern __device__  Vector3 compute_P(Vector3 S, Vector3 T, double R, double H );


extern __device__  double angleBetweenVectors_single(Vector3_single a, Vector3_single b, bool returnDegrees = false);
extern __device__  Vector3_single vec_sub_single(Vector3_single a, Vector3_single b);
extern __device__  float vec_dot_single(Vector3_single a, Vector3_single b);
extern __device__  Vector3_single vec_cross_single(Vector3_single a, Vector3_single b);

#endif