Esempio n. 1
0
static int init_matrices(SINGLE_QSP_ARG_DECL)
{
	float *ptr;
	int i,j;

	if( c2p_dp == NULL ){
		warn("init_matrices: need to specify object for c2p_mat");
		return(-1);
	}
	if( p2c_dp == NULL ){
		warn("init_matrices: need to specify object for p2c_mat");
		return(-1);
	}
	ptr = (float *)OBJ_DATA_PTR(p2c_dp);
	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
			*ptr++ = p2c_mat[i][j];
	dp_copy(c2p_dp,p2c_dp);
	dt_invert(c2p_dp);
	ptr = (float *)OBJ_DATA_PTR(c2p_dp);
	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
			c2p_mat[i][j] = *ptr++;
	return(0);
}
Esempio n. 2
0
File: fbmenu.c Progetto: E-LLP/QuIP
static void fb_load(QSP_ARG_DECL Data_Obj *dp,int x, int y)
{
#ifdef HAVE_FB_DEV
	dimension_t i,j;
	/* char *p,*q; */	/* BUG probably a lot faster if we cast to long! */
	long *p,*q;
	u_long bytes_per_row, words_per_row;

	/* BUG assume dp is the right kind of object */

	if( ! IS_CONTIGUOUS(dp) ){
		sprintf(ERROR_STRING,"fb_load:  object %s must be contiguous",
			OBJ_NAME(dp));
		WARN(ERROR_STRING);
		return;
	}

	INSURE_FB("fb_load");

	p=(long *)OBJ_DATA_PTR(dp);
	q=(long *)OBJ_DATA_PTR(curr_fbip->fbi_dp);

	bytes_per_row = OBJ_COLS(dp) * OBJ_COMPS(dp);
	words_per_row = bytes_per_row / sizeof(long);

	for(i=0;i<OBJ_ROWS(dp);i++){
		/* BUG we need to correct the row ptr if dp is narrower than the display */
		for(j=0;j<words_per_row;j++)
			*q++ = *p++;
	}
#endif /* HAVE_FB_DEV */
}
Esempio n. 3
0
File: numrec.c Progetto: nasa/QuIP
void dp_jacobi(QSP_ARG_DECL  Data_Obj *v_dp, Data_Obj *d_dp, Data_Obj *a_dp, int *nrotp)
{
	void *a_rowlist[MAX_DIM], *v_rowlist[MAX_DIM];
	int n;

	if( OBJ_COLS(a_dp) != OBJ_ROWS(a_dp) ){
		sprintf(DEFAULT_ERROR_STRING,"dp_jacobi:  matrix %s must be square for jacobi",OBJ_NAME(a_dp));
		NWARN(DEFAULT_ERROR_STRING);
		return;
	}
	if( OBJ_COLS(v_dp) != OBJ_ROWS(v_dp) ){
		sprintf(DEFAULT_ERROR_STRING,"dp_jacobi:  matrix %s must be square for jacobi",OBJ_NAME(v_dp));
		NWARN(DEFAULT_ERROR_STRING);
		return;
	}
	if( OBJ_COLS(v_dp) != OBJ_COLS(a_dp) ){
		sprintf(DEFAULT_ERROR_STRING,"dp_jacobi:  size of eigenvector matrix %s must match input matrix %s for jacobi",
			OBJ_NAME(v_dp),OBJ_NAME(a_dp));
		NWARN(DEFAULT_ERROR_STRING);
		return;
	}
	if( OBJ_COLS(d_dp) != OBJ_COLS(a_dp) ){
		sprintf(DEFAULT_ERROR_STRING,"dp_jacobi:  size of eigenvalue vector %s must match input matrix %s for jacobi",
			OBJ_NAME(d_dp),OBJ_NAME(a_dp));
		NWARN(DEFAULT_ERROR_STRING);
		return;
	}
	if( ! IS_CONTIGUOUS(a_dp) ){
		sprintf(DEFAULT_ERROR_STRING,"dp_jacobi:  Object %s must be contiguous for jacobi",OBJ_NAME(a_dp));
		NWARN(DEFAULT_ERROR_STRING);
		return;
	}
	if( ! IS_CONTIGUOUS(d_dp) ){
		sprintf(DEFAULT_ERROR_STRING,"dp_jacobi:  Object %s must be contiguous for jacobi",OBJ_NAME(d_dp));
		NWARN(DEFAULT_ERROR_STRING);
		return;
	}
	if( ! IS_CONTIGUOUS(v_dp) ){
		sprintf(DEFAULT_ERROR_STRING,"dp_jacobi:  Object %s must be contiguous for jacobi",OBJ_NAME(v_dp));
		NWARN(DEFAULT_ERROR_STRING);
		return;
	}

	n = OBJ_COLS(a_dp);
	/* BUG make sure types match */

	if( OBJ_MACH_PREC(a_dp) == PREC_SP ){
		float_init_rowlist((float **)(void *)a_rowlist,a_dp);
		float_init_rowlist((float **)(void *)v_rowlist,v_dp);

		float_jacobi(((float **)(void *)a_rowlist)-1,n,((float *)(OBJ_DATA_PTR(d_dp)))-1,((float **)(void *)v_rowlist)-1,nrotp);
	} else if( OBJ_MACH_PREC(a_dp) == PREC_DP ){
		double_init_rowlist((double **)(void *)a_rowlist,a_dp);
		double_init_rowlist((double **)(void *)v_rowlist,v_dp);

		double_jacobi(((double **)(void *)a_rowlist)-1,n,((double *)(OBJ_DATA_PTR(d_dp)))-1,((double **)(void *)v_rowlist)-1,nrotp);
	} else {
		NWARN("bad precision in dp_jacobi");
	}
}
Esempio n. 4
0
File: numrec.c Progetto: nasa/QuIP
void dp_moment(QSP_ARG_DECL  Data_Obj *d_dp)
{
	/* std_type *d_rowlist[MAX_DIM]; */
	int n;
	if( ! IS_CONTIGUOUS(d_dp) ){
           	sprintf(DEFAULT_ERROR_STRING,"dp_moment:  Object %s must be contiguous for eigsrt",OBJ_NAME(d_dp));
                NWARN(DEFAULT_ERROR_STRING);
                return;
        }
	n = OBJ_COLS(d_dp);

	if( OBJ_MACH_PREC(d_dp) == PREC_SP ){
       		float adev, var, skew, curt;
		float ave, sdev;
	
		/* BUG - the results don't get passed out anywhere!?
		 */

		float_moment(((float *)(OBJ_DATA_PTR(d_dp))),n,&ave,&adev,&sdev,&var,&skew,&curt);
	} else if( OBJ_MACH_PREC(d_dp) == PREC_DP ){
       		double adev, var, skew, curt;
		double ave, sdev;
	
		double_moment(((double *)(OBJ_DATA_PTR(d_dp))),n,&ave,&adev,&sdev,&var,&skew,&curt);
	}
}
Esempio n. 5
0
File: fbmenu.c Progetto: E-LLP/QuIP
static void fb_save(QSP_ARG_DECL Data_Obj *dp,int x, int y)
{
#ifdef HAVE_FB_DEV
	dimension_t i,j,k;
	char *p,*q;

	/* BUG assume dp is the right kind of object */

	if( ! IS_CONTIGUOUS(dp) ){
		sprintf(ERROR_STRING,"fb_save:  object %s must be contiguous",
			OBJ_NAME(dp));
		WARN(ERROR_STRING);
		return;
	}

	INSURE_FB("fb_save");

	p=(char *)OBJ_DATA_PTR(dp);
	q=(char *)OBJ_DATA_PTR(curr_fbip->fbi_dp);

	/* BUG this byte-at-a-time copy is horribly inefficient */
	for(i=0;i<OBJ_ROWS(dp);i++)
		for(j=0;j<OBJ_COLS(dp);j++)
			for(k=0;k<OBJ_COMPS(dp);k++)
				*p++ = *q++;
#endif /* HAVE_FB_DEV */
}
Esempio n. 6
0
File: vinterp.c Progetto: nasa/QuIP
static float get_start_val(Data_Obj *source,Data_Obj *control,dimension_t index)
{
	float *f,*c,sum;
	int i=0;

	f = (float *)OBJ_DATA_PTR(source);
	f += index*OBJ_PXL_INC(source);
	c = (float *)OBJ_DATA_PTR(control);
	c += index*OBJ_PXL_INC(control);

	sum = 0.0;
	while( (((int)index)-i) >= 0 && *c == 1.0 && i < max_avg ){
		sum += *f;
		f -= OBJ_PXL_INC(source);
		c -= OBJ_PXL_INC(control);
		i++;
	}
#ifdef DEBUG
if( debug ){
sprintf(DEFAULT_ERROR_STRING,"get_start_val:  index = %d  n = %d  sum = %f",index,i,sum);
NADVISE(DEFAULT_ERROR_STRING);
}
#endif
	sum /= i;
	return(sum);
}
Esempio n. 7
0
File: ocl.c Progetto: nasa/QuIP
static int _ocl_obj_alloc(QSP_ARG_DECL  Data_Obj *dp, dimension_t size, int align )
{
	OBJ_DATA_PTR(dp) = ocl_mem_alloc(OBJ_PFDEV(dp), size, align );
	if( OBJ_DATA_PTR(dp) == NULL ){
		sprintf(ERROR_STRING,"ocl_obj_alloc:  error allocating memory for object %s!?",OBJ_NAME(dp));
		warn(ERROR_STRING);
		return -1;
	}
	return 0;
}
Esempio n. 8
0
File: acquire.c Progetto: nasa/QuIP
void convert_polh_vector(Data_Obj *flt_dp,Data_Obj *polh_dp)
{
	uint32_t i,j;
	short *rpdp;
	float *cvt_p;
	Fmt_Pt fp1;
	int station;

	if( OBJ_PREC(flt_dp) != PREC_SP ){
		sprintf(ERROR_STRING,"convert_polh_data:  object %s has precision %s, should be %s",
				OBJ_NAME(flt_dp),PREC_NAME(OBJ_PREC_PTR(flt_dp)),PREC_NAME(prec_for_code(PREC_SP)));
		warn(ERROR_STRING);
		return;
	}
	if( OBJ_COLS(flt_dp) != OBJ_COLS(polh_dp) ){
		sprintf(ERROR_STRING,"convert_polh_data:  vectors %s (%d) and %s (%d) do not have the same number of columns",
				OBJ_NAME(flt_dp),OBJ_COLS(flt_dp),OBJ_NAME(polh_dp),OBJ_COLS(polh_dp));
		warn(ERROR_STRING);
		return;
	}
	/* BUG should make sure that tdim of flt_dp is correct! */

	/* assume that the object has already been checked for proper dim, type... */

	if( n_active_stations == 2 )
		station=0;
	else if(n_active_stations < 1 ){
		warn("format_polh_vector:  no active stations!?");
		return;
	} else
		station=curr_station_idx;

	rpdp = (short *) OBJ_DATA_PTR(polh_dp);

	for(i=0;i<OBJ_COLS(polh_dp);i++){
		Polh_Record_Format *prfp;

		cvt_p = ((float *) OBJ_DATA_PTR(flt_dp)) + i * OBJ_PXL_INC(flt_dp);

		prfp = &station_info[station].sd_multi_prf;
		format_polh_data(&fp1,rpdp,prfp);
		for(j=0;j<prfp->rf_n_data;j++){
			Polh_Output_Type type;
			type = prfp->rf_output[j];
			convert_chunk(cvt_p,&fp1,type);
			cvt_p += od_tbl[type].od_strings;	/* BUG not the right variable?... */
		}
		rpdp += prfp->rf_n_words;
		if( n_active_stations == 2 )
			station ^= 1;
	}
}
Esempio n. 9
0
File: numrec.c Progetto: nasa/QuIP
void dp_zroots(Data_Obj *r_dp, Data_Obj *a_dp, int polish )
{
	int m,n;

	n=OBJ_COLS(a_dp);	/* polynomial degree + 1 */
	m=OBJ_COLS(r_dp);

	if( m != n-1 ){
		sprintf(DEFAULT_ERROR_STRING,
	"dp_zroots:  len of root vector %s (%d) inconsistent with coefficients vector %s (%d)",
			OBJ_NAME(r_dp),OBJ_COLS(r_dp),OBJ_NAME(a_dp),OBJ_COLS(a_dp));
		NWARN(DEFAULT_ERROR_STRING);
		return;
	}

	/* BUG make sure are row vectors */

	if(OBJ_ROWS(a_dp) != 1 ){
		sprintf(DEFAULT_ERROR_STRING,"dp_zroots:  coefficient vector %s should be a row vector, (rows = %d)!?",
			OBJ_NAME(a_dp),OBJ_ROWS(a_dp));
		NWARN(DEFAULT_ERROR_STRING);
		return;
	}
	if( OBJ_ROWS(r_dp) != 1 ){
		sprintf(DEFAULT_ERROR_STRING,"dp_zroots:  root vector %s should be a row vector, (rows = %d)!?",
			OBJ_NAME(r_dp),OBJ_ROWS(r_dp));
		NWARN(DEFAULT_ERROR_STRING);
		return;
	}

	/* BUG make sure all vectors have same precision */

	if( OBJ_MACH_PREC(a_dp) == PREC_SP ){
		/* Why do we subtract 1 from the address of the roots, but not
		 * the coefficients!?
		 */

		float_zroots(
			((fcomplex *)OBJ_DATA_PTR(a_dp))/*-1*/,
			m,
			((fcomplex *)OBJ_DATA_PTR(r_dp))-1,
			polish);

	} else if( OBJ_MACH_PREC(a_dp) == PREC_DP ){
		double_zroots( ((dcomplex *)OBJ_DATA_PTR(a_dp))-1,m,((dcomplex *)OBJ_DATA_PTR(r_dp))-1,polish);
	}
	else {
		NWARN("bad machine precision in dp_zroots");
	}
}
Esempio n. 10
0
File: acquire.c Progetto: nasa/QuIP
void format_polh_vector(Data_Obj *dp)
{
	uint32_t i;
	short *rpdp;
	Fmt_Pt fp1;
	int station;

	/* assume that the object has already been checked for proper dim, type... */

	if( n_active_stations == 2 )
		station=0;
	else if(n_active_stations < 1 ){
		warn("format_polh_vector:  no active stations!?");
		return;
	} else
		station=curr_station_idx;

	rpdp = (short *) OBJ_DATA_PTR(dp);
	for(i=0;i<OBJ_COLS(dp);i++){
		Polh_Record_Format *prfp;

		prfp = &station_info[station].sd_multi_prf;
		format_polh_data(&fp1,rpdp,prfp);
		display_formatted_point(QSP_ARG  &fp1,prfp);
		rpdp += prfp->rf_n_words;
		if( n_active_stations == 2 )
			station ^= 1;
	}
}
Esempio n. 11
0
void _convolve(QSP_ARG_DECL  Data_Obj *dpto,Data_Obj *dpfr,Data_Obj *dpfilt)
{
	dimension_t i,j;
	float val, *frptr;
	dimension_t yos, offset;

	// where is the other error checking done???
	INSIST_RAM_OBJ(dpto,convolve)
	INSIST_RAM_OBJ(dpfr,convolve)
	INSIST_RAM_OBJ(dpfilt,convolve)

	img_clear(dpto);

	frptr = (float *) OBJ_DATA_PTR(dpfr);
	j=OBJ_ROWS(dpto);
	while(j--){
		yos = j * OBJ_ROW_INC(dpfr);
		i=OBJ_COLS(dpfr);
		while(i--){
			offset = yos+i*OBJ_PXL_INC(dpfr);
			val = *(frptr+offset);
			add_impulse(val,dpto,dpfilt,i,j);
		}
	}
}
Esempio n. 12
0
int get_framerate_strings( QSP_ARG_DECL  Data_Obj *str_dp, PGR_Cam *pgcp )
{
	// Could check format of object here...
	// Should be string table with enough entries to hold the modes
	// Should the strings be rows or multidim pixels?

	int i, n;

	if( OBJ_COLS(str_dp) < pgcp->pc_framerates.num ){
		sprintf(ERROR_STRING,"String object %s has too few columns (%ld) to hold %d framerates",
			OBJ_NAME(str_dp),(long)OBJ_COLS(str_dp),pgcp->pc_framerates.num);
		WARN(ERROR_STRING);
		n = OBJ_COLS(str_dp);
	} else {
		n=pgcp->pc_framerates.num;
	}
		
	for(i=0;i<n;i++){
		const char *src;
		char *dst;

		src = name_for_framerate(pgcp->pc_framerates.framerates[i]);
		dst = OBJ_DATA_PTR(str_dp);
		dst += i * OBJ_PXL_INC(str_dp);
		if( strlen(src)+1 > OBJ_COMPS(str_dp) ){
			sprintf(ERROR_STRING,"String object %s has too few components (%ld) to hold framerate string \"%s\"",
				OBJ_NAME(str_dp),(long)OBJ_COMPS(str_dp),src);
			WARN(ERROR_STRING);
		} else {
			strcpy(dst,src);
		}
	}
	return n;
}
Esempio n. 13
0
static Data_Obj *make_1394frame_obj(QSP_ARG_DECL  dc1394video_frame_t *framep)
{
	Dimension_Set dimset;
	Data_Obj *dp;
	char fname[32];

	sprintf(fname,"_frame%d",framep->id);

	dimset.ds_dimension[0] = 1;	/* 1 or two depending on video mode (8 or 16) */
	dimset.ds_dimension[1] = framep->size[0];
	dimset.ds_dimension[2] = framep->size[1];
	dimset.ds_dimension[3] = 1;
	dimset.ds_dimension[4] = 1;

	dp = _make_dp(QSP_ARG  fname,&dimset,PREC_FOR_CODE(PREC_UBY));

	/* Do we need to test for a good return value??? */
	/* Only one buffer?  where do we specify the index? BUG */
	SET_OBJ_DATA_PTR(dp, framep->image);
if( verbose )
fprintf(stderr,"Object %s, data ptr set to 0x%lx\n",OBJ_NAME(dp),(long)OBJ_DATA_PTR(dp));

	if( framep->total_bytes != framep->image_bytes ){
		sprintf(DEFAULT_ERROR_STRING,"image may be padded...");
		warn(DEFAULT_ERROR_STRING);
	}

	return(dp);
}
Esempio n. 14
0
File: ocl.c Progetto: nasa/QuIP
static void _ocl_obj_free(QSP_ARG_DECL  Data_Obj *dp)
{
	cl_int		ret;

	ret = clReleaseMemObject( (cl_mem) OBJ_DATA_PTR(dp) ); //free memory on device
	// BUG check return value
}
Esempio n. 15
0
File: numrec.c Progetto: nasa/QuIP
static void float_sort_svd_eigenvectors(Data_Obj *u_dp, Data_Obj *w_dp, Data_Obj *v_dp)
{
	//SORT_EIGENVECTORS(float)
	dimension_t i,n;
	u_long *index_data;

	n = OBJ_COLS(w_dp);

	index_dp = mkvec("svd_tmp_indices",n,1,PREC_UDI);
	if( index_dp == NULL ){
		NWARN("Unable to create index object for sorting SVD eigenvalues");
		return;
	}

	sort_indices(index_dp,w_dp);
	/* sorting is done from smallest to largest */

	j=0;
	index_data = OBJ_DATA_PTR(index_dp);

	/* We should only have to have 1 column of storage to permute things,
	 * but life is simplified if we copy the data...
	 */

	for(i=n-1;i>=0;i--){
		k= *(index_data+i);
	}
}
Esempio n. 16
0
void gpu_obj_dnload(QSP_ARG_DECL  Data_Obj *dpto,Data_Obj *dpfr)
{
	size_t siz;

	CHECK_RAM("gpu_obj_dnload","destination",dpto)
	CHECK_NOT_RAM("gpu_obj_dnload","source",dpfr)
	CHECK_CONTIG_DATA("gpu_obj_dnload","source",dpfr)
	CHECK_CONTIG_DATA("gpu_obj_dnload","destination",dpto)
	CHECK_SAME_SIZE(dpto,dpfr,"gpu_obj_dnload")
	CHECK_SAME_PREC(dpto,dpfr,"gpu_obj_dnload")

	/* TEST - does this work for bitmaps? */
	siz = OBJ_N_MACH_ELTS(dpto) * PREC_SIZE( OBJ_PREC_PTR(dpto) );

	gpu_mem_dnload(QSP_ARG  OBJ_DATA_PTR(dpto), OBJ_DATA_PTR(dpfr), siz );
}
Esempio n. 17
0
File: acquire.c Progetto: nasa/QuIP
void read_polh_vector(QSP_ARG_DECL  Data_Obj *dp)
{
	void *raw_pdp;
	int records_to_read;
	int station;
	static Polh_Read_Info pri1;

	if( polh_continuous ){
		WARN("start_async_read:  polhemus is already in continuous mode!?");
	} else	{
//advise("read_polh_vector:  starting continuous mode");
		start_continuous_mode();
//WARN("read_polh_vector:  exiting before reading for debugging purposes!");
		//return;

	}

	if( ! good_polh_vector(QSP_ARG  dp) ) return;

	raw_pdp = OBJ_DATA_PTR(dp);
	records_to_read = OBJ_N_MACH_ELTS(dp) / station_info[ curr_station_idx ].sd_multi_prf.rf_n_words;
//fprintf(stderr,"Will attempt to read %d records...\n",records_to_read);

	/* BUG station login assumes max 2 stations as in insidetrak... */
	if( n_active_stations == 2 ){
		station=0;
	} else if( n_active_stations == 1 )
		station = curr_station_idx;
	else {
		sprintf(ERROR_STRING,"read_polh_vector:  number of active stations (%d) should be 1 or 2",
				n_active_stations);
		WARN(ERROR_STRING);
		return;
	}

#ifdef THREAD_SAFE_QUERY
	pri1.pri_qsp = THIS_QSP;
#endif // THREAD_SAFE_QUERY
	pri1.pri_n_requested = records_to_read;
	pri1.pri_n_obtained = 0;
	pri1.pri_addr = raw_pdp;
	pri1.pri_station = station;

	halting=0;

//sprintf(ERROR_STRING,"read_polh_vector:  _read_async = %d",_read_async);
//advise(ERROR_STRING);

	if( _read_async ){
advise("read_polh_vector:  calling start_data_thread");
		start_data_thread(&pri1);
	} else {
advise("read_polh_vector:  calling transfer_polh_data");
		transfer_polh_data(&pri1);
	}
}
Esempio n. 18
0
File: cu2.c Progetto: E-LLP/QuIP
static void cu2_mem_free(QSP_ARG_DECL  Data_Obj *dp)
{
	cudaError_t e;

	// GLOBAL
	e = cudaFree(OBJ_DATA_PTR(dp));
	if( e != cudaSuccess ){
		describe_cuda_driver_error2("release_data","cudaFree",e);
	}
}
Esempio n. 19
0
File: numrec.c Progetto: nasa/QuIP
void double_init_rowlist(double **list, Data_Obj *dp)
{
	unsigned i;
	double *fbase;

	fbase = ((double *)OBJ_DATA_PTR(dp));
	fbase --;				/* for numrec fortran indices */
	for(i=0;i<OBJ_ROWS(dp);i++)
		*list++ = fbase + i*OBJ_ROW_INC(dp); /* ??? *dp->dt_pinc; */
}
Esempio n. 20
0
File: numrec.c Progetto: nasa/QuIP
void dp_choldc(Data_Obj *a_dp, Data_Obj *p_dp)
{
	unsigned m, n;
	void *a_rowlist[MAX_DIM];
	/*
	n=OBJ_ROWS(a_dp);

	if( n > MAX_DIM ){
		NWARN("Sorry, MAX dimension exceeded in dp_choldc");
		sprintf(DEFAULT_ERROR_STRING,"dp_choldc:  MAX_DIM = %d, n = %d", MAX_DIM,n);
		NADVISE(DEFAULT_ERROR_STRING);
		return;
	}
	*/
	n=OBJ_COLS(a_dp);
	m=OBJ_ROWS(a_dp);

	if( n > MAX_DIM || m > MAX_DIM ){
		NWARN("Sorry, MAX dimension exceeded in dp_choldc");
		sprintf(DEFAULT_ERROR_STRING,"dp_choldc:  MAX_DIM = %d, n = %d, m = %d",
			MAX_DIM,n,m);
		NADVISE(DEFAULT_ERROR_STRING);
		return;
	}

	printf("nrmenu:numrec.c data %f\n", *((float *)OBJ_DATA_PTR(a_dp)));
	
	
	if( OBJ_MACH_PREC(a_dp) == PREC_SP ){
		float_init_rowlist((float **)(void *)a_rowlist,a_dp);

		float_choldc(((float **)(void *)a_rowlist)-1,n,((float *)OBJ_DATA_PTR(p_dp))-1);
		
	} else if( OBJ_MACH_PREC(a_dp) == PREC_DP ){
		double_init_rowlist((double **)(void *)a_rowlist,a_dp);

		double_choldc(((double **)(void *)a_rowlist)-1,n,((double *)OBJ_DATA_PTR(p_dp))-1);
	}
	else {
		NWARN("bad machine precision in dp_choldc");
	}
	
}
Esempio n. 21
0
File: glmenu.c Progetto: nasa/QuIP
static COMMAND_FUNC( do_sv_mv_mat )
{
	Data_Obj *dp;

	const char *matrix = NAMEOF("matrix type");
	dp=pick_obj("matrix object");
	if( dp == NULL ) return;

	/* BUG check size & type here */

	if((strcmp(matrix,"modelview"))&&(strcmp(matrix,"projection"))){
		advise("Valid types of matrices are:	'modelview'	'projection'");
		return;
	}

	if (!(strcmp(matrix, "modelview")))
		glGetFloatv(GL_MODELVIEW_MATRIX,(GLfloat *)OBJ_DATA_PTR(dp));
	if (!(strcmp(matrix, "projection")))
		glGetFloatv(GL_PROJECTION_MATRIX,(GLfloat *)OBJ_DATA_PTR(dp));
}
Esempio n. 22
0
File: vinterp.c Progetto: nasa/QuIP
static float get_end_val(Data_Obj *source,Data_Obj *control,dimension_t index)
{
	float *f,*c,sum;
	int i=0;

	f = (float *)OBJ_DATA_PTR(source);
	f += index*OBJ_PXL_INC(source);
	c = (float *)OBJ_DATA_PTR(control);
	c += index*OBJ_PXL_INC(control);

	sum = 0.0;
	while( (index+i) < OBJ_COLS(source) && *c == 1.0 && i < max_avg ){
		sum += *f;
		f += OBJ_PXL_INC(source);
		c += OBJ_PXL_INC(control);
		i++;
	}
	sum /= i;
	return(sum);
}
Esempio n. 23
0
void add_impulse(double amp,Data_Obj *image_dp,Data_Obj *ir_dp,posn_t x,posn_t y)
{
	float *image_ptr, *irptr;
	incr_t i,j;
	incr_t yos,xos,offset;		/* offsets into image */
	incr_t iryos,iros;	/* offsets into impulse response */
	incr_t pinc, ir_pinc;

	pinc = OBJ_PXL_INC(image_dp);
	ir_pinc = OBJ_PXL_INC(ir_dp);

	image_ptr = (float *) OBJ_DATA_PTR(image_dp);
	irptr = (float *) OBJ_DATA_PTR(ir_dp);
	
	j=OBJ_ROWS(ir_dp);
	while( j-- ){			/* foreach impulse row */
		yos = ((y+j)-OBJ_ROWS(ir_dp)/2);
#ifdef NOWRAP
		if( yos < 0 || yos >= (incr_t) OBJ_ROWS(image_dp) ) continue;
#else
		if( yos < 0 ) yos+=OBJ_ROWS(image_dp);
		else if( yos >= OBJ_ROWS(image_dp) ) yos-=OBJ_ROWS(image_dp);
#endif /* NOWRAP */
		yos *= OBJ_ROW_INC(image_dp);
		iryos = j * OBJ_ROW_INC(ir_dp);
		i=OBJ_COLS(ir_dp);
		while(i--){
			xos = ((x+i)-OBJ_COLS(ir_dp)/2);
#ifdef NOWRAP
			if( xos < 0 || xos >= (incr_t) OBJ_COLS(image_dp) ) continue;
#else
			if( xos < 0 ) xos+=OBJ_COLS(image_dp);
			else if( xos >= OBJ_COLS(image_dp) ) xos-=OBJ_COLS(image_dp);
#endif /* NOWRAP */
			offset = (yos + xos*pinc);
			iros = (iryos + i*ir_pinc);

			*(image_ptr+offset) += *(irptr+iros) * amp;
		}
	}
}
Esempio n. 24
0
void gpu_obj_upload(QSP_ARG_DECL  Data_Obj *dpto, Data_Obj *dpfr)
{
	size_t siz;

	CHECK_NOT_RAM("do_gpu_obj_upload","destination",dpto)
	CHECK_RAM("do_gpu_obj_upload","source",dpfr)
	CHECK_CONTIG_DATA("do_gpu_obj_upload","source",dpfr)
	CHECK_CONTIG_DATA("do_gpu_obj_upload","destination",dpto)
	CHECK_SAME_SIZE(dpto,dpfr,"do_gpu_obj_upload")
	CHECK_SAME_PREC(dpto,dpfr,"do_gpu_obj_upload")

#ifdef FOOBAR
	if( IS_BITMAP(dpto) )
		siz = BITMAP_WORD_COUNT(dpto) * PREC_SIZE( PREC_FOR_CODE(BITMAP_MACH_PREC) );
	else
		siz = OBJ_N_MACH_ELTS(dpto) * PREC_SIZE( OBJ_MACH_PREC_PTR(dpto) );
#endif /* FOOBAR */
	siz = OBJ_N_MACH_ELTS(dpto) * PREC_SIZE( OBJ_MACH_PREC_PTR(dpto) );

	gpu_mem_upload(QSP_ARG  OBJ_DATA_PTR(dpto), OBJ_DATA_PTR(dpfr), siz );
}
Esempio n. 25
0
File: glmenu.c Progetto: nasa/QuIP
static COMMAND_FUNC( do_mul_mat )
{
	Data_Obj *dp;

	dp=pick_obj("matrix object");
	if( dp == NULL ) return;

	/* BUG check size & type here */

	if( debug & gl_debug ) advise("glMultMatrixf");
	glMultMatrixf((GLfloat *)OBJ_DATA_PTR(dp));
}
Esempio n. 26
0
int cu2_map_buf(QSP_ARG_DECL  Data_Obj *dp)
{
	cudaError_t e;

	e = cudaGLMapBufferObject( &OBJ_DATA_PTR(dp),  OBJ_BUF_ID(dp) );
	if( e != cudaSuccess ){
		describe_cuda_driver_error2("cu2_map_buf",
				"cudaGLMapBufferObject",e);
		return -1;
	}
	return 0;
}
Esempio n. 27
0
File: acquire.c Progetto: nasa/QuIP
void assign_polh_var_data(char *varname, Data_Obj *dp, Polh_Output_Type type, int index )
{
	short *rpdp;
	Fmt_Pt fp1;
	Polh_Record_Format *prfp;
	char str[64];
	char *s,*s2;
	int i;

	if( OBJ_COLS(dp) != 1 ){
		sprintf(ERROR_STRING,"assign_polh_var_data:  object %s has %d columns, should be 1",
				OBJ_NAME(dp),OBJ_COLS(dp));
		warn(ERROR_STRING);
		return;
	}

	rpdp = (short *) OBJ_DATA_PTR(dp);
	prfp = &station_info[curr_station_idx].sd_multi_prf;
	format_polh_data(&fp1,rpdp,prfp);
	separator="";	/* no leading tab before the first record */
	if( fmt_one(msg_str,&fp1,type) < 0 )
		return;
	s=msg_str;
	i=index;
	while(i--){
		while( *s!=0 && !isspace(*s) ) s++;	/* skip data */
		while( *s!=0 && isspace(*s) ) s++;	/* skip spaces */
	}
#ifdef CAUTIOUS
	if( *s == 0 ){
		sprintf(ERROR_STRING,"CAUTIOUS:  assign_polh_var_data:  not enough words for index %d",
				index);
		warn(ERROR_STRING);
		sprintf(ERROR_STRING,"formatted string:  %s",msg_str);
		advise(ERROR_STRING);
		return;
	}
#endif /* CAUTIOUS */

	/* we have to do this check in case index is zero, so the check for leading spaces hasn't been
	 * performed above.  This is an issue with  milliseconds, where a leading space may appear
	 * in the string for values less than 100.
	 */
	while( *s!=0 && isspace(*s) ) s++;	/* skip any leading spaces */

	s2 = str;
	while( *s != 0 && !isspace(*s) )
		*s2++ = *s++;
	*s2=0;				/* BUG should check for overflow */

	assign_var(varname,str);

} /* end assign_polh_var_data */
Esempio n. 28
0
File: obj.c Progetto: hbcbh1999/ngs
VALUE make_hash(size_t start_buckets) {
	VALUE ret;
	HASH_OBJECT *hash;
	hash = NGS_MALLOC(sizeof(*hash));
	assert(hash);

	SET_OBJ(ret, hash);
	OBJ_TYPE_NUM(ret) = T_HASH;

	if(start_buckets) {
		OBJ_DATA_PTR(ret) = NGS_MALLOC(start_buckets * sizeof(HASH_OBJECT_ENTRY *));
		memset(OBJ_DATA_PTR(ret), 0, start_buckets * sizeof(HASH_OBJECT_ENTRY *)); // XXX check if needed
	} else {
		OBJ_DATA_PTR(ret) = NULL;
	}
	HASH_BUCKETS_N(ret) = start_buckets;
	HASH_HEAD(ret) = NULL;
	HASH_TAIL(ret) = NULL;
	OBJ_LEN(ret) = 0;

	return ret;
}
Esempio n. 29
0
// BUG this assumes contiguity
void unity(Data_Obj *mp)				/**/
{
	dimension_t i,j;
	float *f;

	f=(float *)OBJ_DATA_PTR(mp);
	for(i=0;i<OBJ_COLS(mp);i++){
		for(j=0;j<OBJ_COLS(mp);j++){
			if(i==j) *f++ = 1.0;
			else *f++ = 0.0;
		}
	}
}
Esempio n. 30
0
File: acquire.c Progetto: nasa/QuIP
static int parse_polh_reading( QSP_ARG_DECL  Data_Obj *dp, char * s )
{
	char str[32];
	float *f_p;

#ifdef QUIP_DEBUG
if( debug & debug_polhemus ){
sprintf(ERROR_STRING,"parse_polh_reading \"%s\"",show_printable(DEFAULT_QSP_ARG  s));
advise(ERROR_STRING);
}
#endif /* QUIP_DEBUG */

	if( OBJ_PREC(dp) != PREC_SP ){
		sprintf(ERROR_STRING,"Object %s has %s precision, should be %s",
			OBJ_NAME(dp),
			PREC_NAME(OBJ_PREC_PTR(dp)),
			PREC_NAME(prec_for_code(PREC_SP)) );
		warn(ERROR_STRING);
		return(-1);
	}
	if( ! IS_CONTIGUOUS(dp) ){
		sprintf(ERROR_STRING,"Object %s should be contiguous",OBJ_NAME(dp));
		warn(ERROR_STRING);
		return(-1);
	}
	if( OBJ_N_MACH_ELTS(dp) < 6 ){
		sprintf(ERROR_STRING,"Object %s should have at least 6 elements",OBJ_NAME(dp));
		warn(ERROR_STRING);
		return(-1);
	}

	f_p = OBJ_DATA_PTR(dp);

	if( sscanf(s,"%s %f %f %f %f %f %f",str,
		f_p+0,
		f_p+1,
		f_p+2,
		f_p+3,
		f_p+4,
		f_p+5
		) != 7 ){
		sprintf(ERROR_STRING,"Error scanning polhemus data string");
		warn(ERROR_STRING);
		sprintf(ERROR_STRING,"String:  \"%s\"",show_printable(DEFAULT_QSP_ARG  s));
		advise(ERROR_STRING);
		return(-1);
	}
	return(0);
}