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

imaqdx camera server makes model-specific assumptions #31

Open
philipstarkey opened this issue Jan 17, 2019 · 2 comments
Open

imaqdx camera server makes model-specific assumptions #31

philipstarkey opened this issue Jan 17, 2019 · 2 comments
Labels
bug Something isn't working major

Comments

@philipstarkey
Copy link
Member

Original report (archived issue) by Chris Billington (Bitbucket: cbillington, GitHub: chrisjbillington).


I was setting up a Point Grey Flea 3 camera with the imaqdx camera server, and a bunch of the attributes have different names than what the server assumes.

I'm not 100% sure how to go about fixing this, but I'm told perhaps some sub-part of the attribute string is universal, so perhaps the correct attribute can be found for a particular model by looking at all attributes and looking for that sub-part.

Here's the changes I had to make to get it working. The exposure time attribute has no parts of the string in common with what the server was previously assuming it to be, though I haven't confirmed I can actually change the exposure time with this attribute, haven't gotten that far yet.

Anyhow flagging this as inadequate, we need a better solution, hopefully something better than hard-coding attribute lists by camera model.

@@ -312,7 +316,7 @@
 
         # Set the camera properties
         timeout_attr = 'AcquisitionAttributes::Timeout'
-        exposure_attr = 'CameraAttributes::Controls::Exposure::ExposureTimeAbs'
+        exposure_attr = 'CameraAttributes::Shutter::Value'
         if timeout_attr not in imaqdx_properties:
             # Set acquisition timeout to fixed value
             print('Setting {} to {:.3f}s'.format(timeout_attr, stop_time + 5))
@@ -329,11 +333,11 @@
 
         # Get the camera properties
         self.exposure_time = self.camera.get_attribute(exposure_attr)
-        self.width = self.camera.get_attribute('CameraAttributes::ImageFormat::Width')
-        self.height = self.camera.get_attribute('CameraAttributes::ImageFormat::Height')
+        self.width = self.camera.get_attribute('AcquisitionAttributes::Width')
+        self.height = self.camera.get_attribute('AcquisitionAttributes::Height')
         self.binning_horizontal = self.camera.get_attribute('CameraAttributes::ImageMode::BinningHorizontal')
         self.binning_vertical = self.camera.get_attribute('CameraAttributes::ImageMode::BinningVertical')
-        self.pixel_format = self.camera.get_attribute('CameraAttributes::ImageFormat::PixelFormat')
+        self.pixel_format = self.camera.get_attribute('AcquisitionAttributes::PixelFormat')
 
 
         print(f'Configuring camera for {self.n_images} images.')
@philipstarkey
Copy link
Member Author

Original comment by Chris Billington (Bitbucket: cbillington, GitHub: chrisjbillington).


One solution might be to a) save no attributes. Then we don't need to know what they are called, but the downside is they don't get saved. This is not as bad as it sounds - do you really need to know the dimensions of an image? Pixel format and binning are nice to know, but for specialy usage you will know what they are already and may have saved them as a runmanager global if they are something likely to change.

Another option is b), save all attributes, as returned by IMAQdxEnumerateAttributes2. We also don't need to know what they are called in this case, and they do get saved - but indiscriminately, and there are many of them. This is probably the solution I am leaning toward to make the code properly general

The exposure time is the only one that interacts with labscript. For this, perhaps we could rename the exposure_time attribute in labscript to trigger_width or similar (with an alias for backward compatibility), since that's what it actually is in labscript, and the only reason labscript needs to know about it since it makes the triggers. Otherwise, the user can set the exposure time by setting the appropriate attribute for the camera, and labscript doesn't need to know what the attribute is called. In the case that this corresponds to the exposure time, this is because the user has configured the camera that way - it is not something that is always true.

Removing these references to specific attributes would allow the code to be completely general.

Thoughts, @rpanderson?

@philipstarkey
Copy link
Member Author

Original comment by Russell Anderson (Bitbucket: rpanderson, GitHub: rpanderson).


Option (b) is good.

Regarding the exposure_time attribute: yes, labscript only needs to know about this in the context of a trigger width, but the two are not synonymous, and renaming it might cause confusion. The trigger width only corresponds to the the exposure time if the TriggerSelector, TriggerMode, and TriggerActivation attributes are set correctly.

See my comments to pull request #63.

@philipstarkey philipstarkey added major bug Something isn't working labels Apr 5, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working major
Projects
None yet
Development

No branches or pull requests

1 participant