Cat
Proto40MHz_v1.py
Go to the documentation of this file.
1 import wx.gizmos
2 
3 from element import *
4 from libCatKernel import *
5 
7  def __init__(self, cat, obj, panel, path):
8  element.__init__(self,cat,obj,panel,path)
9  self.loadxrc()
10 
11  self.softTrig=self.getControl("softtrig")
12  self.modeCh=self.getControl("modeCh")
13 
14  self.ph0_0=self.getControl("phaser0_0")
15  self.ph0_1=self.getControl("phaser0_1")
16  self.ph0_2=self.getControl("phaser0_2")
17  self.ph0_3=self.getControl("phaser0_3")
18  self.ph1_0=self.getControl("phaser1_0")
19  self.ph1_1=self.getControl("phaser1_1")
20  self.ph1_2=self.getControl("phaser1_2")
21  self.ph1_3=self.getControl("phaser1_3")
22  self.ph2_0=self.getControl("phaser2_0")
23  self.ph2_1=self.getControl("phaser2_1")
24  self.ph2_2=self.getControl("phaser2_2")
25  self.ph2_3=self.getControl("phaser2_3")
26 
27  self.panel.Bind(wx.EVT_BUTTON,self.onAcquisition,id=xrc.XRCID("acquisition"))
28  self.panel.Bind(wx.EVT_BUTTON,self.isReady,id=xrc.XRCID("isReady"))
29  self.panel.Bind(wx.EVT_BUTTON,self.onTrigger,id=xrc.XRCID("trigger"))
30  self.panel.Bind(wx.EVT_BUTTON,self.onEnableStorage,id=xrc.XRCID("enableStorage"))
31  self.panel.Bind(wx.EVT_TOGGLEBUTTON,self.onSoftTrig,id=xrc.XRCID("softtrig"))
32  self.panel.Bind(wx.EVT_TOGGLEBUTTON,self.onModeAX,id=xrc.XRCID("modeAX"))
33 
34  self.panel.Bind(wx.EVT_CHOICE,self.onModeCh,id=xrc.XRCID("modeCh"))
35 
36  self.panel.Bind(wx.EVT_CHOICE,self.onPipeline,id=xrc.XRCID("pipeline"))
37 
38  self.panel.Bind(wx.EVT_BUTTON,self.onGlobalReset,id=xrc.XRCID("global_reset"))
39  self.panel.Bind(wx.EVT_BUTTON,self.onUsbPhasersReset,id=xrc.XRCID("usb_phasers_reset"))
40  self.panel.Bind(wx.EVT_BUTTON,self.onResetFE,id=xrc.XRCID("reset_fe"))
41  self.panel.Bind(wx.EVT_BUTTON,self.onResetSPI,id=xrc.XRCID("reset_spi"))
42  self.panel.Bind(wx.EVT_BUTTON,self.onFifoReset,id=xrc.XRCID("fifo_reset"))
43 
44  self.panel.Bind(wx.EVT_BUTTON,self.onFifoRAZ,id=xrc.XRCID("fifo_raz"))
45  self.panel.Bind(wx.EVT_BUTTON,self.onPatternRAZ,id=xrc.XRCID("pattern_raz"))
46  self.panel.Bind(wx.EVT_BUTTON,self.onTriggerRAZ,id=xrc.XRCID("trigger_raz"))
47  self.panel.Bind(wx.EVT_BUTTON,self.onToAXRAZ,id=xrc.XRCID("toax_raz"))
48  self.panel.Bind(wx.EVT_BUTTON,self.onFromAXRAZ,id=xrc.XRCID("from_raz"))
49 
50  self.panel.Bind(wx.EVT_BUTTON,self.onFifoWrite,id=xrc.XRCID("fifo_write"))
51  self.panel.Bind(wx.EVT_BUTTON,self.onPatternWrite,id=xrc.XRCID("pattern_write"))
52  self.panel.Bind(wx.EVT_BUTTON,self.onTriggerWrite,id=xrc.XRCID("trigger_write"))
53  self.panel.Bind(wx.EVT_BUTTON,self.onToAXWrite,id=xrc.XRCID("toax_write"))
54  self.panel.Bind(wx.EVT_BUTTON,self.onFromAXWrite,id=xrc.XRCID("fromax_write"))
55  self.panel.Bind(wx.EVT_BUTTON,self.onReadFifo,id=xrc.XRCID("fifo_read"))
56  self.panel.Bind(wx.EVT_BUTTON,self.onReadPattern,id=xrc.XRCID("pattern_read"))
57  self.panel.Bind(wx.EVT_BUTTON,self.onReadTrigger,id=xrc.XRCID("trigger_read"))
58  self.panel.Bind(wx.EVT_BUTTON,self.onReadToAX,id=xrc.XRCID("toax_read"))
59  self.panel.Bind(wx.EVT_BUTTON,self.onReadFromAX,id=xrc.XRCID("fromax_read"))
60 
61  self.panel.Bind(wx.EVT_BUTTON,self.onFromAXPtrRaz,id=xrc.XRCID("fromax_ptr_raz"))
62  self.panel.Bind(wx.EVT_BUTTON,self.onToAXPtrRaz,id=xrc.XRCID("toax_ptr_raz"))
63  self.panel.Bind(wx.EVT_BUTTON,self.onStartSequenceAX,id=xrc.XRCID("startAXSequence"))
64 
65  self.panel.Bind(wx.EVT_BUTTON,self.onLatencyReset,id=xrc.XRCID("latency_reset"))
66  self.panel.Bind(wx.EVT_BUTTON,self.onAcquisitionReset,id=xrc.XRCID("acquisition_reset"))
67 
68  self.panel.Bind(wx.EVT_BUTTON,self.onPhaser0,id=xrc.XRCID("apply_ph0"))
69  self.panel.Bind(wx.EVT_BUTTON,self.onPhaser1,id=xrc.XRCID("apply_ph1"))
70  self.panel.Bind(wx.EVT_BUTTON,self.onPhaser2,id=xrc.XRCID("apply_ph2"))
71 
72 
73  self.panel.Bind(wx.EVT_BUTTON,self.onapplyCh,id=xrc.XRCID("applyCh"))
74  self.panel.Bind(wx.EVT_BUTTON,self.onenableAll,id=xrc.XRCID("enableAll"))
75  self.panel.Bind(wx.EVT_BUTTON,self.onunableAll,id=xrc.XRCID("unableAll"))
76 
77  self.panel.Bind(wx.EVT_BUTTON,self.onapplyfifodepth,id=xrc.XRCID("applyfifodepth"))
78 
79  self.panel.Bind(wx.EVT_BUTTON,self.onapplyclockdiv,id=xrc.XRCID("applyclockdiv"))
80 
81  self.panel.Bind(wx.EVT_BUTTON,self.onapplynumber,id=xrc.XRCID("applynumber"))
82  self.panel.Bind(wx.EVT_BUTTON,self.onapplydelay,id=xrc.XRCID("applydelay"))
83 # self.panel.Bind(wx.EVT_BUTTON,self.onapplyseqpulsedelay,
84 # id=xrc.XRCID("applyseqpulsedelay"))
85  self.panel.Bind(wx.EVT_BUTTON,self.onapplyfreq,id=xrc.XRCID("applyfreq"))
86  self.panel.Bind(wx.EVT_BUTTON,self.onapplytrig,id=xrc.XRCID("applytrig"))
87 
88  self.panel.Bind(wx.EVT_BUTTON,self.onapplyaxlatency,id=xrc.XRCID("apply_ax_latency"))
89  self.panel.Bind(wx.EVT_BUTTON,self.onapplyaxlength,id=xrc.XRCID("apply_ax_length"))
90 
91  def update(self):
92 
93  if self.obj.a3pe().softwareTrigger():
94  self.getControl("softtrig").SetValue(1)
95  self.getControl("softtrig").SetLabel("Soft. Trig.")
96  else:
97  self.getControl("softtrig").SetValue(0)
98  self.getControl("softtrig").SetLabel("Ext. Trig.")
99 
100  # if self.obj.a3pe().internalAXSequence():
101  # self.getControl("modeAX").SetValue(1)
102  # self.getControl("modeAX").SetLabel("Internal")
103  # else:
104  # self.getControl("modeAX").SetValue(0)
105  # self.getControl("modeAX").SetLabel("AX loop")
106 
107  self.getControl("isReady").SetBackgroundColour('BLUE')
108 
109  if self.obj.a3pe().writeStorageFifoUsb() :
110  self.getControl("modeCh").SetSelection(1)
111  else:
112  self.getControl("modeCh").SetSelection(0)
113 
114  pipeline=self.obj.a3pe().pipeline()
115  if pipeline==0: self.getControl("pipeline").SetSelection(0)
116  elif pipeline==1: self.getControl("pipeline").SetSelection(1)
117  else: self.getControl("pipeline").SetSelection(2)
118 
119  self.getControl("ch0").SetValue(self.obj.a3pe().enableADC(0))
120  self.getControl("ch1").SetValue(self.obj.a3pe().enableADC(1))
121  self.getControl("ch2").SetValue(self.obj.a3pe().enableADC(2))
122  self.getControl("ch3").SetValue(self.obj.a3pe().enableADC(3))
123  self.getControl("ch4").SetValue(self.obj.a3pe().enableADC(4))
124  self.getControl("ch5").SetValue(self.obj.a3pe().enableADC(5))
125  self.getControl("ch6").SetValue(self.obj.a3pe().enableADC(6))
126  self.getControl("ch7").SetValue(self.obj.a3pe().enableADC(7))
127  self.getControl("clockdiv").SetValue(self.obj.a3pe().clockDivision())
128  self.getControl("fifodepth").SetValue(self.obj.a3pe().fifoDepth())
129  self.getControl("fifolatency").SetValue(self.obj.a3pe().fifoLatency())
130  self.getControl("trignumber").SetValue(self.obj.a3pe().nTrigger())
131 # self.getControl("ax_length").SetValue(self.obj.a3pe().lengthAX())
132 # self.getControl("ax_latency").SetValue(self.obj.a3pe().latencyAX())
133  self.getControl("trigfreq").SetValue(self.obj.a3pe().triggerRate())
134  self.getControl("trigdelay").SetValue(self.obj.a3pe().triggerDelay())
135 # self.getControl("seqpulsedelay").SetValue(self.obj.a3pe().seqPulseDelay())
136  self.ph0_0.SetValue(self.obj.phaser0().phase(0))
137  self.ph0_1.SetValue(self.obj.phaser0().phase(1))
138  self.ph0_2.SetValue(self.obj.phaser0().phase(2))
139  self.ph0_3.SetValue(self.obj.phaser0().phase(3))
140  self.ph1_0.SetValue(self.obj.phaser1().phase(0))
141  self.ph1_1.SetValue(self.obj.phaser1().phase(1))
142  self.ph1_2.SetValue(self.obj.phaser1().phase(2))
143  self.ph1_3.SetValue(self.obj.phaser1().phase(3))
144  self.ph2_0.SetValue(self.obj.phaser2().phase(0))
145  self.ph2_1.SetValue(self.obj.phaser2().phase(1))
146  self.ph2_2.SetValue(self.obj.phaser2().phase(2))
147  self.ph2_3.SetValue(self.obj.phaser2().phase(3))
148 
149  def onAcquisition(self, event):
150 # self.obj.a3pe().acquisition()
151  self.obj.a3pe().enableStorage()
152  self.obj.a3pe().trigger()
153  self.obj.a3pe().dumpStorage()
154 
155  def isReady(self, event):
156  val=self.obj.a3pe().dataReady
157  if val: self.getControl("isReady").SetBackgroundColour('GREEN')
158  else : self.getControl("isReady").SetBackgroundColour('RED')
159 
160 
161  def onTrigger(self, event):
162  self.obj.a3pe().trigger()
163 
164  def onEnableStorage(self, event):
165  self.obj.a3pe().enableStorage()
166 
167  def onReadFifo(self, event):
168  self.obj.a3pe().dumpStorage()
169 
170  def onReadPattern(self, event):
171  self.obj.a3pe().dumpPattern()
172 
173  def onReadTrigger(self, event):
174  self.obj.a3pe().dumpTrigger()
175 
176  def onReadToAX(self, event):
177  self.obj.a3pe().dumpToAX()
178 
179  def onReadFromAX(self, event):
180  self.obj.a3pe().dumpFromAX()
181 
182  def onSoftTrig(self, event):
183  self.obj.a3pe().setSoftwareTrigger(self.softTrig.GetValue())
184  if self.softTrig.GetValue():
185  self.getControl("softtrig").SetLabel("Soft. Trig.")
186  else:
187  self.getControl("softtrig").SetLabel("Ext. Trig.")
188 
189  def onModeAX(self, event):
190  if self.getControl("modeAX").GetValue():
191  self.getControl("modeAX").SetLabel("Internal")
192  else:
193  self.getControl("modeAX").SetLabel("AX loop")
194  self.obj.a3pe().setInternalAXSequence(self.getControl("modeAX").GetValue())
195 
196  def onPipeline(self, event):
197  pipeline=self.getControl("pipeline").GetSelection()
198  self.obj.a3pe().setPipeline(pipeline)
199 
200  def onGlobalReset(self, event):
201  self.obj.reset()
202 
203  def onUsbPhasersReset(self, event):
204  self.obj.a3pe().resetUsbPhasers()
205 
206  def onFifoReset(self, event):
207  self.obj.a3pe().resetStorageFifo()
208 
209  def onResetFE(self, event):
210  self.obj.a3pe().resetFE()
211 
212  def onResetSPI(self, event):
213  self.obj.a3pe().resetSPI()
214 
215  def onFifoRAZ(self, event):
216  self.obj.a3pe().setWriteStorageFifoUsb(True)
217  self.obj.a3pe().storageRam().raz()
218  self.obj.a3pe().setWriteStorageFifoUsb(False)
219 
220  def onPatternRAZ(self, event):
221  self.obj.a3pe().patternRam().raz()
222 
223  def onTriggerRAZ(self, event):
224  self.obj.a3pe().triggerRam().raz()
225 
226  def onToAXRAZ(self, event):
227  self.obj.a3pe().toAXRam().raz()
228 
229  def onFromAXRAZ(self, event):
230  self.obj.a3pe().fromAXRam().raz()
231 
232  def onFifoWrite(self,event):
233  filename = self.getFile()
234  if filename!="":
235  self.obj.a3pe().loadStorage(filename)
236 
237  def onPatternWrite(self,event):
238  filename = self.getFile()
239  if filename!="":
240  self.obj.a3pe().loadPattern(filename)
241 
242  def onTriggerWrite(self,event):
243  filename = self.getFile()
244  if filename!="":
245  self.obj.a3pe().loadTrigger(filename)
246 
247  def onToAXWrite(self,event):
248  filename = self.getFile()
249  if filename!="":
250  self.obj.a3pe().loadToAX(filename)
251 
252  def onFromAXWrite(self,event):
253  filename = self.getFile()
254  if filename!="":
255  self.obj.a3pe().loadFromAX(filename)
256 
257  def onLatencyReset(self, event):
258  self.obj.a3pe().resetLatencyCounter()
259 
260  def onAcquisitionReset(self, event):
261  self.obj.a3pe().resetAcquisitionWriteCounter()
262 
263  def onToAXPtrRaz(self, event):
264  print "toAxPtrRaz"
265  self.obj.a3pe().setAddToAXRam(0)
266 
267  def onFromAXPtrRaz(self, event):
268  print "FromAxPtrRaz"
269  self.obj.a3pe().setAddFromAXRam(0)
270 
271  def onStartSequenceAX(self,event):
272  print "StartSequence"
273  self.obj.a3pe().startSequenceAX()
274 
275  def onPhaser0(self, event):
276  phaser=self.obj.phaser0()
277  phaser.setPhase(0,self.ph0_0.GetValue())
278  phaser.setPhase(1,self.ph0_1.GetValue())
279  phaser.setPhase(2,self.ph0_2.GetValue())
280  phaser.setPhase(3,self.ph0_3.GetValue())
281 
282  def onPhaser1(self, event):
283  phaser=self.obj.phaser1()
284  phaser.setPhase(0,self.ph1_0.GetValue())
285  phaser.setPhase(1,self.ph1_1.GetValue())
286  phaser.setPhase(2,self.ph1_2.GetValue())
287  phaser.setPhase(3,self.ph1_3.GetValue())
288 
289  def onPhaser2(self, event):
290  phaser=self.obj.phaser2()
291  phaser.setPhase(0,self.ph2_0.GetValue())
292  phaser.setPhase(1,self.ph2_1.GetValue())
293  phaser.setPhase(2,self.ph2_2.GetValue())
294  phaser.setPhase(3,self.ph2_3.GetValue())
295 
296 
297  def onapplyCh(self, event):
298  self.obj.a3pe().setEnableADC(0,self.getControl("ch0").GetValue())
299  self.obj.a3pe().setEnableADC(1,self.getControl("ch1").GetValue())
300  self.obj.a3pe().setEnableADC(2,self.getControl("ch2").GetValue())
301  self.obj.a3pe().setEnableADC(3,self.getControl("ch3").GetValue())
302  self.obj.a3pe().setEnableADC(4,self.getControl("ch4").GetValue())
303  self.obj.a3pe().setEnableADC(5,self.getControl("ch5").GetValue())
304  self.obj.a3pe().setEnableADC(6,self.getControl("ch6").GetValue())
305  self.obj.a3pe().setEnableADC(7,self.getControl("ch7").GetValue())
306 
307  def onModeCh(self,event):
308  mode=self.getControl("modeCh").GetSelection()
309  if (mode==0) : self.obj.a3pe().setWriteStorageFifoUsb(False)
310  if (mode==1) : self.obj.a3pe().setWriteStorageFifoUsb(True)
311 
312  def onenableAll(self, event):
313  self.getControl("ch0").SetValue(True)
314  self.getControl("ch1").SetValue(True)
315  self.getControl("ch2").SetValue(True)
316  self.getControl("ch3").SetValue(True)
317  self.getControl("ch4").SetValue(True)
318  self.getControl("ch5").SetValue(True)
319  self.getControl("ch6").SetValue(True)
320  self.getControl("ch7").SetValue(True)
321 
322  def onunableAll(self, event):
323  self.getControl("ch0").SetValue(False)
324  self.getControl("ch1").SetValue(False)
325  self.getControl("ch2").SetValue(False)
326  self.getControl("ch3").SetValue(False)
327  self.getControl("ch4").SetValue(False)
328  self.getControl("ch5").SetValue(False)
329  self.getControl("ch6").SetValue(False)
330  self.getControl("ch7").SetValue(False)
331 
332  def onapplyfifodepth(self, event):
333  self.obj.a3pe().setFifoDepth(self.getControl("fifodepth").GetValue())
334  self.obj.a3pe().setFifoLatency(self.getControl("fifolatency").GetValue())
335 
336  def onapplyclockdiv(self, event):
337  self.obj.a3pe().setClockDivision(self.getControl("clockdiv").GetValue())
338 
339  def onapplynumber(self, event):
340  self.obj.a3pe().setNTrigger(self.getControl("trignumber").GetValue())
341 
342  def onapplydelay(self, event):
343  self.obj.a3pe().setTriggerDelay(self.getControl("trigdelay").GetValue())
344 
345 # def onapplyseqpulsedelay(self, event):
346 # self.obj.a3pe().setSeqPulseDelay(self.getControl("seqpulsedelay").GetValue())
347 
348  def onapplyfreq(self, event):
349  self.obj.a3pe().setTriggerRate(self.getControl("trigfreq").GetValue())
350 
351  def onapplytrig(self, event):
352  self.obj.a3pe().setNTrigger(self.getControl("trignumber").GetValue())
353  self.obj.a3pe().setTriggerDelay(self.getControl("trigdelay").GetValue())
354  self.obj.a3pe().setTriggerRate(self.getControl("trigfreq").GetValue())
355 
356  def onapplyaxlength(self, event):
357  self.obj.a3pe().setLengthAX(self.getControl("ax_length").GetValue())
358 
359  def onapplyaxlatency(self, event):
360  self.obj.a3pe().setLatencyAX(self.getControl("ax_latency").GetValue())
361 
362 
363  def getFile(self):
364  path=[]
365  dlg = wx.FileDialog(
366  self.panel, message="Choose a file",
367  defaultDir=os.getcwd(),
368  defaultFile="",
369  wildcard="data file (*.dat)|*.dat|" "text files (*.txt)|*.txt" "All files (*.*)|*.*",
370  style=wx.OPEN | wx.CHANGE_DIR
371  )
372  if dlg.ShowModal() == wx.ID_OK:
373  path = dlg.GetPaths()
374  dlg.Destroy()
375  if len(path)==1:
376  filename=str(path[0])
377  return filename
378  else:
379  return ""
380 
381 #----------------------------------------------------------------------
382 
383 
384 
385 def Edit (cat, obj, panel, path):
386  return Proto40MHz_v1(cat, obj, panel, path)
387 
388 #----------------------------------------------------------------------
389 
def onPhaser2(self, event)
def onapplyaxlength(self, event)
def onapplyfreq(self, event)
def onToAXPtrRaz(self, event)
def onResetSPI(self, event)
def onPatternWrite(self, event)
def onSoftTrig(self, event)
def onapplyaxlatency(self, event)
def onToAXRAZ(self, event)
def onPhaser0(self, event)
def onTriggerWrite(self, event)
def onFromAXPtrRaz(self, event)
def onFifoRAZ(self, event)
Phaser * phaser0()
Definition: Proto40MHz_v1.h:62
def Edit(cat, obj, panel, path)
def onapplynumber(self, event)
def onPhaser1(self, event)
def onapplyclockdiv(self, event)
A3PE * a3pe()
Definition: Proto40MHz_v1.h:74
def onFifoReset(self, event)
def onFifoWrite(self, event)
Phaser * phaser1()
Definition: Proto40MHz_v1.h:66
def onEnableStorage(self, event)
def onunableAll(self, event)
def onReadTrigger(self, event)
Phaser * phaser2()
Definition: Proto40MHz_v1.h:70
def onTriggerRAZ(self, event)
def onapplytrig(self, event)
def onFromAXRAZ(self, event)
def onLatencyReset(self, event)
def onReadToAX(self, event)
def onFromAXWrite(self, event)
def onPipeline(self, event)
def onapplydelay(self, event)
def onenableAll(self, event)
def onResetFE(self, event)
def onUsbPhasersReset(self, event)
def onToAXWrite(self, event)
def onReadFromAX(self, event)
def onReadPattern(self, event)
def onStartSequenceAX(self, event)
def __init__(self, cat, obj, panel, path)
Definition: Proto40MHz_v1.py:7
def onGlobalReset(self, event)
def onAcquisitionReset(self, event)
def onapplyfifodepth(self, event)
def onapplyCh(self, event)
def onAcquisition(self, event)
def onReadFifo(self, event)
def onTrigger(self, event)
def onPatternRAZ(self, event)