Skip to content

Commit 8d7dd8a

Browse files
committed
Add default config for OE FPGA Acquisition Board plugin
1 parent ffe0691 commit 8d7dd8a

File tree

2 files changed

+285
-5
lines changed

2 files changed

+285
-5
lines changed
Lines changed: 252 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<SETTINGS>
4+
<INFO>
5+
<VERSION>0.6.4</VERSION>
6+
<PLUGIN_API_VERSION>8</PLUGIN_API_VERSION>
7+
<DATE>unknown</DATE>
8+
<OS>Windows, Linux, or macOS</OS>
9+
<MACHINE name="computer" cpu_model="any"
10+
cpu_num_cores="8"/>
11+
</INFO>
12+
<SIGNALCHAIN>
13+
<PROCESSOR name="OE FPGA Acquisition Board" insertionPoint="0" pluginName="OE FPGA Acquisition Board"
14+
type="4" index="0" libraryName="OE FPGA Acquisition Board" libraryVersion="0.1.5"
15+
processorType="2" nodeId="100">
16+
<GLOBAL_PARAMETERS/>
17+
<STREAM name="Rhythm Data" description="Continuous and event data from a device running Rhythm FPGA firmware"
18+
sample_rate="30000.0" channel_count="72">
19+
<PARAMETERS/>
20+
</STREAM>
21+
<CUSTOM_PARAMETERS/>
22+
<EDITOR isCollapsed="0" isDrawerOpen="0" displayName="Acquisition Board"
23+
activeStream="0" Type="Visualizer" SampleRate="15" SampleRateString="30.0 kS/s"
24+
LowCut="1.321774836142808" HighCut="7603.76512183337" AUXsOn="0"
25+
ADCsOn="1" AudioOutputL="-1" AudioOutputR="-1" NoiseSlicer="0"
26+
TTLFastSettle="1" DAC_TTL="0" DAC_HPF="1" DSPOffset="1" DSPCutoffFreq="0.1457129257077072"
27+
save_impedance_measurements="0" auto_measure_impedances="0" LEDs="1"
28+
ClockDivideRatio="1" Channel_Naming_Scheme="1">
29+
<TAB Active="1" Index="3"/>
30+
<WINDOW Active="0"/>
31+
<ADCRANGE Channel="0" Range="0"/>
32+
<ADCRANGE Channel="1" Range="0"/>
33+
<ADCRANGE Channel="2" Range="0"/>
34+
<ADCRANGE Channel="3" Range="0"/>
35+
<ADCRANGE Channel="4" Range="0"/>
36+
<ADCRANGE Channel="5" Range="0"/>
37+
<ADCRANGE Channel="6" Range="0"/>
38+
<ADCRANGE Channel="7" Range="0"/>
39+
</EDITOR>
40+
</PROCESSOR>
41+
<PROCESSOR name="Record Node" insertionPoint="1" pluginName="Record Node"
42+
type="0" index="3" libraryName="" libraryVersion="" processorType="8"
43+
nodeId="101">
44+
<GLOBAL_PARAMETERS/>
45+
<STREAM name="Rhythm Data" description="Continuous and event data from a device running Rhythm FPGA firmware"
46+
sample_rate="30000.0" channel_count="72">
47+
<PARAMETERS enable_stream="1"/>
48+
</STREAM>
49+
<CUSTOM_PARAMETERS path="default" engine="BINARY" recordEvents="1"
50+
recordSpikes="1" fifoMonitorsVisible="1">
51+
<STREAM isMainStream="1" sync_line="0" name="Rhythm Data" source_node_id="100"
52+
sample_rate="30000.0" channel_count="72" recording_state="ALL"/>
53+
</CUSTOM_PARAMETERS>
54+
<EDITOR isCollapsed="0" isDrawerOpen="0" displayName="Record Node" activeStream="0"/>
55+
</PROCESSOR>
56+
<PROCESSOR name="LFP Viewer" insertionPoint="1" pluginName="LFP Viewer"
57+
type="1" index="8" libraryName="LFP viewer" libraryVersion="0.1.0"
58+
processorType="3" nodeId="103">
59+
<GLOBAL_PARAMETERS/>
60+
<STREAM name="Rhythm Data" description="Continuous and event data from a device running Rhythm FPGA firmware"
61+
sample_rate="30000.0" channel_count="72">
62+
<PARAMETERS enable_stream="1"/>
63+
</STREAM>
64+
<CUSTOM_PARAMETERS/>
65+
<EDITOR isCollapsed="0" isDrawerOpen="0" displayName="LFP Viewer" activeStream="0"
66+
Type="LfpDisplayEditor">
67+
<TAB Active="1" Index="4"/>
68+
<WINDOW Active="0"/>
69+
<VALUES SelectedLayout="1"/>
70+
<LFPDISPLAY0 SubprocessorID="10001" Range="250,2000,10.0" Timebase="2.0" Spread="40"
71+
colourScheme="1" colorGrouping="1" spikeRaster="OFF" clipWarning="1"
72+
satWarning="1" reverseOrder="0" sortByDepth="0" channelSkip="1"
73+
showChannelNum="0" subtractOffset="0" isInverted="0" triggerSource="1"
74+
trialAvg="0" singleChannelView="-1" EventButtonState="255" ChannelDisplayState="111111111111111111111111111111111111111111111111111111111111111111111111"
75+
ScrollX="0" ScrollY="0"/>
76+
<LFPDISPLAY1 SubprocessorID="10001" Range="250,2000,10.0" Timebase="2.0" Spread="40"
77+
colourScheme="1" colorGrouping="1" spikeRaster="OFF" clipWarning="1"
78+
satWarning="1" reverseOrder="0" sortByDepth="0" channelSkip="1"
79+
showChannelNum="0" subtractOffset="0" isInverted="0" triggerSource="1"
80+
trialAvg="0" singleChannelView="-1" EventButtonState="255" ChannelDisplayState="111111111111111111111111111111111111111111111111111111111111111111111111"
81+
ScrollX="0" ScrollY="0"/>
82+
<LFPDISPLAY2 SubprocessorID="10001" Range="250,2000,10.0" Timebase="2.0" Spread="40"
83+
colourScheme="1" colorGrouping="1" spikeRaster="OFF" clipWarning="1"
84+
satWarning="1" reverseOrder="0" sortByDepth="0" channelSkip="1"
85+
showChannelNum="0" subtractOffset="0" isInverted="0" triggerSource="1"
86+
trialAvg="0" singleChannelView="-1" EventButtonState="255" ChannelDisplayState="111111111111111111111111111111111111111111111111111111111111111111111111"
87+
ScrollX="0" ScrollY="0"/>
88+
<CANVAS doubleVerticalSplitRatio="0.5" doubleHorizontalSplitRatio="0.5"
89+
tripleHorizontalSplitRatio="0.33,0.66" tripleVerticalSplitRatio="0.33,0.66"
90+
showAllOptions="0"/>
91+
</EDITOR>
92+
</PROCESSOR>
93+
<PROCESSOR name="Bandpass Filter" insertionPoint="1" pluginName="Bandpass Filter"
94+
type="1" index="6" libraryName="Bandpass Filter" libraryVersion="0.1.0"
95+
processorType="1" nodeId="104">
96+
<GLOBAL_PARAMETERS/>
97+
<STREAM name="Rhythm Data" description="Continuous and event data from a device running Rhythm FPGA firmware"
98+
sample_rate="30000.0" channel_count="72">
99+
<PARAMETERS enable_stream="1" high_cut="6000.0" low_cut="300.0" Channels=""/>
100+
</STREAM>
101+
<CUSTOM_PARAMETERS/>
102+
<EDITOR isCollapsed="0" isDrawerOpen="0" displayName="Bandpass Filter"
103+
activeStream="0"/>
104+
</PROCESSOR>
105+
<PROCESSOR name="Spike Detector" insertionPoint="1" pluginName="Spike Detector"
106+
type="1" index="2" libraryName="Basic Spike Display" libraryVersion="0.1.0"
107+
processorType="1" nodeId="105">
108+
<GLOBAL_PARAMETERS/>
109+
<STREAM name="Rhythm Data" description="Continuous and event data from a device running Rhythm FPGA firmware"
110+
sample_rate="30000.0" channel_count="72">
111+
<PARAMETERS enable_stream="1"/>
112+
</STREAM>
113+
<CUSTOM_PARAMETERS>
114+
<SPIKE_CHANNEL name="Tetrode 1" description="Tetrode from Spike Detector 105"
115+
num_channels="4" sample_rate="30000.0" stream_name="Rhythm Data"
116+
stream_source="100" local_channels="1,2,3,4" thrshlder_type="0"
117+
abs_threshold1="-50.0" std_threshold1="4.0" dyn_threshold1="4.0"
118+
abs_threshold2="-50.0" std_threshold2="4.0" dyn_threshold2="4.0"
119+
abs_threshold3="-50.0" std_threshold3="4.0" dyn_threshold3="4.0"
120+
abs_threshold4="-50.0" std_threshold4="4.0" dyn_threshold4="4.0"
121+
waveform_type="0"/>
122+
<SPIKE_CHANNEL name="Tetrode 2" description="Tetrode from Spike Detector 105"
123+
num_channels="4" sample_rate="30000.0" stream_name="Rhythm Data"
124+
stream_source="100" local_channels="5,6,7,8" thrshlder_type="0"
125+
abs_threshold1="-50.0" std_threshold1="4.0" dyn_threshold1="4.0"
126+
abs_threshold2="-50.0" std_threshold2="4.0" dyn_threshold2="4.0"
127+
abs_threshold3="-50.0" std_threshold3="4.0" dyn_threshold3="4.0"
128+
abs_threshold4="-50.0" std_threshold4="4.0" dyn_threshold4="4.0"
129+
waveform_type="0"/>
130+
<SPIKE_CHANNEL name="Tetrode 3" description="Tetrode from Spike Detector 105"
131+
num_channels="4" sample_rate="30000.0" stream_name="Rhythm Data"
132+
stream_source="100" local_channels="9,10,11,12" thrshlder_type="0"
133+
abs_threshold1="-50.0" std_threshold1="4.0" dyn_threshold1="4.0"
134+
abs_threshold2="-50.0" std_threshold2="4.0" dyn_threshold2="4.0"
135+
abs_threshold3="-50.0" std_threshold3="4.0" dyn_threshold3="4.0"
136+
abs_threshold4="-50.0" std_threshold4="4.0" dyn_threshold4="4.0"
137+
waveform_type="0"/>
138+
<SPIKE_CHANNEL name="Tetrode 4" description="Tetrode from Spike Detector 105"
139+
num_channels="4" sample_rate="30000.0" stream_name="Rhythm Data"
140+
stream_source="100" local_channels="13,14,15,16" thrshlder_type="0"
141+
abs_threshold1="-50.0" std_threshold1="4.0" dyn_threshold1="4.0"
142+
abs_threshold2="-50.0" std_threshold2="4.0" dyn_threshold2="4.0"
143+
abs_threshold3="-50.0" std_threshold3="4.0" dyn_threshold3="4.0"
144+
abs_threshold4="-50.0" std_threshold4="4.0" dyn_threshold4="4.0"
145+
waveform_type="0"/>
146+
</CUSTOM_PARAMETERS>
147+
<EDITOR isCollapsed="0" isDrawerOpen="0" displayName="Spike Detector"
148+
activeStream="0"/>
149+
</PROCESSOR>
150+
<PROCESSOR name="Audio Monitor" insertionPoint="1" pluginName="Audio Monitor"
151+
type="0" index="4" libraryName="" libraryVersion="" processorType="6"
152+
nodeId="102">
153+
<GLOBAL_PARAMETERS audio_output="1" mute_audio="0"/>
154+
<STREAM name="Rhythm Data" description="Continuous and event data from a device running Rhythm FPGA firmware"
155+
sample_rate="30000.0" channel_count="72">
156+
<PARAMETERS enable_stream="1" Channels=""/>
157+
</STREAM>
158+
<CUSTOM_PARAMETERS/>
159+
<EDITOR isCollapsed="0" isDrawerOpen="0" displayName="Audio Monitor"
160+
activeStream="0"/>
161+
</PROCESSOR>
162+
<PROCESSOR name="Record Node" insertionPoint="1" pluginName="Record Node"
163+
type="0" index="3" libraryName="" libraryVersion="" processorType="8"
164+
nodeId="106">
165+
<GLOBAL_PARAMETERS/>
166+
<STREAM name="Rhythm Data" description="Continuous and event data from a device running Rhythm FPGA firmware"
167+
sample_rate="30000.0" channel_count="72">
168+
<PARAMETERS enable_stream="1"/>
169+
</STREAM>
170+
<CUSTOM_PARAMETERS path="default" engine="BINARY" recordEvents="1"
171+
recordSpikes="1" fifoMonitorsVisible="1">
172+
<STREAM isMainStream="1" sync_line="0" name="Rhythm Data" source_node_id="100"
173+
sample_rate="30000.0" channel_count="72" recording_state="ALL"/>
174+
</CUSTOM_PARAMETERS>
175+
<EDITOR isCollapsed="0" isDrawerOpen="0" displayName="Record Node" activeStream="0"/>
176+
</PROCESSOR>
177+
<PROCESSOR name="Spike Viewer" insertionPoint="1" pluginName="Spike Viewer"
178+
type="1" index="3" libraryName="Basic Spike Display" libraryVersion="0.1.0"
179+
processorType="3" nodeId="107">
180+
<GLOBAL_PARAMETERS/>
181+
<STREAM name="Rhythm Data" description="Continuous and event data from a device running Rhythm FPGA firmware"
182+
sample_rate="30000.0" channel_count="72">
183+
<PARAMETERS enable_stream="1"/>
184+
</STREAM>
185+
<CUSTOM_PARAMETERS/>
186+
<EDITOR isCollapsed="0" isDrawerOpen="0" displayName="Spike Viewer" activeStream="0"
187+
Type="Visualizer" scale_factor_index="5">
188+
<TAB Active="1" Index="5"/>
189+
<WINDOW Active="0"/>
190+
<SPIKEDISPLAY LockThresholds="0" InvertSpikes="0">
191+
<PLOT>
192+
<AXIS thresh="0.0" range="250.0"/>
193+
<AXIS thresh="0.0" range="250.0"/>
194+
<AXIS thresh="0.0" range="250.0"/>
195+
<AXIS thresh="0.0" range="250.0"/>
196+
</PLOT>
197+
<PLOT>
198+
<AXIS thresh="0.0" range="250.0"/>
199+
<AXIS thresh="0.0" range="250.0"/>
200+
<AXIS thresh="0.0" range="250.0"/>
201+
<AXIS thresh="0.0" range="250.0"/>
202+
</PLOT>
203+
<PLOT>
204+
<AXIS thresh="0.0" range="250.0"/>
205+
<AXIS thresh="0.0" range="250.0"/>
206+
<AXIS thresh="0.0" range="250.0"/>
207+
<AXIS thresh="0.0" range="250.0"/>
208+
</PLOT>
209+
<PLOT>
210+
<AXIS thresh="0.0" range="250.0"/>
211+
<AXIS thresh="0.0" range="250.0"/>
212+
<AXIS thresh="0.0" range="250.0"/>
213+
<AXIS thresh="0.0" range="250.0"/>
214+
</PLOT>
215+
</SPIKEDISPLAY>
216+
</EDITOR>
217+
</PROCESSOR>
218+
</SIGNALCHAIN>
219+
<EDITORVIEWPORT scroll="0">
220+
<ACQUISITION_BOARD ID="100"/>
221+
<RECORD_NODE ID="101"/>
222+
<LFP_VIEWER ID="103"/>
223+
<BANDPASS_FILTER ID="104"/>
224+
<SPIKE_DETECTOR ID="105"/>
225+
<AUDIO_MONITOR ID="102"/>
226+
<RECORD_NODE ID="106"/>
227+
<SPIKE_VIEWER ID="107"/>
228+
</EDITORVIEWPORT>
229+
<DATAVIEWPORT selectedTab="5"/>
230+
<AUDIO sampleRate="48000.0" bufferSize="1024" deviceType="Windows Audio">
231+
<DEVICESETUP deviceType="Windows Audio" audioOutputDeviceName="Speaker/HP (Realtek High Definition Audio)"
232+
audioInputDeviceName="" audioDeviceRate="48000.0" audioDeviceBufferSize="1024"
233+
audioDeviceInChans="0" audioDeviceOutChans="11"/>
234+
</AUDIO>
235+
<CONTROLPANEL isOpen="1" recordPath="default" recordEngine="BINARY"/>
236+
<AUDIOEDITOR isMuted="0" volume="42.0" noiseGate="10.0"/>
237+
<FILENAMECONFIG>
238+
<PREPEND state="0" value=""/>
239+
<MAIN state="1" value="YYYY-MM-DD_HH-MM-SS"/>
240+
<APPEND state="0" value=""/>
241+
</FILENAMECONFIG>
242+
<PROCESSORLIST>
243+
<COLOR ID="801" R="59" G="59" B="59"/>
244+
<COLOR ID="804" R="241" G="90" B="41"/>
245+
<COLOR ID="802" R="0" G="174" B="239"/>
246+
<COLOR ID="803" R="0" G="166" B="81"/>
247+
<COLOR ID="805" R="147" G="149" B="152"/>
248+
<COLOR ID="806" R="255" G="0" B="0"/>
249+
<COLOR ID="807" R="0" G="0" B="0"/>
250+
</PROCESSORLIST>
251+
<UICOMPONENT isProcessorListOpen="1" isEditorViewportOpen="1"/>
252+
</SETTINGS>

Source/UI/DefaultConfig.cpp

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -212,17 +212,45 @@ void DefaultConfigComponent::resized()
212212

213213
void DefaultConfigComponent::buttonClicked(Button* button)
214214
{
215-
if(button == goButton.get())
215+
if (button == goButton.get())
216216
{
217217
// Get selected config file name with full path
218218
String filePath;
219219

220-
if(acqBoardButton->getToggleState())
221-
filePath = "configs" + File::getSeparatorString() + "acq_board_config.xml";
222-
else if(fileReaderButton->getToggleState())
220+
if (acqBoardButton->getToggleState())
221+
{
222+
int response = AlertWindow::showYesNoCancelBox(AlertWindow::QuestionIcon, "Select acquisition board type",
223+
"What type of FPGA does your acquisition board have? \n\n"
224+
"If it was delivered by Open Ephys Production Site after "
225+
"November 2022, it has a custom FPGA designed by Open Ephys. \n\n"
226+
"Older acquisition boards likely use an Opal Kelly FPGA.",
227+
"Open Ephys FPGA", "Opal Kelly FPGA", "Cancel");
228+
229+
if (response == 1) // OE FPGA
230+
{
231+
LOGA("Selected Open Ephys FPGA");
232+
filePath = "configs" + File::getSeparatorString() + "oe_acq_board_config.xml";
233+
}
234+
else if (response == 2)
235+
{
236+
LOGA("Selected Opal Kelly FPGA");
237+
filePath = "configs" + File::getSeparatorString() + "acq_board_config.xml";
238+
}
239+
else {
240+
return;
241+
}
242+
243+
}
244+
else if (fileReaderButton->getToggleState())
245+
{
223246
filePath = "configs" + File::getSeparatorString() + "file_reader_config.xml";
247+
}
248+
224249
else
250+
{
225251
filePath = "configs" + File::getSeparatorString() + "neuropixels_pxi_config.xml";
252+
}
253+
226254

227255
#ifdef __APPLE__
228256
File configFile = File::getSpecialLocation(File::currentApplicationFile)
@@ -242,7 +270,7 @@ void DefaultConfigComponent::buttonClicked(Button* button)
242270
dw->exitModalState (0);
243271

244272
}
245-
else if(button->getRadioGroupId() == 101)
273+
else if (button->getRadioGroupId() == 101)
246274
{
247275
this->repaint();
248276
}

0 commit comments

Comments
 (0)