library(xrayr)
library(tidyverse)
#> ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
#>  dplyr     1.1.2      readr     2.1.4
#>  forcats   1.0.0      stringr   1.5.0
#>  ggplot2   3.4.2      tibble    3.2.1
#>  lubridate 1.9.2      tidyr     1.3.0
#>  purrr     1.0.1     
#> ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
#>  dplyr::filter() masks stats::filter()
#>  dplyr::lag()    masks stats::lag()
#>  Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

Example of XSpec output

Use built-in dataset xspec_outputor try to read xspec output file using readr::read_lines

xspec_output
#>  [1] "========================================================================"  
#>  [2] "Model phabs<1>*constant<2>*powerlaw<3> Source No.: 1   Active/On"          
#>  [3] "Model Model Component  Parameter  Unit     Value"                          
#>  [4] " par  comp"                                                                
#>  [5] "                           Data group: 1"                                  
#>  [6] "   1    1   phabs      nH         10^22    0.491000     frozen"            
#>  [7] "   2    2   constant   factor              1.00000      frozen"            
#>  [8] "   3    3   powerlaw   PhoIndex            1.94000      frozen"            
#>  [9] "   4    3   powerlaw   norm                1.22743E-02  +/-  1.56172E-04  "
#> [10] "                           Data group: 2"                                  
#> [11] "   5    1   phabs      nH         10^22    0.491000     = p1"              
#> [12] "   6    2   constant   factor              0.858327     +/-  4.43129E-02  "
#> [13] "   7    3   powerlaw   PhoIndex            1.94000      = p3"              
#> [14] "   8    3   powerlaw   norm                1.22743E-02  = p4"              
#> [15] "                           Data group: 3"                                  
#> [16] "   9    1   phabs      nH         10^22    0.491000     = p1"              
#> [17] "  10    2   constant   factor              1.03250      +/-  6.42836E-02  "
#> [18] "  11    3   powerlaw   PhoIndex            1.94000      = p3"              
#> [19] "  12    3   powerlaw   norm                1.22743E-02  = p4"              
#> [20] "                           Data group: 4"                                  
#> [21] "  13    1   phabs      nH         10^22    0.491000     = p1"              
#> [22] "  14    2   constant   factor              0.877461     +/-  4.71135E-02  "
#> [23] "  15    3   powerlaw   PhoIndex            1.94000      = p3"              
#> [24] "  16    3   powerlaw   norm                1.22743E-02  = p4"              
#> [25] "                           Data group: 5"                                  
#> [26] "  17    1   phabs      nH         10^22    0.491000     = p1"              
#> [27] "  18    2   constant   factor              0.981950     +/-  4.79727E-02  "
#> [28] "  19    3   powerlaw   PhoIndex            1.94000      = p3"              
#> [29] "  20    3   powerlaw   norm                1.22743E-02  = p4"              
#> [30] "                           Data group: 6"                                  
#> [31] "  21    1   phabs      nH         10^22    0.491000     = p1"              
#> [32] "  22    2   constant   factor              1.04055      +/-  4.94828E-02  "
#> [33] "  23    3   powerlaw   PhoIndex            1.94000      = p3"              
#> [34] "  24    3   powerlaw   norm                1.22743E-02  = p4"              
#> [35] "                           Data group: 7"                                  
#> [36] "  25    1   phabs      nH         10^22    0.491000     = p1"              
#> [37] "  26    2   constant   factor              0.988650     +/-  4.92517E-02  "
#> [38] "  27    3   powerlaw   PhoIndex            1.94000      = p3"              
#> [39] "  28    3   powerlaw   norm                1.22743E-02  = p4"              
#> [40] "                           Data group: 8"                                  
#> [41] "  29    1   phabs      nH         10^22    0.491000     = p1"              
#> [42] "  30    2   constant   factor              0.843237     +/-  4.83731E-02  "
#> [43] "  31    3   powerlaw   PhoIndex            1.94000      = p3"              
#> [44] "  32    3   powerlaw   norm                1.22743E-02  = p4"              
#> [45] "                           Data group: 9"                                  
#> [46] "  33    1   phabs      nH         10^22    0.491000     = p1"              
#> [47] "  34    2   constant   factor              1.01853      +/-  1.42428E-02  "
#> [48] "  35    3   powerlaw   PhoIndex            1.94000      = p3"              
#> [49] "  36    3   powerlaw   norm                1.22743E-02  = p4"              
#> [50] "                           Data group: 10"                                 
#> [51] "  37    1   phabs      nH         10^22    0.491000     = p1"              
#> [52] "  38    2   constant   factor              1.02379      +/-  1.43999E-02  "
#> [53] "  39    3   powerlaw   PhoIndex            1.94000      = p3"              
#> [54] "  40    3   powerlaw   norm                1.22743E-02  = p4"              
#> [55] "________________________________________________________________________"  
#> [56] ""                                                                          
#> [57] ""                                                                          
#> [58] "Fit statistic  : C-Statistic                  304.86     using 333 bins."  
#> [59] "                 C-Statistic                   37.72     using 40 bins."   
#> [60] "                 C-Statistic                   40.74     using 40 bins."   
#> [61] "                 C-Statistic                   33.40     using 40 bins."   
#> [62] "                 C-Statistic                   35.95     using 40 bins."   
#> [63] "                 C-Statistic                   34.48     using 40 bins."   
#> [64] "                 C-Statistic                   37.60     using 40 bins."   
#> [65] "                 C-Statistic                   43.21     using 40 bins."   
#> [66] "                 C-Statistic                  136.87     using 149 bins."  
#> [67] "                 C-Statistic                  134.33     using 149 bins."  
#> [68] "Total fit statistic                           839.16     with 901 d.o.f."  
#> [69] ""                                                                          
#> [70] "Test statistic : Chi-Squared                  890.43     using 911 bins."  
#> [71] " Null hypothesis probability of 5.93e-01 with 901 degrees of freedom"      
#> [72] ""                                                                          
#> [73] "!XSPEC12>pl ld"                                                            
#> [74] ""                                                                          
#> [75] "!XSPEC12>plot ld"                                                          
#> [76] ""                                                                          
#> [77] "!XSPEC12>err 6 10 14 18 22 26 30 34 38"                                    
#> [78] ""                                                                          
#> [79] "!XSPEC12>error 6 10 14 18 22 26 30 34 38"                                  
#> [80] " Parameter   Confidence Range (2.706)"                                     
#> [81] "     6     0.787334     0.933086    (-0.0709923,0.0747598)"                
#> [82] "    10     0.929766      1.14119    (-0.102735,0.108692)"                  
#> [83] "    14     0.802051     0.957009    (-0.0754104,0.0795481)"                
#> [84] "    18     0.905033      1.06282    (-0.0769173,0.0808715)"                
#> [85] "    22     0.961193      1.12395    (-0.0793531,0.0834028)"                
#> [86] "    26      0.90973      1.07172    (-0.0789209,0.0830731)"                
#> [87] "    30     0.765848     0.924946    (-0.077389,0.0817098)"                 
#> [88] "    34     0.995438       1.0423    (-0.0230939,0.0237635)"                
#> [89] "    38      1.00044      1.04781    (-0.0233489,0.0240258)"

Now lets try to parse this file

General function

xrayr::xspec_parse_output(xspec_output)
#> $model
#> [1] "phabs<1>*constant<2>*powerlaw<3>"
#> 
#> $fit_params
#> # A tibble: 40 × 10
#>    data_group   par n_comp comp   par_comp units  value    error is_frozen tie  
#>    <fct>      <int>  <int> <chr>  <chr>    <chr>  <dbl>    <dbl> <chr>     <chr>
#>  1 1              1      1 phabs  nH       10^22 0.491  NA       +         NA   
#>  2 1              2      2 const… factor   NA    1      NA       +         NA   
#>  3 1              3      3 power… PhoIndex NA    1.94   NA       +         NA   
#>  4 1              4      3 power… norm     NA    0.0123  1.56e-4 NA        NA   
#>  5 2              5      1 phabs  nH       10^22 0.491  NA       NA        =p1  
#>  6 2              6      2 const… factor   NA    0.858   4.43e-2 NA        NA   
#>  7 2              7      3 power… PhoIndex NA    1.94   NA       NA        =p3  
#>  8 2              8      3 power… norm     NA    0.0123 NA       NA        =p4  
#>  9 3              9      1 phabs  nH       10^22 0.491  NA       NA        =p1  
#> 10 3             10      2 const… factor   NA    1.03    6.43e-2 NA        NA   
#> # ℹ 30 more rows
#> 
#> $conf_errors
#> # A tibble: 9 × 4
#>     par error_lo error_hi diff_err              
#>   <dbl>    <dbl>    <dbl> <chr>                 
#> 1     6    0.787    0.933 (-0.0709923,0.0747598)
#> 2    10    0.930    1.14  (-0.102735,0.108692)  
#> 3    14    0.802    0.957 (-0.0754104,0.0795481)
#> 4    18    0.905    1.06  (-0.0769173,0.0808715)
#> 5    22    0.961    1.12  (-0.0793531,0.0834028)
#> 6    26    0.910    1.07  (-0.0789209,0.0830731)
#> 7    30    0.766    0.925 (-0.077389,0.0817098) 
#> 8    34    0.995    1.04  (-0.0230939,0.0237635)
#> 9    38    1.00     1.05  (-0.0233489,0.0240258)

Parse model, fit params and err confidence

print(xrayr::xspec_parse_model(xspec_output))
#> [1] "phabs<1>*constant<2>*powerlaw<3>"
print(xrayr::xspec_parse_params(xspec_output))
#> # A tibble: 40 × 10
#>    data_group   par n_comp comp   par_comp units  value    error is_frozen tie  
#>    <fct>      <int>  <int> <chr>  <chr>    <chr>  <dbl>    <dbl> <chr>     <chr>
#>  1 1              1      1 phabs  nH       10^22 0.491  NA       +         NA   
#>  2 1              2      2 const… factor   NA    1      NA       +         NA   
#>  3 1              3      3 power… PhoIndex NA    1.94   NA       +         NA   
#>  4 1              4      3 power… norm     NA    0.0123  1.56e-4 NA        NA   
#>  5 2              5      1 phabs  nH       10^22 0.491  NA       NA        =p1  
#>  6 2              6      2 const… factor   NA    0.858   4.43e-2 NA        NA   
#>  7 2              7      3 power… PhoIndex NA    1.94   NA       NA        =p3  
#>  8 2              8      3 power… norm     NA    0.0123 NA       NA        =p4  
#>  9 3              9      1 phabs  nH       10^22 0.491  NA       NA        =p1  
#> 10 3             10      2 const… factor   NA    1.03    6.43e-2 NA        NA   
#> # ℹ 30 more rows
print(xrayr::xspec_parse_conf_errors(xspec_output))
#> # A tibble: 9 × 4
#>     par error_lo error_hi diff_err              
#>   <dbl>    <dbl>    <dbl> <chr>                 
#> 1     6    0.787    0.933 (-0.0709923,0.0747598)
#> 2    10    0.930    1.14  (-0.102735,0.108692)  
#> 3    14    0.802    0.957 (-0.0754104,0.0795481)
#> 4    18    0.905    1.06  (-0.0769173,0.0808715)
#> 5    22    0.961    1.12  (-0.0793531,0.0834028)
#> 6    26    0.910    1.07  (-0.0789209,0.0830731)
#> 7    30    0.766    0.925 (-0.077389,0.0817098) 
#> 8    34    0.995    1.04  (-0.0230939,0.0237635)
#> 9    38    1.00     1.05  (-0.0233489,0.0240258)