-
Notifications
You must be signed in to change notification settings - Fork 0
/
SignalManip.py
174 lines (115 loc) · 5.2 KB
/
SignalManip.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#!/usr/bin/env python
#This file is intended for manipulating signals such as
#generate an avergae of all signals, save this etc etc,
#especially when we need to physically change the signal to
#do our analysis.
#We need the EventPassport
import EventPassport
#AnalysisTools gives uf the tools for analysis
import AnalysisTools
#waveformloader loads waveforms
import WaveformLoader
#pydblite needed for database
from PyDbLite import Base
#matplotlib for plotting
import matplotlib.pyplot as plt
#numpy and scipy for scientific ops
import numpy, scipy
#OS is for checking if certain files exist
import os
#signal Manip class for signal manipulation
class SignalManip:
#usual stuff in init
def __init__(self):
self.AnalysisResults = Base('AnalysisResults/AnalysisResults.pdl')
#check if the DB exists. If Yes, open, if not
#create it:
if not self.AnalysisResults.exists():
self.genPDL()
else:
self.AnalysisResults.open()
self.PassportOffice = EventPassport.EventPassportOffice()
self.LoadWaveform = WaveformLoader.LoadWave()
self.AcousticAnalysis = AnalysisTools.AcousticsAnalysis()
#If DB doesnt exist, make it!
def genPDL(self):
#Create the PDL file for database
self.AnalysisResults.create('EventID','PVar', mode = "open")
#Function to generate signal average
def genSignalAverage(self, EventType = "Neutron"):
#get all Events of type EventType
EventList = []
EventList = self.PassportOffice.CheckPassport_Runtype(EventType)
SignalAvgMem = numpy.zeros((50000))
for Event in EventList:
#Load Raw data
raw_data = self.LoadWaveform.LoadData(Event['Path'][:-3])
SignalAvgMem += raw_data[0]
SignalAvgMem /= len(EventList)
####Storage#####
Storage = open("AnalysisResults/signalAvg."+EventType+".binary", "wb")
SignalAvgMem.tofile(Storage, format="%f")
Storage.close()
return SignalAvgMem
#function to generate FFT avergae
def genFFTAverage(self, EventType="Neutron", doWin = False, winStart=10000, winEnd=30000, Fs = 1250000.0):
#get all Events of type EventType
EventList = []
EventList = self.PassportOffice.CheckPassport_Runtype(EventType)
FFTAvgMem = numpy.zeros((50000))
FFTAvgBins = numpy.fft.fftfreq(len(FFTAvgMem), 1.0/Fs)
for Event in EventList:
#Load Raw data
raw_data = self.LoadWaveform.LoadData(Event['Path'][:-3])
####SignalWindow####
if doWin:
print "is it"
TempSigMem = numpy.zeros((50000))
TempSigMem[winStart:winEnd] = raw_data[0][winStart:winEnd]
R_data = TempSigMem
else:
R_data = raw_data[0]
#
FFTs = numpy.fft.fft(R_data)
#for i in range(5000,6000):
#pwrspec = abs(numpy.mean(FFTs[5000:6000]))
#if pwrspec>10:
# print pwrspec, Event
FFTAvgMem += FFTs
FFTAvgMem /= len(EventList)
####Storage#####
#FFT#
Storage = open("AnalysisResults/FFTAvg."+EventType+"win"+str(doWin)+".binary", "wb")
FFTAvgMem.tofile(Storage, format="%f")
Storage.close()
#FFT FREQS#
Storage = open("AnalysisResults/FFTAvgBins."+EventType+"win"+str(doWin)+".binary", "wb")
FFTAvgBins.tofile(Storage, format="%f")
Storage.close()
####Plotting#####
return FFTAvgMem, FFTAvgBins
#Functions to show the Average values (load from cache)
def getSignalAverage(self, EventType = "Neutron"):
Storage = "AnalysisResults/signalAvg."+EventType+".binary"
if not os.path.exists(Storage):
data = self.genSignalAverage(EventType)
else:
data = numpy.fromfile(Storage)
return data
#function to show average FFT
def getFFTAverage(self, EventType = "Neutron", doWin = False,):
Storage_FFT = "AnalysisResults/FFTAvg."+EventType+"win"+str(doWin)+".binary"
Storage_FFTfreq = "AnalysisResults/FFTAvgBins."+EventType+"win"+str(doWin)+".binary"
#Broken. Needs param check and hassles.
#if os.path.exists(Storage_FFT) and os.path.exists(Storage_FFTfreq) :
# data_FFT = numpy.fromfile(Storage_FFT)
# data_FFTFreq = numpy.fromfile(Storage_FFTfreq)
#else:
# data_FFT, data_FFTFreq = self.genFFTAverage(EventType, doWin)
data_FFT, data_FFTFreq = self.genFFTAverage(EventType, doWin)
return data_FFT, data_FFTFreq
if __name__ == "__main__":
Usage = '''Usage: This is meant to be used as a module\n
and not standalone script. Please use the methods\n
built in, as a module. '''
print Usage