Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How can achieve <1ms Average Read Out Speed? #16

Open
DanielYang2017 opened this issue Dec 18, 2017 · 5 comments
Open

How can achieve <1ms Average Read Out Speed? #16

DanielYang2017 opened this issue Dec 18, 2017 · 5 comments

Comments

@DanielYang2017
Copy link

I use Andor DU-897E to read out 1x512 array in FVB Mode. With speed of 10MHz and 0.3 us, in theory the average speed is <500us, and the actual time cost is 6 ms.

The code I use:
StartAcquisition();
WaitForAcquisition();
GetAcquiredData(pic_buff, size);

And it's repeated 100 times in 600 ms, Could you please tell me what's the solution? Thanks!

@MarkRivers
Copy link
Member

I think this is a question you should ask to Andor technical support.

@DanielYang2017
Copy link
Author

Sorry about that! Actually I wanna ask that how can I operate as
StartAcquisition();
External Trigger;
GetAcquiredData(buff, size);
External Trigger;
GetAcquiredData(buff, size);
....
Or I only need to use StartAcquisition() at the beginning, for I find it sometimes need a lot of time to prepare.

Thanks!

@MarkRivers
Copy link
Member

The driver currently calls GetImages() rather than GetAcquiredData(). I just looked at the manual and it seems to me that GetAcquiredData() always returns all available images, whereas GetImages allows one to specify which image to read next from the circular buffer. But this is not clearly explained in their manual.

It is not clear from your post if you are using the areaDetector ADAndor driver, or are you using your own code to talk to the detector?

@DanielYang2017
Copy link
Author

It's ADAndor driver(ADAndor-R2-6.zip), and programed with C++ code in windows xp.

There is a document about 897E
(https://biochimie.umontreal.ca/wp-content/uploads/sites/37/2015/12/Andor-EMCCD-iXon897.pdf)

With read-out speed of (10MHz, 0.3us), image mode(512x100 area), internal trigger, no binning, non-Frame transfer mode, the cycling
of (StartAcquisition(); WaitForAcquisition(); GetOldestImage(pic_buff1, size1);) for 100 times takes 1.2s, so it's 77 fps, but in the document it should be 168 fps. Maybe I didn't use the suitable setting.

@pntbttrvbs
Copy link

Daniel, please reach out to Andor technical support or to me directly for some more information about
this.

Your basic premise is correct - with a 0.3 microsecond vertical shift speed, a 10 MHz readout, and a 1 (tall) by 512 (wide) area, you should be able to achieve >1,000 images(spectra) per second; however, this could be limited by hardware.

I would recommend using SetAcquisitionMode(AAKinetics) to set the acquisition mode to kinetics, and SetTriggerMode(1) to enable external triggering. You can then use GetSizeOfCircularBuffer() to return the maximum number of images the buffer can hold and set your kinetic series to that many images (or less) using SetNumberKinetics().

You should then be able to use:

StartAcquisition()
ExternalTrigger
ExternalTrigger
...
GetImages()

I don't see anything in the current ADAndor driver that should prevent this from working.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants