Source code for galfitools.galout.fitlog2csv
#! /usr/bin/env python3
import re
import numpy as np
[docs]
def log2csv(num: int, fileout: str, path=None):
"""converts GALFIT fit.log file into a comma separated
values file (CSV)
Parameters
----------
num : int
number of the fit in fit.log to
convert to csv. Default: last GALFIT fit
fileout : str
name of the output file
path : str
name of the path where fit.log file is located
Returns
-------
None
Notes
-----
If path= None, it assumes that fit.log is in the same directory where
this function is executed.
"""
file = "fit.log"
if path != None:
file = path + file
# fileout="fitlog.csv"
fitlogF = open(file, "r")
f_out = open(fileout, "w")
# All lines including the blank ones
lines = (line.rstrip() for line in fitlogF)
lines = (line.split("#", 1)[0] for line in lines) # remove comments
# remove lines containing only comments
lines = (line.rstrip() for line in lines)
lines = (line for line in lines if line) # Non-blank lines
lines = list(lines)
index = 0
linnp = np.array(lines)
idxfits = np.where(
linnp
== "---------------------------------------------"
+ "--------------------------------"
)
if num:
# use user number
index = idxfits[0][2 * num - 2]
cnt = num * 2 - 1
else:
# use last one by default
index = idxfits[0][-2]
cnt = int(len(idxfits[0]) - 1)
line = lines[index]
(tmp) = line.split()
if (
tmp[0]
== "-------------------------------------------"
+ "----------------------------------"
):
index += 1
lineout = lines[index] + "\n"
f_out.write(lineout)
index += 1
lineout = lines[index] + "\n"
f_out.write(lineout)
index += 1
lineout = lines[index] + "\n"
f_out.write(lineout)
index += 1
lineout = lines[index] + "\n"
f_out.write(lineout)
# put chi and sky at the beggining
index2 = idxfits[0][cnt] - 4
line = lines[index2]
line = re.sub("[^A-Za-z0-9.+.-]+", " ", line)
(tmp) = line.split()
lineout1 = "sky = " + tmp[3] + ", " + tmp[4] + ", " + tmp[5]
index2 += 1
line = lines[index2]
line = re.sub("[^A-Za-z0-9.+.-]+", " ", line)
(tmp) = line.split()
lineout2 = " skyerr = " + tmp[0] + ", " + tmp[1] + ", " + tmp[2]
lineout = lineout1 + "," + lineout2 + "\n"
f_out.write(lineout)
index2 += 1
line = lines[index2]
line = re.sub("[^A-Za-z0-9.+]+", " ", line)
(tmp) = line.split()
lineout1 = "Chi^2 = " + tmp[2] + " ndof = " + tmp[4]
index2 += 1
line = lines[index2]
(tmp) = line.split()
lineout2 = " ".join(tmp)
lineout = lineout1 + " " + lineout2 + "\n"
f_out.write(lineout)
cnt += 2
lineout = "model parameters, error parameters\n"
f_out.write(lineout)
lineout = "------------------------------------------------------------\n"
f_out.write(lineout)
# end of header
index += 1
line = lines[index]
line = re.sub("[^A-Za-z0-9.+.-]+", " ", line)
(tmp) = line.split()
while tmp[0] != "sky":
lineout1 = ",".join(tmp)
index += 1
line = lines[index]
line = re.sub("[^A-Za-z0-9.+.-]+", " ", line)
(tmp) = line.split()
lineout2 = ",".join(tmp)
lineout = lineout1 + "," + lineout2 + "\n"
f_out.write(lineout)
index += 1
line = lines[index]
line = re.sub("[^A-Za-z0-9.+.-]+", " ", line)
(tmp) = line.split()
fitlogF.close()
f_out.close()