[Spice_discussion] ITOKAWA plate model
Naru HIRATA
narunaru at kobe-u.ac.jp
Sat Jun 25 01:14:23 PDT 2005
Hi,
I have two problems on the platelib of SPICE.
I found that the routine 'PLBORE' returns an error at the particular
combination of a viewing positon and a LOS vector, i.e.
>================================================================================
>
>Toolkit version: N0058
>
>SPICE(NOTINGRID) --
>
>Ray origin not in voxel grid.
>
>A traceback follows. The name of the highest level module is first.
>PLBORE --> XDDA
>
>Oh, by the way: The SPICELIB error handling actions are USER-TAILORABLE. You
>can choose whether the Toolkit aborts or continues when errors occur, which
>error messages to output, and where to send the output. Please read the ERROR
>"Required Reading" file, or see the routines ERRACT, ERRDEV, and ERRPRT.
>
>================================================================================
I used this plate kernel of ITOKAWA:
ftp://naif.jpl.nasa.gov/pub/naif/generic_kernels/plate_model/itokawa_4092.xfr.gz
attached is a simple source code that reproduces this situation. This tool
just check whether a input LOS intersects the plate model or not with
'PLBORE'
This is an example of parameters with which the error occurs.
>S/C Position [X]: -6.284127
>S/C Position [Y]: -1.641772
>S/C Position [Z]: 1.619403
>LOS vector [X]: 0.11139436
>LOS vector [Y]: 0.03353800
>LOS vector [Z]: -0.0297569
The expected result is "not found", but the 'NOTINGRID' error has ocuured
with a parameters close to the above values. The problematic parameters
seem to be limitted to narrow range (about 0.00000001 for LOS, 0.000001 for
position).
Another question is also related to the error.
I want to skip a parameter with that error, so set the error handling mode
to "RETURN" with
> erract_c ("SET",STRLEN,"RETURN");
to return on the entry point and to continue a process.
However, the program doesn't return to the main function after error.
Am I misunderstanding something on error handling of SPICE?
Thank you,
--
Naru HIRATA
Graduate School of Science and Technology,
Kobe University, Nada, Kobe 657-8501, Japan
tel: +81-78-803-6566, fax: +81-78-803-6483
e-mail: narunaru at kobe-u.ac.jp
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "SpiceUsr.h"
#define STRLEN 32
extern void rdplat_( SpiceChar [], SpiceInt);
extern void plbore_( SpiceDouble [], SpiceDouble [], SpiceInt *, SpiceInt *, SpiceDouble [], SpiceBoolean *);
extern void nthpun_( SpiceInt *, SpiceDouble []);
main(int argc, char *argv[]) {
SpiceDouble SC_pos_bd[3];
SpiceDouble bsight_bd [3]; //boresight vector
SpiceChar instr[STRLEN];
SpiceInt PLID;
SpiceInt BODY;
SpiceDouble point[3];
SpiceBoolean found;
erract_c ("SET",STRLEN,"RETURN");
rdplat_( "itokawa_4092.bpm" , STRLEN);
while (1) {
//input a S/C position in the body-fixed frame
prompt_c ( "S/C Position [X]: ", STRLEN, instr );
SC_pos_bd[0] = atof(instr);
prompt_c ( "S/C Position [Y]: ", STRLEN, instr );
SC_pos_bd[1] = atof(instr);
prompt_c ( "S/C Position [Z]: ", STRLEN, instr );
SC_pos_bd[2] = atof(instr);
//input a camera LOS vector in the body-fixed frame
prompt_c ( "LOS vector [X]: ", STRLEN, instr );
bsight_bd[0] = atof(instr);
prompt_c ( "LOS vector [Y]: ", STRLEN, instr );
bsight_bd[1] = atof(instr);
prompt_c ( "LOS vector [Z]: ", STRLEN, instr );
bsight_bd[2] = atof(instr);
plbore_ ( SC_pos_bd, bsight_bd, &PLID, &BODY, point, &found );
if ( found ) {
printf ( "PLID : %d \n", PLID );
printf ( "BODY : %d \n", BODY);
printf ("Intercept point %f %f %f\n", point[0],point[1],point[2]);
}
else {
printf ( "No Intercept point.\n" );
}
}
}
More information about the Spice_discussion
mailing list