25 using namespace hippodraw;
39 for (
int i = 0; i < number; i++ ) {
47 value =
"Empty image";
52 if ( value ==
"" ) value =
"<no name>";
53 names.push_back ( value );
62 if ( type ==
Image ) {
82 for (
int i = 0; i < columns; i++ ) {
83 char colname [ FLEN_VALUE ];
85 fits_get_colname (
m_fptr, CASEINSEN, const_cast< char * > (
"*"),
87 labels.push_back (
string ( colname ) );
91 labels.push_back (
string (
"none" ) );
103 if ( dimension == 2 ) {
104 labels.push_back (
"Values" );
106 else if ( dimension == 3 ) {
107 const char type[] =
"CTYPE3";
108 bool yes =
hasKey ( type );
112 for (
int i = 0; i < number; i++ ) {
114 labels.push_back ( name +
" " + iv );
146 long nelements = vec.size();
147 vector<double>::iterator it = vec.begin();
151 fits_read_col_dbl(
m_fptr, column+1, 1, 1, nelements, nulval,
163 string tdimn (
"TDIM" );
166 fits_read_keyword (
m_fptr,
167 const_cast < char * > ( tdimn.c_str() ),
172 if ( value[0] != 0 ) {
173 const string dims = value;
174 unsigned int count = std::count ( dims.begin(), dims.end(),
',' );
177 vector < long > naxes ( count );
178 fits_read_tdim (
m_fptr, column+1, count,
180 shape.resize ( count + 1 );
182 std::copy ( naxes.begin(), naxes.end(), shape.begin() + 1 );
185 shape.resize ( 1, rows );
195 vec.resize ( naxis );
197 vector < long > ::iterator first = vec.begin();
198 long * ptr = & *first;
212 deltas.reserve ( naxis );
214 char key [ FLEN_KEYWORD];
215 char * keyroot = const_cast <
char * > (
"CDELT");
216 for (
int i = 0; i < naxis; i++ ) {
218 fits_make_keyn ( keyroot, i+1, key, &
m_status );
219 bool yes =
hasKey ( key );
223 deltas.push_back ( value );
226 deltas.push_back ( 1.0 );
237 indices.reserve ( naxis );
239 char key [ FLEN_KEYWORD];
240 char * keyroot = const_cast <
char * > (
"CRPIX" );
241 for (
int i = 0; i < naxis; i++ ) {
243 fits_make_keyn ( keyroot, i+1, key, &
m_status );
244 bool yes =
hasKey ( key );
248 indices.push_back ( value );
251 indices.push_back ( 1 );
262 values.reserve ( naxis );
264 char key [ FLEN_KEYWORD];
265 char * keyroot = const_cast <
char * > (
"CRVAL" );
266 for (
int i = 0; i < naxis; i++ ) {
268 fits_make_keyn ( keyroot, i+1, key, &
m_status );
269 bool yes =
hasKey ( key );
273 values.push_back ( value );
276 values.push_back ( 0. );
287 char key [FLEN_KEYWORD];
288 char * keyroot = const_cast <
char * > (
"CTYPE" );
289 for (
int i = 0; i < 2; i++ ) {
290 fits_make_keyn ( keyroot, i+1, key, &
m_status );
291 bool yes =
hasKey ( key );
295 if ( value.find (
"-AIT" ) == string::npos ) {
310 vector < long > naxes;
314 long nelements = naxes[0] * naxes[1];
316 vector < double >::iterator first = vec.begin();
317 double * ptr = & *first;
320 if ( naxes.size () == 2 ) {
321 long fpixel[2] = { 1, 1 };
322 fits_read_pix (
m_fptr, datatype, fpixel, nelements,
323 & nulval, ptr, & anynul, &
m_status );
325 long fpixel[] = { 1, 1, 1 };
326 fpixel[2] = zplane + 1;
327 fits_read_pix (
m_fptr, datatype, fpixel, nelements,
328 & nulval, ptr, & anynul, &
m_status );
340 long nelements = vec.size();
341 vector<int>::iterator it = vec.begin();
342 int * ptr =
new int [ nelements ];
345 fits_read_col_int(
m_fptr, column+1, 1, 1, nelements, nulval,
346 ptr, &anynul, &status);
347 copy ( ptr, ptr+nelements, it );
355 const std::vector < std::string > & names,
356 const std::vector < std::vector < int > > & shapes,
357 const std::string & extname )
359 char **
types =
new char * [ columns ];
360 char ** tform =
new char * [ columns ];
364 vector < string > forms;
365 for (
int i = 0; i < columns; i ++ ) {
366 types[i]=
const_cast<char*
> (names[i].c_str());
368 const vector < int > &
shape = shapes [ i ];
369 unsigned int rank = shape.size();
371 for (
unsigned int j = 1; j <
rank; j++ ) {
372 int dim = shape [ j ];
378 forms.push_back ( form );
380 tform[i] = strdup ( form.c_str() );
385 m_extname =
const_cast<char*
> (extname.c_str());
387 fits_create_tbl(
m_fptr, BINARY_TBL, 0, columns,
388 types, tform, tunits, m_extname, &
m_status);
390 for (
int i = 0; i < columns; i ++ ) {
391 const vector < int > &
shape = shapes [ i ];
392 unsigned int rank = shape.size();
394 vector < long > naxes;
395 for (
unsigned int j = 1; j <
rank; j++ ) {
396 naxes.push_back ( shape [ j ] );
398 fits_write_tdim (
m_fptr, i+1,
420 LONGLONG nelements = data.size ();
421 LONGLONG firstrow = 1;
422 LONGLONG firstelem = 1;
423 fits_write_col(
m_fptr, TDOUBLE, col+1, firstrow, firstelem, nelements,
424 const_cast < double * > ( &data[0] ), &
m_status);
431 long fpixel[2]={1,1};
432 long nelements = x * y;
433 fits_write_pix (
m_fptr, TDOUBLE, fpixel, nelements,
434 const_cast < double * > ( &data[0] ), &
m_status );
450 char * key = const_cast <
char * > (
"PIXCENT" );
451 bool yes =
hasKey ( key );
465 char * key1 = const_cast <
char * > (
"CRVAL1" );
466 char * key2 = const_cast <
char * > (
"CRVAL2" );
468 fits_write_key(
m_fptr, TDOUBLE, key1, &value1, NULL, &
m_status );
469 fits_write_key(
m_fptr, TDOUBLE, key2, &value2, NULL, &
m_status );