aboutsummaryrefslogtreecommitdiff
path: root/src/path.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/path.c')
-rw-r--r--src/path.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/src/path.c b/src/path.c
index 0aeb20b..340f8c7 100644
--- a/src/path.c
+++ b/src/path.c
@@ -35,7 +35,7 @@ double path_get_coefficient(unsigned int k, double *s, double *x, double theta0,
path *path_init(double *pos, double *dir, double T0, double range, double theta0, getKineticEnergyFunc *fun, void *params, double *z1, double *z2, size_t n, double m)
{
size_t i, j;
- double E, mom, beta, theta, phi;
+ double T, E, mom, theta, phi;
double normal[3], k[3], tmp[3], tmp2[3];
path *p = malloc(sizeof(path));
@@ -56,7 +56,7 @@ path *path_init(double *pos, double *dir, double T0, double range, double theta0
double *x = calloc(N,sizeof(double));
double *y = calloc(N,sizeof(double));
double *z = calloc(N,sizeof(double));
- double *T = calloc(N,sizeof(double));
+ double *beta = calloc(N,sizeof(double));
double *t = calloc(N,sizeof(double));
double *dx = calloc(N,sizeof(double));
double *dy = calloc(N,sizeof(double));
@@ -69,7 +69,12 @@ path *path_init(double *pos, double *dir, double T0, double range, double theta0
theta1[i] += z1[j]*foo(s[i],range,theta0,j+1);
theta2[i] += z2[j]*foo(s[i],range,theta0,j+1);
}
- T[i] = fun(s[i],params);
+
+ T = fun(s[i],params);
+ E = T + m;
+ mom = sqrt(E*E - m*m);
+ beta[i] = mom/E;
+
if (i > 0) {
theta = sqrt(theta1[i]*theta1[i] + theta2[i]*theta2[i]);
phi = atan2(theta2[i],theta1[i]);
@@ -79,11 +84,7 @@ path *path_init(double *pos, double *dir, double T0, double range, double theta0
dz[i] = (s[i]-s[i-1])*cos(theta);
/* Calculate total energy */
- E = T[i] + m;
- mom = sqrt(E*E - m*m);
- beta = mom/E;
-
- t[i] = t[i-1] + (s[i]-s[i-1])/(beta*SPEED_OF_LIGHT);
+ t[i] = t[i-1] + (s[i]-s[i-1])/(beta[i]*SPEED_OF_LIGHT);
x[i] = x[i-1] + dx[i];
y[i] = y[i-1] + dy[i];
@@ -168,7 +169,7 @@ path *path_init(double *pos, double *dir, double T0, double range, double theta0
p->x = x;
p->y = y;
p->z = z;
- p->T = T;
+ p->beta = beta;
p->t = t;
p->dx = dx;
p->dy = dy;
@@ -180,13 +181,13 @@ path *path_init(double *pos, double *dir, double T0, double range, double theta0
return p;
}
-void path_eval(path *p, double s, double *pos, double *dir, double *T, double *t, double *theta0)
+void path_eval(path *p, double s, double *pos, double *dir, double *beta, double *t, double *theta0)
{
pos[0] = interp1d(s,p->s,p->x,N);
pos[1] = interp1d(s,p->s,p->y,N);
pos[2] = interp1d(s,p->s,p->z,N);
- *T = interp1d(s,p->s,p->T,N);
+ *beta = interp1d(s,p->s,p->beta,N);
*t = interp1d(s,p->s,p->t,N);
/* Technically we should be interpolating between the direction vectors
@@ -214,7 +215,7 @@ void path_free(path *p)
free(p->x);
free(p->y);
free(p->z);
- free(p->T);
+ free(p->beta);
free(p->t);
free(p->dx);
free(p->dy);