(file) Return to do_one_limbfit_ann.c CVS log (file) (dir) Up to [Development] / JSOC / proj / limbfit / apps

File: [Development] / JSOC / proj / limbfit / apps / do_one_limbfit_ann.c (download)
Revision: 1.3, Tue Jan 20 12:57:10 2015 UTC (8 years, 8 months ago) by scholl
Branch: MAIN
CVS Tags: Ver_LATEST, Ver_9-5, Ver_9-41, Ver_9-4, Ver_9-3, Ver_9-2, Ver_9-1, Ver_9-0, Ver_8-8, Ver_8-7, Ver_8-12, Ver_8-11, Ver_8-10, HEAD
Changes since 1.2: +68 -224 lines
V1r0

/* 
	I.Scholl 

		Second level wrapper for the limbfit code
		Can be used as a callable module (to be plugged into lev0lev1 module or by the main wrapper)
			calls: limbfit() and reformat output data to be rewritten in the DB
			
	
	#define results->code_name 		"limbfit_ann"
	#define CODE_VERSION 			"V1.00" 
	#define CODE_DATE 				"Mon Sep 15 15:14:19 PDT 2014" 
*/

#include "limbfit_ann.h"

int do_one_limbfit(DRMS_Record_t *record_in,DRMS_Record_t *record_out, 
					LIMBFIT_INPUT *input, LIMBFIT_OUTPUT *results, int *status)
{
	static char *log_msg_code="do_one_limbfit_ann";
	static char *series_name="limbfit annulus data";
	results->series_name=series_name;
	//static char *proc_stat=PROCSTAT_OK;

	int rstatus;
	char log_msg[200];
	
	int seg_cnt;
	DRMS_Segment_t *segment_in;
	DRMS_Segment_t *segment_out;
	static DRMS_Array_t *img;

	//if (debug) lf_logmsg("DEBUG", "INFO", 0, 0, "IN do___", log_msg_code, results->opf);

	seg_cnt = drms_record_numsegments (record_in);
	if (seg_cnt < 1) 
	{
		sprintf(log_msg,"no segments in selected record_in");
		lf_logmsg("ERROR", "DRMS", ERR_DRMS_READ_MISSING_DATA, 0, log_msg, log_msg_code,results->opf);
		write_mini_output(PROCSTAT_NO_LA_DB_READ_PB,record_in,record_out,0,results);
		return(ERR_DRMS_READ_MISSING_DATA);   
	}
	segment_in = drms_segment_lookupnum(record_in, 0);
	img = drms_segment_read(segment_in, DRMS_TYPE_INT, &rstatus);
	if(!img) {
		sprintf(log_msg,"Can't do drms_segment_read() status=%d", rstatus);
		lf_logmsg("ERROR", "DRMS", ERR_DRMS_READ_MISSING_DATA, 0, log_msg, log_msg_code, results->opf);
		write_mini_output(PROCSTAT_NO_LA_DB_READ_PB,record_in,record_out,0,results);
		return(ERR_DRMS_READ_MISSING_DATA);   
	} 
	else
	{
		input->ix = drms_getkey_float(record_in, "X0_LF", &rstatus);
		if(rstatus) {
			lf_logmsg("ERROR", "DRMS", ERR_DRMS_READ_MISSING_DATA,rstatus, "drms_getkey_float(X0_LF)", log_msg_code, results->opf);
			write_mini_output(PROCSTAT_NO_LA_DB_READ_PB,record_in,record_out,0,results);
			return(ERR_DRMS_READ_MISSING_DATA);   
		}
		if(isnan(input->ix)) {
			lf_logmsg("ERROR", "DRMS", ERR_DRMS_READ_MISSING_XYR_LA,rstatus, "X0_LF missing", log_msg_code, results->opf);
			write_mini_output(PROCSTAT_NO_LA_XYR_LF_MISSING,record_in,record_out,0,results);
			return(ERR_DRMS_READ_MISSING_XYR_LA);   
		}
		input->iy = drms_getkey_float(record_in, "Y0_LF", &rstatus);
		if(rstatus) {
			lf_logmsg("ERROR", "DRMS", ERR_DRMS_READ_MISSING_DATA,rstatus, "drms_getkey_float(Y0_LF)", log_msg_code, results->opf);
			write_mini_output(PROCSTAT_NO_LA_DB_READ_PB,record_in,record_out,0,results);
			return(ERR_DRMS_READ_MISSING_DATA);   
		}
		if(isnan(input->iy)) {
			lf_logmsg("ERROR", "DRMS", ERR_DRMS_READ_MISSING_XYR_LA,rstatus, "Y0_LF missing", log_msg_code, results->opf);
			write_mini_output(PROCSTAT_NO_LA_XYR_LF_MISSING,record_in,record_out,0,results);
			return(ERR_DRMS_READ_MISSING_XYR_LA);   
		}
		/* add annulus code here! */

		/************************************************************************/
		/*                        set parameters                               */
		/************************************************************************/
		int		naxis_row=img->axis[0];
		int		naxis_col=img->axis[1];
		long i,j;
		int *data=img->data;

		/************************************************************************/
		/*          Compute the mean of the center of the image                 */
		/************************************************************************/
		// doesn't work anymore: how to convert the INT to FLOAT????

		float cmean,ctot=0.0;
		long nbp=0;
		float limx_m=(float)input->ix-250;
		float limx_p=(float)input->ix+250;
		float limy_m=(float)input->iy-250;
		float limy_p=(float)input->iy+250;
		for (i=limx_m;i<limx_p;i++)
		{
			for (j=limy_m;j<limy_p;j++)
			{
				ctot=ctot+data[i*naxis_col+j]; 
				nbp++;
			}
		}
		cmean=ctot/nbp;
		results->cmean=cmean;
		if (results->debug)
		{
			sprintf(log_msg," cmean = %6.4f (ctot= %6.4f , nbp=%ld)", cmean,ctot,nbp);
			lf_logmsg("DEBUG", "APP", 0, 0, log_msg, log_msg_code, results->opf);
		}
		/************************************************************************/
		/*                        Make annulus data                             */
		/************************************************************************/

		/* Select Points */

			int *p_data=&data[0];		
			int *p_mask=input->pf_mask;		
			while(p_mask<=input->pl_mask) 
			{
				if (*(p_mask) == 0)
				{
					*(p_data)=EQNANVAL;
				}	
				*(p_data++);
				*(p_mask++);
			}

/* end annulus */		

		
			if (results->debug) printf("write in the db\n");
			//**********************************************************************
			//	Write into the DB
			//**********************************************************************
			
			// get/set all keywords

			drms_copykeys(record_out, record_in, 1, kDRMS_KeyClass_Explicit); 		
			// change DATE to our proc_date, do not keep level 1 DATE:
			drms_keyword_setdate(record_out); 
			write_lf_keywords(VOID,record_out, results,0);

			// write the segment
			*status=0;
			rstatus=0;

			int naxes[2];
			naxes[0]=naxis_row;
			naxes[1]=naxis_col;
			
			DRMS_Array_t *array1=drms_array_create(DRMS_TYPE_INT,2,naxes,data,&rstatus);			
			if (rstatus) 
			{
				lf_logmsg("ERROR", "DRMS", ERR_DRMS_ARRAY_CREATE,rstatus, "ERR_DRMS_ARRAY_CREATE(annulus)", log_msg_code, results->opf);
				return ERR_DRMS_ARRAY_CREATE;
			}
			segment_out = drms_segment_lookupnum(record_out, 0); 
			if (segment_out)
			{
				if ( drms_segment_write(segment_out,array1,0) ) 
				{
					lf_logmsg("ERROR", "DRMS", ERR_DRMS_SEGMENT_WRITE,rstatus, "ERR_DRMS_SEGMENT_WRITE(annulus)", log_msg_code, results->opf);
					return ERR_DRMS_SEGMENT_WRITE;
				}	
			}
			else
			{
				lf_logmsg("ERROR", "DRMS", ERR_DRMS_SEGMENT_LOOKUPNUM,rstatus, "ERR_DRMS_SEGMENT_LOOKUPNUM(annulus)", log_msg_code, results->opf);
				return ERR_DRMS_SEGMENT_LOOKUPNUM;
			}
			drms_free_array (array1);
//			drms_free_array (img);
			
			rstatus=0;
		

			//---------------------------------------
			//		5) close & free
			//---------------------------------------
			rstatus=drms_setkey_string(record_out, "PROCSTAT", PROCSTAT_OK);

			if (results->debug) printf("end write in the db %d\n",rstatus);
			
			if (results->debug) printf("done...%u\n",input->fsn);							
			lf_logmsg("INFO", "APP", 0, 0, "End writing in the DB", log_msg_code, results->opf);
	}

return 0;
}

int	write_mini_output(char * errcode, DRMS_Record_t *record_in,DRMS_Record_t *record_out, 
			int tbf, LIMBFIT_OUTPUT *results)
{
		//int status;
		char *log_msg_code="write_mini_output";
		lf_logmsg("INFO", "APP", 0, 0, "Writing only header", log_msg_code, results->opf);			
		// write only the header of segment in the DB
		drms_copykeys(record_out, record_in, 1, kDRMS_KeyClass_Explicit); 	
		// change DATE to our proc_date, do not keep level 1 DATE:
		drms_keyword_setdate(record_out); 

		write_lf_keywords(errcode,record_out, results,1);
return(0);
}

int	write_lf_keywords(char * errcode, DRMS_Record_t *record_out, LIMBFIT_OUTPUT *results, 
				int pass)
{
// need to test status...
		drms_setkey_string(record_out, "SERIESCN",  results->series_name);
		drms_setkey_string(record_out, "INSERIES", 	results->dsin);
		drms_setkey_string(record_out, "CODENAME",	results->code_name);
		drms_setkey_string(record_out, "CODEVERS",	results->code_version);
		drms_setkey_string(record_out, "CODEDATE",	results->code_date);
		drms_setkey_float (record_out, "CENT_X",	results->cenx);
		drms_setkey_float (record_out, "CENT_Y",	results->ceny);
		drms_setkey_float (record_out, "R_MIN",		results->r_min);
		drms_setkey_float (record_out, "R_MAX",		results->r_max);
		drms_setkey_double(record_out, "CMEAN",		results->cmean);
		drms_setkey_string(record_out, "COMMENTS",	results->comment);			
		drms_setkey_string(record_out, "BLD_VERS",  results->bld_vers);

//where this one comes from? if(get_set_kw(1,"ORIGIN","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status);

		if (pass==1)
			drms_setkey_string(record_out, "PROCSTAT",	errcode);

return(0);
}

Karen Tian
Powered by
ViewCVS 0.9.4