fits_sci.cpp
来自「本源码是一个用于卫星数据处理的程序」· C++ 代码 · 共 729 行 · 第 1/3 页
CPP
729 行
/***************************************************************************
Fits_sci.cpp:科学数据一级产品生成用到的主要函数
***************************************************************************/
#include "stdafx.h"
#include "fitsio.h"
#include "Fits.h"
#include <string>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include "hxmt_file.h"
#include "ccsds.h"
#include "ccsds_pro.h"
/*****************************************************
** 函数名: open_fits_hx_sci
** 输入: hxmtfile
** hxmtfile --- 文件名结构
** 输出: **fptr
** **fptr --- 通过**fptr返回一个结构(structure used to store basic HDU information)
** 调用说明:
** get_fits_filename() .......得到生成fits文件的保存路径
** DirExist1()................判断路径是否存在
** CreateFilePath()...........建立文件路径
** time2strUTC_fitshead().....把秒时间转换成对应的年月日时分秒格式
** 功能描述: 输入一个文件名结构变量,生成fits头并写入相关信息
****************************************************************************************/
int open_fits_hx_sci( const hxmt_file_t *hxmtfile, fitsfile **fptr )
{
fitsfile *fp;
int status = 0;
std::string filename;
std::string pathname;
int modetype;
std::string fits_name;
if( get_fits_filename(hxmtfile, filename, pathname, modetype, fits_name) )
return -1;
{
extern std::string product_dest_dir;//一级产品保存路径
std::string path = product_dest_dir + pathname + "\\";
if( !DirExist1(path.c_str()) )//判断是否是新路径
{
extern FILE *arch_filep;//id文件,用来保存生成的一级产品的文件夹名
pathname += "\n";
fwrite(pathname.c_str(), sizeof(char), pathname.length(), arch_filep);//写入文件夹名
}
}
if( !CreateFilePath(filename.c_str()) )//建立文件路径
return -2;
if( fits_open_file(&fp, filename.c_str(), READWRITE, &status) )
{
status = 0;
if( fits_create_file(&fp, filename.c_str(), &status) )
return status;
if( fits_create_img(fp, BYTE_IMG, 0, NULL, &status) )
return status;
timespec_t t;
time( &t.time );//取得系统当前时间
t.usec = 0;
char buf[40];
time2strUTC_fitshead( buf, sizeof(buf), &t );
/* 写入需要的关键字 */
if( modetype )//巡天模式
{
if ( fits_update_key(fp, TSTRING , "HDUNAME", "PRIMARY", "Name of the data", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "ORIGIN", "HDPS", "Source of FITS file", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "CREATOR", "Fits_mfc.exe", "tool that create this output", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "CHECKSUM", "0", "HUD checksum", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "FILEDATE", buf, "Date and time of file creaton", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "DATE-OBS", buf, "Date and time of observation start", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "DATE-END", buf, "Date and time of observation stop", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "OBTSTART", "asda", "Start orbit number", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "OBT-END", "adad", "End orbit number", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "MJDREF", "55197", "MJD zero point for times", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "TSTART", "adas", "Observation start time", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "TSTOP", "asdas", "Observation end time", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "TELESCOP", "HXMT", "telescope", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "INSTRUME", "HXT", "instrument", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "OBS_MODE", "SURVEY", "Observation mode", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "OBS_ID", "123", "Observation id", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "SEQ_NUM", "123", "Sequence number", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "FILENAME", (void *)fits_name.c_str(), "Name of the current data file", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "FILESIZE", "2", "Size of the current data file", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "REVISION", "1", "Edition of the data package", &status) )
return status;
status = 0;
int tfields = 8; /* table will have 8 columns */
long nrows = 0;
char extname[] = "EVENTS"; /* extension name */
char hduname[] = "H_EVENTS";
char *ttype[] = { "time", "time_d", "trans_lon", "trans_lon_angle", "trans_lat", "trans_lat_angle", "energy", "detector" };
char *tform[] = { "7B", "1D", "1D", "1D", "1D", "1D", "1B", "1B" };
char *tunit[] = { "\0", "s", "\0", "\0", "\0", "\0", "\0", "\0" };
if ( fits_create_tbl( fp, BINARY_TBL, nrows, tfields, ttype, tform, tunit, extname, &status) ) {
return status;
}
if ( fits_update_key(fp, TSTRING , "CHECKSUM", "0", "HUD checksum updated", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "DATASUM", "0", "data unit chechsum", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "FILEDATE", buf, "Date and time of file creaton", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "DATE-OBS", buf, "Date and time of observation start", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "DATE-END", buf, "Date and time of observation stop", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "TSTART", "asda", "observation start time", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "TSTOP", "adad", "observation stop time", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "TELESCOP", "HXMT", "telescope", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "INSTRUME", "HXT", "instrument", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "SEQ_NUM", "123", "Sequence number", &status) )
return status;
}else{
if ( fits_update_key(fp, TSTRING , "HDUNAME", "PRIMARY", "Name of the data", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "ORIGIN", "HDPS", "Source of FITS file", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "CREATOR", "Fits_mfc.exe", "tool that create this output", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "CHECKSUM", "0", "HUD checksum", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "FILEDATE", buf, "Date and time of file creaton", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "DATE-OBS", buf, "Date and time of observation start", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "DATE-END", buf, "Date and time of observation stop", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "MJDREF", "55197", "MJD zero point for times", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "TSTART", "adas", "Observation start time", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "TSTOP", "asdas", "Observation end time", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "DURATION", "0", "observation length", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "PI_ID", "", "", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "PI_NAME", "", "", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "RA_CEN", "", "", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "DEC_CED", "", "", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "OBJECT", "", "", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "AREA", "", "", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "OBSERVER", "", "", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "TELESCOP", "HXMT", "telescope", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "INSTRUME", "HXT", "instrument", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "OBS_MODE", "POINTING", "Observation mode", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "DATAMODE", "", "", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "READMODE", "", "", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "OBS_ID", "", "Observation id", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "SEQ_NUM", "", "Sequence number", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "FILENAME", (void *)fits_name.c_str(), "Name of the current data file", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "FILESIZE", "2", "Size of the current data file", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "REVISION", "1", "Edition of the data package", &status) )
return status;
status = 0;
int tfields = 8; /* table will have 8 columns */
long nrows = 0;
char extname[] = "EVENTS"; /* extension name */
char *ttype[] = { "time", "time_d", "trans_lon", "trans_lon_angle", "trans_lat", "trans_lat_angle", "energy", "detector" };
char *tform[] = { "7B", "1D", "1D", "1D", "1D", "1D", "1B", "1B" };
char *tunit[] = { "\0", "s", "\0", "\0", "\0", "\0", "\0", "\0" };
if ( fits_create_tbl( fp, BINARY_TBL, nrows, tfields, ttype, tform, tunit, extname, &status) ) {
return status;
}
if ( fits_update_key(fp, TSTRING , "CHECKSUM", "0", "HUD checksum updated", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "DATASUM", "0", "data unit checksum", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "FILEDATE", buf, "Date and time of file creaton", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "DATE-OBS", buf, "Date and time of observation start", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "DATE-END", buf, "Date and time of observation stop", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "TSTART", "adas", "Observation start time", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "TSTOP", "asdas", "Observation end time", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "PI_ID", "", "", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "OBSERVER", "", "", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "TELESCOP", "HXMT", "telescope", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "INSTRUME", "HXT", "instrument", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "DATAMODE", "", "", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "READMODE", "", "", &status) )
return status;
if ( fits_update_key(fp, TSTRING , "SEQ_NUM", "", "Sequence number", &status) )
return status;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?