Skip to main content
Glama

qudi MCP Integration

by dirkenglund
measurement_tools.cpython-311.pyc14.4 kB
� �+�h�9��h�dZddlZddlZddlZddlZddlmZmZmZm Z ddl m Z Gd�d��Z dS)z� Measurement tools for qudi MCP integration Handles measurement module loading, execution, and data acquisition through qudi's measurement framework. �N)�Dict�List�Any�Optional�)�RunLevelc ���eZdZdZd�Zdedeeefdeeeffd�Zdeeefdeeeffd�Z deeefdeeeffd �Z deeefdeeeffd �Z deeefdeeeffd �Z deeefdeeeffd �Z deeefdeeeffd �Zdefd�Zdedeeefdefd�Zdedeeefdedeeeffd�ZdS)�MeasurementToolsz*Measurement execution and management toolsc�F�||_tjd��|_dS)Nzqudi-mcp.measurements)�server�logging� getLogger�logger)�selfr s �_/Users/englund/Projects/QPG-MIT/qudi-iqo-modules-QPG/mcp_integration/tools/measurement_tools.py�__init__zMeasurementTools.__init__s ���� ��'�(?�@�@�� � � ��name� arguments�returnc��K�|j|j|j|j|j|jd�}||vrdd|��iS|||���d{V��S)zRoute measurement tool calls)zmeasurement.list_moduleszmeasurement.startzmeasurement.statuszmeasurement.stopzmeasurement.get_datazmeasurement.save_data�errorzUnknown measurement tool: N)� _list_modules�_start_measurement� _get_status�_stop_measurement� _get_data� _save_data)rrr�tool_maps r� handle_toolzMeasurementTools.handle_tools}����)-�(:�!%�!8�"&�"2� $� 6�$(�N�%)�_�  � �� �x� � ��@�$�@�@�A� A�#�X�d�^�I�.�.�.�.�.�.�.�.�.r�argsc ��K�|jjtjkr=dddgd�d�dddgd �d�d dd gd �d�d ddgd�d�dddgd�d�g|jjjdd�Sgdd�S)z"List available measurement modules�photoluminescence_scan� spectroscopyzPL spectroscopy measurement)�wavelength_start�wavelength_end�wavelength_step�integration_time� laser_power)r�type� description� parameters� gate_sweep� transportzGate voltage sweep measurement)� gate_start�gate_end� gate_step� bias_voltage�measurement_time�resonance_scanzResonance frequency scan)�frequency_start� frequency_end�frequency_step�powerr(� time_trace� time_serieszTime-resolved measurement)� total_time�time_resolution�trigger_source� 2d_gate_map� transport_2dz2D gate voltage map)� gate1_start� gate1_end� gate1_steps� gate2_start� gate2_end� gate2_stepsr2r(zSimulated measurement modules)�modules�runlevel�messagez+qudi measurement modules not yet integrated)rFrH)r rGr�DRY_RUN�value)rr!s rrzMeasurementTools._list_modules(s���� �;� �8�#3� 3� 3�!9� .�'D�'�'�'� ��!-� +�'G�'�'�'� ��!1� .�'A�'�'�'� ��!-� -�'B�'�'�'� ��!.� .�'<�'�'�'� � �I.�^!�K�0�6�:�c2�2�2 �l�D� � � rc ��TK�|�d��}|�di��}|sddiSg}|���D]P\}}|jj�||��\}}|�|||d���|s d|�d|��|d�cS�Qt tj����d d �} | ||d tj ��d d |� ||��d�} | |jj | <|jj tjkr7tj|�| ����d| ||| dd|d�S|jj tjkrd| |d�Stj|�| ����d| ||| dd|d�S)z-Start a measurement with specified parameters� module_namer,rzmodule_name is required)� parameter�saferHzSafety validation failed for z: )r�validation_resultsN��runninggr)�id�moduler,�status� start_time�progress� data_points�estimated_duration�startedrXz&Dry-run: Simulated measurement started)rT�measurement_idrSr,rXrHrOz9LIVE mode measurements require approval (not implemented))rrZrSz9Simulation mode: Realistic measurement simulation started)�get�itemsr �safety_checker�validate_parameter�append�str�uuid�uuid4�time�_estimate_duration�measurement_staterGrrI�asyncio� create_task�_simulate_measurement�LIVE) rr!rLr,rO�paramrJ�is_saferHrZres rrz#MeasurementTools._start_measurementfs&�����h�h�}�-�-� ��X�X�l�B�/�/� �� 8��6�7� 7� ��&�,�,�.�.� � �L�E�5�#�{�9�L�L�U�TY�Z�Z� �G�W� � %� %�E�7�W^�&_�&_� `� `� `�� �O�U�O�O�g�O�O�*<������ ��T�Z�\�\�*�*�2�A�2�.��!�!�$���)�+�+���"&�"9�"9�+�z�"R�"R�  �  ��9J�� �%�n�5� �;� �8�#3� 3� 3� � �� :� :�>� J� J� K� K� K�$�"0�%�(�&7�8L�&M�C�&8��� � �;� �8�=� 0� 0�T�"0�%��� � ��D�6�6�~�F�F�G�G�G� �,�!�$�"3�4H�"I�R�"4� � � rc��K�|�d��}|rj||jjvrdd|�d�iS|jj|}||d|d|d|dtj��|d z |d d �St |jj��d �|jj���D��d �S)zGet measurement statusrZr� Measurement � not foundrTrSrVrWrUrX)rZrTrSrVrW� elapsed_timerXc �|�i|]9\}}||d|d|dtj��|dz d���:S)rTrSrVrU)rTrSrVro)rc)�.0�mid�states r� <dictcomp>z0MeasurementTools._get_status.<locals>.<dictcomp>�sa��!�!�!�#��U� �"'��/�"'��/�$)�*�$5�(,� � � �e�L�6I�(I� ��!�!�!r)�active_measurements� measurements)r[r rerc�lenr\�rr!rZrss rrzMeasurementTools._get_status�s��������"2�3�3�� � ��T�[�%B�B�B��!J��!J�!J�!J�K�K��K�1�.�A�E�"0���/���/�!�*�-�$�]�3� $� � � �e�L�.A� A�&+�,@�&A��� �(+�4�;�+H�'I�'I�!�!�'+�k�&C�&I�&I�&K�&K�!�!�!� � � rc��TK�|�d��}|sddiS||jjvrdd|�d�iS|jj|}|ddkrdd|�d |d�d �iSd |d<tj��|d <d |tj��|d z |dd|�d�d�S)zStop a running measurementrZr�measurement_id is requiredrmrnrTrQrHz is not running (status: �)�stopped� stop_timerUrWz stopped)rTrZrorWrH)r[r rercrxs rrz"MeasurementTools._stop_measurement�s��������"2�3�3��� ;��9�:� :� ���!>� >� >��F�N�F�F�F�G� G�� �-�n�=�� ��?�i� '� '��e�.�e�e�SX�Ya�Sb�e�e�e�� � $��h��!�Y�[�[��k�� �,� �I�K�K�%� �*=�=� ��/�>�n�>�>�>�  � � rc��K�|�d��}|sddiS||jjvrdd|�d�iS|jj|}|jjtjtjfvrX|�|d|d|d��}||d t|�d g����|d d �Sdd iS)zGet measurement datarZrrzrmrnrSr,rWrT�xzSimulated measurement data)rZrTrW�datarHz,Real measurement data access not implemented) r[r rerGrrI�SIM�_generate_simulated_datarw)rr!rZrsr�s rrzMeasurementTools._get_data�s��������"2�3�3��� ;��9�:� :� ���!>� >� >��F�N�F�F�F�G� G�� �-�n�=�� �;� �H�$4�h�l�#C� C� C��0�0��x��%� �BU�W\�]j�Wk�l�l�D�#1���/�"�4�8�8�C��#4�#4�5�5��7� �� � �C� � rc��xK�|�d��}|�d��}|sddiS||jjvrdd|�d�iS|sC|jj|}tt j����}|d�d|�d|�d �}|jjt jkr d ||d |��d �Sd ||d |��d �S)zSave measurement datarZ�filenamerrzrmrnrS�_z.dat�successzDry-run: Would save data to )rTrZr�rHzSimulated save to )r[r re�intrcrGrrI)rr!rZr�rs� timestamps rrzMeasurementTools._save_data s�������"2�3�3���8�8�J�'�'��� ;��9�:� :� ���!>� >� >��F�N�F�F�F�G� G�� M��K�1�.�A�E��D�I�K�K�(�(�I���/�L�L�N�L�L�Y�L�L�L�H� �;� �8�#3� 3� 3�#�"0�$�D�(�D�D� �� � �,� �6�H�6�6�  � � rrZc��hK�|jj|}|d}d}||z }t|��D]P}|ddkrnAtj|���d{V��|dz|z |d<t |ddz��|d <�Q|ddkr"d |d<d |d<t j��|d <dSdS) z4Simulate measurement execution with realistic timingrX�rTrQN�rV�drW� completed��?�completion_time)r re�rangerf�sleepr�rc)rrZrs�duration�steps� step_time�is rrhz&MeasurementTools._simulate_measurement,s������ �-�n�=���-�.�����u�$� ��u��� @� @�A��X��)�+�+����-� �*�*� *� *� *� *� *� *� *�!"�Q��%��E�*� �#&�u�Z�'8�3�'>�#?�#?�E�-� � � ��?�i� '� '�)�E�(�O� #�E�*� �'+�y�{�{�E�#� $� $� $� (� 'rrLr,c��dddddd�}|�|d��}d|vr ||dz}d|vr||dd z z}t|d ��S) z<Estimate measurement duration based on module and parametersg>@gN@g�F@g^@g��@)r#r-r4r9r>r(r�gY@g �@)r[�min)rrLr,� base_times� base_times rrdz#MeasurementTools._estimate_durationEs���'+��"�� �  � � ��N�N�;��5�5� � �� +� +� ��$6�7� 7�I� �j� � � �*�W�-��5� 6�I��9�f�%�%�%r� num_pointsc�,�ddl}|dkr�|�dd|��}|�|dz dz dz ��d |j�t |����zz}|���|���d �S|d kr�|�d d |��}|�|��dzd|j�t |����zz}|���|���d�S|dkr�|�dd|��}|�d|jz|z��d |j�t |����zz}|���|���d�S|�dd|��}|j�t |����}|���|���d�S)z-Generate realistic simulated measurement datarNr#ivi�i}rrPg�������?)� wavelength� intensityr-g�r�g�������?)� gate_voltage�currentr9� )rc�signalr�)r�y) �numpy�linspace�exp�randomrw�tolist�abs�sin�pi)rrLr,r��nprr�s rr�z)MeasurementTools._generate_simulated_dataZs��� ���� �2� 2� 2�� � �C��j�1�1�A����!�c�'�A���(�3�4�4�s�R�Y�=M�=M�c�RS�f�f�=U�=U�7U�U�A�"#�(�(�*�*�1�8�8�:�:�F�F� F� �L� (� (�� � �D�#�z�2�2�A����q� � �1� �t�b�i�&6�&6�s�1�v�v�&>�&>�>�>�A�$%�H�H�J�J�1�8�8�:�:�F�F� F� �L� (� (�� � �A�r�:�.�.�A����q�2�5�y�1�}�%�%��b�i�.>�.>�s�1�v�v�.F�.F�(F�F�A��H�H�J�J�!�(�(�*�*�=�=� =�� � �A�s�J�/�/�A�� � � ��Q���(�(�A������!�(�(�*�*�5�5� 5rN)�__name__� __module__� __qualname__�__doc__rr`rrr rrrrrrrh�floatrdr�r��rrr r s/������4�4�A�A�A�/�c�/�d�3��8�n�/��c�SV�h��/�/�/�/�"< ��S�#�X��< �4��S��>�< �< �< �< �|E �T�#�s�(�^�E ��S�#�X��E �E �E �E �N!�d�3��8�n�!��c�3�h��!�!�!�!�F �D��c��N� �t�C��H�~� � � � �: �D��c��N� �t�C��H�~� � � � �:  �T�#�s�(�^�  ��S�#�X��  �  �  �  �D3�#�3�3�3�3�2&�c�&�t�C��H�~�&�RW�&�&�&�&�*6�C�6�T�#�s�(�^�6�ad�6�im�nq�sv�nv�iw�6�6�6�6�6�6rr ) r�r rfrcra�typingrrrr�safetyrr r�rr�<module>r�s������������� � � � � � � � �,�,�,�,�,�,�,�,�,�,�,�,�������b6�b6�b6�b6�b6�b6�b6�b6�b6�b6r

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dirkenglund/qudi-mcp-integration'

If you have feedback or need assistance with the MCP directory API, please join our Discord server