Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F61949706
Chimera.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, May 10, 00:19
Size
7 KB
Mime Type
text/x-python
Expires
Sun, May 12, 00:19 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
17582770
Attached To
rCHIMERAPYTHON Chimera scripts in python
Chimera.py
View Options
import
ChimeraSettings
as
C
import
ok
import
ChimeraControls
import
os
import
pickle
from
PyQt5
import
QtGui
import
datetime
import
numpy
as
np
import
time
import
csv
import
matplotlib.pyplot
as
plt
import
functions
from
matplotlib.ticker
import
EngFormatter
Amp
=
EngFormatter
(
unit
=
'A'
,
places
=
2
)
Time
=
EngFormatter
(
unit
=
's'
,
places
=
2
)
Volt
=
EngFormatter
(
unit
=
'V'
,
places
=
2
)
Cond
=
EngFormatter
(
unit
=
'S'
,
places
=
2
)
# Main Chimera Launcher
class
Launcher
:
def
__init__
(
self
,
loadedInstance
=
None
):
if
loadedInstance
is
None
:
self
.
ChimeraSettings
=
C
.
ChimeraSettings
()
else
:
self
.
ChimeraSettings
=
loadedInstance
# Initialize Chimera
self
.
xem
=
ok
.
FrontPanel
()
ChimeraControls
.
InitializeChimera
(
self
.
ChimeraSettings
,
self
.
xem
)
# Set savingfolder
self
.
SetSavingFolder
(
os
.
getcwd
())
# Variables
self
.
lowpass
=
2e3
self
.
displaySamplerate
=
self
.
lowpass
*
2
self
.
IVUseAlternatingV
=
True
self
.
LowerIV
=
0.0
self
.
HigherIV
=
0.0
self
.
StepIV
=
0.0
self
.
timeIV
=
2
# if os.stat("store.pckl").st_size:
# ChimeraSettings.setStoredValues()
# Data variables
# self.blockvalues = np.empty((1048576,), dtype=np.uint16)
# self.readvalues = ChimeraControls.ConvertBlockvalues(self.ChimeraSettings, blockvalues)
#self.displaybuffer
#self.blockvalues
# self.newbiasvalue = 0
def
Initialize
(
self
):
ChimeraControls
.
InitializeChimera
(
self
.
ChimeraSettings
,
self
.
xem
)
def
SetSavingFolder
(
self
,
savingFolder
,
experimentName
=
'Untitled'
):
self
.
DataFolder
=
savingFolder
self
.
todaysfolder
=
str
(
datetime
.
date
.
today
())
self
.
experimentName
=
experimentName
if
not
os
.
path
.
exists
(
self
.
DataFolder
):
os
.
makedirs
(
self
.
DataFolder
)
if
not
os
.
path
.
exists
(
os
.
path
.
join
(
self
.
DataFolder
,
self
.
todaysfolder
)):
os
.
makedirs
(
os
.
path
.
join
(
self
.
DataFolder
,
self
.
todaysfolder
))
print
(
'Files are saved in '
+
os
.
path
.
join
(
os
.
path
.
join
(
self
.
DataFolder
,
self
.
todaysfolder
),
self
.
experimentName
))
def
SetExperimentName
(
self
,
experimentName
):
self
.
SetSavingFolder
(
self
.
DataFolder
,
experimentName
=
experimentName
)
def
SetVoltage
(
self
,
sb
,
write
=
True
):
self
.
newbiasvalue
=
sb
# self.ChimeraSettings.RestartBuffer = True
if
write
:
self
.
SaveVoltage
()
ChimeraControls
.
CHIMERA_updateDACvalues1
(
self
.
ChimeraSettings
,
self
.
xem
,
self
.
newbiasvalue
)
def
RecordTraceRaw
(
self
):
blockvalues
=
ChimeraControls
.
CHIMERA_process_triggers
(
self
.
ChimeraSettings
,
self
.
xem
)
#self.blockvalues = blockvalues
readvalues
=
ChimeraControls
.
ConvertBlockvalues
(
self
.
ChimeraSettings
,
blockvalues
)
#self.readvalues = readvalues
return
readvalues
def
RecordTrace
(
self
):
blockvalues
=
ChimeraControls
.
CHIMERA_process_triggers
(
self
.
ChimeraSettings
,
self
.
xem
)
#self.blockvalues = blockvalues
readvalues
=
ChimeraControls
.
ConvertBlockvalues
(
self
.
ChimeraSettings
,
blockvalues
)
#self.readvalues = readvalues
Samplerate
=
self
.
ChimeraSettings
.
ADCSAMPLERATE
displaybuffer
,
self
.
displaySamplerate
=
functions
.
LowPass
(
readvalues
,
Samplerate
,
self
.
lowpass
)
#displaybuffer = ChimeraControls.lowpass(self.ChimeraSettings, readvalues, cutoff=self.lowpass)
return
displaybuffer
#def SaveSettings(self, fileName):
# if fileName is not None and not os.path.exists(fileName):
# filePath = os.path.split(fileName)
# if not os.path.isdir(filePath):
# os.mkdir(filePath)
# else:
# fileName = QtGui.QFileDialog.getOpenFileName()
# fileName = fileName[0]
# print(fileName)
#
# f = open(fileName, 'rb')
# ChimeraSettings = self.ChimeraSettings
# pickle.dump(ChimeraSettings, f)
# f.close()
# print('Saved as ' + fileName)
def
LoadInstance
(
self
,
fileName
):
if
fileName
is
None
or
os
.
path
.
exists
(
fileName
):
fileName
=
QtGui
.
QFileDialog
.
getOpenFileName
()
fileName
=
fileName
[
0
]
print
(
fileName
)
f
=
open
(
fileName
,
'rb'
)
ChimeraSettings
=
pickle
.
load
(
f
)
f
.
close
()
self
.
ChimeraSettings
=
ChimeraSettings
print
(
'Loaded from '
+
fileName
+
'. Re-initializing...'
)
ChimeraControls
.
InitializeChimera
(
self
.
ChimeraSettings
,
self
.
xem
)
def
updateBW
(
self
):
out
=
ChimeraControls
.
CHIMERA_bandwidthtimer
(
self
.
ChimeraSettings
,
self
.
xem
)
text1
=
"Time
\n
{0}
\n
USB Read Rate
\n
{1:} kHz
\n
USB Write Rate
\n
{2}"
.
format
(
out
[
'text_time'
],
out
[
'USB_readrate'
],
out
[
'USB_writerate'
])
print
(
text1
)
text2
=
"Buffer
\n
{0} kB
\n
Buffer Size
\n
{1} %
\n
Seconds buffered
\n
{2:.3f} sec"
.
format
(
out
[
'buffer'
],
out
[
'bufferPC'
],
out
[
'bufferseconds'
])
print
(
text2
)
# def update(self):
# def PlotData(self):
def
ResetBuffer
(
self
):
print
(
"Buffer is resetting..."
)
ans1
=
self
.
xem
.
SetWireInValue
(
self
.
ChimeraSettings
.
EP_WIREIN_TEST1
,
self
.
ChimeraSettings
.
EPBIT_GLOBALRESET
,
self
.
ChimeraSettings
.
EPBIT_GLOBALRESET
)
self
.
xem
.
UpdateWireIns
()
time
.
sleep
(
0.1
)
ans2
=
self
.
xem
.
SetWireInValue
(
self
.
ChimeraSettings
.
EP_WIREIN_TEST1
,
0
,
self
.
ChimeraSettings
.
EPBIT_GLOBALRESET
)
self
.
xem
.
UpdateWireIns
()
#self.RestartBuffer = 1
def
ZeroVolt
(
self
):
Vdelta
=
0.02
print
(
'Measuring at {} ...'
.
format
(
Volt
.
format_data
(
Vdelta
)),
end
=
''
)
self
.
SetVoltage
(
Vdelta
,
write
=
False
)
self
.
ResetBuffer
()
time
.
sleep
(
1
)
measI1
=
np
.
mean
(
self
.
RecordTrace
())
print
(
'{}'
.
format
(
Amp
.
format_data
(
measI1
)))
print
(
'Measuring at {} ...'
.
format
(
Volt
.
format_data
(
0
)),
end
=
''
)
self
.
SetVoltage
(
0
,
write
=
False
)
self
.
ResetBuffer
()
time
.
sleep
(
1
)
measI2
=
np
.
mean
(
self
.
RecordTrace
())
print
(
'{}'
.
format
(
Amp
.
format_data
(
measI2
)))
deltaI
=
measI1
-
measI2
if
deltaI
==
0
:
print
(
'Error, cannot zero voltage: deltaI = 0'
)
else
:
measR
=
Vdelta
/
deltaI
self
.
ResetBuffer
()
self
.
ChimeraSettings
.
voltageOffset
+=
-
measI2
*
measR
print
(
'New voltage offset: {}'
.
format
(
Volt
.
format_data
(
self
.
ChimeraSettings
.
voltageOffset
)))
ChimeraControls
.
CHIMERA_updateDACvalues1
(
self
.
ChimeraSettings
,
self
.
xem
)
self
.
SetVoltage
(
self
.
ChimeraSettings
.
voltageOffset
)
def
SaveVoltage
(
self
):
savingFolder
=
os
.
path
.
join
(
self
.
DataFolder
,
self
.
todaysfolder
)
savingName
=
self
.
experimentName
+
'Vdata.csv'
fullpath
=
os
.
path
.
join
(
savingFolder
,
savingName
)
data
=
[
datetime
.
datetime
.
now
(),
self
.
newbiasvalue
]
with
open
(
fullpath
,
'w'
)
as
csvfile
:
writeline
=
csv
.
writer
(
csvfile
,
delimiter
=
','
)
writeline
.
writerows
(
data
)
class
ChimeraPlot
:
def
__init__
(
self
,
Chimera
):
self
.
fig
,
self
.
ax
=
plt
.
subplots
(
1
,
1
)
self
.
ax
.
set_xlabel
(
'Time [s]'
)
self
.
ax
.
set_ylabel
(
'Current [nA]'
)
self
.
samplerate
=
Chimera
.
displaySamplerate
def
Update
(
self
,
trace
):
x
=
np
.
arange
(
len
(
g
.
trace
))
/
self
.
samplerate
currentIDC
=
np
.
mean
(
trace
)
currentRMS
=
np
.
std
(
trace
)
if
self
.
ax
.
lines
:
for
line
in
self
.
ax
.
lines
:
line
.
set_xdata
(
x
)
line
.
set_ydata
(
trace
)
else
:
self
.
ax
.
plot
(
x
,
trace
)
self
.
ax
.
set_ylim
([
currentIDC
-
10
*
currentRMS
,
currentIDC
+
10
*
currentRMS
])
self
.
fig
.
canvas
.
draw
()
Event Timeline
Log In to Comment