add extracData.py for DWUCK4
This commit is contained in:
parent
67cd8a1b09
commit
04505f81c1
|
@ -70,9 +70,6 @@ class FitPlotWindow(QWidget):
|
|||
def plot_Fit(self):
|
||||
self.ax.clear()
|
||||
|
||||
self.ax.errorbar(self.x_exp, self.y_exp, xerr=self.x_err, yerr=self.y_err,
|
||||
fmt='x', label='Experimental Data', color='black', markersize = 15, elinewidth=2)
|
||||
|
||||
fitTheory = []
|
||||
fitTheory_lower = []
|
||||
fitTheory_upper = []
|
||||
|
@ -121,6 +118,10 @@ class FitPlotWindow(QWidget):
|
|||
fontsize=12, verticalalignment='bottom', horizontalalignment='left', color='grey')
|
||||
|
||||
|
||||
self.ax.errorbar(self.x_exp, self.y_exp, xerr=self.x_err, yerr=self.y_err,
|
||||
fmt='x', label='Experimental Data', color='black', markersize = 15, elinewidth=2)
|
||||
|
||||
|
||||
# Plot decorator
|
||||
# Apply log scale for y-axis if selected
|
||||
if self.log_scale_checkbox.isChecked():
|
||||
|
@ -136,7 +137,7 @@ class FitPlotWindow(QWidget):
|
|||
|
||||
|
||||
self.ax.set_xlabel(r'$\theta_{cm}$ [deg]')
|
||||
self.ax.set_ylabel(r'd$\sigma$/d$\Omega$ [deg]')
|
||||
self.ax.set_ylabel(r'd$\sigma$/d$\Omega$ [a.u.]')
|
||||
# self.ax.legend(loc='upper right', frameon=True)
|
||||
|
||||
self.ax.autoscale(enable=True, axis='x', tight=True)
|
||||
|
|
308
dwuck4/extractData.py
Executable file
308
dwuck4/extractData.py
Executable file
|
@ -0,0 +1,308 @@
|
|||
#!/usr/bin/env python3
|
||||
import sys
|
||||
|
||||
s = float(sys.argv[1])
|
||||
filename = sys.argv[2]
|
||||
|
||||
if len(sys.argv) < 3:
|
||||
print("Error: Not enough arguments provided.")
|
||||
print("Usage: ./{sys.argv[0]} spin filename")
|
||||
sys.exit(1)
|
||||
|
||||
#####################################################
|
||||
import numpy as np
|
||||
import re
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
def extract_BoundState(file_path=filename):
|
||||
x_data, y_data = [], []
|
||||
|
||||
start_line = None
|
||||
|
||||
with open(file_path, "r") as file:
|
||||
for i, line in enumerate(file, start=1):
|
||||
if "0 R RL,R" in line:
|
||||
if start_line is None:
|
||||
start_line = i+1
|
||||
|
||||
if len(x_data) > 1 and line[0] == "0" :
|
||||
start_line = None
|
||||
break
|
||||
|
||||
if start_line != None:
|
||||
if start_line <= i :
|
||||
columns = line.split()
|
||||
if len(columns) >= 2:
|
||||
x_data.append(float(columns[0])) # Convert to float
|
||||
y_data.append(float(columns[1]))
|
||||
|
||||
return [x_data, y_data]
|
||||
|
||||
#-------------------------------------------------------
|
||||
def extract_ScatAmp(file_path=filename):
|
||||
sAmpIn = []
|
||||
sAmpOut = []
|
||||
|
||||
start_line = None
|
||||
LMAX = None
|
||||
Spin2In = None
|
||||
Spin2Out = None
|
||||
|
||||
with open(file_path, "r") as file:
|
||||
for i, line in enumerate(file, start=1):
|
||||
|
||||
if LMAX is None and "LMAX" in line :
|
||||
columns = line.split()
|
||||
LMAX = int(columns[6])
|
||||
print(f"LMAX = {LMAX}")
|
||||
|
||||
if Spin2In != None and Spin2Out is None and "2*STR" in line:
|
||||
columns = line.split()
|
||||
Spin2Out = int(float(columns[-1]))
|
||||
print(f"2*Spin out = {Spin2Out}")
|
||||
|
||||
if Spin2In is None and "2*STR" in line:
|
||||
columns = line.split()
|
||||
Spin2In = int(float(columns[-1]))
|
||||
print(f"2*Spin In = {Spin2In}")
|
||||
|
||||
|
||||
if "L REAL D1 IMAG D1 REAL D2" in line:
|
||||
if start_line is None:
|
||||
start_line = i+1
|
||||
|
||||
if LMAX != None and len(sAmpIn) > LMAX :
|
||||
start_line = None
|
||||
break
|
||||
|
||||
if start_line != None:
|
||||
if start_line <= i :
|
||||
columns = line.split()
|
||||
temp = []
|
||||
if len(columns) >= 2:
|
||||
if line[0] == "+" : # these line are for outgoing
|
||||
for i in range(2*(Spin2Out+1)+1):
|
||||
temp.append(float(columns[i+1]))
|
||||
sAmpOut.append(temp)
|
||||
else:
|
||||
for i in range(2*(Spin2In+1)+1):
|
||||
temp.append(float(columns[i]))
|
||||
sAmpIn.append(temp)
|
||||
|
||||
return Spin2In, sAmpIn, Spin2Out, sAmpOut
|
||||
|
||||
#-------------------------------------------------------
|
||||
def extract_ElasticXsec(file_path=filename):
|
||||
x_data, y_data = [], []
|
||||
|
||||
start_line = None
|
||||
|
||||
with open(file_path, "r") as file:
|
||||
for i, line in enumerate(file, start=1):
|
||||
if "0 Theta Sig(1)/Coul Sigma(1)" in line:
|
||||
if start_line is None:
|
||||
start_line = i+1
|
||||
|
||||
if len(x_data) > 1 and line[0] == "0" :
|
||||
start_line = None
|
||||
break
|
||||
|
||||
if start_line != None:
|
||||
if start_line <= i :
|
||||
columns = line.split()
|
||||
if len(columns) >= 2:
|
||||
x_data.append(float(columns[0])) # Convert to float
|
||||
y_data.append(float(columns[1]))
|
||||
|
||||
return [x_data, y_data]
|
||||
|
||||
|
||||
#-------------------------------------------------------
|
||||
def extract_Xsec(file_path=filename):
|
||||
x_data, y_data = [], []
|
||||
|
||||
start_line = None
|
||||
|
||||
|
||||
with open(file_path, "r") as file:
|
||||
for i, line in enumerate(file, start=1):
|
||||
if "0 Theta Inelsig,fm**2" in line:
|
||||
if start_line is None:
|
||||
start_line = i+1
|
||||
|
||||
if len(x_data) > 1 and "0Tot-sig" in line :
|
||||
start_line = None
|
||||
break
|
||||
|
||||
if start_line != None:
|
||||
if start_line <= i :
|
||||
columns = line.split()
|
||||
if len(columns) >= 2:
|
||||
x_data.append(float(columns[0])) # Convert to float
|
||||
y_data.append(float(columns[1]))
|
||||
|
||||
return [x_data, y_data]
|
||||
|
||||
#-------------------------------------------------------
|
||||
def extract_RadialMatrix(ma:str, mb:str, file_path=filename):
|
||||
data = []
|
||||
|
||||
start_line = None
|
||||
LMAX = None
|
||||
|
||||
with open(file_path, "r") as file:
|
||||
for i, line in enumerate(file, start=1):
|
||||
|
||||
if LMAX is None and "LMAX" in line :
|
||||
columns = line.split()
|
||||
LMAX = int(columns[6])
|
||||
|
||||
if "0 RADIAL MATRIX ELEMENTS," in line and ma in line and mb in line:
|
||||
if start_line is None:
|
||||
start_line = i+2
|
||||
|
||||
if LMAX != None and len(data) > LMAX :
|
||||
start_line = None
|
||||
break
|
||||
|
||||
if start_line != None:
|
||||
if start_line <= i :
|
||||
l_data = int(line[:4])
|
||||
real_data = float(line[4:14])
|
||||
imag_data = float(line[14:])
|
||||
data.append([l_data, real_data, imag_data])
|
||||
|
||||
return data
|
||||
|
||||
#-------------------------------------------------------
|
||||
def plot_BoundState(data):
|
||||
x_data, y_data = data
|
||||
plt.figure(figsize=(8, 5))
|
||||
plt.plot(x_data, y_data, marker="o", linestyle="-", color="b", label="Extracted Data")
|
||||
plt.xlabel("Radius [fm]")
|
||||
plt.ylabel("Value")
|
||||
plt.title("Bound state radial function")
|
||||
plt.grid(True)
|
||||
plt.show(block=False)
|
||||
|
||||
def plot_RadialMatrix(data, msg:str = ""):
|
||||
l_data, real_data, imag_data = [], [], []
|
||||
|
||||
for a in data:
|
||||
l_data.append(a[0])
|
||||
real_data.append(a[1])
|
||||
imag_data.append(a[2])
|
||||
|
||||
plt.figure(figsize=(8, 5))
|
||||
plt.plot(l_data, real_data, marker="o", linestyle="-", color="b", label="Real")
|
||||
plt.plot(l_data, imag_data, marker="x", linestyle="-", color="r", label="Imag")
|
||||
plt.xlabel("L")
|
||||
plt.ylabel("Value")
|
||||
plt.title("Radial Matrix " + msg)
|
||||
plt.grid(True)
|
||||
plt.show(block=False)
|
||||
|
||||
|
||||
def plot_Xsec(data, isRuth = False):
|
||||
x_data, y_data = data
|
||||
plt.figure(figsize=(8, 5))
|
||||
plt.plot(x_data, y_data, linestyle="-", color="b", label="Extracted Data")
|
||||
plt.xlabel("Angle [deg]")
|
||||
if isRuth:
|
||||
plt.ylabel("d.s.c / Ruth ")
|
||||
else:
|
||||
plt.ylabel("d.s.c [mb/sr]")
|
||||
plt.yscale('log')
|
||||
plt.xlim(-5, 185)
|
||||
plt.xticks(np.arange(0, 181, 20))
|
||||
plt.grid(True)
|
||||
plt.show(block=False)
|
||||
|
||||
|
||||
def plot_SMatrix(data, spin2):
|
||||
|
||||
l_data = []
|
||||
nSpin = spin2+1
|
||||
|
||||
fig, axes = plt.subplots(1, nSpin, figsize=(6*nSpin, 4))
|
||||
|
||||
smIn = []
|
||||
for a in data:
|
||||
l_data.append(int(a[0]))
|
||||
tempSM = []
|
||||
for i in range(nSpin):
|
||||
real = a[2*i+1]
|
||||
imag = a[2*i+2]
|
||||
tempSM.append((real + imag * 1j)*2j + 1 )
|
||||
smIn.append(tempSM)
|
||||
|
||||
for i in range(nSpin):
|
||||
real_parts = [entry[i].real for entry in smIn]
|
||||
imag_parts = [entry[i].imag for entry in smIn]
|
||||
|
||||
start = 1
|
||||
if i == nSpin -1 :
|
||||
start = 0
|
||||
|
||||
# Plot real part vs L
|
||||
axes[i].plot(l_data[start:], real_parts[start:], label=f'Re', marker='o')
|
||||
|
||||
# Plot imaginary part vs L
|
||||
axes[i].plot(l_data[start:], imag_parts[start:], label=f'Im', marker='x')
|
||||
|
||||
# Adding labels and title
|
||||
axes[i].set_xlabel('L')
|
||||
axes[i].set_ylabel('Value')
|
||||
axes[i].set_title(f'Real and Imaginary Parts vs L for Spin {i-spin2/2.:+.1f}')
|
||||
|
||||
# Add grid lines
|
||||
axes[i].set_xlim(-1, max(l_data)+1)
|
||||
axes[i].set_ylim(-1.1, 1.1)
|
||||
axes[i].set_xticks(np.arange(0, max(l_data)+3, 5)) # Set x-ticks from 0 to 20 with step 5
|
||||
axes[i].grid(True)
|
||||
|
||||
# Show the legend
|
||||
axes[i].legend()
|
||||
|
||||
# Adjust layout to prevent overlapping subplots
|
||||
plt.tight_layout()
|
||||
plt.show(block=False)
|
||||
|
||||
##############################################################################
|
||||
##############################################################################
|
||||
|
||||
# bs_data = extract_BoundState()
|
||||
# plot_BoundState(bs_data)
|
||||
|
||||
# spin2In, sAmpIn, spin2Out, sAmpOut = extract_ScatAmp()
|
||||
|
||||
# plot_SMatrix(sAmpIn, spin2In)
|
||||
# plot_SMatrix(sAmpOut, spin2Out)
|
||||
|
||||
# elXsec_data = extract_ElasticXsec()
|
||||
# plot_Xsec(elXsec_data)
|
||||
|
||||
# xsec_data = extract_Xsec()
|
||||
# plot_Xsec(xsec_data)
|
||||
|
||||
radmat0 = extract_RadialMatrix("+ 2/2", "+ 1/2")
|
||||
plot_RadialMatrix(radmat0, "+1,+1/2")
|
||||
|
||||
radmat1 = extract_RadialMatrix("+ 2/2", "+-1/2")
|
||||
plot_RadialMatrix(radmat1, "+1,-1/2")
|
||||
|
||||
radmat2 = extract_RadialMatrix("+ 0/2", "+ 1/2")
|
||||
plot_RadialMatrix(radmat2, "+0,+1/2")
|
||||
|
||||
radmat3 = extract_RadialMatrix("+ 0/2", "+-1/2")
|
||||
plot_RadialMatrix(radmat3, "+0,-1/2")
|
||||
|
||||
radmat4 = extract_RadialMatrix("+-2/2", "+ 1/2")
|
||||
plot_RadialMatrix(radmat4, "-1,+1/2")
|
||||
|
||||
radmat5 = extract_RadialMatrix("+-2/2", "+-1/2")
|
||||
plot_RadialMatrix(radmat5, "-1,-1/2")
|
||||
|
||||
|
||||
input("Press Enter to exit.")
|
Loading…
Reference in New Issue
Block a user