backscattermeter_analyzer 2.2.1__tar.gz → 3.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/PKG-INFO +1 -1
  2. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/pyproject.toml +14 -3
  3. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/__init__.py +30 -0
  4. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/beam/__init__.py +9 -0
  5. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/beam/beam.py +266 -0
  6. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/beam/gaussian_model.py +66 -0
  7. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/beam/waist.py +109 -0
  8. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/characterize/angle/result.py +34 -16
  9. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/characterize/distance/ratio.py +6 -4
  10. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/characterize/distance/result.py +174 -0
  11. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/__init__.py +17 -0
  12. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/__init__.py +7 -0
  13. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/acquisition.py +37 -0
  14. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/backscattermeter/__init__.py +7 -0
  15. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/backscattermeter/camera/__init__.py +11 -0
  16. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/backscattermeter/camera/no.py +7 -0
  17. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/backscattermeter/camera/position/__init__.py +11 -0
  18. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/backscattermeter/camera/position/bench.py +16 -0
  19. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/backscattermeter/camera/position/photodiode.py +7 -0
  20. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/backscattermeter/camera/position/state.py +16 -0
  21. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/backscattermeter/camera/state.py +16 -0
  22. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/backscattermeter/camera/yes.py +46 -0
  23. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/backscattermeter/sample/__init__.py +11 -0
  24. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/backscattermeter/sample/no.py +7 -0
  25. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/backscattermeter/sample/state.py +16 -0
  26. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/backscattermeter/sample/yes.py +16 -0
  27. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/backscattermeter/structure.py +68 -0
  28. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/camera/__init__.py +11 -0
  29. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/camera/beam_position/__init__.py +11 -0
  30. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/camera/beam_position/no.py +7 -0
  31. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/camera/beam_position/state.py +16 -0
  32. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/camera/beam_position/yes.py +36 -0
  33. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/camera/beam_radius/__init__.py +11 -0
  34. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/camera/beam_radius/no.py +7 -0
  35. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/camera/beam_radius/state.py +16 -0
  36. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/camera/beam_radius/yes.py +32 -0
  37. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/camera/no.py +7 -0
  38. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/camera/state.py +16 -0
  39. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/camera/yes.py +59 -0
  40. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/laser/__init__.py +7 -0
  41. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/laser/frequency_scan/__init__.py +11 -0
  42. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/laser/frequency_scan/no.py +7 -0
  43. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/laser/frequency_scan/state.py +16 -0
  44. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/laser/frequency_scan/yes.py +28 -0
  45. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/laser/structure.py +48 -0
  46. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/motor_path/__init__.py +11 -0
  47. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/motor_path/no.py +7 -0
  48. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/motor_path/state.py +16 -0
  49. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/motor_path/yes.py +28 -0
  50. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/photodiodes/__init__.py +11 -0
  51. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/photodiodes/audio/__init__.py +11 -0
  52. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/photodiodes/audio/no.py +7 -0
  53. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/photodiodes/audio/state.py +16 -0
  54. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/photodiodes/audio/yes.py +28 -0
  55. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/photodiodes/dc/__init__.py +11 -0
  56. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/photodiodes/dc/no.py +7 -0
  57. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/photodiodes/dc/state.py +16 -0
  58. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/photodiodes/dc/yes.py +28 -0
  59. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/photodiodes/no.py +7 -0
  60. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/photodiodes/photodiode.py +61 -0
  61. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/photodiodes/state.py +16 -0
  62. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/photodiodes/yes.py +34 -0
  63. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/representation.py +27 -0
  64. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/rotation/__init__.py +11 -0
  65. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/rotation/no.py +7 -0
  66. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/rotation/state.py +16 -0
  67. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/rotation/yes.py +19 -0
  68. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/acquisition/structure.py +113 -0
  69. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/__init__.py +9 -0
  70. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/analysis.py +27 -0
  71. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/beam_propagation/__init__.py +11 -0
  72. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/beam_propagation/model.py +66 -0
  73. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/beam_propagation/no.py +7 -0
  74. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/beam_propagation/state.py +16 -0
  75. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/beam_propagation/yes.py +299 -0
  76. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/builder.py +174 -0
  77. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/known_rotation/__init__.py +11 -0
  78. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/known_rotation/known.py +147 -0
  79. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/known_rotation/no.py +7 -0
  80. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/known_rotation/state.py +16 -0
  81. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/known_rotation/yes.py +72 -0
  82. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/representation.py +14 -0
  83. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/step_distance/__init__.py +1 -0
  84. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/step_distance/no.py +7 -0
  85. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/step_distance/state.py +16 -0
  86. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/step_distance/yes.py +18 -0
  87. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/step_split/__init__.py +11 -0
  88. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/step_split/no.py +7 -0
  89. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/step_split/split.py +166 -0
  90. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/step_split/state.py +16 -0
  91. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/step_split/yes.py +70 -0
  92. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/structure.py +74 -0
  93. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/visibility/__init__.py +11 -0
  94. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/visibility/model.py +72 -0
  95. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/visibility/no.py +7 -0
  96. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/visibility/state.py +16 -0
  97. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/analysis/visibility/yes.py +467 -0
  98. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/__init__.py +9 -0
  99. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/backscattermeter/__init__.py +7 -0
  100. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/backscattermeter/camera/__init__.py +11 -0
  101. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/backscattermeter/camera/no.py +7 -0
  102. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/backscattermeter/camera/position/__init__.py +11 -0
  103. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/backscattermeter/camera/position/bench.py +16 -0
  104. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/backscattermeter/camera/position/photodiode.py +7 -0
  105. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/backscattermeter/camera/position/state.py +16 -0
  106. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/backscattermeter/camera/state.py +16 -0
  107. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/backscattermeter/camera/yes.py +25 -0
  108. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/backscattermeter/sample/__init__.py +11 -0
  109. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/backscattermeter/sample/no.py +7 -0
  110. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/backscattermeter/sample/state.py +16 -0
  111. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/backscattermeter/sample/yes.py +16 -0
  112. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/backscattermeter/structure.py +33 -0
  113. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/builder.py +511 -0
  114. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/camera/__init__.py +11 -0
  115. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/camera/beam_position/__init__.py +11 -0
  116. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/camera/beam_position/no.py +7 -0
  117. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/camera/beam_position/state.py +16 -0
  118. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/camera/beam_position/yes.py +17 -0
  119. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/camera/beam_radius/__init__.py +11 -0
  120. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/camera/beam_radius/no.py +7 -0
  121. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/camera/beam_radius/state.py +16 -0
  122. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/camera/beam_radius/yes.py +17 -0
  123. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/camera/no.py +7 -0
  124. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/camera/state.py +16 -0
  125. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/camera/yes.py +55 -0
  126. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/laser/__init__.py +7 -0
  127. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/laser/frequency_scan/__init__.py +11 -0
  128. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/laser/frequency_scan/no.py +7 -0
  129. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/laser/frequency_scan/state.py +16 -0
  130. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/laser/frequency_scan/yes.py +16 -0
  131. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/laser/structure.py +30 -0
  132. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/motor_path/__init__.py +11 -0
  133. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/motor_path/no.py +7 -0
  134. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/motor_path/state.py +16 -0
  135. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/motor_path/yes.py +49 -0
  136. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/photodiodes/__init__.py +11 -0
  137. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/photodiodes/audio/__init__.py +11 -0
  138. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/photodiodes/audio/no.py +7 -0
  139. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/photodiodes/audio/state.py +16 -0
  140. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/photodiodes/audio/yes.py +16 -0
  141. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/photodiodes/dc/__init__.py +11 -0
  142. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/photodiodes/dc/no.py +7 -0
  143. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/photodiodes/dc/state.py +16 -0
  144. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/photodiodes/dc/yes.py +16 -0
  145. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/photodiodes/no.py +7 -0
  146. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/photodiodes/photodiode.py +33 -0
  147. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/photodiodes/state.py +16 -0
  148. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/photodiodes/yes.py +31 -0
  149. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/protocol.py +20 -0
  150. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/representation.py +27 -0
  151. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/rotation/__init__.py +11 -0
  152. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/rotation/no.py +7 -0
  153. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/rotation/state.py +16 -0
  154. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/rotation/yes.py +19 -0
  155. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/protocol/structure.py +66 -0
  156. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/__init__.py +7 -0
  157. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/beam_propagation/__init__.py +11 -0
  158. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/beam_propagation/no.py +7 -0
  159. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/beam_propagation/state.py +16 -0
  160. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/beam_propagation/waist.py +15 -0
  161. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/beam_propagation/yes.py +24 -0
  162. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/known_rotation/__init__.py +11 -0
  163. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/known_rotation/known.py +25 -0
  164. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/known_rotation/no.py +7 -0
  165. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/known_rotation/state.py +16 -0
  166. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/known_rotation/yes.py +64 -0
  167. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/representation.py +23 -0
  168. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/result.py +19 -0
  169. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/step_split/__init__.py +11 -0
  170. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/step_split/no.py +7 -0
  171. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/step_split/split.py +40 -0
  172. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/step_split/state.py +16 -0
  173. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/step_split/yes.py +63 -0
  174. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/structure.py +41 -0
  175. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/visibility/__init__.py +11 -0
  176. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/visibility/no.py +7 -0
  177. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/visibility/photodiode.py +27 -0
  178. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/visibility/state.py +16 -0
  179. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/experiment/result/visibility/yes.py +52 -0
  180. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/hardware/__init__.py +4 -3
  181. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/backscattermeter/__init__.py +7 -0
  182. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/backscattermeter/backscattermeter.py +14 -0
  183. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/backscattermeter/camera/__init__.py +11 -0
  184. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/backscattermeter/camera/no.py +7 -0
  185. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/backscattermeter/camera/state.py +16 -0
  186. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/backscattermeter/camera/yes.py +16 -0
  187. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/backscattermeter/representation.py +14 -0
  188. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/backscattermeter/structure.py +23 -0
  189. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/camera/__init__.py +7 -0
  190. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/camera/camera.py +16 -0
  191. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/camera/representation.py +16 -0
  192. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/camera/structure.py +17 -0
  193. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/motor/__init__.py +7 -0
  194. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/motor/motor.py +16 -0
  195. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/hardware/motor/path.py +22 -0
  196. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/motor/representation.py +16 -0
  197. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/motor/structure.py +17 -0
  198. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/optic/__init__.py +7 -0
  199. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/optic/optic.py +14 -0
  200. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/optic/representation.py +14 -0
  201. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/optic/structure.py +16 -0
  202. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/photodiode/__init__.py +7 -0
  203. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/photodiode/photodiode.py +14 -0
  204. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/photodiode/representation.py +14 -0
  205. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/hardware/photodiode/structure.py +16 -0
  206. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/io/__init__.py +0 -2
  207. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/io/hdf5/distance/angle.py +190 -0
  208. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/io/hdf5/distance/main.py +31 -6
  209. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/io/hdf5/distance/motor.py +1 -1
  210. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/io/hdf5/result.py +6 -5
  211. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/io/registry/interface/unified_read_write.py +4 -3
  212. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/__init__.py +5 -0
  213. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/distance/angle/__init__.py +11 -0
  214. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/distance/angle/no.py +16 -0
  215. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/distance/angle/state.py +29 -0
  216. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/distance/angle/yes.py +24 -0
  217. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/distance/connect.py +42 -1
  218. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/distance/distance.py +114 -0
  219. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/distance/state.py +60 -0
  220. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/measurement/angle/yes.py +74 -0
  221. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/measurement/measurement.py +16 -6
  222. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/measurement/motor/yes.py +63 -0
  223. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/measurement/state.py +1 -4
  224. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/ratio/__init__.py +9 -0
  225. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/ratio/collection.py +56 -0
  226. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/ratio/formula/__init__.py +9 -0
  227. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/ratio/formula/div.py +19 -0
  228. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/ratio/formula/formula.py +51 -0
  229. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/ratio/oriented_axis/__init__.py +11 -0
  230. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/ratio/oriented_axis/no.py +14 -0
  231. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/ratio/oriented_axis/state.py +21 -0
  232. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/ratio/oriented_axis/yes.py +22 -0
  233. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/ratio/ratio.py +43 -0
  234. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/ratio/state.py +53 -0
  235. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/result/__init__.py +7 -0
  236. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/result/distance/__init__.py +11 -0
  237. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/result/distance/no.py +13 -0
  238. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/result/distance/state.py +20 -0
  239. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/result/distance/yes.py +21 -0
  240. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/result/ratio/__init__.py +11 -0
  241. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/result/ratio/no.py +14 -0
  242. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/result/ratio/state.py +21 -0
  243. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/result/ratio/yes.py +23 -0
  244. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/result/result.py +32 -0
  245. backscattermeter_analyzer-3.0.0/src/backscattermeter_analyzer/utils/result/state.py +68 -0
  246. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/utils.py +131 -3
  247. backscattermeter_analyzer-2.2.1/src/backscattermeter_analyzer/__init__.py +0 -25
  248. backscattermeter_analyzer-2.2.1/src/backscattermeter_analyzer/characterize/distance/result.py +0 -127
  249. backscattermeter_analyzer-2.2.1/src/backscattermeter_analyzer/hardware/backscattermeter.py +0 -8
  250. backscattermeter_analyzer-2.2.1/src/backscattermeter_analyzer/hardware/camera/__init__.py +0 -13
  251. backscattermeter_analyzer-2.2.1/src/backscattermeter_analyzer/hardware/motor/__init__.py +0 -11
  252. backscattermeter_analyzer-2.2.1/src/backscattermeter_analyzer/hardware/optic/__init__.py +0 -13
  253. backscattermeter_analyzer-2.2.1/src/backscattermeter_analyzer/utils/distance/distance.py +0 -35
  254. backscattermeter_analyzer-2.2.1/src/backscattermeter_analyzer/utils/distance/state.py +0 -31
  255. backscattermeter_analyzer-2.2.1/src/backscattermeter_analyzer/utils/measurement/angle/yes.py +0 -30
  256. backscattermeter_analyzer-2.2.1/src/backscattermeter_analyzer/utils/measurement/motor/yes.py +0 -21
  257. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/LICENSE +0 -0
  258. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/README.md +0 -0
  259. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/display.py +0 -0
  260. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/justfile +0 -0
  261. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/mise.toml +0 -0
  262. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/axis.py +0 -0
  263. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/characterize/__init__.py +0 -0
  264. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/characterize/angle/__init__.py +0 -0
  265. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/characterize/distance/__init__.py +0 -0
  266. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/characterize/distance/vector.py +0 -0
  267. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/direction.py +0 -0
  268. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/exception/__init__.py +0 -0
  269. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/exception/base.py +0 -0
  270. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/exception/io/__init__.py +0 -0
  271. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/exception/io/base.py +0 -0
  272. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/exception/io/registry/__init__.py +0 -0
  273. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/exception/io/registry/already_defined.py +0 -0
  274. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/exception/io/registry/ambiguous_format.py +0 -0
  275. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/exception/io/registry/base.py +0 -0
  276. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/exception/io/registry/identification.py +0 -0
  277. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/exception/io/registry/not_defined.py +0 -0
  278. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/hardware/motor/jump.py +0 -0
  279. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/hardware/motor/step_numbers.py +0 -0
  280. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/io/hdf5/__init__.py +0 -0
  281. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/io/hdf5/distance/__init__.py +0 -0
  282. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/io/hdf5/measurement/__init__.py +0 -0
  283. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/io/hdf5/measurement/main.py +0 -0
  284. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/io/hdf5/measurement/motor.py +0 -0
  285. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/io/hdf5/utils.py +0 -0
  286. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/io/registry/__init__.py +0 -0
  287. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/io/registry/default.py +0 -0
  288. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/io/registry/interface/__init__.py +0 -0
  289. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/io/registry/interface/unified_read_write_method.py +0 -0
  290. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/io/registry/unified_input_registry.py +0 -0
  291. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/io/registry/unified_io_registry.py +0 -0
  292. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/io/registry/unified_io_registry_base.py +0 -0
  293. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/io/registry/unified_output_registry.py +0 -0
  294. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/scale.py +0 -0
  295. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/distance/__init__.py +0 -0
  296. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/distance/motor/__init__.py +0 -0
  297. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/distance/motor/no.py +0 -0
  298. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/distance/motor/state.py +0 -0
  299. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/distance/motor/yes.py +0 -0
  300. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/measurement/__init__.py +0 -0
  301. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/measurement/angle/__init__.py +0 -0
  302. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/measurement/angle/no.py +0 -0
  303. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/measurement/angle/state.py +0 -0
  304. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/measurement/camera/__init__.py +0 -0
  305. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/measurement/camera/no.py +0 -0
  306. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/measurement/camera/state.py +0 -0
  307. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/measurement/camera/yes.py +0 -0
  308. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/measurement/connect.py +0 -0
  309. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/measurement/motor/__init__.py +0 -0
  310. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/measurement/motor/no.py +0 -0
  311. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/src/backscattermeter_analyzer/utils/measurement/motor/state.py +0 -0
  312. {backscattermeter_analyzer-2.2.1 → backscattermeter_analyzer-3.0.0}/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: backscattermeter_analyzer
3
- Version: 2.2.1
3
+ Version: 3.0.0
4
4
  Summary: Tool to work on the backscattermeter at LAPP
5
5
  Project-URL: Documentation, https://git.linarphy.net/linarphy/backscattermeter_analyzer/wiki
6
6
  Project-URL: Homepage, https://git.linarphy.net/linarphy/backscattermeter_analyzer
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "backscattermeter_analyzer"
3
- version = "2.2.1"
3
+ version = "3.0.0"
4
4
  description = "Tool to work on the backscattermeter at LAPP"
5
5
  authors = [{ name = "linarphy", email = "linarphy@linarphy.net" }]
6
6
  readme = "README.md"
@@ -129,10 +129,21 @@ indent-style = "space"
129
129
  docstring-code-format = true
130
130
 
131
131
  [tool.ty.src]
132
- exclude = ["tests/**/*.py", "display.py", "utils.py"]
132
+ exclude = [
133
+ "tests/**/*.py",
134
+ "display.py",
135
+ "utils.py",
136
+ "src/backscattermeter_analyzer/beam/**/*.py",
137
+ "src/backscattermeter_analyzer/characterize/**/*.py",
138
+ "src/backscattermeter_analyzer/utils/distance/**/*.py",
139
+ "src/backscattermeter_analyzer/utils/measurement/**/*.py",
140
+ "src/backscattermeter_analyzer/utils/ratio/**/*.py",
141
+ "src/backscattermeter_analyzer/utils/result/**/*.py",
142
+ "src/backscattermeter_analyzer/io/hdf5/**/*.py",
143
+ ]
133
144
 
134
145
 
135
146
  [dependency-groups]
136
- dev = ["ty>=0.0.28", "ruff>=0.11.2"]
147
+ dev = ["ty>=0.0.83", "ruff>=0.16.8"]
137
148
  stubs = ["mypy<=1.20.0"]
138
149
  test = ["coverage>=7.14", "rich"]
@@ -0,0 +1,30 @@
1
+ """Entry-point package."""
2
+
3
+ from .axis import Axis # noqa: I001
4
+ from .direction import Direction
5
+
6
+ from .experiment import (
7
+ Acquisition,
8
+ Analysis,
9
+ AnalysisBuilder,
10
+ Protocol,
11
+ ProtocolBuilder,
12
+ Result,
13
+ )
14
+ from .hardware import Backscattermeter, Camera, Motor, Optic, Photodiode
15
+
16
+ __all__ = [
17
+ "Acquisition",
18
+ "Analysis",
19
+ "AnalysisBuilder",
20
+ "Axis",
21
+ "Backscattermeter",
22
+ "Camera",
23
+ "Direction",
24
+ "Motor",
25
+ "Optic",
26
+ "Photodiode",
27
+ "Protocol",
28
+ "ProtocolBuilder",
29
+ "Result",
30
+ ]
@@ -0,0 +1,9 @@
1
+ """Sub-package managing object focused on beam."""
2
+
3
+ from .beam import Beam
4
+ from .waist import Waist
5
+
6
+ __all__ = [
7
+ "Beam",
8
+ "Waist",
9
+ ]
@@ -0,0 +1,266 @@
1
+ """Beam class."""
2
+
3
+ from dataclasses import dataclass
4
+ from typing import TYPE_CHECKING, NamedTuple
5
+
6
+ from astropy.modeling.fitting import TRFLSQFitter
7
+ from astropy.uncertainty import Distribution
8
+ from astropy.units import Quantity
9
+ from numpy import argmin, pi
10
+ from numpy.random import default_rng
11
+
12
+ from .gaussian_model import GaussianBeam
13
+ from .waist import Waist
14
+
15
+ if TYPE_CHECKING:
16
+ from collections.abc import Sequence
17
+
18
+ from gwpy.timeseries import TimeSeries
19
+ from numpy.random import Generator
20
+
21
+ from backscattermeter_analyzer import Measurement
22
+
23
+
24
+ class GaussianBeamModels(NamedTuple):
25
+ """Utils to share x and y models."""
26
+
27
+ x: GaussianBeam
28
+ y: GaussianBeam
29
+
30
+
31
+ class MeasurementData(NamedTuple):
32
+ """Utils to share measurements result."""
33
+
34
+ position: Distribution
35
+ radius_x: TimeSeries
36
+ radius_y: TimeSeries
37
+
38
+
39
+ class FitSamples(NamedTuple):
40
+ """Utils to share samples that will be used in fit."""
41
+
42
+ positions: Quantity
43
+ radii_x: Quantity
44
+ radii_y: Quantity
45
+
46
+
47
+ def _extract_measurement_data(
48
+ measurement: Measurement,
49
+ ) -> MeasurementData:
50
+ """Convert a Measurement into a simpler object for analysis."""
51
+
52
+ position = measurement.state.backscattermeter.state.camera.position
53
+ beam_radius = measurement.state.camera.beam_radius
54
+
55
+ if not position.is_on_suspended_bench():
56
+ message = (
57
+ "Camera position can only be known if the camera is on "
58
+ "the suspended bench."
59
+ )
60
+ raise ValueError(message)
61
+ if not measurement.state.camera.has_beam_radius():
62
+ message = (
63
+ "Cannot compute the waist of the beam from a "
64
+ "Measurement that do not contain any data on the beam "
65
+ "radius."
66
+ )
67
+ raise ValueError(message)
68
+
69
+ return MeasurementData(
70
+ position=position.distance_from_entrance,
71
+ radius_x=beam_radius.w_x,
72
+ radius_y=beam_radius.w_y,
73
+ )
74
+
75
+
76
+ def _fit_initial_model(
77
+ positions: Sequence[Quantity],
78
+ radii: Sequence[Quantity],
79
+ wavelength: Quantity,
80
+ ) -> GaussianBeam:
81
+ """Find approximative values for future guesses on one axis."""
82
+
83
+ waist_index = int(argmin(radii))
84
+
85
+ radius_waist = radii[waist_index]
86
+ position_waist = positions[waist_index]
87
+ rayleigh_range = pi * radius_waist**2 / wavelength
88
+
89
+ return GaussianBeam( # type: ignore[ty:invalid-argument-type,ty:missing-argument]
90
+ position_waist=position_waist,
91
+ radius_waist=radius_waist,
92
+ rayleigh_range=rayleigh_range,
93
+ )
94
+
95
+
96
+ @staticmethod
97
+ def _fit_initial_models(
98
+ data: Sequence[MeasurementData], wavelength: Quantity
99
+ ) -> GaussianBeamModels:
100
+ """Find approximative values for future guesses."""
101
+
102
+ positions = [item.position.pdf_mean() for item in data]
103
+ radii_x = [item.radius_x.mean() for item in data]
104
+ radii_y = [item.radius_y.mean() for item in data]
105
+
106
+ return GaussianBeamModels(
107
+ x=_fit_initial_model(positions, radii_x, wavelength),
108
+ y=_fit_initial_model(positions, radii_y, wavelength),
109
+ )
110
+
111
+
112
+ @staticmethod
113
+ def _samples_data(
114
+ data: Sequence[MeasurementData],
115
+ n_samples: int,
116
+ random_generator: Generator,
117
+ ) -> FitSamples:
118
+ """
119
+ Define samples of measurements value.
120
+
121
+ n_samples fits will be done, with one position per measurement
122
+ and one radius per measurement. This means that a fit will use
123
+ len(measurements) positions and radius.
124
+
125
+ It keeps a link between w_x and w_y as they are identicaly
126
+ sampled. Meaning that we can keep the covariance data between
127
+ w_x and w_y.
128
+ """
129
+
130
+ positions_samples_list: list[Quantity] = []
131
+ radii_x_samples_list: list[Quantity] = []
132
+ radii_y_samples_list: list[Quantity] = []
133
+
134
+ for measurement in data:
135
+ positions_indexes = random_generator.integers(
136
+ 0, measurement.position.n_samples, size=n_samples
137
+ )
138
+ radii_indexes = random_generator.integers(
139
+ 0, len(measurement.radius_x.value), size=n_samples
140
+ )
141
+
142
+ positions_samples_list.append(
143
+ measurement.position.distribution[positions_indexes]
144
+ )
145
+ radii_x_samples_list.append(
146
+ measurement.radius_x.value[radii_indexes]
147
+ )
148
+ radii_y_samples_list.append(
149
+ measurement.radius_y.value[radii_indexes]
150
+ )
151
+
152
+ return FitSamples(
153
+ positions=Quantity(positions_samples_list),
154
+ radii_x=Quantity(radii_x_samples_list),
155
+ radii_y=Quantity(radii_y_samples_list),
156
+ )
157
+
158
+
159
+ def _fit_samples(
160
+ models: GaussianBeamModels,
161
+ samples: FitSamples,
162
+ fitter: TRFLSQFitter,
163
+ n_samples: int,
164
+ wavelength: Quantity,
165
+ ) -> Beam:
166
+ """Fit the samples to get distribution of n_samples."""
167
+
168
+ fitted_positions_x_list: list[Quantity] = []
169
+ fitted_positions_y_list: list[Quantity] = []
170
+ fitted_radii_x_list: list[Quantity] = []
171
+ fitted_radii_y_list: list[Quantity] = []
172
+
173
+ for i in range(n_samples):
174
+ positions = samples.positions[:, i]
175
+ fitted_x = fitter(
176
+ models.x.copy(),
177
+ positions,
178
+ samples.radii_x[:, i],
179
+ )
180
+ fitted_y = fitter(
181
+ models.y.copy(), positions, samples.radii_y[:, i]
182
+ )
183
+
184
+ fitted_positions_x_list.append(fitted_x.position_waist)
185
+ fitted_positions_y_list.append(fitted_y.position_waist)
186
+ fitted_radii_x_list.append(fitted_x.radius_waist)
187
+ fitted_radii_y_list.append(fitted_y.radius_waist)
188
+
189
+ return Beam(
190
+ waist_x=Waist(
191
+ position=Distribution(fitted_positions_x_list),
192
+ radius=Distribution(fitted_radii_x_list),
193
+ ),
194
+ waist_y=Waist(
195
+ position=Distribution(fitted_positions_y_list),
196
+ radius=Distribution(fitted_radii_y_list),
197
+ ),
198
+ wavelength=wavelength,
199
+ )
200
+
201
+
202
+ @dataclass
203
+ class Beam:
204
+ """Parameters of a 2D beam."""
205
+
206
+ waist_x: Waist
207
+ waist_y: Waist
208
+ wavelength: Quantity
209
+
210
+ @staticmethod
211
+ def compute(
212
+ measurements: Sequence[Measurement],
213
+ wavelength: Quantity,
214
+ n_samples: int = 1000,
215
+ random_generator: Generator | None = None,
216
+ ) -> Beam:
217
+ """
218
+ Compute a beam from multiple measurements.
219
+
220
+ Conserve the covariance between measurement of the beam radius
221
+ on the X axis and the beam radius on the Y one.
222
+ """
223
+
224
+ if len(measurements) < 3: # noqa: PLR2004
225
+ message = "At least three measurements are required."
226
+ raise ValueError(message)
227
+
228
+ if n_samples < 1:
229
+ message = "`n_samples` must be positive."
230
+ raise ValueError(message)
231
+
232
+ if random_generator is None:
233
+ random_generator = default_rng()
234
+
235
+ data = [
236
+ _extract_measurement_data(measurement)
237
+ for measurement in measurements
238
+ ]
239
+ initial_models = _fit_initial_models(data, wavelength)
240
+
241
+ fitter = TRFLSQFitter()
242
+
243
+ positions = [datum.position.pdf_mean() for datum in data]
244
+
245
+ models = GaussianBeamModels(
246
+ x=fitter(
247
+ initial_models.x,
248
+ positions,
249
+ [datum.radius_x.mean() for datum in data],
250
+ ),
251
+ y=fitter(
252
+ initial_models.y,
253
+ positions,
254
+ [datum.radius_y.mean() for datum in data],
255
+ ),
256
+ )
257
+
258
+ samples = _samples_data(data, n_samples, random_generator)
259
+
260
+ return _fit_samples(
261
+ models,
262
+ samples,
263
+ fitter,
264
+ n_samples,
265
+ wavelength,
266
+ )
@@ -0,0 +1,66 @@
1
+ """GaussianBeam class."""
2
+
3
+ from astropy.modeling import Fittable1DModel, Parameter
4
+ from astropy.units import Quantity, Unit, m
5
+ from numpy import sqrt
6
+
7
+
8
+ class GaussianBeam(Fittable1DModel):
9
+ """1D Gaussian Beam model to fit with units."""
10
+
11
+ position_waist = Parameter(
12
+ description="Position of the beam waist", unit=m
13
+ )
14
+ radius_waist = Parameter(
15
+ description="Radius of the beam waist", unit=m, bounds=(0, None)
16
+ )
17
+ rayleigh_range = Parameter(
18
+ description="Rayleigh range", unit=m, bounds=(0, None)
19
+ )
20
+
21
+ @staticmethod
22
+ def evaluate(
23
+ position: Quantity,
24
+ position_waist: Quantity,
25
+ radius_waist: Quantity,
26
+ rayleigh_range: Quantity,
27
+ ) -> Quantity: # type: ignore[ty:invalid-method-override]
28
+ """Fit function."""
29
+ return radius_waist * sqrt(
30
+ 1 + ((position - position_waist) / rayleigh_range) ** 2
31
+ )
32
+
33
+ @property
34
+ def input_units(self) -> dict[str, Unit]:
35
+ """
36
+ Check input units.
37
+
38
+ See https://docs.astropy.org/en/stable/modeling/add-units.html.
39
+ """
40
+
41
+ return {
42
+ self.inputs[0]: self.position_waist.unit,
43
+ }
44
+
45
+ @property
46
+ def return_units(self) -> dict[str, Unit]:
47
+ """
48
+ Check output units.
49
+
50
+ See https://docs.astropy.org/en/stable/modeling/add-units.html.
51
+ """
52
+
53
+ return {
54
+ self.outputs[0]: self.radius_waist.unit,
55
+ }
56
+
57
+ def _parameter_units_for_data_units(
58
+ self,
59
+ inputs_unit: dict[str, Unit],
60
+ outputs_unit: dict[str, Unit],
61
+ ) -> dict[str, Unit]:
62
+ return {
63
+ "position_waist": inputs_unit[self.inputs[0]],
64
+ "radius_waist": outputs_unit[self.outputs[0]],
65
+ "rayleigh_range": inputs_unit[self.inputs[0]],
66
+ }
@@ -0,0 +1,109 @@
1
+ """Waist class."""
2
+
3
+ from dataclasses import dataclass
4
+ from typing import TYPE_CHECKING
5
+
6
+ from astropy.modeling.fitting import TRFLSQFitter
7
+ from astropy.uncertainty import Distribution
8
+ from astropy.units import Quantity
9
+ from numpy import argmin, pi
10
+ from numpy.random import default_rng
11
+
12
+ from .gaussian_model import GaussianBeam
13
+
14
+ if TYPE_CHECKING:
15
+ from collections.abc import Sequence
16
+
17
+ from gwpy.timeseries import TimeSeries
18
+ from numpy.random import Generator
19
+
20
+
21
+ @dataclass
22
+ class Waist:
23
+ """A 1D waist."""
24
+
25
+ position: Distribution
26
+ radius: Distribution
27
+
28
+ @staticmethod
29
+ def compute(
30
+ measurements: Sequence[tuple[Distribution, TimeSeries]],
31
+ wavelength: Quantity,
32
+ n_samples: int = 1000,
33
+ random_generator: Generator | None = None,
34
+ ) -> Waist:
35
+ """Compute a waist from a sequence of position and radii."""
36
+
37
+ if random_generator is None:
38
+ random_generator = default_rng()
39
+
40
+ if len(measurements) < 3: # noqa: PLR2004
41
+ message = "At least three measurements are required."
42
+ raise ValueError(message)
43
+
44
+ positions_means = [
45
+ position.pdf_mean() for position, _ in measurements
46
+ ]
47
+ radii_means = [radius.mean() for _, radius in measurements]
48
+
49
+ guess_waist_index = argmin(radii_means)
50
+
51
+ position_guess = positions_means[guess_waist_index]
52
+ radius_guess = radii_means[guess_waist_index]
53
+
54
+ rayleigh_range_guess = pi * radius_guess**2 / wavelength
55
+
56
+ initial_model = GaussianBeam( # type: ignore[ty:invalid-argument-type,ty:missing-argument]
57
+ position_waist=position_guess,
58
+ radius_waist=radius_guess,
59
+ rayleigh_range=rayleigh_range_guess,
60
+ )
61
+
62
+ fitter = TRFLSQFitter()
63
+
64
+ base_model = fitter(
65
+ initial_model,
66
+ positions_means,
67
+ radii_means,
68
+ )
69
+
70
+ positions_samples = Quantity(
71
+ [
72
+ position.distribution[
73
+ random_generator.integers(
74
+ 0, position.n_samples, size=n_samples
75
+ )
76
+ ]
77
+ for position, _ in measurements
78
+ ]
79
+ )
80
+ radii_samples = Quantity(
81
+ [
82
+ radius.value[
83
+ random_generator.integers(
84
+ 0, len(radius.value), size=n_samples
85
+ )
86
+ ]
87
+ for _, radius in measurements
88
+ ]
89
+ )
90
+
91
+ fitted_positions: list[Quantity] = []
92
+ fitted_radii: list[Quantity] = []
93
+ for i in range(n_samples):
94
+ position = positions_samples[:, i]
95
+ radius = radii_samples[:, i]
96
+
97
+ model = fitter(
98
+ base_model.copy(),
99
+ position,
100
+ radius,
101
+ )
102
+
103
+ fitted_positions.append(model.position_waist)
104
+ fitted_radii.append(model.radius_waist)
105
+
106
+ return Waist(
107
+ position=Distribution(fitted_positions),
108
+ radius=Distribution(fitted_radii),
109
+ )
@@ -1,10 +1,13 @@
1
1
  """Result class."""
2
2
 
3
-
4
3
  from dataclasses import dataclass
4
+ from itertools import product
5
5
  from typing import TYPE_CHECKING
6
6
 
7
- from backscattermeter_analyzer import Direction, Distance
7
+ from backscattermeter_analyzer import Axis, Direction, Distance
8
+ from backscattermeter_analyzer.characterize.distance import (
9
+ Ratio,
10
+ )
8
11
  from backscattermeter_analyzer.characterize.distance import (
9
12
  Result as DistanceResult,
10
13
  )
@@ -16,7 +19,7 @@ from backscattermeter_analyzer.utils.measurement.motor import (
16
19
  )
17
20
 
18
21
  if TYPE_CHECKING:
19
- from backscattermeter_analyzer import Axis, Measurement
22
+ from backscattermeter_analyzer import Measurement
20
23
 
21
24
 
22
25
  @dataclass
@@ -35,8 +38,14 @@ class Result:
35
38
 
36
39
  """
37
40
 
38
- dict_manual: dict[tuple[Axis, Direction], list[Distance]] = {}
39
- motor_measurements: list[DistanceResult] = []
41
+ dict_manual: dict[tuple[Axis, Direction], list[Distance]] = {
42
+ (axis, direction): []
43
+ for axis, direction in product(
44
+ (Axis.X, Axis.Y),
45
+ (Direction.POSITIVE, Direction.NEGATIVE),
46
+ )
47
+ }
48
+ motor_results: list[DistanceResult] = []
40
49
 
41
50
  for measurement in measurements:
42
51
  angle_state = measurement.state.angle
@@ -49,16 +58,10 @@ class Result:
49
58
  )
50
59
  raise TypeError(message)
51
60
  direction = Direction(angle_state.angle.pdf_mean < 0)
52
- result = DistanceResult.analyze(measurement)
53
- if (angle_state.axis, direction) not in dict_manual:
54
- distances = 0
55
- dict_manual[(angle_state.axis, direction)] = (
56
- result.distances
57
- )
58
- else:
59
- dict_manual[(angle_state.axis, direction)].append(
60
- measurement
61
- )
61
+ distance_result = DistanceResult.analyze(measurement)
62
+ dict_manual[(angle_state.axis, direction)].extend(
63
+ distance_result.distances
64
+ )
62
65
  else:
63
66
  if not isinstance(motor_state, WithMotorPath):
64
67
  message = (
@@ -66,8 +69,23 @@ class Result:
66
69
  "angle nor motor path."
67
70
  )
68
71
  raise TypeError(message)
69
- motor_measurements.append(
72
+ motor_results.append(
70
73
  DistanceResult.analyze(measurement)
71
74
  )
75
+ motor_ratio = Ratio.compute( # noqa: F841
76
+ motor_results, (Axis.X, Direction.POSITIVE)
77
+ )
78
+
79
+ for axis, direction in product(
80
+ [Axis.X, Axis.Y],
81
+ [Direction.POSITIVE, Direction.NEGATIVE],
82
+ ):
83
+ if (axis, direction) not in dict_manual:
84
+ message = (
85
+ f"No manual angle measurement on the ({axis}, "
86
+ f"{direction}) couple."
87
+ )
88
+ raise ValueError(message)
89
+ # motor_ratio.vectors
72
90
 
73
91
  return Result()
@@ -1,6 +1,7 @@
1
1
  """Ratio class."""
2
2
 
3
3
  from dataclasses import dataclass, field
4
+ from itertools import product
4
5
  from typing import TYPE_CHECKING
5
6
  from uuid import uuid4
6
7
 
@@ -40,10 +41,11 @@ class Ratio:
40
41
  ) -> Ratio:
41
42
  """Compute the distance ratio from multiple results."""
42
43
  distances: dict[tuple[Axis, Direction], list[Distance]] = {
43
- (Axis.X, Direction.POSITIVE): [],
44
- (Axis.X, Direction.NEGATIVE): [],
45
- (Axis.Y, Direction.POSITIVE): [],
46
- (Axis.Y, Direction.NEGATIVE): [],
44
+ (axis, direction): []
45
+ for axis, direction in product(
46
+ (Axis.X, Axis.Y),
47
+ (Direction.POSITIVE, Direction.NEGATIVE),
48
+ )
47
49
  }
48
50
  for result in results:
49
51
  for distance in result.distances: