246 if (!
Check(
"XTENSION",
'T',
"BINTABLE") ||
247 !
Check(
"NAXIS",
'I',
"2") ||
248 !
Check(
"BITPIX",
'I',
"8") ||
249 !
Check(
"GCOUNT",
'I',
"1") ||
250 !
Check(
"EXTNAME",
'T') ||
251 !
Check(
"NAXIS1",
'I') ||
252 !
Check(
"NAXIS2",
'I') ||
253 !
Check(
"TFIELDS",
'I'))
258 if (!
Check(
"ZNAXIS1",
'I') ||
259 !
Check(
"ZNAXIS2",
'I') ||
260 !
Check(
"ZPCOUNT",
'I',
"0"))
265 if (!
Check(
"PCOUNT",
'I',
"0"))
269 total_bytes = Get<size_t>(
"NAXIS1")*Get<size_t>(
"NAXIS2");
273 datasum = Get<int64_t>(
"DATASUM", -1);
276 const std::string tFormName =
is_compressed ?
"ZFORM" :
"TFORM";
279 const std::string num(std::to_string(
i));
281 if (!
Check(
"TTYPE"+num,
'T') ||
282 !
Check(tFormName+num,
'T'))
285 const std::string
id = Get<std::string>(
"TTYPE"+num);
286 const std::string fmt = Get<std::string>(tFormName+num);
287 const std::string unit = Get<std::string>(
"TUNIT"+num,
"");
288 const std::string comp = Get<std::string>(
"ZCTYP"+num,
"");
294 std::istringstream sin(fmt);
300 const char type = fmt[fmt.length()-1];
309 case 'B': size = 1;
break;
310 case 'I': size = 2;
break;
311 case 'J': size = 4;
break;
312 case 'K': size = 8;
break;
313 case 'E': size = 4;
break;
314 case 'D': size = 8;
break;
322 std::ostringstream
str;
323 str <<
"FITS format TFORM='" << fmt <<
"' not yet supported.";
325 throw std::runtime_error(str.str());
333 const Table::Column col = { bytes, size_t(n),
size, n*
size,
type, unit, compress};
342 std::ostringstream
str;
343 str <<
"Sum of bytes in columns [" << bytes <<
"] does not match (Z)NAXIS2 [" <<
bytes_per_row <<
"].";
346 throw std::runtime_error(str.str());
353 name = Get<std::string>(
"EXTNAME");
bool Check(const std::string &key, char type, const std::string &value="") const
SortedColumns sorted_cols
Keys ParseBlock(const std::vector< std::string > &vec) const
bool HasKey(const std::string &key) const