Skip to content

Commit 38524a2

Browse files
committed
Revert "Merge pull request #16 from hz-b/dev/feature/lattice-representation"
This reverts commit 8414089, reversing changes made to 5b7fc0b.
1 parent d335ea3 commit 38524a2

31 files changed

+239
-368
lines changed

lat2db/bl/create_machine.py

Lines changed: 0 additions & 125 deletions
This file was deleted.

lat2db/bl/set_machine.py

Lines changed: 82 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,99 @@
1+
import copy
2+
import logging
13
import os
24

35
import jsons
4-
from starlette.testclient import TestClient
5-
66
from fastapi import FastAPI
77
from pymongo import MongoClient
88

9-
from .. import mongodb_url
10-
from ..model.machine import Machine
11-
from ..controller import machine_controller
12-
9+
from lat2db import mongodb_url
10+
from lat2db.controller import machine_controller
11+
from lat2db.model.beam_position_monitor import BeamPositionMonitor
12+
from lat2db.model.bending import Bending
13+
from lat2db.model.cavity import Cavity
14+
from lat2db.model.drift import Drift
15+
from lat2db.model.machine import Machine
16+
from lat2db.model.marker import Marker
17+
from lat2db.model.quadrupole import Quadrupole
18+
from lat2db.model.sequencer import Sequencer
19+
from lat2db.model.sextupole import Sextupole
20+
from lat2db.model.steerer import Steerer
1321

1422
app = FastAPI()
1523
app.include_router(machine_controller.router, tags=["machines"], prefix="/machine")
1624
app.mongodb_client = MongoClient(mongodb_url)
1725
DB_NAME = os.environ.get("MONGODB_DB", "bessyii")
1826
app.database = app.mongodb_client[DB_NAME]
1927

20-
def set_machine(machine: Machine):
21-
# return machine
28+
logger = logging.getLogger("tools")
29+
30+
31+
def create_machine(lat):
32+
machine = Machine()
33+
machine.set_base_parameters( lat )
34+
35+
# iterate through each row in lat.elements
36+
for row_ in lat.elements:
37+
38+
# make a copy of the row so that changes don't affect original data
39+
row = copy.copy(row_)
40+
41+
# print the row
42+
print(f'{row} ----')
2243

44+
# revamp parameters as required for the dataclasses
45+
row.setdefault("length", row.pop("L", 0e0)) # rename "L" to "length"
46+
type_name = row['type']
47+
# Ensure 'passmethod' and 'tags' keys exist in the row dictionary
48+
row.setdefault("passmethod", None)
49+
row.setdefault("tags", None)
50+
if type_name in ["Bending", "Quadrupole", "Sextupole", "Steerer"]:
51+
row.setdefault("main_multipole_strength", row.pop("K", 0e0)) # rename "K" to "main_multipole_strength"
52+
row.setdefault("number_of_integration_steps",
53+
row.pop("N", 1)) # rename "N" to "number_of_integration_steps"
54+
row.setdefault("method", row.pop("Method", 4)) # rename "Method" to "method"
55+
elif type_name == "Cavity":
56+
row.setdefault("frequency", row.pop("Frequency", 0e0)) # rename "Frequency" to "frequency"
57+
row.setdefault("voltage", row.pop("Voltage", 0e0)) # rename "Voltage" to "voltage"
58+
row.setdefault("harmonic_number",
59+
row.pop("Harmonicnumber", 0e0)) # rename "HarmonicNumber" to "harmonic_number"
60+
else:
61+
pass # do nothing if type_name is not recognized
62+
63+
if type_name == "Bending":
64+
row.setdefault("bending_angle", row.pop("T", 0e0)) # rename "T" to "bending_angle"
65+
row.setdefault("entry_angle", row.pop("T1", 0e0)) # rename "T1" to "entry_angle"
66+
row.setdefault("exit_angle", row.pop("T2", 0e0)) # rename "T2" to "exit_angle"
67+
68+
# create a Sequencer instance using the modified row
69+
sequence_item = Sequencer(**row)
70+
71+
# add the sequence_item to the appropriate list in the machine instance based on its type_name
72+
type_dict = {
73+
"Drift": (Drift, machine.add_drift),
74+
"Marker": (Marker, machine.add_marker),
75+
"Sextupole": (Sextupole, machine.add_sextupole),
76+
"Steerer": (Steerer, machine.add_steerer()),
77+
"Bending": (Bending, machine.add_bending),
78+
"Quadrupole": (Quadrupole, machine.add_quadrupole),
79+
"Bpm": (BeamPositionMonitor, machine.add_beam_position_monitor),
80+
"Cavity": (Cavity, machine.add_cavity),
81+
}
82+
83+
type_class, type_method = type_dict.get(type_name, (None, None))
84+
if type_class is None or type_method is None:
85+
if type_name in ['Horizontalsteerer','Verticalsteerer']:
86+
continue #ignore the two steerers
87+
else:
88+
raise KeyError(f"Don't know type {type_name}")
89+
sequence_item.set_properties(row)
90+
type_instance = type_class(**row)
91+
machine.add_to_sequence(sequence_item)
92+
type_method(type_instance)
93+
94+
# return machine
95+
from starlette.testclient import TestClient
2396
with TestClient(app) as client:
24-
response = client.post("/machine/machine", json=jsons.dump(machine.to_dict()))
97+
response = client.post("/machine/machine", json=jsons.dump(machine))
2598
if response.status_code != 201:
2699
raise AssertionError(f"Got response {response}")
27-

lat2db/controller/machine_controller.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ def update_quadrupole_details(id: str, quad_name: str, request_body: Quadrupole_
161161
if "sequences" in machine:
162162
sequences_list = machine.get("sequences", [])
163163
for item_index, item in enumerate(sequences_list):
164-
if item.get("name") == request_body.updated_data.name and item.get("type") == ElmTNams.quadrupole:
164+
if item.get("name") == request_body.updated_data.name and item.get("type") == "Quadrupole":
165165
removed_quadrupole = sequences_list.pop(item_index)
166166
# affected_drift=item.get("index")
167167
print("******* affected drif index is ", affected_drift)
@@ -297,7 +297,7 @@ def update_quadrupole_details_copy(id: str, quad_name: str, request_body: Quadru
297297
if "sequences" in machine_copy:
298298
sequences_list = machine_copy.get("sequences", [])
299299
for item_index, item in enumerate(sequences_list):
300-
if item.get("name") == request_body.updated_data.name and item.get("type") == ElmTNams.quadrupole:
300+
if item.get("name") == request_body.updated_data.name and item.get("type") == "Quadrupole":
301301
removed_quadrupole = sequences_list.pop(item_index)
302302
# affected_drift=item.get("index")
303303
print("******* affected drif index is ", affected_drift)
@@ -809,7 +809,7 @@ def update_quadrupole_from_sequence(id: str, target_drift: str, quad_name: str,
809809
print("inside the drift")
810810
try:
811811
get_qud_prev = database.find_one(
812-
{"id": str(id), "sequences": {"$elemMatch": {"name": quad_name, "type": ElmTNams.quadrupole}}},
812+
{"id": str(id), "sequences": {"$elemMatch": {"name": quad_name, "type": "Quadrupole"}}},
813813
projection={"sequences.$": 1}
814814
)
815815

lat2db/model/lattice_elements/beam_position_monitor.py renamed to lat2db/model/beam_position_monitor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .element import Element
1+
from lat2db.model.element import Element
22

33

44
class BeamPositionMonitor(Element):

lat2db/model/lattice_elements/bending.py renamed to lat2db/model/bending.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@
22

33
from .element import Element
44
from .magnetic_element import MagnetAssembly
5-
from ..integrator_configuration.integration_parameters import IntegrationParameters
65

76

87
class Bending(Element):
9-
bending_angle: float
10-
integration_parameters: IntegrationParameters
118
element_configuration: Optional[MagnetAssembly] = None
9+
number_of_integration_steps: Optional[int] = None
10+
bending_angle: Optional[float] = 0.0
1211
entranceangle: Optional[float] = 0.0
1312
exitangle: Optional[float] = 0
1413
fringeint1: Optional[float] = None

lat2db/model/lattice_elements/cavity.py renamed to lat2db/model/cavity.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from pydantic.dataclasses import dataclass
44

5-
from .element import Element
5+
from lat2db.model.element import Element
66

77

88
@dataclass

lat2db/model/lattice_elements/drift.py renamed to lat2db/model/drift.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .element import Element
1+
from lat2db.model.element import Element
22

33

44
class Drift(Element):

lat2db/model/element.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from typing import Sequence, Optional
2+
3+
from pydantic import BaseModel
4+
5+
6+
class Element(BaseModel):
7+
#: actually an identifier
8+
name: Optional[str]
9+
index: Optional[int]
10+
#: in meter
11+
length: Optional[float]
12+
#: to be interpreted by the factories building a lattice from the database
13+
type: Optional[str]
14+
#: everythng describing the element itself beyond to the information given
15+
#: in the fields above
16+
# element_configuration: object
17+
# tags are given by specific lattice developers to later sort/filter/categorised/group or wild card search their
18+
# elements
19+
passmethod: Optional[str]
20+
tags: Optional[Sequence[str]]
21+
22+
23+
__all__ = ["Element"]

lat2db/model/energy.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class Energy:
1010
#: energy or particle_energy
1111
name: str
1212
#: specify the unit
13-
#: eV to be consistent with the beam energy
13+
#: eV to be consitent with the beam energy
1414
#: deviates from SI, but that would be an acceptable compromise to
15-
#: the community
15+
#: the comumuity
1616
value: float

0 commit comments

Comments
 (0)