xcoll 0.5.5__py3-none-any.whl → 0.5.7__py3-none-any.whl

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.

Potentially problematic release.


This version of xcoll might be problematic. Click here for more details.

xcoll/line_tools.py CHANGED
@@ -4,12 +4,49 @@
4
4
  # ######################################### #
5
5
 
6
6
  import numpy as np
7
- import warnings
8
- warnings.simplefilter("always")
7
+ from warnings import warn
9
8
 
10
9
  import xtrack as xt
11
10
 
12
- from .beam_elements import element_classes, _all_collimator_classes
11
+ from .beam_elements import element_classes, collimator_classes, block_classes
12
+
13
+
14
+ class XcollScatteringAPI:
15
+ def __init__(self, line):
16
+ self._line = line
17
+
18
+ @property
19
+ def line(self):
20
+ return self._line
21
+
22
+ def enable(self):
23
+ elements = self.line.get_elements_of_type(element_classes)[0]
24
+ if len(elements) == 0:
25
+ print("No xcoll elements found in line.")
26
+ else:
27
+ nemitt_x = None
28
+ nemitt_y = None
29
+ for el in elements:
30
+ if hasattr(el, 'optics') and el.optics is not None:
31
+ if nemitt_x is None:
32
+ nemitt_x = el.nemitt_x
33
+ if nemitt_y is None:
34
+ nemitt_y = el.nemitt_y
35
+ if not np.isclose(el.nemitt_x, nemitt_x) \
36
+ or not np.isclose(el.nemitt_x, nemitt_x):
37
+ raise ValueError("Not all collimators have the same "
38
+ + "emittance. This is not supported.")
39
+ if hasattr(el, 'enable_scattering'):
40
+ el.enable_scattering()
41
+
42
+ def disable(self):
43
+ elements = self.line.get_elements_of_type(element_classes)[0]
44
+ if len(elements) == 0:
45
+ print("No xcoll elements found in line.")
46
+ else:
47
+ for el in elements:
48
+ if hasattr(el, 'disable_scattering'):
49
+ el.disable_scattering()
13
50
 
14
51
 
15
52
  class XcollCollimatorAPI:
@@ -20,8 +57,169 @@ class XcollCollimatorAPI:
20
57
  def line(self):
21
58
  return self._line
22
59
 
60
+ def install(self, names, elements, *, at_s=None, apertures=None, need_apertures=False, s_tol=1.e-6):
61
+ if self.line._has_valid_tracker():
62
+ raise Exception("Tracker already built!\nPlease install collimators before building "
63
+ + "tracker!")
64
+
65
+ if not hasattr(names, '__iter__') or isinstance(names, str):
66
+ names = [names]
67
+ if not hasattr(elements, '__iter__') or isinstance(elements, str):
68
+ elements = [elements]
69
+ names = np.array(names)
70
+ length = np.array([coll.length for coll in elements])
71
+ assert len(length) == len(names)
72
+ if not hasattr(at_s, '__iter__'):
73
+ at_s = [at_s for _ in range(len(names))]
74
+ assert len(at_s) == len(names)
75
+ if isinstance(apertures, str) or not hasattr(apertures, '__iter__'):
76
+ apertures = [apertures for _ in range(len(names))]
77
+ assert len(apertures) == len(names)
78
+
79
+ # Verify elements
80
+ for el in elements:
81
+ print(el.__class__)
82
+ assert isinstance(el, block_classes)
83
+ el._tracking = False
84
+
85
+ # Get positions
86
+ tab = self.line.get_table()
87
+ tt = tab.rows[[name for name in names if name in self.line.element_names]]
88
+ s_start = []
89
+ for name, s, l in zip(names, at_s, length):
90
+ if s is None:
91
+ s_start.append(self._get_s_start(name, length=l, table=tt))
92
+ else:
93
+ s_start.append(s)
94
+ s_start = np.array(s_start)
95
+ s_end = s_start + length
96
+
97
+ # Check positions
98
+ l_line = self.line.get_length()
99
+ for s1, s2, name, s3 in zip(s_start, s_end, names, at_s):
100
+ self.check_position(name, s_start=s1, s_end=s2, at_s=s3, length=l_line, s_tol=s_tol)
101
+
102
+ # Look for apertures
103
+ aper_upstream = []
104
+ aper_downstream = []
105
+ for s1, s2, name, aper in zip(s_start, s_end, names, apertures):
106
+ if not need_apertures:
107
+ aper_upstream.append(None)
108
+ aper_downstream.append(None)
109
+ else:
110
+ aper1, aper2 = self.get_aperture(name, s_start=s1, s_end=s2, aperture=aper, table=tab, s_tol=s_tol)
111
+ aper_upstream.append(aper1)
112
+ aper_downstream.append(aper2)
113
+
114
+ # Remove elements at location of collimator (by changing them into markers)
115
+ for s1, s2, name, el in zip(s_start, s_end, names, elements):
116
+ self.prepare_space(name, s_start=s1, s_end=s2, table=tab, s_tol=s_tol)
117
+ el._line = self.line
118
+ el._name = name
23
119
 
24
- def get_optics_at(self, names, *, twiss=None):
120
+ # Install
121
+ self.line._insert_thick_elements_at_s(element_names=list(names), elements=elements, at_s=s_start, s_tol=s_tol)
122
+
123
+ # Install apertures
124
+ if need_apertures:
125
+ for s1, name, aper1, aper2 in zip(s_start, names, aper_upstream, aper_downstream):
126
+ self.line.insert_element(element=aper1, name=f'{name}_aper_upstream', at=name, s_tol=s_tol)
127
+ idx = self.line.element_names.index(name) + 1
128
+ self.line.insert_element(element=aper2, name=f'{name}_aper_downstream', at=idx, s_tol=s_tol)
129
+
130
+ def check_position(self, name, *, s_start, s_end, at_s, length=None, s_tol=1.e-6):
131
+ if at_s is None:
132
+ if name not in self.line.element_names:
133
+ raise ValueError(f"Element {name} not found in line. Provide `at_s`.")
134
+ elif name in self.line.element_names:
135
+ if at_s < s_start or at_s > s_end:
136
+ raise ValueError(f"Element {name} already exists in line at different "
137
+ + f"location: at_s = {at_s}, exists at [{s_start}, {s_end}].")
138
+ if length is None:
139
+ length = self.line.get_length()
140
+ if s_start <= s_tol:
141
+ raise ValueError(f"Position of {name} too close to start of line. Please cycle.")
142
+ if s_end >= length - s_tol:
143
+ raise ValueError(f"Position of {name} too close to end of line. Please cycle.")
144
+
145
+ def get_apertures_at_s(self, s, *, table=None, s_tol=1.e-6):
146
+ if table is None:
147
+ table = self.line.get_table()
148
+ tab_s = table.rows[s-s_tol:s+s_tol:'s']
149
+ aper = tab_s.rows[[cls.startswith('Limit') for cls in tab_s.element_type]]
150
+ if len(aper) == 0:
151
+ return None
152
+ elif len(aper) == 1:
153
+ return aper.name[0]
154
+ else:
155
+ raise ValueError(f"Multiple apertures found at location {s} with "
156
+ + f"tolerance {s_tol}: {aper.name}. Not supported.")
157
+
158
+ def get_aperture(self, name, *, s_start, s_end, aperture=None, table=None, s_tol=1.e-6):
159
+ if aperture is not None:
160
+ if isinstance(aperture, str):
161
+ aper1 = self.line[aperture]
162
+ aper2 = self.line[aperture]
163
+ elif hasattr(aperture, '__iter__'):
164
+ if len(aperture) != 2:
165
+ raise ValueError(f"The value `aperture` should be None or a list "
166
+ + f"[upstream, downstream].")
167
+ assert aperture[0] is not None and aperture[1] is not None
168
+ if isinstance(aperture[0], str):
169
+ aper1 = self.line[aperture[0]]
170
+ if isinstance(aperture[1], str):
171
+ aper2 = self.line[aperture[1]]
172
+ else:
173
+ aper1 = aperture
174
+ aper2 = aperture
175
+ if not xt.line._is_aperture(aper1, self.line):
176
+ raise ValueError(f"Not a valid aperture: {aper1}")
177
+ if not xt.line._is_aperture(aper2, self.line):
178
+ raise ValueError(f"Not a valid aperture: {aper2}")
179
+ return aper1.copy(), aper2.copy()
180
+ else:
181
+ if table is None:
182
+ table = self.line.get_table()
183
+ aper1 = self.get_apertures_at_s(s=s_start, table=table, s_tol=s_tol)
184
+ aper2 = self.get_apertures_at_s(s=s_end, table=table, s_tol=s_tol)
185
+ if aper1 is None and aper2 is not None:
186
+ aper1 = aper2
187
+ print(f"Warning: Could not find upstream aperture for {name}! "
188
+ + f"Used copy of downstream aperture. Proceed with caution.")
189
+ elif aper2 is None and aper1 is not None:
190
+ aper2 = aper1
191
+ print(f"Warning: Could not find downstream aperture for {name}! "
192
+ + f"Used copy of upstream aperture. Proceed with caution.")
193
+ elif aper1 is None and aper2 is None:
194
+ aper_mid = self.get_apertures_at_s(s=(s_start+s_end)/2, table=table, s_tol=s_tol)
195
+ if aper_mid is None:
196
+ raise ValueError(f"No aperture found for {name}! Please provide one.")
197
+ if self.line[aper_mid].allow_rot_and_shift \
198
+ and xt.base_element._tranformations_active(self.line[aper_mid]):
199
+ print(f"Warning: Using the centre aperture for {name}, but "
200
+ + f"transformations are present. Proceed with caution.")
201
+ aper1 = aper_mid
202
+ aper2 = aper_mid
203
+ return self.line[aper1].copy(), self.line[aper2].copy()
204
+
205
+ def prepare_space(self, name, *, s_start, s_end, table=None, s_tol=1.e-6):
206
+ if table is None:
207
+ table = self.line.get_table()
208
+ tt = table.rows[s_start-s_tol:s_end+s_tol:'s']
209
+ for element_name, element_type in zip(tt.name[:-1], tt.element_type[:-1]):
210
+ if element_type == 'Marker' or element_type.startswith('Drift'):
211
+ continue
212
+ if not element_type.startswith('Limit'):
213
+ print(f"Warning: Removed active element {element_name} "
214
+ + f"at location inside collimator {name}!")
215
+ length = self.line[element_name].length if hasattr(self.line[element_name], 'length') else 0
216
+ self.line.element_dict[element_name] = xt.Drift(length=length)
217
+
218
+ def get_optics_at(self, names, *, twiss=None, tw=None):
219
+ if tw is not None:
220
+ warn("The argument tw is deprecated. Please use twiss instead.", FutureWarning)
221
+ if twiss is None:
222
+ twiss = tw
25
223
  if twiss is None:
26
224
  if not self.line._has_valid_tracker():
27
225
  raise Exception("Please build the tracker before computing the optics for the openings!")
@@ -34,10 +232,14 @@ class XcollCollimatorAPI:
34
232
  tw_exit.name = tw_entry.name
35
233
  return tw_entry, tw_exit
36
234
 
37
- def assign_optics(self, nemitt_x=None, nemitt_y=None, twiss=None):
235
+ def assign_optics(self, *, nemitt_x=None, nemitt_y=None, twiss=None, tw=None):
236
+ if tw is not None:
237
+ warn("The argument tw is deprecated. Please use twiss instead.", FutureWarning)
238
+ if twiss is None:
239
+ twiss = tw
38
240
  if not self.line._has_valid_tracker():
39
241
  raise Exception("Please build tracker before setting the openings!")
40
- names = self.line.get_elements_of_type(_all_collimator_classes)[1]
242
+ names = self.line.get_elements_of_type(collimator_classes)[1]
41
243
  tw_upstream, tw_downstream = self.get_optics_at(names, twiss=twiss)
42
244
  beta_gamma_rel = self.line.particle_ref._xobject.gamma0[0]*self.line.particle_ref._xobject.beta0[0]
43
245
  for coll in names:
@@ -46,7 +248,7 @@ class XcollCollimatorAPI:
46
248
 
47
249
  def open(self, names=None):
48
250
  if names is None:
49
- names = self.line.get_elements_of_type(_all_collimator_classes)[1]
251
+ names = self.line.get_elements_of_type(collimator_classes)[1]
50
252
  if len(names) == 0:
51
253
  print("No collimators found in line.")
52
254
  else:
@@ -56,79 +258,54 @@ class XcollCollimatorAPI:
56
258
 
57
259
  def to_parking(self, names=None):
58
260
  if names is None:
59
- names = self.line.get_elements_of_type(_all_collimator_classes)[1]
261
+ names = self.line.get_elements_of_type(collimator_classes)[1]
60
262
  if len(names) == 0:
61
263
  print("No collimators found in line.")
62
264
  else:
63
265
  raise NotImplementedError("Need to move this to new type manager or so.")
64
266
 
65
-
66
- class XcollScatteringAPI:
67
- def __init__(self, line):
68
- self._line = line
69
-
70
- @property
71
- def line(self):
72
- return self._line
73
-
74
- def enable(self):
75
- elements = self.line.get_elements_of_type(element_classes)[0]
76
- if len(elements) == 0:
77
- print("No xcoll elements found in line.")
78
- else:
79
- nemitt_x = None
80
- nemitt_y = None
81
- for el in elements:
82
- if hasattr(el, 'optics') and el.optics is not None:
83
- if nemitt_x is None:
84
- nemitt_x = el.nemitt_x
85
- if nemitt_y is None:
86
- nemitt_y = el.nemitt_y
87
- if not np.isclose(el.nemitt_x, nemitt_x) \
88
- or not np.isclose(el.nemitt_x, nemitt_x):
89
- raise ValueError("Not all collimators have the same "
90
- + "emittance. This is not supported.")
91
- if hasattr(el, 'enable_scattering'):
92
- el.enable_scattering()
93
-
94
- def disable(self):
95
- elements = self.line.get_elements_of_type(element_classes)[0]
96
- if len(elements) == 0:
97
- print("No xcoll elements found in line.")
267
+ def _get_s_start(self, name, *, length, table=None):
268
+ if table is None:
269
+ table = self.line.get_table()
270
+ if name in self.line.element_names and hasattr(self.line[name], 'length'):
271
+ existing_length = self.line[name].length
98
272
  else:
99
- for el in elements:
100
- if hasattr(el, 'disable_scattering'):
101
- el.disable_scattering()
273
+ existing_length = 0
274
+ if name not in table.name:
275
+ raise ValueError(f"Element {name} not found in line. Need to manually provide `at_s`.")
276
+ return table.rows[name].s[0] + existing_length/2. - length/2
102
277
 
103
278
 
104
279
 
280
+ # Deprecated; to be removed
281
+ # -------------------------
105
282
 
106
283
  def assign_optics_to_collimators(line, nemitt_x=None, nemitt_y=None, twiss=None):
107
- warnings.warn("The function xcoll.assign_optics_to_collimators() is deprecated and will be "
108
- + "removed in the future. Please use line.scattering.assign_optics() instead.", DeprecationWarning)
284
+ warn("The function xcoll.assign_optics_to_collimators() is deprecated and will be "
285
+ + "removed in the future. Please use line.scattering.assign_optics() instead.", FutureWarning)
109
286
  line.collimators.assign_optics(nemitt_x=nemitt_x, nemitt_y=nemitt_y, twiss=twiss)
110
287
 
111
288
  def get_optics_at(names, *, twiss=None, line=None):
112
- warnings.warn("The function xcoll.get_optics_at() is deprecated and will be "
113
- + "removed in the future. Please use line.scattering.get_optics_at() instead.", DeprecationWarning)
289
+ warn("The function xcoll.get_optics_at() is deprecated and will be "
290
+ + "removed in the future. Please use line.scattering.get_optics_at() instead.", FutureWarning)
114
291
  return line.collimators.get_optics_at(names=names, twiss=twiss)
115
292
 
116
293
  def open_collimators(line, names=None):
117
- warnings.warn("The function xcoll.open_collimators() is deprecated and will be "
118
- + "removed in the future. Please use line.scattering.open_collimators() instead.", DeprecationWarning)
294
+ warn("The function xcoll.open_collimators() is deprecated and will be "
295
+ + "removed in the future. Please use line.scattering.open_collimators() instead.", FutureWarning)
119
296
  line.collimators.open(names=names)
120
297
 
121
298
  def send_to_parking(line, names=None):
122
- warnings.warn("The function xcoll.send_to_parking() is deprecated and will be "
123
- + "removed in the future. Please use line.scattering.send_to_parking() instead.", DeprecationWarning)
299
+ warn("The function xcoll.send_to_parking() is deprecated and will be "
300
+ + "removed in the future. Please use line.scattering.send_to_parking() instead.", FutureWarning)
124
301
  line.collimators.to_parking(names=names)
125
302
 
126
303
  def enable_scattering(line):
127
- warnings.warn("The function xcoll.enable_scattering() is deprecated and will be "
128
- + "removed in the future. Please use line.scattering.enable() instead.", DeprecationWarning)
304
+ warn("The function xcoll.enable_scattering() is deprecated and will be "
305
+ + "removed in the future. Please use line.scattering.enable() instead.", FutureWarning)
129
306
  line.scattering.enable()
130
307
 
131
308
  def disable_scattering(line):
132
- warnings.warn("The function xcoll.disable_scattering() is deprecated and will be "
133
- + "removed in the future. Please use line.scattering.disable() instead.", DeprecationWarning)
309
+ warn("The function xcoll.disable_scattering() is deprecated and will be "
310
+ + "removed in the future. Please use line.scattering.disable() instead.", FutureWarning)
134
311
  line.scattering.disable()
xcoll/lossmap.py CHANGED
@@ -12,7 +12,7 @@ import xtrack as xt
12
12
  import xpart as xp
13
13
  import xobjects as xo
14
14
 
15
- from .beam_elements import _all_collimator_classes, _all_crystal_classes
15
+ from .beam_elements import collimator_classes, crystal_classes
16
16
 
17
17
 
18
18
  class LossMap:
@@ -114,7 +114,7 @@ class LossMap:
114
114
  def _correct_absorbed(self, verbose=True):
115
115
  # Correct particles that are at an aperture directly after a collimator
116
116
  part = self._part
117
- coll_classes = list(set(_all_collimator_classes) - set(_all_crystal_classes))
117
+ coll_classes = list(set(collimator_classes) - set(crystal_classes))
118
118
  coll_elements = self._line.get_elements_of_type(coll_classes)[1]
119
119
  for idx, elem in enumerate(part.at_element):
120
120
  if part.state[idx] == 0:
@@ -156,7 +156,7 @@ class LossMap:
156
156
 
157
157
 
158
158
  def _make_coll_summary(self):
159
- collimator_names = self._line.get_elements_of_type(_all_collimator_classes)[1]
159
+ collimator_names = self._line.get_elements_of_type(collimator_classes)[1]
160
160
  coll_mask = (self._part.state <= -330) & (self._part.state >= -340)
161
161
  coll_losses = np.array([self._line.element_names[i]
162
162
  for i in self._part.at_element[coll_mask]])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xcoll
3
- Version: 0.5.5
3
+ Version: 0.5.7
4
4
  Summary: Xsuite collimation package
5
5
  Home-page: https://github.com/xsuite/xcoll
6
6
  License: Apache 2.0
@@ -1,10 +1,11 @@
1
1
  LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
2
2
  NOTICE,sha256=6DO_E7WCdRKc42vUoVVBPGttvQi4mRt9fAcxj9u8zy8,74
3
- xcoll/__init__.py,sha256=e4yt0ZiXp-bjeCoRdcF1TQD60yP30tnCp7ipXWKlPtM,1022
3
+ xcoll/__init__.py,sha256=b_61vh5irhf5fPmqTFJlyhNSt4rmftXg9uXPIEpgVB4,1612
4
4
  xcoll/_manager.py,sha256=9NQKaNxZR2I1ChMVBeKQc0A8h6W8gVgRRg72a5NgbXU,808
5
- xcoll/beam_elements/__init__.py,sha256=oB2FY3PmQ-OsvDSjZaBsbJksOMdFoy0my9_N_K1asOY,1210
5
+ xcoll/beam_elements/__init__.py,sha256=06bU8rzvlUPhcvwpaUippddm5IChpcCHBvpmvXJQU74,1122
6
+ xcoll/beam_elements/__init__.py.orig,sha256=0R3TLw1J5WBsi5TdWOR4ERg4oD_WEzabJOF3lIsSkNc,1561
6
7
  xcoll/beam_elements/absorber.py,sha256=efK6gyUgD4x_FnBLpMR7-5_HCdp_753nkYikcdn6ulw,2502
7
- xcoll/beam_elements/base.py,sha256=tgZwlgaKr34lebyGMIVHa8UqNpqJR4dTPzr-N9W_vxg,50922
8
+ xcoll/beam_elements/base.py,sha256=6scwhofls5AHPJcUyEbTJOJ8U86EQU4S7BB7NGoE_j0,52728
8
9
  xcoll/beam_elements/blowup.py,sha256=gBXdlISvoDiMjXVpA77ls5QdAU3H9krwvFt2bSW_NII,8029
9
10
  xcoll/beam_elements/elements_src/black_absorber.h,sha256=jCyQoaZ7VsIu8coQ99J1dDtAGqZpFIxxFLBlfhO6Drw,5027
10
11
  xcoll/beam_elements/elements_src/black_crystal.h,sha256=x7oUwsrkUwUrFvhFsq8vtPkJJTSi1hYAhSt6fjzkJQo,4622
@@ -15,18 +16,18 @@ xcoll/beam_elements/elements_src/everest_collimator.h,sha256=DlWkb5RORnp5VwI7E31
15
16
  xcoll/beam_elements/elements_src/everest_crystal.h,sha256=w1wHWhrvodvcJ2Atr8LSaVYHfCU3Y63KAjZZFFv87OI,12123
16
17
  xcoll/beam_elements/everest.py,sha256=PA_VWpnPrIuO1xN__eKyT_ejbGZK7p93QHDVi3re7cM,8541
17
18
  xcoll/beam_elements/monitor.py,sha256=zzMdN3JMFSAs-30_ntRvd5qZGdsXfGtColhiFDuMcIk,16928
18
- xcoll/colldb.py,sha256=IyWozG_37gRf7LGYDz4LMB2HzjexMOapFgIqzeym31w,31027
19
- xcoll/general.py,sha256=7KCioNHNLS4wm9VU9iPFm0N2E6MlhkKCLpPULrQagAg,534
19
+ xcoll/colldb.py,sha256=lEpkDRAT54szT9i7-jbTMRvkuW_0W2piZCdDaungcIs,30983
20
+ xcoll/general.py,sha256=mUvu_vwD5Ds4anwH3YAZ1UgsV7O9qfGHpC0Gw-UW14k,534
20
21
  xcoll/headers/checks.h,sha256=qdXsOTBOK1MwW6bdFF93j4yE648mcDtEv5rGN1w9sfk,1582
21
22
  xcoll/headers/particle_states.h,sha256=DZa_ZSaJrjnA8aHFriZKfRCkArQ8nK1t445MRwevDtA,840
22
- xcoll/initial_distribution.py,sha256=0O4hmO69CuTFDD6QA5G7iEMNx47vaMHn0A9IPw1dYi0,8799
23
- xcoll/install.py,sha256=HumxIzaPR6wW_6HFtksoUnUlaS1jMp7RbV7FhmIBWmg,7685
23
+ xcoll/initial_distribution.py,sha256=x5G4LTXn4boEg5jBFrQCk_l759h91XiAUhDTdcUvLkc,8779
24
+ xcoll/install.py,sha256=SxEFQnhWXlsXyPBIo847q6wPgId_f5ZtFRR1awGbkjc,2108
24
25
  xcoll/interaction_record/__init__.py,sha256=UFoLiKa-z2oX7YoszP-7Vgdt1nM6kT382v1CaIu8_u0,50
25
26
  xcoll/interaction_record/interaction_record.py,sha256=G2sFXgfmkgpDMaHWJaC80aAreHbY2rGhbkhaMhWKQBg,13192
26
27
  xcoll/interaction_record/interaction_record_src/interaction_record.h,sha256=0rNagnfSGc2i1jauOMIcDbj9QFic9dV_MOyqVx1kw5Q,6067
27
28
  xcoll/interaction_record/interaction_types.py,sha256=Vh6oFYKdRNOx9hc_E0iT8auNZVKC0qYVp_p7oyClZ8o,2894
28
- xcoll/line_tools.py,sha256=1yrw9b3j-yO3uyRpnKhlU0iHxDNeTj5M1jj9v3GqBj0,5634
29
- xcoll/lossmap.py,sha256=pV6uf-CKt6PROK_EZ2_DieJftRI2NcsE3CLG23Fth-I,8087
29
+ xcoll/line_tools.py,sha256=UtRVlwX1T-wzocFzgb3VoJuBavvggNnYONjvP2WigKM,14326
30
+ xcoll/lossmap.py,sha256=W2EzOe4aKmJFd8kEpebeQaAn1818QF3ih_nhA_br-2I,8062
30
31
  xcoll/rf_sweep.py,sha256=P2X1S9pGi4OpNYnzYfQVyblFt2p8aw9EWHsKDkAuYt0,8936
31
32
  xcoll/scattering_routines/everest/__init__.py,sha256=7lkkeZ1liBjXVHCuRpgzZI6ohzHVMj5uJBO792147XY,286
32
33
  xcoll/scattering_routines/everest/amorphous.h,sha256=0eSV8F7yb2xrhrEGPZGWu_Lgr3gjtU8RddaJElsZ-Tk,10362
@@ -406,9 +407,8 @@ xcoll/scattering_routines/geometry/objects.h,sha256=A5ktGvVlSkC4hUsI_PQFsE80CuDw
406
407
  xcoll/scattering_routines/geometry/rotation.h,sha256=lO3RaQBys9r0ROMjR8T8Rr7UsIEm-H9_C_70Nwz4MXY,701
407
408
  xcoll/scattering_routines/geometry/segments.h,sha256=7nKnnin2ByxkKyaYwGvFaqgLQg5uBba4CdLHL7L3iQs,7667
408
409
  xcoll/scattering_routines/geometry/sort.h,sha256=b1MkFO2ddzv1fWGeQzsLuz46qo2pKyRSXHjoAEVU7Ts,5763
409
- xcoll/scattering_routines/geometry/temp.c,sha256=uak0prUg6e441GuR8A9fvAUSfg-E_jaAfGw9fu2Ogms,32437
410
- xcoll-0.5.5.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
411
- xcoll-0.5.5.dist-info/METADATA,sha256=uN-Ple230sy6CY2egyegJCG9mSGd3nO3C5aWDMWU42M,2709
412
- xcoll-0.5.5.dist-info/NOTICE,sha256=6DO_E7WCdRKc42vUoVVBPGttvQi4mRt9fAcxj9u8zy8,74
413
- xcoll-0.5.5.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
414
- xcoll-0.5.5.dist-info/RECORD,,
410
+ xcoll-0.5.7.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
411
+ xcoll-0.5.7.dist-info/METADATA,sha256=he1rkTbLF0vDWJhwNUkTY0VfScaFvpwucqKYVlKUwLs,2709
412
+ xcoll-0.5.7.dist-info/NOTICE,sha256=6DO_E7WCdRKc42vUoVVBPGttvQi4mRt9fAcxj9u8zy8,74
413
+ xcoll-0.5.7.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
414
+ xcoll-0.5.7.dist-info/RECORD,,