<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
span.EmailStyle20
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">Hi Joey,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Will this include tile compression and other advanced parts of the full standard?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Rob Seaman<o:p></o:p></p>
<p class="MsoNormal">Lunar and Planetary Laboratory<o:p></o:p></p>
<p class="MsoNormal">University of Arizona<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:12.0pt;color:black">From: </span></b><span style="font-size:12.0pt;color:black">fitsbits <fitsbits-bounces@listmgr.nrao.edu> on behalf of Joey Fish via fitsbits <fitsbits@listmgr.nrao.edu><br>
<b>Reply-To: </b>Joey Fish <efish@nmsu.edu><br>
<b>Date: </b>Tuesday, July 20, 2021 at 6:54 AM<br>
<b>To: </b>"fitsbits@listmgr.nrao.edu" <fitsbits@listmgr.nrao.edu><br>
<b>Subject: </b>[EXT]Re: [fitsbits] JSON to FITS bintable?<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p align="center" style="text-align:center"><strong><span style="font-family:"Calibri",sans-serif;color:red">External Email</span></strong><o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black">On the topic of proper types for FITS, I'm working on an Ada 2012 / SPARK 2014 implementation of the Standard, meaning formally/'mechanically' provable, the following is the specification (</span><span style="font-size:12.0pt;font-family:Consolas;color:black">FITS.ads</span><span style="font-size:12.0pt;color:black">)
 —<br>
</span><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">Pragma Ada_2012;</span><span style="font-size:12.0pt;color:black">
<o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">Pragma Assertion_Policy( Check );</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">Pragma Restrictions( No_Implementation_Aspect_Specifications );</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">Pragma Restrictions( No_Implementation_Attributes            );</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">Pragma Restrictions( No_Implementation_Pragmas               );</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">With</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">System,</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">Ada.Streams,</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">Ada.IO_Exceptions,</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">Ada.Unchecked_Conversion;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">Package FITS with Pure, SPARK_Mode => On is</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    -----------------</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    --  CONSTANTS  --</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    -----------------</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    -- FITS 4.0 (3.1)</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    --  Each FITS structure shall consist of an integral number of</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    --  FITS blocks which are each 2880 bytes (23040 bits) in length.</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Block_Size_Bits  : Constant := 23_040;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Block_Size_Bytes : Constant := Block_Size_Bits / 8; -- Assumes 8-bit Byte.</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Pragma Assert( Block_Size_Bytes = 2_880 );</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    -- FITS 4.0 (3.3.1)</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    --  Each 2880-byte header block contains 36 keyword records.</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Keyword_Line_Size : Constant := 80;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Keywords_in_Block : Constant := Block_Size_Bytes / Keyword_Line_Size;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Pragma Assert( Keywords_in_Block = 36 );</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    -- IMPLEMENTATION LIMITATION.</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Maximum_Keyword_Blocks : Constant := 100; -- So, 3_600 keywords.</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    -- FITS 4.0 (3.2)</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    --  The header blocks shall contain only the restricted set of ASCII text</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    --  characters, decimal 32 through 126 (hexadecimal 20 through 7E).</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Header_Character_First : Constant Character := Character'Val(  32 );</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Header_Character_Last  : Constant Character := Character'Val( 126 );</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Subtype Header_Character is Character range Header_Character_First..Header_Character_Last</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">      with  Static_Predicate => Header_Character >= Header_Character_First and</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">                                Header_Character <= Header_Character_Last;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Subtype Record_String is String</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">      with Dynamic_Predicate =></span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">        Record_String'Length <= 80 and -- Should be "equal to 80", but for convienience is allowed to be less.</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">        (for all Ch of Record_String => Ch in Header_Character);</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Subtype KW_String is Record_String</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">      with Dynamic_Predicate =></span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">        KW_String'Length <= 8 and</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">        (if KW_String'Length in 1..8 then</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">         -- If there is a SPACE in the keword, no successive character may</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">         -- contain a non-SPACE character; this is equivelant to FOR ALL x in</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">         -- range 1..7, if the next character is not a space, neither is x.</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">           (for all I in KW_String'First..Positive'Pred(KW_String'Last)</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">                => (if KW_String(Positive'Succ(I)) /= ' ' then KW_String(I) /= ' ')</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">         )) and</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">      (for all Ch of KW_String => Ch in Header_Character);</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Checksum_Character_First : Constant Character := Character'Val( 16#30# );</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Checksum_Character_Last  : Constant Character := Character'Val( 16#72# );</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Subtype Checksum_Character is Header_Character</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">      range Checksum_Character_First..Checksum_Character_Last;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    subtype Digit is Header_Character</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">      with Static_Predicate => Digit in '0'..'9';</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Maximum_Axis_Count   : Constant := 999;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Maximum_Axis_Value   : Constant := 2**31 - 1; --Positive'Last;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    -------------------</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    --  SIMPLE TYPES --</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    -------------------</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Type Unsigned_64 is mod 2**64 with Size => 64;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Type Integer_64  is range -(2**63)..(2**63)-1 with Size => 64;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Type Element_Type is</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">      (</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">       ET_Float_64, -- -64 IEEE 64-bit floating point values</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">       ET_Float_32, -- -32 IEEE 32-bit floating point values</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">       ET_Unsigned_8, --  8 ASCII characters or 8-bit unsigned integers</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">       ET_Signed_16, --  16 16-bit, twos complement signed integers</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">       ET_Signed_32 --  32 32-bit, twos complement signed integers</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">      );</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    For Element_Type use</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">      (</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">       ET_Float_64 => -64,</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">       ET_Float_32 => -32,</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">       ET_Unsigned_8 =>   8,</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">       ET_Signed_16 =>  16,</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">       ET_Signed_32 =>  32</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">      );</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Type Element(<>) is private;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Type Axis_Count is range 0..Maximum_Axis_Count with Size => 10;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Type Axis_Value is range 1..Maximum_Axis_Value with Size => 32;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Type Offset_64 is mod 2**64 with size => 64;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    --Type Axis_Range is range 1..2**32 with Size => 32;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Type Axis_Dimensions is Array (Axis_Count range <>) of Axis_Value</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">      with Default_Component_Value => 1; --, TYPE_INVARIANT => true;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Subtype Primary_Data_Array is Axis_Dimensions(1..999);</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Subtype Random_Groups_Data is Axis_Dimensions(1..998);</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Function Flatten( Item : Axis_Dimensions ) return Offset_64;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Function EF( Item : FITS.Axis_Dimensions ) return Offset_64;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    -- FITS 4.0 (3.3.2)</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    --  The individual data values shall be stored in big-endian byte order</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    --  such that the byte containing the most significant bits of the</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    --  value appears first in the FITS file, followed by the remaining</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    --  bytes, if any, in decreasing order of significance.</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    ------------------</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    --  EXCEPTIONS  --</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    ------------------</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">--      -- Will be raised when an HDU contains an invalid character.</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">--      Data_Error   : Exception renames Ada.IO_Exceptions.Data_Error;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">--</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">--      --</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">--      Layout_Error : Exception renames Ada.IO_Exceptions.Layout_Error;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">Private</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    -- Check to make sure this is a good/usable representation.</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    Type Element( Style : Element_Type ) is record</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">Case Style is</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">   When ET_Unsigned_8 =>  U8  : stub; -- Interfaces.Unsigned_8 := 0;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">   When ET_Signed_16 =>  S16 : stub; -- Interfaces.Integer_16 := 0;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">   When ET_Signed_32 =>  S32 : stub; -- Interfaces.Integer_32 := 0;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">   When ET_Float_32 =>  F32 : stub; -- Interfaces.IEEE_Float_32 := 0.0;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">   When ET_Float_64 =>  F64 : stub; -- Interfaces.IEEE_Float_64 := 0.0;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">end case;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">    end record;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">--      with Bit_Order => System.High_Order_First, Unchecked_Union => True;</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">End FITS;</span><span style="font-size:12.0pt;color:black"><br>
<br>
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br>
To test for if a keyword is valid (construction/format-wise), all you have to do is, given a string
</span><span style="font-size:12.0pt;font-family:Consolas;color:#0C882A">Value</span><span style="font-size:12.0pt;color:black"> write
</span><span style="font-size:12.0pt;font-family:"Courier New";color:#0C64C0">Value in KW_String</span><span style="font-size:12.0pt;color:black"> and use the boolean result.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div class="MsoNormal" align="center" style="text-align:center">
<hr size="0" width="100%" align="center">
</div>
<div id="divRplyFwdMsg">
<p class="MsoNormal"><b><span style="color:black">From:</span></b><span style="color:black"> fitsbits <fitsbits-bounces@listmgr.nrao.edu> on behalf of fitsbits-request@listmgr.nrao.edu <fitsbits-request@listmgr.nrao.edu><br>
<b>Sent:</b> Saturday, July 17, 2021 10:00 AM<br>
<b>To:</b> fitsbits@listmgr.nrao.edu <fitsbits@listmgr.nrao.edu><br>
<b>Subject:</b> fitsbits Digest, Vol 140, Issue 4</span> <o:p></o:p></p>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">**Warning: This email originated external to the NMSU email system. Do not click on links or open attachments unless you are sure the content is safe.<br>
<br>
Send fitsbits mailing list submissions to<br>
        fitsbits@listmgr.nrao.edu<br>
<br>
To subscribe or unsubscribe via the World Wide Web, visit<br>
        <a href="https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Flistmgr.nrao.edu%2Fmailman%2Flistinfo%2Ffitsbits&amp;data=04%7C01%7Cefish%40nmsu.edu%7Cec5ad6a2c2ff419eb4b208d9493c2868%7Ca3ec87a89fb84158ba8ff11bace1ebaa%7C1%7C0%7C637621345003233749%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=wP7ojEDgXXkmg77FCzHSjpqwYHeZW7INFEBgNUxAo2I%3D&amp;reserved=0">
https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Flistmgr.nrao.edu%2Fmailman%2Flistinfo%2Ffitsbits&amp;data=04%7C01%7Cefish%40nmsu.edu%7Cec5ad6a2c2ff419eb4b208d9493c2868%7Ca3ec87a89fb84158ba8ff11bace1ebaa%7C1%7C0%7C637621345003233749%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=wP7ojEDgXXkmg77FCzHSjpqwYHeZW7INFEBgNUxAo2I%3D&amp;reserved=0</a><br>
or, via email, send a message with subject or body 'help' to<br>
        fitsbits-request@listmgr.nrao.edu<br>
<br>
You can reach the person managing the list at<br>
        fitsbits-owner@listmgr.nrao.edu<br>
<br>
When replying, please edit your Subject line so it is more specific<br>
than "Re: Contents of fitsbits digest..."<br>
<br>
<br>
Today's Topics:<br>
<br>
   1. Re: JSON to FITS bintable? (Simon Conseil)<br>
<br>
<br>
----------------------------------------------------------------------<br>
<br>
Message: 1<br>
Date: Thu, 15 Jul 2021 09:23:34 +0200<br>
From: Simon Conseil <simon@sconseil.fr><br>
To: fitsbits@listmgr.nrao.edu<br>
Subject: Re: [fitsbits] JSON to FITS bintable?<br>
Message-ID: <62a1ab75-9855-c797-7d45-09cdd9b7f3b8@sconseil.fr><br>
Content-Type: text/plain; charset=utf-8; format=flowed<br>
<br>
Hi,<br>
<br>
It seems difficult to have a generic solution for this kind of problem, <br>
but with a few lines of Python you can easily get a FITS (would need a <br>
bit more work if you want proper types, but those are not well defined <br>
in the JSON):<br>
<br>
In []: data = json.loads('.. data from the email ..')<br>
<br>
# Splitting data and metadata<br>
<br>
In []: orbits = data.pop('orbits')<br>
<br>
# data values were saved as string in the json, convert as float, "NULL" <br>
values could be replaced by NaNs and/or masked<br>
<br>
In []: dtype = [int, float, float, float, float, float, float, float, <br>
float, str, str, float, str, float, int]<br>
<br>
# Data was saved row by row, so use rows=...<br>
<br>
In []: tbl = Table(rows=orbits['data'], names=orbits['fields'], <br>
meta=data, dtype=dtype)<br>
<br>
In []: tbl<br>
Out[]:<br>
<Table length=2><br>
  idx        epoch               ec         ... vinf  geoEcc impFlag<br>
int64      float64           float64       ... str4 float64  int64<br>
----- ----------------- ------------------ ... ---- ------- -------<br>
     0 2459406.890974739 0.2998598423946383 ... NULL   1e+99       0<br>
   999 2459406.890974739 0.2000304724974162 ... NULL   1e+99       0<br>
<br>
# Currently just a dict<br>
<br>
In []: tbl.meta<br>
Out[]:<br>
{'H': '20.3',<br>
  'Vmag': '21.8',<br>
  'arc': '48.40',<br>
  'caDist': None,<br>
  'dec': '-34',<br>
  'elong': '167',<br>
  'geocentricScore': '0',<br>
  'ieoScore': '0',<br>
  'lastRun': '2021-07-13 11:52',<br>
  'moid': '0.6',<br>
  'nObs': '7',<br>
  'neo1kmScore': '0',<br>
  'neoScore': '16',<br>
  'objectName': 'P11hVaG',<br>
  'phaScore': '0',<br>
  'ra': '19:44',<br>
  'rate': '0.9',<br>
  'rating': '0',<br>
  'rmsN': '0.58',<br>
  'signature': {'source': 'NASA/JPL Scout API', 'version': '1.2'},<br>
  'tEphem': '2021-07-13 13:30',<br>
  'tisserandScore': '6',<br>
  'unc': '0.05',<br>
  'uncP1': '0.33',<br>
  'vInf': None}<br>
<br>
# Writing to FITS will convert .meta to a FITS Header, dropping <br>
'signature' which would need to be flattened<br>
<br>
In []: tbl.write('data.fits')<br>
WARNING: VerifyWarning: Keyword name 'geocentricScore' is greater than 8 <br>
characters or contains characters not allowed by the FITS standard; a <br>
HIERARCH card will be created. [astropy.io.fits.card]<br>
WARNING: VerifyWarning: Keyword name 'neo1kmScore' is greater than 8 <br>
characters or contains characters not allowed by the FITS standard; a <br>
HIERARCH card will be created. [astropy.io.fits.card]<br>
WARNING: VerifyWarning: Keyword name 'objectName' is greater than 8 <br>
characters or contains characters not allowed by the FITS standard; a <br>
HIERARCH card will be created. [astropy.io.fits.card]<br>
WARNING: VerifyWarning: Keyword name 'signature' is greater than 8 <br>
characters or contains characters not allowed by the FITS standard; a <br>
HIERARCH card will be created. [astropy.io.fits.card]<br>
WARNING: Attribute `signature` of type <class 'dict'> cannot be added to <br>
FITS Header - skipping [astropy.io.fits.convenience]<br>
WARNING: VerifyWarning: Keyword name 'tisserandScore' is greater than 8 <br>
characters or contains characters not allowed by the FITS standard; a <br>
HIERARCH card will be created. [astropy.io.fits.card]<br>
<br>
Simon<br>
<br>
<br>
<br>
On 7/15/21 8:37 AM, John K. Parejko via fitsbits wrote:<br>
> Well, you could always pickup from that github issue and contribute a patch to astropy for this support!<br>
> <br>
> John<br>
> <br>
>> On 14Jul 2021, at 21:03, Seaman, Robert Lewis - (rseaman) <rseaman@arizona.edu> wrote:<br>
>><br>
>> Hi John,<br>
>><br>
>> Thanks for the (almost) solution. (I presume you edited out the ellipsis.) JSON is fairly ubiquitous in the NEO community. I'm surprised support in astropy has been stalled for five years, at least as a bintable serialization. I may bite the bullet and roll
 my own with CFITSIO.<br>
>><br>
>> Rob<br>
>> --<br>
>><br>
>> ?On 7/14/21, 11:35 AM, "John K. Parejko" <parejkoj@uw.edu> wrote:<br>
>><br>
>>     I couldn?t quite get your json into an astropy.table, but this is almost what you need.<br>
>><br>
>>     import pandas as pd<br>
>>     import astropy.table<br>
>>     data = pd.read_json('table.json', orient='values', typ='series?)<br>
>>     table = astropy.table.Table.from_pandas(data.to_frame()) <? this fails<br>
>>     table.write(?table.fits?)<br>
>><br>
>>     You may be able to get it to work with the appropriate `pd.read_json` options. I?m not that familiar with pandas.<br>
>><br>
>>     There?s an open astropy PR about this, but it stalled out and most recently folks there were moving towards ECSV.<br>
>><br>
>>     <a href="https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fastropy%2Fastropy%2Fissues%2F4604&amp;data=04%7C01%7Cefish%40nmsu.edu%7Cec5ad6a2c2ff419eb4b208d9493c2868%7Ca3ec87a89fb84158ba8ff11bace1ebaa%7C1%7C0%7C637621345003233749%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=1B63vHbxSGHKz0Gk9LsdiAxuJhs0KQzvsNU%2FC77U9oo%3D&amp;reserved=0">
https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fastropy%2Fastropy%2Fissues%2F4604&amp;data=04%7C01%7Cefish%40nmsu.edu%7Cec5ad6a2c2ff419eb4b208d9493c2868%7Ca3ec87a89fb84158ba8ff11bace1ebaa%7C1%7C0%7C637621345003233749%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=1B63vHbxSGHKz0Gk9LsdiAxuJhs0KQzvsNU%2FC77U9oo%3D&amp;reserved=0</a><br>
>><br>
>>     John<br>
>><br>
>><br>
>>> On 13Jul 2021, at 09:12, Seaman, Robert Lewis - (rseaman) via fitsbits <fitsbits@listmgr.nrao.edu> wrote:<br>
>>><br>
>>> Howdy,<br>
>>><br>
>>> Anybody have a viable JSON to bintable converter / library to recommend?<br>
>>><br>
>>> Format as below.<br>
>>><br>
>>> Rob<br>
>>><br>
>>><br>
>>> {<br>
>>>     "H": "20.3",<br>
>>>     "Vmag": "21.8",<br>
>>>     "arc": "48.40",<br>
>>>     "caDist": null,<br>
>>>     "dec": "-34",<br>
>>>     "elong": "167",<br>
>>>     "geocentricScore": "0",<br>
>>>     "ieoScore": "0",<br>
>>>     "lastRun": "2021-07-13 11:52",<br>
>>>     "moid": "0.6",<br>
>>>     "nObs": "7",<br>
>>>     "neo1kmScore": "0",<br>
>>>     "neoScore": "16",<br>
>>>     "objectName": "P11hVaG",<br>
>>>     "orbits": {<br>
>>>         "count": "1000",<br>
>>>         "data": [<br>
>>>             [<br>
>>>                 0,<br>
>>>                 "2459406.890974739",<br>
>>>                 "2.998598423946383E-01",<br>
>>>                 "1.254932587424348E+00",<br>
>>>                 "2459535.040736465",<br>
>>>                 "3.1448800075530471E+02",<br>
>>>                 "6.1192414581791162E+01",<br>
>>>                 "1.1594628618305565E+01",<br>
>>>                 "21.376293",<br>
>>>                 "NULL",<br>
>>>                 "NULL",<br>
>>>                 "3.065249120E-01",<br>
>>>                 "NULL",<br>
>>>                 "1.000000000E+99",<br>
>>>                 0<br>
>>>             ],<br>
>>>    . . .<br>
>>>             [<br>
>>>                 999,<br>
>>>                 "2459406.890974739",<br>
>>>                 "2.000304724974162E-01",<br>
>>>                 "1.584871836255366E+00",<br>
>>>                 "2459160.741920622",<br>
>>>                 "3.1292408591618408E+02",<br>
>>>                 "2.2731638231383295E+02",<br>
>>>                 "1.7097327014467091E+01",<br>
>>>                 "19.682230",<br>
>>>                 "NULL",<br>
>>>                 "NULL",<br>
>>>                 "6.321307279E-01",<br>
>>>                 "NULL",<br>
>>>                 "1.000000000E+99",<br>
>>>                 0<br>
>>>             ]<br>
>>>         ],<br>
>>>         "fields": [<br>
>>>             "idx",<br>
>>>             "epoch",<br>
>>>             "ec",<br>
>>>             "qr",<br>
>>>             "tp",<br>
>>>             "om",<br>
>>>             "w",<br>
>>>             "inc",<br>
>>>             "H",<br>
>>>             "dca",<br>
>>>             "tca",<br>
>>>             "moid",<br>
>>>             "vinf",<br>
>>>             "geoEcc",<br>
>>>             "impFlag"<br>
>>>         ]<br>
>>>     },<br>
>>>     "phaScore": "0",<br>
>>>     "ra": "19:44",<br>
>>>     "rate": "0.9",<br>
>>>     "rating": "0",<br>
>>>     "rmsN": "0.58",<br>
>>>     "signature": {<br>
>>>         "source": "NASA/JPL Scout API",<br>
>>>         "version": "1.2"<br>
>>>     },<br>
>>>     "tEphem": "2021-07-13 13:30",<br>
>>>     "tisserandScore": "6",<br>
>>>     "unc": "0.05",<br>
>>>     "uncP1": "0.33",<br>
>>>     "vInf": null<br>
>>> }<br>
>>><br>
>>> _______________________________________________<br>
>>> fitsbits mailing list<br>
>>> fitsbits@listmgr.nrao.edu<br>
>>> <a href="https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Flistmgr.nrao.edu%2Fmailman%2Flistinfo%2Ffitsbits&amp;data=04%7C01%7Cefish%40nmsu.edu%7Cec5ad6a2c2ff419eb4b208d9493c2868%7Ca3ec87a89fb84158ba8ff11bace1ebaa%7C1%7C0%7C637621345003233749%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=wP7ojEDgXXkmg77FCzHSjpqwYHeZW7INFEBgNUxAo2I%3D&amp;reserved=0">
https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Flistmgr.nrao.edu%2Fmailman%2Flistinfo%2Ffitsbits&amp;data=04%7C01%7Cefish%40nmsu.edu%7Cec5ad6a2c2ff419eb4b208d9493c2868%7Ca3ec87a89fb84158ba8ff11bace1ebaa%7C1%7C0%7C637621345003233749%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=wP7ojEDgXXkmg77FCzHSjpqwYHeZW7INFEBgNUxAo2I%3D&amp;reserved=0</a><br>
>><br>
>>     --<br>
>>     *************************<br>
>>     John Parejko<br>
>>     parejkoj@uw.edu<br>
>>     Rubin Observatory, DIRAC Fellow<br>
>>     <a href="https://nam10.safelinks.protection.outlook.com/?url=http%3A%2F%2Fstaff.washington.edu%2Fparejkoj%2F&amp;data=04%7C01%7Cefish%40nmsu.edu%7Cec5ad6a2c2ff419eb4b208d9493c2868%7Ca3ec87a89fb84158ba8ff11bace1ebaa%7C1%7C0%7C637621345003233749%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=hgnaZchNztxDjdHbcssDi11OdxXT6GfLjfoQxNvHkrY%3D&amp;reserved=0">
https://nam10.safelinks.protection.outlook.com/?url=http%3A%2F%2Fstaff.washington.edu%2Fparejkoj%2F&amp;data=04%7C01%7Cefish%40nmsu.edu%7Cec5ad6a2c2ff419eb4b208d9493c2868%7Ca3ec87a89fb84158ba8ff11bace1ebaa%7C1%7C0%7C637621345003233749%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=hgnaZchNztxDjdHbcssDi11OdxXT6GfLjfoQxNvHkrY%3D&amp;reserved=0</a><br>
>>     Department of Physics and Astronomy<br>
>>     University of Washington<br>
>>     Seattle, WA<br>
>>     **************************<br>
>><br>
>><br>
>><br>
>><br>
>><br>
>><br>
>><br>
>><br>
>><br>
>><br>
>><br>
>><br>
>><br>
>><br>
>><br>
>><br>
>><br>
> <br>
> --<br>
> *************************<br>
> John Parejko<br>
> parejkoj@uw.edu<br>
> Rubin Observatory, DIRAC Fellow<br>
> <a href="https://nam10.safelinks.protection.outlook.com/?url=http%3A%2F%2Fstaff.washington.edu%2Fparejkoj%2F&amp;data=04%7C01%7Cefish%40nmsu.edu%7Cec5ad6a2c2ff419eb4b208d9493c2868%7Ca3ec87a89fb84158ba8ff11bace1ebaa%7C1%7C0%7C637621345003233749%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=hgnaZchNztxDjdHbcssDi11OdxXT6GfLjfoQxNvHkrY%3D&amp;reserved=0">
https://nam10.safelinks.protection.outlook.com/?url=http%3A%2F%2Fstaff.washington.edu%2Fparejkoj%2F&amp;data=04%7C01%7Cefish%40nmsu.edu%7Cec5ad6a2c2ff419eb4b208d9493c2868%7Ca3ec87a89fb84158ba8ff11bace1ebaa%7C1%7C0%7C637621345003233749%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=hgnaZchNztxDjdHbcssDi11OdxXT6GfLjfoQxNvHkrY%3D&amp;reserved=0</a><br>
> Department of Physics and Astronomy<br>
> University of Washington<br>
> Seattle, WA<br>
> **************************<br>
> <br>
> <br>
> <br>
> <br>
> <br>
> <br>
> <br>
> <br>
> <br>
> <br>
> <br>
> <br>
> <br>
> <br>
> <br>
> <br>
> <br>
> _______________________________________________<br>
> fitsbits mailing list<br>
> fitsbits@listmgr.nrao.edu<br>
> <a href="https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Flistmgr.nrao.edu%2Fmailman%2Flistinfo%2Ffitsbits&amp;data=04%7C01%7Cefish%40nmsu.edu%7Cec5ad6a2c2ff419eb4b208d9493c2868%7Ca3ec87a89fb84158ba8ff11bace1ebaa%7C1%7C0%7C637621345003243742%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=qsIHB5JK%2Fjd7bDm2W3Dk6VgVdlDaNn%2F4NJbVBJh3aCA%3D&amp;reserved=0">
https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Flistmgr.nrao.edu%2Fmailman%2Flistinfo%2Ffitsbits&amp;data=04%7C01%7Cefish%40nmsu.edu%7Cec5ad6a2c2ff419eb4b208d9493c2868%7Ca3ec87a89fb84158ba8ff11bace1ebaa%7C1%7C0%7C637621345003243742%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=qsIHB5JK%2Fjd7bDm2W3Dk6VgVdlDaNn%2F4NJbVBJh3aCA%3D&amp;reserved=0</a><br>
> <br>
<br>
<br>
<br>
------------------------------<br>
<br>
Subject: Digest Footer<br>
<br>
_______________________________________________<br>
fitsbits mailing list<br>
fitsbits@listmgr.nrao.edu<br>
<a href="https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Flistmgr.nrao.edu%2Fmailman%2Flistinfo%2Ffitsbits&amp;data=04%7C01%7Cefish%40nmsu.edu%7Cec5ad6a2c2ff419eb4b208d9493c2868%7Ca3ec87a89fb84158ba8ff11bace1ebaa%7C1%7C0%7C637621345003243742%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=qsIHB5JK%2Fjd7bDm2W3Dk6VgVdlDaNn%2F4NJbVBJh3aCA%3D&amp;reserved=0">https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Flistmgr.nrao.edu%2Fmailman%2Flistinfo%2Ffitsbits&amp;data=04%7C01%7Cefish%40nmsu.edu%7Cec5ad6a2c2ff419eb4b208d9493c2868%7Ca3ec87a89fb84158ba8ff11bace1ebaa%7C1%7C0%7C637621345003243742%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=qsIHB5JK%2Fjd7bDm2W3Dk6VgVdlDaNn%2F4NJbVBJh3aCA%3D&amp;reserved=0</a><br>
<br>
<br>
------------------------------<br>
<br>
End of fitsbits Digest, Vol 140, Issue 4<br>
****************************************<o:p></o:p></p>
</div>
</div>
</div>
</body>
</html>