मैं प्रोग्रामिंग में एक नया शुरुआत कर रहा हूँ। मेरे पास सिंगल टेक्स्ट फ़ाइल (data.txt) के अंदर कई ईवेंट (1000 से अधिक ईवेंट) हैं। उदाहरण के लिए

BoardID: 31

Channel: 1

Event Number: 3123

Pattern: 0x0000

2627.000000

2627.000000

2626.009033

2629.000000
.
.
.(up to 1024 data)

BoardID: 31

Channel: 1

Event Number: 3124

Pattern: 0x0000

2627.000000

2627.000000

2628.949707

2626.099365
.
.
....(up to 1024 data)
.
..1000 number of events

मैं एकाधिक घटनाओं पर लूप का उपयोग करके सभी डेटा को एक-एक करके कैसे प्लॉट कर सकता हूं।

मैं निम्नलिखित पायथन कोड का प्रयास कर रहा हूं लेकिन यह काम नहीं करता है:

with open("data.txt") as f:

for i in range(1000):  #I have 1000 number of events
    all_lines = f.readlines()
    def plot_event(start = 4, all_lines= 'all_lines'):
        lines = all_lines[start : 1029 - 4 + start]

        return (plot_event(4*i, all_lines))

    x = np.array(range(1,1025)) #for all the events x has same range
    y2 = float(lines.split()[0])
    y2_=list(y2)
    y22 = [((j / 4096)-0.5) for j in y2_]

fig = plt.figure()
ax = fig.add_subplot(111)   
ax.set_xlabel('Time (ns)')
ax.set_ylabel('counts')
ax.plot(x,y22, 'k-', color= 'b', label='data') 
fig=plt.gcf()
plt.show()
plt.draw()

क्या कोई समझा सकता है कि लूप का उपयोग करके प्रत्येक घटना को एक-एक करके कैसे प्लॉट किया जा सकता है?

0
ghimire 19 अप्रैल 2018, 16:37

1 उत्तर

सबसे बढ़िया उत्तर

आपके पास अधिकतर सही कोड है, बस इंडेंटेशन और ऑर्डरिंग के साथ कुछ समस्याएं हैं

आप पूरी फ़ाइल को १००० गुना अधिक पढ़ने की कोशिश करते हैं, सिवाय इसके कि आप पहली बार फ़ाइल के अंत तक पहुँच गए हैं और कुछ भी वापस नहीं मिला है

साथ ही प्लॉटिंग लूप के अंदर होनी चाहिए

# read in the file. We only need to do this once
with open('data.txt') as f:
    all_lines = [line for line in f]

define x outside of the loop. Numpy has a range generating function. Use that
x = np.arange(1,1025)

# loop through each event
for start in range(1000):
    # get data points
    # each event has values at 1028*start:1028*(start+1), but we don't need the first 4 values
    # defining y2 as an array automatically handles the float conversion
    # also makes the math easier
    y2 = np.array(all_lines[1028*start+4:1028*(start+1)],dtype=float)
    y22 = y2 / 4096 - .5

    # plot stuff. I just copies your code here
    # only change was putting it in the loop
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.set_xlabel('Time (ns)')
    ax.set_ylabel('counts')
    ax.plot(x,y22, 'k-', color='b', label='data')
    fig = plt.gcf()
    plt.show()
    plt.draw()
0
David L 19 अप्रैल 2018, 19:35