質問編集履歴

4

訂正

2021/12/15 10:52

投稿

Nari9113
Nari9113

スコア3

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

訂正

2021/12/15 10:52

投稿

Nari9113
Nari9113

スコア3

test CHANGED
File without changes
test CHANGED
@@ -310,13 +310,13 @@
310
310
 
311
311
  datafile=input("入力データ")
312
312
 
313
- process(data_file)
313
+ process(datafile)
314
314
 
315
315
  def process():
316
316
 
317
317
  def detect_peak():
318
318
 
319
- x, y = np.loadtxt(data_file, skiprows=29, unpack=True)
319
+ x, y = np.loadtxt(datafile, skiprows=29, unpack=True)
320
320
 
321
321
 
322
322
 

2

追記

2021/12/15 06:36

投稿

Nari9113
Nari9113

スコア3

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

文法の修正

2021/12/15 06:35

投稿

Nari9113
Nari9113

スコア3

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の壁が立ちはだかりチンプンカンプンでした