質問編集履歴
4
訂正
test
CHANGED
File without changes
|
test
CHANGED
@@ -56,239 +56,7 @@
|
|
56
56
|
|
57
57
|
|
58
58
|
|
59
|
-
def detect_peak():
|
60
59
|
|
61
|
-
global x
|
62
|
-
|
63
|
-
global y
|
64
|
-
|
65
|
-
#signal.find_peaks(x, height=高さ, distance=距離)
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
# 極大値 orderを変えることでピークの検出が変わる(ピーク検出の閾値)
|
70
|
-
|
71
|
-
maxid = signal.argrelmax(y, order=100)
|
72
|
-
|
73
|
-
# minid = signal.argrelmin(y, order=1) #極小値
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
# plt.plot(x[minid],y[minid],'bo',label='ピーク値(最小)')
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
return x[maxid], y[maxid]
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
def func(x, *params):
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
#paramsの長さでフィッティングする関数の数を判別。
|
94
|
-
|
95
|
-
num_func = int(len(params)/3)
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
#ガウス関数にそれぞれのパラメータを挿入してy_listに追加。
|
100
|
-
|
101
|
-
y_list = []
|
102
|
-
|
103
|
-
for i in range(num_func):
|
104
|
-
|
105
|
-
y = np.zeros_like(x)
|
106
|
-
|
107
|
-
param_range = list(range(3*i,3*(i+1),1))
|
108
|
-
|
109
|
-
amp = params[int(param_range[0])]
|
110
|
-
|
111
|
-
ctr = params[int(param_range[1])]
|
112
|
-
|
113
|
-
wid = params[int(param_range[2])]
|
114
|
-
|
115
|
-
y = y + amp * np.exp( -((x - ctr)/wid)**2)
|
116
|
-
|
117
|
-
y_list.append(y)
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
#y_listに入っているすべてのガウス関数を重ね合わせる。
|
122
|
-
|
123
|
-
y_sum = np.zeros_like(x)
|
124
|
-
|
125
|
-
for i in y_list:
|
126
|
-
|
127
|
-
y_sum = y_sum + i
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
#最後にバックグラウンドを追加。
|
132
|
-
|
133
|
-
y_sum = y_sum + params[-1]
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
return y_sum
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
#プロットの定義
|
142
|
-
|
143
|
-
def fit_plot(x, *params):
|
144
|
-
|
145
|
-
num_func = int(len(params)/3)
|
146
|
-
|
147
|
-
y_list = []
|
148
|
-
|
149
|
-
for i in range(num_func):
|
150
|
-
|
151
|
-
y = np.zeros_like(x)
|
152
|
-
|
153
|
-
param_range = list(range(3*i,3*(i+1),1))
|
154
|
-
|
155
|
-
amp = params[int(param_range[0])]
|
156
|
-
|
157
|
-
ctr = params[int(param_range[1])]
|
158
|
-
|
159
|
-
wid = params[int(param_range[2])]
|
160
|
-
|
161
|
-
y = y + amp * np.exp( -((x - ctr)/wid)**2) + params[-1]
|
162
|
-
|
163
|
-
y_list.append(y)
|
164
|
-
|
165
|
-
return y_list
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
#初期値のリストを作成
|
170
|
-
|
171
|
-
#[amp,ctr,wid]
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
# x1, y1 = detect_peak() ##
|
176
|
-
|
177
|
-
np_x, np_y = detect_peak() ##
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
background = 62
|
182
|
-
|
183
|
-
# guess = [] ##
|
184
|
-
|
185
|
-
guess = [[y1, x1, 0.5] for (x1, y1) in zip(np_x, np_y) if background < y1]
|
186
|
-
|
187
|
-
#バックグラウンドの初期値
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
#初期値リストの結合
|
194
|
-
|
195
|
-
guess_total = []
|
196
|
-
|
197
|
-
for i in guess:
|
198
|
-
|
199
|
-
guess_total.extend(i)
|
200
|
-
|
201
|
-
guess_total.append(background)
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
popt, pcov = curve_fit(func, x, y, p0=guess_total,maxfev=100000)
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
fit= func(x, *popt)
|
214
|
-
|
215
|
-
plt.scatter(x, y, s=20)
|
216
|
-
|
217
|
-
plt.plot(x, fit , ls='-', c='black', lw=1)
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
y_list = fit_plot(x, *popt)
|
222
|
-
|
223
|
-
baseline = np.zeros_like(x) + popt[-1]
|
224
|
-
|
225
|
-
for n,i in enumerate(y_list):
|
226
|
-
|
227
|
-
plt.fill_between(x, i, baseline, facecolor=cm.rainbow(n/len(y_list)), alpha=0.6)
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
sub_list=list((popt))
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
l_list=sub_list[1:-1:3]
|
236
|
-
|
237
|
-
r=np.array(l_list)
|
238
|
-
|
239
|
-
rad=np.radians(r)
|
240
|
-
|
241
|
-
sin=np.sin(rad/2)
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
Cuk_Alpha=1.5418
|
246
|
-
|
247
|
-
last_list=Cuk_Alpha/(2*sin)
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
P_list=sub_list[0:-1]
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
n1=3
|
258
|
-
|
259
|
-
result1 = [P_list[idx:idx + n1] for idx in range(0,len(P_list),n1)]
|
260
|
-
|
261
|
-
pd.set_option('display.unicode.east_asian_width',True)
|
262
|
-
|
263
|
-
df1=pd.DataFrame(result1,columns=['ピーク強度','位置','幅'])
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
n2=1
|
270
|
-
|
271
|
-
result2 = [last_list[idx:idx + n2] for idx in range(0,len(last_list),n2)]
|
272
|
-
|
273
|
-
pd.set_option('display.unicode.east_asian_width',True)
|
274
|
-
|
275
|
-
df2=pd.DataFrame(result2,columns=['面間隔'])
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
df_h_in = pd.concat([df1, df2], axis=1, join='inner')
|
280
|
-
|
281
|
-
print(df_h_in)
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
print('バックグラウンドの強度',sub_list[-1])
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
csv_datafile=input("保存データ名")
|
290
|
-
|
291
|
-
df_h_in.to_csv(csv_datafile, sep=",",index=False)
|
292
60
|
|
293
61
|
```
|
294
62
|
|
@@ -301,31 +69,3 @@
|
|
301
69
|
https://masaeng.hatenablog.com/entry/2020/06/28/233020
|
302
70
|
|
303
71
|
などのサイトも確認しましたがx,yの壁が立ちはだかりチンプンカンプンでした
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
### 変更追記
|
308
|
-
|
309
|
-
```Python
|
310
|
-
|
311
|
-
datafile=input("入力データ")
|
312
|
-
|
313
|
-
process(datafile)
|
314
|
-
|
315
|
-
def process():
|
316
|
-
|
317
|
-
def detect_peak():
|
318
|
-
|
319
|
-
x, y = np.loadtxt(datafile, skiprows=29, unpack=True)
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
#signal.find_peaks(x, height=高さ, distance=距離)
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
# 極大値 orderを変えることでピークの検出が変わる(ピーク検出の閾値)
|
328
|
-
|
329
|
-
maxid = signal.argrelmax(y, order=100)
|
330
|
-
|
331
|
-
```
|
3
訂正
test
CHANGED
File without changes
|
test
CHANGED
@@ -310,13 +310,13 @@
|
|
310
310
|
|
311
311
|
datafile=input("入力データ")
|
312
312
|
|
313
|
-
process(data
|
313
|
+
process(datafile)
|
314
314
|
|
315
315
|
def process():
|
316
316
|
|
317
317
|
def detect_peak():
|
318
318
|
|
319
|
-
x, y = np.loadtxt(data
|
319
|
+
x, y = np.loadtxt(datafile, skiprows=29, unpack=True)
|
320
320
|
|
321
321
|
|
322
322
|
|
2
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -301,3 +301,31 @@
|
|
301
301
|
https://masaeng.hatenablog.com/entry/2020/06/28/233020
|
302
302
|
|
303
303
|
などのサイトも確認しましたがx,yの壁が立ちはだかりチンプンカンプンでした
|
304
|
+
|
305
|
+
|
306
|
+
|
307
|
+
### 変更追記
|
308
|
+
|
309
|
+
```Python
|
310
|
+
|
311
|
+
datafile=input("入力データ")
|
312
|
+
|
313
|
+
process(data_file)
|
314
|
+
|
315
|
+
def process():
|
316
|
+
|
317
|
+
def detect_peak():
|
318
|
+
|
319
|
+
x, y = np.loadtxt(data_file, skiprows=29, unpack=True)
|
320
|
+
|
321
|
+
|
322
|
+
|
323
|
+
#signal.find_peaks(x, height=高さ, distance=距離)
|
324
|
+
|
325
|
+
|
326
|
+
|
327
|
+
# 極大値 orderを変えることでピークの検出が変わる(ピーク検出の閾値)
|
328
|
+
|
329
|
+
maxid = signal.argrelmax(y, order=100)
|
330
|
+
|
331
|
+
```
|
1
文法の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
|
3
|
-
Python使い始めて約一か月の初心者なので力を貸してください
|
3
|
+
Python使い始めて約一か月の初心者なので力を貸してください
|
4
|
+
|
5
|
+
|
4
6
|
|
5
7
|
txtファイル2th-scan_BLT1.txt~2th-scan_BLTn.txt(nは数)を下記コードで1つずつ処理をしたいです。
|
6
8
|
|
@@ -8,7 +10,9 @@
|
|
8
10
|
|
9
11
|
複数のファイルを与えられたとき一つ一つ入力が大変なので自動処理できるよう変更すべき点を教えて頂きたいです。
|
10
12
|
|
11
|
-
色々調べたのですがtxtだったりskiprowsだったりx,yで必要な値を抜き出しているようなものがなかったので
|
13
|
+
色々調べたのですがtxtだったりskiprowsだったりx,yで必要な値を抜き出しているようなものがなかったので、、
|
14
|
+
|
15
|
+
|
12
16
|
|
13
17
|
コードを記載していただけると助かります、、
|
14
18
|
|
@@ -296,4 +300,4 @@
|
|
296
300
|
|
297
301
|
https://masaeng.hatenablog.com/entry/2020/06/28/233020
|
298
302
|
|
299
|
-
などのサイトも確認しましたがx,yの壁が立ちはだかりチンプンカンプンでした
|
303
|
+
などのサイトも確認しましたがx,yの壁が立ちはだかりチンプンカンプンでした
|