![]() ![]() |
![]() |
File: [Development] / JSOC / proj / limbfit / apps / do_one_limbfit.c
(download)
Revision: 1.15, Wed Nov 6 20:27:33 2013 UTC (9 years, 4 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-6, Ver_8-5, Ver_8-4, Ver_8-3, Ver_8-2, Ver_8-12, Ver_8-11, Ver_8-10, HEAD Changes since 1.14: +3 -3 lines fixed exit values |
/* 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" #define results->code_version "V4.0r8" #define results->code_date "Wed Nov 6 09:42:51 HST 2013" */ #include "limbfit.h" void lf_logmsg4fitsio(char *log_msg,char *log_msg_code,char *kw,unsigned int fsn,int status, FILE *opf) { sprintf(log_msg,"can't fits_update_key[%s] for fsn# %u", kw,fsn); lf_logmsg("ERROR", "FITSIO", ERR_FITSIO, status, log_msg, log_msg_code, opf); fits_report_error(opf, status); } int get_set_kw(int typ, char *kw, char *kw_txt, unsigned int fsn, DRMS_Record_t *record_in,DRMS_Record_t *record_out, fitsfile *outfptr, int tbf, LIMBFIT_OUTPUT *results, int *status) { float kw_f; double kw_d; int kw_i; char *kw_c; int rstatus; char log_msg[200]; char *log_msg_code="get_set_kw"; switch( typ ) { case 1: kw_c = drms_getkey_string(record_in, kw, &rstatus); break; case 2: kw_i = drms_getkey_int(record_in, kw, &rstatus); break; case 3: kw_f = drms_getkey_float(record_in, kw, &rstatus); break; case 4: kw_d = drms_getkey_double(record_in, kw, &rstatus); } if(rstatus) { sprintf(log_msg,"drms_getkey_xxxx(%s)",kw); lf_logmsg("ERROR", "DRMS", ERR_DRMS_READ_MISSING_DATA,rstatus, log_msg, log_msg_code, results->opf); write_mini_output(PROCSTAT_NO_LF_DB_READ_PB,record_in,record_out,tbf,results); *status=ERR_DRMS_READ_MISSING_DATA; return(ERR_DRMS_READ_MISSING_DATA); } switch( typ ) { case 1: fits_update_key(outfptr, TSTRING, kw, kw_c, kw_txt, &rstatus); break; case 2: fits_update_key(outfptr, TINT, kw, &kw_i, kw_txt, &rstatus); break; case 3: fits_update_key(outfptr, TFLOAT, kw, &kw_f, kw_txt, &rstatus); break; case 4: fits_update_key(outfptr, TDOUBLE, kw, &kw_d, kw_txt, &rstatus); break; } if ( rstatus != 0) { lf_logmsg4fitsio(log_msg, log_msg_code,kw,fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,tbf,results); *status=ERR_DRMS_READ_MISSING_DATA; return ERR_FITSIO; } return(0); } int do_one_limbfit(unsigned int fsn, DRMS_Record_t *record_in,DRMS_Record_t *record_out, LIMBFIT_INPUT *input, LIMBFIT_OUTPUT *results, LIMBFIT_IO_PUT *ios, int *status) { static char *log_msg_code="do_one_limbfit"; static char *series_name="limbfit data"; static char *file_type="full FITS"; static char *proc_stat=PROCSTAT_OK; int lf_retcode; 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_LF_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_FLOAT, &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_LF_DB_READ_PB,record_in,record_out,0,results); return(ERR_DRMS_READ_MISSING_DATA); } else { //if (debug) lf_logmsg("DEBUG", "INFO", 0, 0, "IN do___getting data", log_msg_code, results->opf); // add a test if these values are ok, otherwise terminate this observation 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_LF_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_LF,rstatus, "X0_LF missing", log_msg_code, results->opf); write_mini_output(PROCSTAT_NO_LF_XYR_LF_MISSING,record_in,record_out,0,results); return(ERR_DRMS_READ_MISSING_XYR_LF); } 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_LF_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_LF,rstatus, "Y0_LF missing", log_msg_code, results->opf); write_mini_output(PROCSTAT_NO_LF_XYR_LF_MISSING,record_in,record_out,0,results); return(ERR_DRMS_READ_MISSING_XYR_LF); } input->ir = drms_getkey_float(record_in, "RSUN_LF", &rstatus); if(rstatus) { lf_logmsg("ERROR", "DRMS", ERR_DRMS_READ_MISSING_DATA,rstatus, "drms_getkey_float(RSUN_LF)", log_msg_code, results->opf); write_mini_output(PROCSTAT_NO_LF_DB_READ_PB,record_in,record_out,0,results); return(ERR_DRMS_READ_MISSING_DATA); } if(isnan(input->ir)) { lf_logmsg("ERROR", "DRMS", ERR_DRMS_READ_MISSING_XYR_LF,rstatus, "RSUN_LF missing", log_msg_code, results->opf); write_mini_output(PROCSTAT_NO_LF_XYR_LF_MISSING,record_in,record_out,0,results); return(ERR_DRMS_READ_MISSING_XYR_LF); } input->img_sz0=img->axis[0]; input->img_sz1=img->axis[1]; input->data=img->data; if (results->debug) { sprintf(log_msg,"X0_LF %f", input->ix); lf_logmsg("DEBUG", "INFO", 0, 0, log_msg, log_msg_code, results->opf); sprintf(log_msg,"Y0_LF %f", input->iy); lf_logmsg("DEBUG", "INFO", 0, 0, log_msg, log_msg_code, results->opf); sprintf(log_msg,"RSUN_LF %f", input->ir); lf_logmsg("DEBUG", "INFO", 0, 0, log_msg, log_msg_code, results->opf); } lf_retcode=limbfit(input,results,ios); drms_free_array(img); if (results->debug) { sprintf(log_msg,"XC %f", results->cenx); lf_logmsg("DEBUG", "INFO", 0, 0, log_msg, log_msg_code, results->opf); sprintf(log_msg,"YC %f", results->ceny); lf_logmsg("DEBUG", "INFO", 0, 0, log_msg, log_msg_code, results->opf); sprintf(log_msg,"R %f", results->radius); lf_logmsg("DEBUG", "INFO", 0, 0, log_msg, log_msg_code, results->opf); sprintf(log_msg,"Returned code %d", lf_retcode); lf_logmsg("DEBUG", "INFO", 0, 0, log_msg, log_msg_code, results->opf); sprintf(log_msg,"err1 %d", results->error1); lf_logmsg("DEBUG", "INFO", 0, 0, log_msg, log_msg_code, results->opf); sprintf(log_msg,"err2 %d", results->error2); lf_logmsg("DEBUG", "INFO", 0, 0, log_msg, log_msg_code, results->opf); } // >= 0 => all // ERR_LIMBFIT_FIT_FAILED => all // ERR_LIMBFIT_FAILED => mini if (input->fldf==0) results->fldfr=4; if (lf_retcode >= 0 || lf_retcode == ERR_LIMBFIT_FIT_FAILED) { if (results->debug) printf("write in the db\n"); //********************************************************************** // Write into the DB //********************************************************************** //--------------------------------------- // 1) get all keywords //--------------------------------------- drms_copykeys(record_out, record_in, 1, kDRMS_KeyClass_All); // change DATE to our proc_date, do not keep level 1 DATE: drms_keyword_setdate(record_out); //--------------------------------------- // 2) set all keywords //--------------------------------------- // need to test status... rstatus=drms_setkey_string(record_out, "SERIESCN", series_name); rstatus=drms_setkey_string(record_out, "INSERIES", results->dsin); rstatus=drms_setkey_string(record_out, "CODENAME", results->code_name); rstatus=drms_setkey_string(record_out, "CODEVERS", results->code_version); rstatus=drms_setkey_string(record_out, "CODEDATE", results->code_date); rstatus=drms_setkey_float (record_out, "X_LFS", results->cenx); rstatus=drms_setkey_float (record_out, "Y_LFS", results->ceny); rstatus=drms_setkey_double(record_out, "R_LFS", results->radius); rstatus=drms_setkey_int (record_out, "QUAL_LFS", results->quality); rstatus=drms_setkey_int (record_out, "ERRO_LFS", results->error1); rstatus=drms_setkey_int (record_out, "ERRO_FIT", results->error2); rstatus=drms_setkey_int (record_out, "NB_FBINS", results->nb_fbins); rstatus=drms_setkey_int (record_out, "FLDFR", results->fldfr); rstatus=drms_setkey_double(record_out, "MAX_LIMB", results->max_limb); rstatus=drms_setkey_double(record_out, "CMEAN", results->cmean); rstatus=drms_setkey_int (record_out, "ANN_WD", results->ann_wd); rstatus=drms_setkey_int (record_out, "MXSZANNV", results->mxszannv); rstatus=drms_setkey_int (record_out, "NB_LDF", results->nb_ldf); rstatus=drms_setkey_int (record_out, "NB_RDB", results->nb_rdb); rstatus=drms_setkey_int (record_out, "NB_ABB", results->nb_abb); rstatus=drms_setkey_double(record_out, "UP_LIMIT", results->up_limit); rstatus=drms_setkey_double(record_out, "LO_LIMIT", results->lo_limit); rstatus=drms_setkey_double(record_out, "INC_X", results->inc_x); rstatus=drms_setkey_double(record_out, "INC_Y", results->inc_y); rstatus=drms_setkey_int (record_out, "NFITPNTS", results->nfitpnts); rstatus=drms_setkey_int (record_out, "NB_ITER", results->nb_iter); rstatus=drms_setkey_int (record_out, "CEN_CALC", input->cc); rstatus=drms_setkey_double(record_out, "AHI", results->ahi); rstatus=drms_setkey_string(record_out, "COMMENTS", results->comment); rstatus=drms_setkey_string(record_out, "BLD_VERS", results->bld_vers); //--------------------------------------- // 3) write the generic segment // (as the full FITS file) //--------------------------------------- // something left...: in case of problem, filenameout not closed and therefore not removed... long nelements, firstrow, firstelem; static char filenameout[128]; sprintf(filenameout,"%s/%u_full.fits",results->tmp_dir,fsn); firstrow=1; firstelem=1; *status=0; rstatus=0; remove(filenameout); fitsfile *outfptr; if (fits_create_file(&outfptr, filenameout, &rstatus)) { fits_report_error(results->opf, rstatus); lf_logmsg4fitsio(log_msg, log_msg_code, "fits_create_file()",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,2,results); return ERR_FITSIO; } long l_naxes[2]; l_naxes[0]=results->fits_ldfs_naxis1; l_naxes[1]=results->fits_ldfs_naxis2; nelements=l_naxes[0]*l_naxes[1]; int nax=2; if ( fits_create_img(outfptr, FLOAT_IMG, nax, l_naxes, &rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "fits_create_img()",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,2,results); return ERR_FITSIO; } if ( fits_write_img(outfptr, TFLOAT, 1, nelements, results->fits_ldfs_data, &rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "fits_write_img()",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,2,results); return ERR_FITSIO; } // drms_free_array (data_array1); // NOTE: because of that, from now tbf MUST BE EQUAL to 1 //add more KWs if(get_set_kw(1,"ORIGIN","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); TIME tobs; static char s_tobs[50]; tobs = drms_getkey_time(record_in, "DATE__OBS", &rstatus); sprint_time(s_tobs, tobs, "UTC", 0); if ( fits_update_key(outfptr, TSTRING, "DATE-OBS", &s_tobs, "",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(DATE__OBS)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } tobs = drms_getkey_time(record_in, "T_OBS", &rstatus); sprint_time(s_tobs, tobs, "UTC", 0); if ( fits_update_key(outfptr, TSTRING, "T_OBS", s_tobs, "",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(T_OBS)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if(get_set_kw(2,"CAMERA","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(4,"EXPTIME","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(3,"EXPSDEV","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(2,"WAVELNTH","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(1,"WAVEUNIT","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if ( fits_update_key(outfptr, TINT, "FSN", &fsn, "",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(FSN)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if(get_set_kw(2,"FID","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(2,"DATAMIN","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(2,"DATAMAX","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(2,"DATAMEDN","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(3,"DATAMEAN","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(3,"DATARMS","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(1,"FLAT_REC","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(1,"CTYPE1","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(1,"CUNIT1","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(3,"CRVAL1","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(3,"CDELT1","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(3,"CRPIX1","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(1,"CTYPE2","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(1,"CUNIT2","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(3,"CRVAL2","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(3,"CDELT2","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(3,"CRPIX2","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(3,"CROTA2","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(3,"R_SUN","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(1,"MPO_REC","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(3,"INST_ROT","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if (isnan(input->ix)) { input->ix=0.0;} if ( fits_update_key(outfptr, TDOUBLE, "X0_LF", &input->ix, "",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(X0_LF)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if (isnan(input->iy)) { input->iy=0.0;} if ( fits_update_key(outfptr, TDOUBLE, "Y0_LF", &input->iy, "",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(Y0_LF)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if (isnan(input->ir)) { input->ir=0.0;} if ( fits_update_key(outfptr, TDOUBLE, "RSUN_LF", &input->ir, "",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(RSUN_LF)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if(get_set_kw(1,"ASD_REC","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(3,"SAT_ROT","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(1,"ORB_REC","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(4,"DSUN_OBS","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(4,"RSUN_OBS","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(4,"HAEX_OBS","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(4,"HAEY_OBS","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(4,"HAEZ_OBS","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(2,"HPLTID","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(2,"HFTSACID","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(2,"HWLTID","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if(get_set_kw(2,"HCFTID","",fsn,record_in,record_out,outfptr,1,results,status)) return(*status); if ( fits_update_key(outfptr, TSTRING, "SERIESCN", series_name, "Series Name",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(SERIESCN)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TSTRING, "FILETYPE", file_type, "File content",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(FILETYPE)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TSTRING, "CODENAME", results->code_name, "Code Name",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(CODENAME)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TSTRING, "CODEVERS", results->code_version, "Code Version",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(CODEVERS)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TSTRING, "CODEDATE", results->code_date, "Code Date",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(CODEDATE)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TSTRING, "PROCSTAT", proc_stat, "Processing rstatus code",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(PROCSTAT)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } tobs=drms_keyword_getdate(record_out); sprint_time(s_tobs, tobs, "UTC", 0); if ( fits_update_key(outfptr, TSTRING, "DATE", s_tobs, "",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(DATE)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TFLOAT, "X_LFS", &results->cenx, "Center Position X",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(X_LFS)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TFLOAT, "Y_LFS", &results->ceny, "Center Position Y",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(Y_LFS)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TDOUBLE, "R_LFS", &results->radius, "Solar Radius",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(R_LFS)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TDOUBLE, "CMEAN", &results->cmean, "Mean value of the 500x500 pixels center",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(CMEAN)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TDOUBLE, "MAX_LIMB", &results->cmean, "Maximum value on the limb",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(MAX_LIMB)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TINT, "QUAL_LFS", &results->quality, "Processing quality indicator",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(QUAL_LFS)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TINT, "ERRO_LFS", &results->error1, "Limb.f Processing error code",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(ERRO_LFS)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TINT, "ERRO_FIT", &results->error2, "Fitting Processing error code",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(ERRO_FIT)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TINT, "FLDFR", &results->fldfr, "",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(FLDFR)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TINT, "NB_FBINS", &results->nb_fbins, "",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(NB_FBINS)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TINT, "ANN_WD", &results->ann_wd, "",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(ANN_WD)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TINT, "MXSZANNV", &results->mxszannv, "",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(MXSZANNV)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TINT, "NB_LDF", &results->nb_ldf, "",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(NB_LDF)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TINT, "NB_RDB", &results->nb_rdb, "",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(NB_RDB)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TINT, "NB_ABB", &results->nb_abb, "",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(NB_ABB)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TDOUBLE, "UP_LIMIT", &results->up_limit, "",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(UP_LIMIT)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TDOUBLE, "LO_LIMIT", &results->lo_limit, "",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(LO_LIMIT)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TDOUBLE, "INC_X", &results->inc_x, "",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(INC_X)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TDOUBLE, "INC_Y", &results->inc_y, "",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(INC_Y)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TINT, "NFITPNTS", &results->nfitpnts, "",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(NFITPNTS)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } if ( fits_update_key(outfptr, TINT, "NB_ITER", &results->nb_iter, "",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(NB_ITER)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } rstatus=0; int i; // AB ---EXT#1--------------------------------------------------------------------- if (results->nb_iter==1) { char *tunitAB[] = { "","" }; char *ttypeAB[] = { "Alpha", "Beta"}; char *tformAB[] = { "1E","1E" }; char extnameAB[]="LDF info / Alpha&Beta"; if ( fits_create_tbl( outfptr, BINARY_TBL, results->fits_ab_nrows, results->fits_ab_tfields, ttypeAB, tformAB, tunitAB, extnameAB, &rstatus) ) { fits_report_error(results->opf, rstatus); return ERR_FITSIO; } } else { char *tunitAB[] = { "","",""}; char *ttypeAB[] = { "Alpha", "Beta","Beta Prev"}; char *tformAB[] = { "1E","1E","1E" }; char extnameAB[]="LDF info / Alpha&Beta[&Beta Prev]"; if ( fits_create_tbl( outfptr, BINARY_TBL, results->fits_ab_nrows, results->fits_ab_tfields, ttypeAB, tformAB, tunitAB, extnameAB, &rstatus) ) { fits_report_error(results->opf, rstatus); return ERR_FITSIO; } } for (i=1;i<=results->fits_ab_tfields;i++) { if (fits_write_col(outfptr, TFLOAT, i, firstrow, firstelem, results->fits_ab_nrows, results->fits_alpha_beta+(i-1)*results->fits_ab_nrows, &rstatus)) { lf_logmsg4fitsio(log_msg, log_msg_code, "fits_write_col(AB)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } } // All Params ---EXT#2------------------------------------------------------------------------- char extnameA[] = "LDF info / As / Es / Radius / IP"; char *tunitAE[] = { "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }; char *tformAE[] = { "1D", "1D", "1D", "1D", "1D", "1D", "1D", "1D", "1D", "1D", "1D", "1D", "1D", "1D" }; char *ttypeA[] = { "A0", "A1", "A2", "A3", "A4", "A5", "E0", "E1", "E2", "E3", "E4", "E5", "Radius", "IP1"}; if ( fits_create_tbl(outfptr, BINARY_TBL, results->fits_params_nrows, results->fits_params_tfields, ttypeA, tformAE,tunitAE, extnameA, &rstatus) ) { fits_report_error(results->opf, rstatus); return ERR_FITSIO; } for (i=1;i<=results->fits_params_tfields;i++) { if (fits_write_col(outfptr, TDOUBLE, i, firstrow, firstelem, results->fits_params_nrows, results->fits_params+(i-1)*results->fits_params_nrows, &rstatus)) { lf_logmsg4fitsio(log_msg, log_msg_code, "fits_write_col(PARAMS)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } } if (input->fldf==1) { // Full LDF ---EXT#3------------------------------------------------------------------------- char *tunitF[] = { "","" }; char *ttypeF[] = { "Intensity", "Radius"}; char *tformF[] = { "1E","1E" }; char extnameF[]="Full LDF "; if ( fits_create_tbl( outfptr, BINARY_TBL, results->fits_fldfs_nrows, results->fits_fldfs_tfields, ttypeF, tformF, tunitF, extnameF, &rstatus) ) { fits_report_error(results->opf, rstatus); return ERR_FITSIO; } for (i=1;i<=results->fits_fldfs_tfields;i++) { if (fits_write_col(outfptr, TFLOAT, i, firstrow, firstelem, results->fits_fldfs_nrows, results->fits_fulldfs+(i-1)*results->fits_fldfs_nrows, &rstatus)) { lf_logmsg4fitsio(log_msg, log_msg_code, "fits_write_col(FLDF)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } } } //--------------------------------------- // 5) close & free //--------------------------------------- if ( fits_update_key(outfptr, TSTRING, "PROCSTAT", proc_stat, "Processing rstatus code",&rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "(PROCSTAT)",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } // Close file & attach to DB & remove if ( fits_close_file(outfptr, &rstatus) ) { lf_logmsg4fitsio(log_msg, log_msg_code, "fits_close_file()",fsn,rstatus,results->opf); write_mini_output(PROCSTAT_NO_LF_FITS_WRITE_PB,record_in,record_out,1,results); return ERR_FITSIO; } //warning change segment number !!! segment_out = drms_segment_lookupnum (record_out, 0); //WARNING change this number if the number of segment changes... rstatus=drms_segment_write_from_file(segment_out,filenameout); if(rstatus) { sprintf(log_msg,"can't drms_segment_write_from_file() for fsn# %u", fsn); lf_logmsg("ERROR", "DRMS", ERR_DRMS_WRITE, rstatus, log_msg, log_msg_code, results->opf); return(ERR_DRMS_WRITE); } rstatus=drms_setkey_string(record_out, "PROCSTAT", PROCSTAT_OK); if (!rstatus) remove(filenameout); // test if this is ok too!!! else { sprintf(log_msg,"can't drms_setkey_string(PROCSTAT) for fsn# %u", fsn); lf_logmsg("ERROR", "DRMS", ERR_DRMS_WRITE, rstatus, log_msg, log_msg_code, results->opf); return(ERR_DRMS_WRITE); } if (results->debug) printf("end write in the db %d\n",rstatus); free(results->fits_ldfs_data); free(results->fits_alpha_beta); free(results->fits_params); if (results->fldfr<3) free(results->fits_fulldfs); if (results->debug) printf("done...%u\n",fsn); lf_logmsg("INFO", "APP", 0, 0, "End writing in the DB", log_msg_code, results->opf); } else { sprintf(log_msg,"NO LDFS file created (ifail >0) or retcode <0 for fsn# %u", fsn); lf_logmsg("WARNING", "APP", ERR_LIMBFIT_FAILED, lf_retcode, log_msg, log_msg_code, results->opf); write_mini_output(PROCSTAT_NO_LF_FAILED,record_in,record_out,0,results); // is this the right retcode? or should I make a test??? // free if (results->error1 == 0) { free(results->fits_ldfs_data); free(results->fits_alpha_beta); free(results->fits_params); if (results->fldfr<3) free(results->fits_fulldfs); } return(0); } } return 0; } //pb here: quand this is called then no free are executed!!! 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_All); // change DATE to our proc_date, do not keep level 1 DATE: drms_keyword_setdate(record_out); // need to test status... drms_setkey_string(record_out, "SERIESCN", "Limbfit data"); 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_string(record_out, "INSERIES", results->dsin); drms_setkey_string(record_out, "COMMENTS", results->comment); drms_setkey_string(record_out, "PROCSTAT", errcode); drms_setkey_int (record_out, "QUAL_LFS", results->quality); drms_setkey_int (record_out, "ERRO_LFS", results->error1); drms_setkey_int (record_out, "ERRO_FIT", results->error2); drms_setkey_int (record_out, "ANN_WD", results->ann_wd); drms_setkey_int (record_out, "MXSZANNV", results->mxszannv); drms_setkey_int (record_out, "NB_LDF", results->nb_ldf); drms_setkey_int (record_out, "NB_RDB", results->nb_rdb); drms_setkey_int (record_out, "NB_ABB", results->nb_abb); drms_setkey_double(record_out, "UP_LIMIT", results->up_limit); drms_setkey_double(record_out, "LO_LIMIT", results->lo_limit); drms_setkey_double(record_out, "INC_X", results->inc_x); drms_setkey_double(record_out, "INC_Y", results->inc_y); drms_setkey_int (record_out, "NB_ITER", results->nb_iter); drms_setkey_int (record_out, "CEN_CALC", results->cc); drms_setkey_double(record_out, "AHI", results->ahi); drms_setkey_int (record_out, "FLDFR", results->fldfr); drms_setkey_int (record_out, "NFITPNTS", results->nfitpnts); drms_setkey_string(record_out, "BLD_VERS", results->bld_vers); if (tbf >=1) { free(results->fits_alpha_beta); free(results->fits_params); if (results->fldfr<3) free(results->fits_fulldfs); if (tbf ==2) free(results->fits_ldfs_data); } return(0); }
Karen Tian |
Powered by ViewCVS 0.9.4 |