artiq/doc/manual/faq.rst

73 lines
2.2 KiB
ReStructuredText
Raw Normal View History

FAQ
###
How do I ...
============
2015-03-25 03:12:40 +08:00
override the `sysclk` frequency of just one dds?
------------------------------------------------
2015-03-25 23:17:49 +08:00
Override the parameter using an argument in the DDB.
organize parameters in folders?
-------------------------------
Use gui auto-completion and filtering.
Names need to be unique.
enforce functional dependencies between parameters?
---------------------------------------------------
2015-03-25 23:17:49 +08:00
If you want to override a parameter `b` in the PDB to be `b = 2*a`,
use wrapper experiments, overriding parameters by passing them to the
experiment's constructor.
2015-03-25 03:12:40 +08:00
get rid of `DBKeys`?
--------------------
2015-03-25 03:12:40 +08:00
`DBKeys` enforces valid parameter/argument names, references
2015-03-25 23:17:49 +08:00
keys in PDB and hints at metadata on how values can be retrieved.
write a generator feeding a kernel feeding an analyze function?
---------------------------------------------------------------
Like this::
def run(self):
self.parse(self.pipe(iter(range(10))))
def pipe(self, gen):
for i in gen:
r = self.do(i)
yield r
def parse(self, gen):
for i in gen:
pass
@kernel
def do(self, i):
return i
create and use variable lengths arrays?
------------------------------------------------
Don't. Preallocate everything. Or chunk it and e.g. read 100 events per
function call, push them upstream and retry until the gate time closes.
2015-03-25 23:17:49 +08:00
execute multiple slow controller RPCs in parallel without losing time?
----------------------------------------------------------------------
2015-03-25 23:17:49 +08:00
Use `threading.Thread`: portable, fast, simple for one-shot calls.
2015-03-25 23:17:49 +08:00
write part of my experiment as a coroutine/asyncio task/generator?
------------------------------------------------------------------
2015-03-25 03:12:40 +08:00
You can not change the API that your experiment exposes: `__init__()`,
2015-03-25 23:17:49 +08:00
`build()`, `run()` and `analyze()` need to be regular functions, not
generators or asyncio coroutines. That would make reusing your own code in
2015-03-25 03:12:40 +08:00
sub-experiments difficult and fragile. You can however always use the
2015-03-25 23:17:49 +08:00
scheduler API to achieve the same (`scheduler.yield(duration=0)`)
or wrap your own generators/coroutines/tasks in regular functions that
2015-03-25 03:12:40 +08:00
you then expose as part of the API.