|
STAR
Cal STAR — firmware, DAQ server, and engine design
|
Variables | |
| HERE = Path(__file__).resolve().parent | |
| str | DRAWING = HERE / "fixtures" / "le4_rocket_and_gse.json" |
| STAR = HERE.parents[2] | |
| str | STAND = STAR / "feed-twin" / "backend" / "diagrams" / "ethalox_stand.json" |
| str | TABLES = STAR / "feed-twin" / "backend" / "statemachines" |
| needs_tables = pytest.mark.skipif(not TABLES.is_dir(), reason="no state machine tables") | |
Ignoring the drawn GSE (``Setup.ignore_gse``, ``assemble_model(vehicle_only=)``). The twin misreads a complicated cart (the operator, 2026-10-08), and the burn only needs the rocket. With the option on, everything off the vehicle is cut before the build and the stand fills the way a drawing of the rocket alone does: the built-in charge, the built-in loads, the dome knob on the tank regulator itself. Each check is against what the drawn cart would have done instead, so it fails if the cart were still there.
|
protected |
The dome the rocket's regulator reads now [psig].
Definition at line 503 of file test_ignore_gse.py.
References _ids().
Referenced by test_a_dome_press_state_loads_the_dome_and_it_holds(), and test_an_undriven_dome_valve_leaves_the_rocket_only_dome_as_it_was().
|
protected |
The shipped table with a "Dome Control" row open only in a "Dome Press" state, reached from Press Standby -- a stand's own table (the operator, 2026-11-01).
Definition at line 471 of file test_ignore_gse.py.
Referenced by test_a_dome_press_state_loads_the_dome_and_it_holds().
|
protected |
Definition at line 41 of file test_ignore_gse.py.
References _payload().
Referenced by _dome(), test_a_bottle_at_the_air_drawn_on_reads_the_air(), test_a_bottle_being_charged_gives_what_the_network_draws(), test_a_bottle_charging_is_not_down_to_anything(), test_a_bottle_dumped_at_atmosphere_stays_at_atmosphere(), test_a_dome_press_state_loads_the_dome_and_it_holds(), test_a_gas_swap_puts_helium_in_the_bottles_lines_and_ullages(), test_a_poured_load_displaces_the_ullage_without_cooling_it(), test_a_primed_bottle_is_down_from_its_prime(), test_a_vent_drawn_unpaired_is_said_and_once_paired_it_stays(), test_a_vented_lox_load_keeps_its_ullage_over_the_liquid(), test_an_undriven_dome_valve_leaves_the_rocket_only_dome_as_it_was(), test_the_cart_is_cut_and_its_disconnects_capped(), test_the_cart_vent_stays_plugged_in_and_vents_the_rocket(), test_the_hookup_keeps_the_vehicle_and_drops_the_cart(), test_the_rocket_fills_at_the_settings_not_through_the_cart(), and test_the_rockets_dome_valve_is_no_vent_with_the_cart_cut().
|
protected |
Definition at line 45 of file test_ignore_gse.py.
References _payload().
Referenced by _session(), test_a_dome_press_state_loads_the_dome_and_it_holds(), test_a_vent_drawn_unpaired_is_said_and_once_paired_it_stays(), test_the_cart_is_cut_and_its_disconnects_capped(), test_the_cart_vent_stays_plugged_in_and_vents_the_rocket(), test_the_hookup_keeps_the_vehicle_and_drops_the_cart(), test_the_rockets_dome_valve_is_no_vent_with_the_cart_cut(), and test_the_setup_says_what_the_stand_was_built_from().
|
protected |
Definition at line 37 of file test_ignore_gse.py.
Referenced by _ids(), _model(), test_a_drawing_of_the_rocket_alone_is_not_touched(), test_a_gas_swap_puts_helium_in_the_bottles_lines_and_ullages(), test_a_vent_drawn_unpaired_is_said_and_once_paired_it_stays(), and test_the_cart_is_cut_and_its_disconnects_capped().
|
protected |
Definition at line 53 of file test_ignore_gse.py.
References _model().
Referenced by test_a_bottle_at_the_air_drawn_on_reads_the_air(), test_a_bottle_being_charged_gives_what_the_network_draws(), test_a_bottle_charging_is_not_down_to_anything(), test_a_bottle_dumped_at_atmosphere_stays_at_atmosphere(), test_a_poured_load_displaces_the_ullage_without_cooling_it(), test_a_primed_bottle_is_down_from_its_prime(), test_a_vented_lox_load_keeps_its_ullage_over_the_liquid(), test_an_undriven_dome_valve_leaves_the_rocket_only_dome_as_it_was(), test_the_cart_actuators_drive_nothing(), test_the_cart_vent_stays_plugged_in_and_vents_the_rocket(), and test_the_rocket_fills_at_the_settings_not_through_the_cart().
| None test_ignore_gse.test_a_bottle_at_the_air_drawn_on_reads_the_air | ( | ) |
The floor itself, apart from the dump: a bottle at atmosphere that a step draws 5 % of its gas from is put back at an atmosphere, mass and energy together. Floored at the wall's density with the energy left as it was, it kept the mass and lost the heat that left with it, and read a psi under the air after one step (the dump test above passes on the old floor once the dump stops at the air: this is the floor's own check).
Definition at line 260 of file test_ignore_gse.py.
References _ids(), and _session().
| None test_ignore_gse.test_a_bottle_being_charged_gives_what_the_network_draws | ( | ) |
The built-in charge and the network's draw land in one step: dm/dt = charge - draw. The charge branch returned before the draw was applied, so a press valve opened during GN2 High Press filled the LOX ullage from gas the COPV never lost -- 290 g of nitrogen from nothing on LE4 (3), booked by no vessel and opened by the watcher as "Mass not accounted for".
Definition at line 174 of file test_ignore_gse.py.
References _ids(), and _session().
| None test_ignore_gse.test_a_bottle_charging_is_not_down_to_anything | ( | ) |
GN2 High Press from empty: the COPV climbs, and the console said it was "down to 107 psia, 3% of what it was filled to" on every tick of the first quarter of the charge. A bottle is down only from what it has held.
Definition at line 199 of file test_ignore_gse.py.
References _ids(), and _session().
| None test_ignore_gse.test_a_bottle_dumped_at_atmosphere_stays_at_atmosphere | ( | ) |
Emergency Abort opens the built-in COPV dump. On a bottle already at the air it read 14.4 psia: the dump kept taking a ninth of the gas a second, the floor put it back at the wall's density with none of its energy, and every step the gas cooled and the bottle sank under atmosphere. A bottle open to the air reads the air, and nothing flows out of it.
Definition at line 239 of file test_ignore_gse.py.
References _ids(), and _session().
| None test_ignore_gse.test_a_dome_press_state_loads_the_dome_and_it_holds | ( | ) |
With DR-CTRL-R on a "Dome Control" row open only in "Dome Press", the rocket's dome sits at atmosphere until Dome Press opens the line to the cart's dome supply (the knob), and holds what it took once the line shuts: a tank pressed before it presses nothing, one pressed after reaches lockup.
Definition at line 531 of file test_ignore_gse.py.
References _dome(), _dome_press_machine(), _ids(), and _model().
| None test_ignore_gse.test_a_drawing_of_the_rocket_alone_is_not_touched | ( | ) |
On, against a drawing with nothing off the vehicle: the same object.
Definition at line 94 of file test_ignore_gse.py.
References _payload().
| None test_ignore_gse.test_a_gas_swap_puts_helium_in_the_bottles_lines_and_ullages | ( | ) |
``gas_swap`` replaces the pressurant wherever it is declared: the network's bottles, press lines and the ullages they fill hold helium; the tanks keep their propellants. Without it, the drawing's nitrogen.
Definition at line 441 of file test_ignore_gse.py.
References _ids(), and _payload().
| None test_ignore_gse.test_a_poured_load_displaces_the_ullage_without_cooling_it | ( | ) |
The built-in load raised the liquid and shrank the ullage with no p dV work on the gas; the vent then took the displaced gas at its enthalpy, and what stayed behind lost p v per kilogram vented: the fuel ullage cooled 293 -> 285 K during a 15 s pour onto a 293 K tank at atmosphere. By hand, an adiabatic displacement at constant pressure leaves the gas where it was -- the liquid's work on the gas pays the flow work leaving.
Definition at line 307 of file test_ignore_gse.py.
References _ids(), _session(), and min.
| None test_ignore_gse.test_a_primed_bottle_is_down_from_its_prime | ( | ) |
T-0 sets the bottle; it does not reach it. A bottle charged to 4,000 psig and then primed at 400 psig (a Study case, a second T-0 at a lower charge) kept the 4,000 as the most it had held, and the console read "down to 415 psia, 10% of the 4,015 psia it was filled to" of gas nobody had taken out of it.
Definition at line 279 of file test_ignore_gse.py.
References _ids(), and _session().
| None test_ignore_gse.test_a_vent_drawn_unpaired_is_said_and_once_paired_it_stays | ( | ) |
LE4 (6) draws the LOX vent's halves -- the rocket's QD-OV-B and the cart's OV-QD-A in front of OV-MOT -- paired with nothing. The twin does not guess the pair; it says so. Paired, the warning goes and the LOX vent line stays plugged into the rocket only like the fuel's.
Definition at line 419 of file test_ignore_gse.py.
References _ids(), _model(), and _payload().
| None test_ignore_gse.test_a_vented_lox_load_keeps_its_ullage_over_the_liquid | ( | ) |
A LOX load on its vent, chilled: the nitrogen ullage sits between the 90 K liquid and the 92 K wall, gas leaves through the vent, and no guard books anything. Each time the tank dipped a hundredth of a psi under the air, the floor restated the ullage's energy at a whole atmosphere of nitrogen while it shared the tank with oxygen vapour -- colder, by nitrogen's departure from ideal near its dew line -- and the ratchet took the ullage to 77 K, drew ~1 g/s of "air" in through a vent blowing out, and booked hundreds of grams as clamps: the Solver tab failed three of five checks after every pad run (LE4 (3): 77.4 K, 0.70 kg drawn, -0.60 kg).
Definition at line 328 of file test_ignore_gse.py.
References _ids(), _session(), and min.
| None test_ignore_gse.test_an_undriven_dome_valve_leaves_the_rocket_only_dome_as_it_was | ( | ) |
Rocket only, the dome comes in through the capped DR-QD-B and the rocket's DR-CTRL-R gates it -- but no row of the shipped table drives DR-CTRL-R, so it passes and the stand runs bit for bit as it did with no gate at all.
Definition at line 510 of file test_ignore_gse.py.
References _dome(), _ids(), and _session().
| None test_ignore_gse.test_on_a_one_page_drawing_it_changes_nothing | ( | ) |
The shipped stand has no GSE drawn: built with the option on it runs the same pad, number for number, as with it off.
Definition at line 105 of file test_ignore_gse.py.
| None test_ignore_gse.test_the_cart_actuators_drive_nothing | ( | ) |
Definition at line 362 of file test_ignore_gse.py.
References _session().
| None test_ignore_gse.test_the_cart_is_cut_and_its_disconnects_capped | ( | ) |
Everything off the vehicle goes but the cart's vent line, which stays plugged into the rocket until launch; every other coupling is capped.
Definition at line 62 of file test_ignore_gse.py.
References _ids(), _model(), and _payload().
| None test_ignore_gse.test_the_cart_vent_stays_plugged_in_and_vents_the_rocket | ( | ) |
The cart's vents are a small part of the GSE that stays plugged into the rocket until the last moment before launch (the team, 2026-10-10). Rocket only, the fuel tank's vent coupling stays mated to the cart's vent line, Fuel Vent drives the cart's FV-SOL -- not a stand-in on the capped coupling -- and venting through it empties the pressed tank.
Definition at line 395 of file test_ignore_gse.py.
References _ids(), _model(), and _session().
| None test_ignore_gse.test_the_hookup_keeps_the_vehicle_and_drops_the_cart | ( | ) |
Definition at line 369 of file test_ignore_gse.py.
| None test_ignore_gse.test_the_rocket_fills_at_the_settings_not_through_the_cart | ( | ) |
GN2 High Press charges the COPV to the COPV fill setting by the built-in charge, Fuel Fill pours the built-in load, and the dome knob sets DPR_HP's dome itself: the tanks lock up at it with no GN2 Low Press. With the cart simulated, the COPV fills through PR-1, the fuel through the transfer tank, and the dome stays unloaded until GN2 Low Press -- the tanks hold the spring bias less the supply effect, which on a charged COPV is shut.
Definition at line 133 of file test_ignore_gse.py.
References _ids(), and _session().
| None test_ignore_gse.test_the_rockets_dome_valve_is_no_vent_with_the_cart_cut | ( | ) |
Rocket only, DR-CTRL-R sits on DPR_HP's dome line between the dome port and the capped DR-QD-B. The loader went with the cart, so the dome line was not found, and the solenoid was reported as a vent to atmosphere with its dome side -- where DR-PT-R reads -- pinned there. The cart's vent line stays a vent.
Definition at line 488 of file test_ignore_gse.py.
| None test_ignore_gse.test_the_setup_says_what_the_stand_was_built_from | ( | ) |
Definition at line 386 of file test_ignore_gse.py.
References _model().
| str test_ignore_gse.DRAWING = HERE / "fixtures" / "le4_rocket_and_gse.json" |
Definition at line 29 of file test_ignore_gse.py.
| test_ignore_gse.HERE = Path(__file__).resolve().parent |
Definition at line 28 of file test_ignore_gse.py.
| test_ignore_gse.needs_tables = pytest.mark.skipif(not TABLES.is_dir(), reason="no state machine tables") |
Definition at line 34 of file test_ignore_gse.py.
| str test_ignore_gse.STAND = STAR / "feed-twin" / "backend" / "diagrams" / "ethalox_stand.json" |
Definition at line 31 of file test_ignore_gse.py.
| test_ignore_gse.STAR = HERE.parents[2] |
Definition at line 30 of file test_ignore_gse.py.
| str test_ignore_gse.TABLES = STAR / "feed-twin" / "backend" / "statemachines" |
Definition at line 32 of file test_ignore_gse.py.