- Added Sycamore protocol and command context to SICS
- Added sinfo to SICS - Added driver for TCP/IP Astrium velocity selector - Added driver for TCP/IP Astrium chopper controller SKIPPED: psi/amor2t.c psi/amorstat.c psi/dornier2.c psi/ecb.c psi/el734hp.c psi/fowrite.c psi/libpsi.a psi/make_gen psi/nextrics.c psi/pardef.c psi/pimotor.c psi/pipiezo.c psi/polterwrite.c psi/psi.c psi/scontroller.c psi/serial.c psi/tasinit.c psi/tasscan.c psi/tcpdocho.c psi/tcpdornier.c psi/tricssupport.c psi/velodornier.c
This commit is contained in:
53
fourlib.c
53
fourlib.c
@ -450,6 +450,59 @@ double sign(double a, double b){
|
||||
return -ABS(a);
|
||||
}
|
||||
}
|
||||
/*--------------------------------------------------------------------*/
|
||||
static void makeNull(double *gamma, double *om, double *nu){
|
||||
*gamma = .0;
|
||||
*om = .0;
|
||||
*nu = .0;
|
||||
}
|
||||
/*---------------------------------------------------------------------*/
|
||||
int z1mToNormalBeam(double lambda, MATRIX z1m, double *gamma, double *om, double *nu){
|
||||
MATRIX dum, znew;
|
||||
double d, a, b, sint, theta, omdeg;
|
||||
int status;
|
||||
|
||||
status = calcTheta(lambda,z1m,&d,&theta);
|
||||
if(!status){
|
||||
makeNull(gamma,om,nu);
|
||||
return status;
|
||||
}
|
||||
|
||||
/* Everything on omega axis is blind: test for this */
|
||||
a = sqrt(z1m[0][0] * z1m[0][0] + z1m[1][0] * z1m[1][0]);
|
||||
if(ABS(a) < .0001) {
|
||||
makeNull(gamma,om,nu);
|
||||
return 0;
|
||||
}
|
||||
|
||||
sint = sin(theta/RD);
|
||||
b = 2.*sint*sint/(lambda*a);
|
||||
if(b >= 1.) {
|
||||
makeNull(gamma,om,nu);
|
||||
return 0;
|
||||
}
|
||||
a = -atan2(z1m[1][0], -z1m[0][0]);
|
||||
b = -asin(b);
|
||||
*om = a + b;
|
||||
omdeg = *om*RD;
|
||||
dum = mat_creat(3,3,ZERO_MATRIX);
|
||||
phimat(dum,omdeg);
|
||||
znew = mat_mul(dum,z1m);
|
||||
if(znew[0][0] < 0) {
|
||||
*om = *om -2.*atan2(-znew[0][0], -znew[2][0]);
|
||||
omdeg = *om * RD;
|
||||
}
|
||||
b = (sign(180.,omdeg)+ omdeg)/360.;
|
||||
/* omdeg = omdeg - 360. * floor(b); */
|
||||
*nu = asin(lambda*z1m[2][0]);
|
||||
*gamma = acos(cos(2.*(theta/RD)))/cos(*nu);
|
||||
*om = omdeg;
|
||||
*nu = *nu * RD;
|
||||
*gamma = *gamma * RD;
|
||||
mat_free(dum);
|
||||
mat_free(znew);
|
||||
return 1;
|
||||
}
|
||||
/*----------------------------------------------------------------------*/
|
||||
int bisToNormalBeam(double twotheta, double omega, double chi, double phi,
|
||||
double *omeganb, double *gamma, double *nu){
|
||||
|
Reference in New Issue
Block a user