物理のベンチ by mitta

学んだことを発信します。備忘録も書きます。間違いがあればコメントください。

NumPyを使ってCERN ROOTの解析用ダミーデータを生成する2-物理実験っぽいデータの生成編

やること

解析用のダミーデータの生成。
研究室の教育用に。

ダミーデータの内容

・ADC :ガンマ分布を使用、宇宙線っぽいデータ。
・TDC1:正規分布を使用、ADCに対してTime Walkっぽいものがあるデータ。TDCモジュールのTime Jitter、トリガータイミングのズレがある。
・TDC2:正規分布を使用、Trigger Timingっぽいデータ。
・TDC3:一様分布を使用、Read Out Triggerっぽいデータ。

コード

import numpy as np

kNumEvent = 10000
fout = open("output.dat","w")

for i in range(kNumEvent):
    rand1 = round(np.random.normal(0, 1),5) # 正規分布(平均, 標準偏差) 
    rand2= round(np.random.rand(),5) # 一様分布()
    rand3 = round(np.random.binomial(100,0.3),5) # 二項分布(試行回数, 成功確率)
    rand4 = round(np.random.beta(2,5),5) # β分布(α値, β値)
    rand5 = round(np.random.gamma(4,1),5) #γ分布(形状母数(k), 尺度母数(Θ))
    rand6 = round(np.random.chisquare(3),5) # χ二乗分布(自由度(k))

    rand7 = np.random.normal(1000, 10)
    rand8 = np.random.normal(1300, 2)
    def func1(X,a,b,c):
        Y = a*X**(-0.5) + b/X + c
        return Y

    tmp_ADC = round(rand5*200)
    tmp_TDC1 = round(func1(rand5*200,1000,100,rand1*10+rand2*5+rand7))
    tmp_TDC2 = round(rand7+rand8)
    tmp_TDC3 = round(1000+rand2*5)
    
    fout.write(str(i)+" "+str(tmp_ADC)+" "+str(tmp_TDC1)+" "+str(tmp_TDC2)+" "+str(tmp_TDC3)+" "+
    str(rand1)+" "+str(rand2)+" "+str(rand3)+" "+str(rand4)+" "+str(rand5)+" "+str(rand6)+"\n")

fout.close()

print("F!!!!!")

結果

f:id:salamence_andrias:20210613145427p:plain
f:id:salamence_andrias:20210613144936p:plain