Hobby
私の趣味のページです。音楽や物理の話など色んなことをずらずら書いてます。趣味で書いているアカペラ楽譜や研究メモとかも掲載しています。最後にリンク集も載せておきます。
作曲
ド素人が趣味で作曲したものです。もともとはInstrumentalではなく、歌声入りのイメージで作曲しています(既に歌詞を決めてあるものもあります)が、堀には歌声入り音源を制作するスキルと体力がありません。曲のタイトルが決まってないのもはバッチ番号を添えています。音楽制作ソフトウェアの「Studio One」や「MuseScore」を使用しています。
アカペラの楽譜
学部時代はQ.E.D.というあだ名でアカペラサークルに所属していました。所属当時、編曲(アレンジ)を担って色んなアカペラの楽譜を書いていました。楽譜作成ソフトウェア「MuseScore」を使用して自分で作成したアカペラの楽譜を掲載しています。楽譜はPDF FileでもCompressed MuseScore File (.mscz)でもダウンロードできます。
*無料で提供していますが、ダウンロードする際は堀(hori.fumiya.36s"at"st.kyoto-u.ac.jp)まで連絡していただけると堀が喜びます。
Crazy Moon~キミ・ハ・ムテキ~ / 嵐
Vandalize / ONE OK ROCK
THE FIRST TAKE 京大
だいたい研究室の139号室(学生部屋)とかで録音した堀の歌声や全部堀アカペラです。「THE FIRST TAKE 京大」という名前は研究室のメンバーのアイデアです。伴奏があるものは、スマホでつながる音楽コラボアプリ「nana」を使用しています。アカペラの音源は全パート堀の声です(イヤホン推奨)。低クオリティなので再生ボタンを押して聞き苦しいと思ったら、すぐに停止ボタンを押してください。
Renegades (Piano) / ONE OK ROCK
Be the light / ONE OK ROCK
Wasted Nights / ONE OK ROCK
フライングゲット / AKB48 (全部堀アカペラ)
Pretender / Official 髭男dism
ハナミズキ / 一青窈
ラーメン備忘録
思い出深いラーメンの写真備忘録。写真をクリックするとグルメレビューサイト「食べログ」に飛びます。ラーメンではないですが麵類を含むので広島風お好み焼きも載せています。
プログラミング
大したソースコードではないですが、簡単な計算ができて研究で使えそうなPythonソースコードをメモ書きの気分で載せています。
*堀は全くのプログラミング初心者なので、美しくてシンプルなコードや効率のいいコードなど求めていません。計算結果さえ出てくればそれで満足しています。また、コードの正確さについては保証しません。参考にする場合は、あくまで自己責任でお願いします。
結晶場中における4f電子系の波動関数
結晶場ハミルトニアンの行列要素を計算し、対角化して固有値問題を解く。数値計算モジュールNumPyを使用。import numpy as np
###Calculation Stevens Operators#################################################
###J,L,S#########################################################################
J = 4 #整数または分数で入力する.
L = 5
S = 1
g_J = 1+(J*(J+1)+S*(S+1)-L*(L+1))/(2*J*(J+1))
f4_int = [0,0,12,15,60,14,60,60,60] #Jが整数の場合のF(4)
f4_half = [0,0,0,0,0,60,0,60,0,60,0,60,0,60,0,60]#Jが半整数の場合のF(4)
f6_int = [0,0,0,180,1260,1260,7560,3780]#Jが整数の場合のF(6)
f6_half = [0,0,0,0,0,0,0,1260,0,2520,0,3780,0,7560,0,13860] #Jが半整数の場合のF(6)
if isinstance(J, int):
f4 = f4_int[J]
f6 = f6_int[J]
else:
f4 = f4_half[round(J*2)]
f6 = f6_half[round(J*2)]
print('Landé g-factor g_J')
print(g_J)
###Matrix#########################################################################
_2Jp1 = int(2 * J + 1)
J_2 = J * (J + 1)
m = np.arange(J, -J - 1.0, -1.0)
E1 = np.eye(_2Jp1)
J_z = np.diag(m)
J_plus = np.diag(np.sqrt(J_2 - (m[0:-1]) * (m[0:-1] - 1.0)), 1)
J_minus = np.conj(J_plus.T)
J_x = +0.5 * (J_plus + J_minus)
J_y = -0.5j * (J_plus - J_minus)
J_2_mat = J_2*E1
O_20 = 3*J_z@J_z - J_2_mat
O_22 = (J_plus@J_minus + J_minus@J_plus)/2
O_xy = (J_x@J_y + J_y@J_x)/2
O_yz = (J_z@J_x + J_x@J_y)/2
O_zx = (J_z@J_x + J_x@J_z)/2
O_40 = 35*J_z@J_z@J_z@J_z - 30*J_2_mat@J_z@J_z + 25*J_z@J_z - 6*J_2_mat + 3*J_2_mat@J_2_mat
O_42 = ( (J_plus@J_plus + J_minus@J_minus) @ (7*J_z@J_z - J_2_mat -5*E1 ) + (7*J_z@J_z - J_2_mat - 5*E1) @ (J_plus@J_plus + J_minus@J_minus) )/4
O_43 = ( J_z@(J_plus@J_plus@J_plus + J_minus@J_minus@J_minus) + (J_plus@J_plus@J_plus + J_minus@J_minus@J_minus)@J_z )/4
O_44 = (J_plus@J_plus@J_plus@J_plus + J_minus@J_minus@J_minus@J_minus)/2
O_60 = 231*J_z@J_z@J_z@J_z@J_z@J_z - (315*J_2_mat - 753*E1) @J_z@J_z@J_z@J_z + (105*J_2_mat@J_2_mat - 525*J_2_mat+294*E1)@J_z@J_z -5*J_2_mat@J_2_mat@J_2_mat + 40*J_2_mat@J_2_mat - 60*J_2_mat
O_62 = ( (33*J_z@J_z@J_z@J_z - 18* J_z@J_z@J_2_mat - 123*J_z@J_z + 10*J_2_mat + 102*E1) @ (J_plus@J_plus + J_minus@J_minus) + (J_plus@J_plus + J_minus@J_minus) @ ( 33*J_z@J_z@J_z@J_z - 18* J_z@J_z@J_2_mat - 123*J_z@J_z + 10*J_2_mat + 102*E1))/4
O_63 = ( (11*J_z@J_z@J_z - 3* J_z@J_2_mat - 59*J_z)@(J_plus@J_plus@J_plus + J_minus@J_minus@J_minus) + (J_plus@J_plus@J_plus + J_minus@J_minus@J_minus) @ (11*J_z@J_z@J_z - 3* J_z@J_2_mat - 59*J_z) )/4
O_64 = ( (J_plus@J_plus@J_plus@J_plus + J_minus@J_minus@J_minus@J_minus)@(11*J_z@J_z - J_2_mat -38*E1) + (11*J_z@J_z - J_2_mat -38*E1)@(J_plus@J_plus@J_plus@J_plus + J_minus@J_minus@J_minus@J_minus) )/4
O_66 = ((J_plus@J_plus@J_plus@J_plus@J_plus@J_plus - J_minus@J_minus@J_minus@J_minus@J_minus@J_minus)/2)
# cubic(立方), hexagonal(六方), tetragonal(正方)ではO_43, O_63が出てこない.
### Calculation of CEF Hamiltonian #############################################
#(selection CEF Hamiltonian type) 1:Standard Style, 2: LLW Style
Selection = 2
# Input CEF Parameters
B_20 = 0.0
B_22 = 0.0
B_40 = 0.0
B_42 = 0.0
B_44 = 0.0
B_60 = 0.0
B_62 = 0.0
B_64 = 0.0
B_66 = 0.0
# Input CEF Parameters
WW = -5.3
XX = -0.8
if Selection == 1:
H_CEF = B_20*O_20 + B_22*O_22 + B_40*O_40 + B_42*O_42 + B_44*O_44 + B_60*O_60 + B_62*O_62 + B_64*O_64 + B_66*O_66
elif f6 == 0:
H_CEF = WW*( (XX/f4) *(O_40+5*O_44) )
else:
H_CEF = WW*( (XX/f4) *(O_40+5*O_44) + (1-abs(XX))*(O_60 - 21*O_64)/f6 )
print('Crystal electric field Hamiltonian')
print(H_CEF)
E_CEF, psi_CEF = np.linalg.eigh(H_CEF, 'L')
E_CEF = E_CEF - min(E_CEF)
print('eigen function')
print(psi_CEF)
print('energy eigenvalue')
print(E_CEF)
# matrix elements of multipole operators
J_z_CEF = np.dot(np.dot( np.conj(psi_CEF.T),J_z),psi_CEF)
O_20_CEF = np.dot(np.dot( np.conj(psi_CEF.T),O_20),psi_CEF)
O_22_CEF = np.dot(np.dot( np.conj(psi_CEF.T),O_22),psi_CEF)
print('matrix elements of multipole operators')
print('J_Z')
print(J_z_CEF)
print('O_20')
print(O_20_CEF)
print('O_22')
print(O_22_CEF)
周波数掃引NMRスペクトル
核スピンのハミルトニアンを対角化して、周波数掃引NMRスペクトルを導く。数値計算モジュールNumPyを使用。import numpy as np
pi = np.pi
### NMR parameters ############################################################
I = 3/2 #核スピン(分数でも少数でもOK)
gyr = 11.289 # 核スピン磁気回転比(MHz/T)
H_0 = 10.0 # 磁場(T)
K_shift = 0.000 / 100 # ナイトシフト(%)
nu_Q = 9.28 # NQR共鳴周波(MHz)
eta = 0.000 # 非対称パラメータ
theta = 20.0 * pi / 180.0 # 電場勾配の最大主軸をZ方向とする.
phi = 00.0 * pi / 180.0 # 磁場方向を極座標(theta,phi)で表す.単位はrad.
alpha = 00.0 * pi / 180.0 # z軸をx軸に向ける回転方向(オイラー角. 単位はrad.)
beta = 00.0 * pi / 180.0 # y軸をz軸に向ける回転方向(結晶主軸(x,y,z)と電場勾配の主軸(X,Y,Z)のズレを補正する.)
gamma = 00.0 * pi / 180.0 # x軸をy軸に向ける回転方向
N = 1024 # 刻み幅
sigma = 0.2 # 標準偏差(MHz).Intensityは"W[i,j] * np.exp(-(x - d_f[i,j])**2 / (2*sigma**2))"の重ね合わせ. xの刻みより大きくする.
### End of parameters #########################################################
nu_Q = nu_Q / (1 + (eta**(2)/3))**(1/2)
# I=3/2でetaが有限のとき,ゼロ磁場NQRにおける1本のスペクトルの共鳴周波数を固定するためにnu_Qを再設定.
### Nuclear spin ##############################################################
_2Ip1 = int(2 * I + 1)
I_2 = I * (I + 1)
m = np.arange(I, -I - 1.0, -1.0)
I_plus = np.diag(np.sqrt(I_2 - (m[0:-1]) * (m[0:-1] - 1.0)), 1)
I_minus = np.conj(I_plus.T)
I_x = +0.5 * (I_plus + I_minus)
I_y = -0.5j * (I_plus - I_minus)
I_z = np.diag(m)
### Rotaion matric ############################################################
R_x_beta = np.array([[1, 0, 0], [0, np.cos(beta), -np.sin(beta)],[0,np.sin(beta),np.cos(beta)]])
R_y_alpha = np.array([[np.cos(alpha), 0, np.sin(alpha)], [0, 1, 0],[-np.sin(alpha), 0, np.cos(alpha)]])
R_z_gamma = np.array([[np.cos(gamma), -np.sin(gamma), 0], [np.sin(gamma), np.cos(gamma), 0],[0, 0, 1]])
R_xy = np.dot(R_x_beta, R_y_alpha)
R_zxy = np.dot(R_z_gamma, R_xy)
### Coordinate transformation #################################################
I_X = I_x * R_zxy[0,0] + I_y * R_zxy[0,1] + I_z * R_zxy[0,2]
I_Y = I_x * R_zxy[1,0] + I_y * R_zxy[1,1] + I_z * R_zxy[1,2]
I_Z = I_x * R_zxy[2,0] + I_y * R_zxy[2,1] + I_z * R_zxy[2,2]
I_Plus = I_X + 1.0j * I_Y
I_Minus = I_X - 1.0j * I_Y
### Hamiltonian ###############################################################
Hamiltonian = -gyr * H_0 * (1 + K_shift) * (
I_z * np.cos(theta) + (I_x * np.cos(phi) + I_y * np.sin(phi)) * np.sin(theta)
) + nu_Q / 6.0 * (3 * np.dot(I_Z, I_Z) - I_2 * np.eye(_2Ip1)
+ 0.5 * eta * (np.dot(I_Plus, I_Plus)+np.dot(I_Minus, I_Minus)))
# hbarは省力しているので,固有値の次元は周波数[MHz]となる.
# ここでH_0とIの内積を"I_z * np.cos(theta) + (I_x * np.cos(phi) + I_y * np.sin(phi)) * np.sin(theta)"としている.
# すなわち結晶主軸(x,y,z)基準で磁場H_0の方向を極座標(theta, phi)で表している.
# 電場勾配の最大主軸をZ方向としているので, 電気四重極ハミルトニアンはI_Z, I_Plus, I_Minusを用いている.
### Eigenvector and energy eigenvalue ##########################################
f, v = np.linalg.eigh(Hamiltonian, 'L')
zero = np.zeros((_2Ip1, _2Ip1, ))
f_m = np.add(f, zero)
d_f = np.abs(f_m.T - f_m)
### Transition probability #####################################################
w_plus = np.dot(np.dot( np.conj(v.T),I_Plus),v)
w_minus = np.dot(np.dot( np.conj(v.T),I_Minus),v)
W = abs(w_plus * w_plus) + abs(w_minus * w_minus)
###Gaussian####################################################################
x = np.arange(0, 2*np.amax(d_f), np.amax(d_f)/N) # 0~2*np.amax(d_f)までnp.amax(d_f)/N刻みの数値の配列.
import matplotlib.pyplot as plt
Intensity = 0
for i in range(int(2*I+1)):
for j in range(int(2*I+1)):
if i==j:
pass
else:
Intensity = Intensity + W[i,j] * np.exp(-(x - d_f[i,j])**2 / (2*sigma**2))
Intensity = Intensity / np.amax(Intensity) # np.amax(Intensity)で規格化.
# a = 1.2 #強度の倍率
# Intensity = a*Intensity
print("Energy eigenvalue")
print(f)
print("Eigenwavefunction")
print(v)
print("Resonance frequency")
print(d_f)
print("Transition probability")
print(W)
fig = plt.figure(figsize = (8, 6))
ax = fig.add_subplot(111)
ax.set_xlabel("freq [MHz]", fontsize = 14)
ax.set_ylabel("Intensity", fontsize = 14)
d_f_non0 = d_f *W /(W+0.01) # W[i,j]=0のd_f[i,j]を消去した行列を用意.
ax.set_xlim([0, np.amax(d_f_non0)*1.2]) # 軸範囲を設定.
ax.set_ylim([0, 1.2])
print(d_f_non0)
ax.plot(x, Intensity, color = "red", label = "Intensity")
ax.legend(fontsize = 14)
plt.show()
リンク集
京都大学 理学研究科・理学部
物理学宇宙物理学専攻 物理学第一分野・物理学第二分野・宇宙物理学分野
固体量子物性研究室
竹田市立南部小学校……出身小学校。
竹田市立竹田南部中学校……出身中学校。
大分県立竹田高校……出身高校。
広島大学磁性物理学研究室……学部時代に所属していた研究室。いつもお世話になっております。
広島大学アカペラサークルPlaza de España……学部時代に所属していたサークル。いっぱい歌っていました。
固体量子-こたいりょうこ-……弊研非公式VTuberです。物性物理学の研究について分かりやすい解説をしてくれます。
ONE OK ROCK……ワンオクは世界一。