From 216fec0c6587a72cd1d715ec5c21f3f0aa762b93 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Sun, 9 Jun 2024 14:02:17 +0530 Subject: [PATCH 01/37] Create and Initialize RPacketLastInteractionClass --- tardis/transport/montecarlo/base.py | 1 + .../montecarlo/montecarlo_main_loop.py | 18 ++++++- .../transport/montecarlo/packet_trackers.py | 47 +++++++++++++++++++ 3 files changed, 65 insertions(+), 1 deletion(-) diff --git a/tardis/transport/montecarlo/base.py b/tardis/transport/montecarlo/base.py index ce62695eb4d..f77562ebfb2 100644 --- a/tardis/transport/montecarlo/base.py +++ b/tardis/transport/montecarlo/base.py @@ -173,6 +173,7 @@ def run( last_interaction_tracker, vpacket_tracker, rpacket_trackers, + rpacket_last_interaction_trackers, ) = montecarlo_main_loop( transport_state.packet_collection, transport_state.geometry_state, diff --git a/tardis/transport/montecarlo/montecarlo_main_loop.py b/tardis/transport/montecarlo/montecarlo_main_loop.py index d20c21eacef..cac31d9bde3 100644 --- a/tardis/transport/montecarlo/montecarlo_main_loop.py +++ b/tardis/transport/montecarlo/montecarlo_main_loop.py @@ -4,7 +4,10 @@ from numba.typed import List from tardis.transport.montecarlo import njit_dict -from tardis.transport.montecarlo.packet_trackers import RPacketTracker +from tardis.transport.montecarlo.packet_trackers import ( + RPacketTracker, + RPacketLastInteractionTracker, +) from tardis.transport.montecarlo.packet_collections import ( VPacketCollection, consolidate_vpacket_tracker, @@ -72,6 +75,10 @@ def montecarlo_main_loop( vpacket_collections = List() # Configuring the Tracking for R_Packets rpacket_trackers = List() + + # Creating an empty List where individual RPacketLastInteractionTracker + # class will be stored. + rpacket_last_interaction_trackers = List() for i in range(no_of_packets): vpacket_collections.append( VPacketCollection( @@ -88,6 +95,9 @@ def montecarlo_main_loop( montecarlo_configuration.INITIAL_TRACKING_ARRAY_LENGTH ) ) + rpacket_last_interaction_trackers.append( + RPacketLastInteractionTracker() + ) # Get the ID of the main thread and the number of threads main_thread_id = get_thread_id() @@ -131,6 +141,9 @@ def montecarlo_main_loop( # RPacket Tracker for this thread rpacket_tracker = rpacket_trackers[i] + # RPacketLastInteractionTracker for the current RPacket + rpacket_last_interaction_tracker = rpacket_last_interaction_trackers[i] + loop = single_packet_loop( r_packet, geometry_state, @@ -145,6 +158,8 @@ def montecarlo_main_loop( last_interaction_tracker.update_last_interaction(r_packet, i) + rpacket_last_interaction_tracker.track_last_interaction(r_packet) + if r_packet.status == PacketStatus.REABSORBED: packet_collection.output_energies[i] = -r_packet.energy last_interaction_tracker.types[i] = r_packet.last_interaction_type @@ -194,4 +209,5 @@ def montecarlo_main_loop( last_interaction_tracker, vpacket_tracker, rpacket_trackers, + rpacket_last_interaction_trackers, ) diff --git a/tardis/transport/montecarlo/packet_trackers.py b/tardis/transport/montecarlo/packet_trackers.py index 469a4e81c19..2866302bcbb 100644 --- a/tardis/transport/montecarlo/packet_trackers.py +++ b/tardis/transport/montecarlo/packet_trackers.py @@ -156,3 +156,50 @@ def rpacket_trackers_to_dataframe(rpacket_trackers): index=pd.MultiIndex.from_arrays(index_array, names=["index", "step"]), columns=df_dtypes.names, ) + + +rpacket_last_interaction_tracker_spec = [ + ("index", int64), + ("r", float64), + ("nu", float64), + ("energy", float64), + ("shell_id", int64), + ("interaction_type", int64), +] + + +@jitclass(rpacket_last_interaction_tracker_spec) +class RPacketLastInteractionTracker(object): + """ + Numba JITCLASS for storing the last interaction the RPacket undergoes. + Parameters + ---------- + index : int + Index position of each RPacket + r : float + Radius of the shell where the RPacket is present + nu : float + Frequency of the RPacket + energy : float + Energy possessed by the RPacket + shell_id : int + Current Shell No in which the last interaction happened + interaction_type: int + Type of interaction the rpacket undergoes + """ + + def __init__(self): + self.index = np.int64(-1) + self.r = np.float64(-1) + self.nu = np.float64(0) + self.energy = np.float64(0) + self.shell_id = np.int64(-1) + self.interaction_type = np.int64(-1) + + def track_last_interaction(self, r_packet): + self.index = r_packet.index + self.r = r_packet.r + self.nu = r_packet.nu + self.energy = r_packet.energy + self.shell_id = r_packet.current_shell_id + self.interaction_type = r_packet.last_interaction_type From 2978a535bda3855f242138b9d25b0ea7f351ad83 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Mon, 10 Jun 2024 11:56:17 +0530 Subject: [PATCH 02/37] Add default value test --- tardis/transport/montecarlo/tests/test_trackers.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 tardis/transport/montecarlo/tests/test_trackers.py diff --git a/tardis/transport/montecarlo/tests/test_trackers.py b/tardis/transport/montecarlo/tests/test_trackers.py new file mode 100644 index 00000000000..8a11bf0805e --- /dev/null +++ b/tardis/transport/montecarlo/tests/test_trackers.py @@ -0,0 +1,14 @@ +from tardis.transport.montecarlo.packet_trackers import ( + RPacketLastInteractionTracker, +) +from tardis.transport.montecarlo.r_packet import RPacket + + +def test_defaults(): + tracker = RPacketLastInteractionTracker() + assert tracker.index == -1 + assert tracker.r == -1 + assert tracker.nu == 0 + assert tracker.energy == 0 + assert tracker.shell_id == -1 + assert tracker.interaction_type == -1 From b9fbbaf3e5e6ef2f9296af77f0737cf7d2801c03 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Mon, 10 Jun 2024 15:36:58 +0530 Subject: [PATCH 03/37] Add basic tests --- tardis/transport/montecarlo/base.py | 4 +++ .../montecarlo/tests/test_trackers.py | 32 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/tardis/transport/montecarlo/base.py b/tardis/transport/montecarlo/base.py index f77562ebfb2..faa0841612b 100644 --- a/tardis/transport/montecarlo/base.py +++ b/tardis/transport/montecarlo/base.py @@ -224,6 +224,10 @@ def run( self.montecarlo_configuration.ENABLE_VPACKET_TRACKING ) + self.transport_state.rpacket_last_interaction_trackers = ( + rpacket_last_interaction_trackers + ) + @classmethod def from_config( cls, config, packet_source, enable_virtual_packet_logging=False diff --git a/tardis/transport/montecarlo/tests/test_trackers.py b/tardis/transport/montecarlo/tests/test_trackers.py index 8a11bf0805e..8ea9b2574ca 100644 --- a/tardis/transport/montecarlo/tests/test_trackers.py +++ b/tardis/transport/montecarlo/tests/test_trackers.py @@ -1,9 +1,27 @@ +import pytest +import numpy as np + from tardis.transport.montecarlo.packet_trackers import ( RPacketLastInteractionTracker, ) from tardis.transport.montecarlo.r_packet import RPacket +@pytest.fixture() +def last_interactions(nb_simulation_verysimple): + transport_state = nb_simulation_verysimple.transport.transport_state + checkedTypes = transport_state.last_interaction_type + toCheckTypes = np.empty( + len(transport_state.rpacket_last_interaction_trackers), dtype=np.int64 + ) + for i, rpacket_last_interaction_tracker in enumerate( + transport_state.rpacket_last_interaction_trackers + ): + toCheckTypes[i] = rpacket_last_interaction_tracker.interaction_type + + reurn(checkedTypes, toCheckTypes) + + def test_defaults(): tracker = RPacketLastInteractionTracker() assert tracker.index == -1 @@ -12,3 +30,17 @@ def test_defaults(): assert tracker.energy == 0 assert tracker.shell_id == -1 assert tracker.interaction_type == -1 + + +def test_tracking_manual(static_packet): + tracker = RPacketLastInteractionTracker() + tracker.track_last_interaction(static_packet) + assert tracker.index == 0 + assert tracker.r == 7.5e14 + assert tracker.nu == 0.4 + assert tracker.energy == 0.9 + + +def test_tracking_simulation(last_interactions): + checkedTypes, toCheckTypes = last_interactions + assert checkedTypes == toCheckTypes From 6a520f09f2b4620973b12f23e2fe1f6f8ce548f4 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Mon, 10 Jun 2024 16:09:29 +0530 Subject: [PATCH 04/37] Fix some typos --- tardis/transport/montecarlo/tests/test_trackers.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tardis/transport/montecarlo/tests/test_trackers.py b/tardis/transport/montecarlo/tests/test_trackers.py index 8ea9b2574ca..c0b8807f7f8 100644 --- a/tardis/transport/montecarlo/tests/test_trackers.py +++ b/tardis/transport/montecarlo/tests/test_trackers.py @@ -4,7 +4,6 @@ from tardis.transport.montecarlo.packet_trackers import ( RPacketLastInteractionTracker, ) -from tardis.transport.montecarlo.r_packet import RPacket @pytest.fixture() @@ -19,7 +18,7 @@ def last_interactions(nb_simulation_verysimple): ): toCheckTypes[i] = rpacket_last_interaction_tracker.interaction_type - reurn(checkedTypes, toCheckTypes) + return (checkedTypes, toCheckTypes) def test_defaults(): From 6bd93398138a08fbf5514710e6bf08d787c7a616 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Mon, 10 Jun 2024 16:25:30 +0530 Subject: [PATCH 05/37] Compare all elements of numpy array --- tardis/transport/montecarlo/tests/test_trackers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tardis/transport/montecarlo/tests/test_trackers.py b/tardis/transport/montecarlo/tests/test_trackers.py index c0b8807f7f8..c0bda5721e5 100644 --- a/tardis/transport/montecarlo/tests/test_trackers.py +++ b/tardis/transport/montecarlo/tests/test_trackers.py @@ -42,4 +42,4 @@ def test_tracking_manual(static_packet): def test_tracking_simulation(last_interactions): checkedTypes, toCheckTypes = last_interactions - assert checkedTypes == toCheckTypes + assert np.array_equal(checkedTypes, toCheckTypes) From 51b0002ffb41a2bb098006d5c67f6bc1a3567a5b Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Mon, 10 Jun 2024 18:03:13 +0530 Subject: [PATCH 06/37] Write more tests using actual data --- tardis/transport/montecarlo/tests/conftest.py | 19 ++++ .../montecarlo/tests/test_r_packet.py | 18 --- .../montecarlo/tests/test_trackers.py | 107 +++++++++++++++++- 3 files changed, 122 insertions(+), 22 deletions(-) diff --git a/tardis/transport/montecarlo/tests/conftest.py b/tardis/transport/montecarlo/tests/conftest.py index 21e19c24134..6cb88cb3f5a 100644 --- a/tardis/transport/montecarlo/tests/conftest.py +++ b/tardis/transport/montecarlo/tests/conftest.py @@ -7,6 +7,7 @@ VPacketCollection, ) +from tardis.base import run_tardis from tardis.simulation import Simulation from tardis.transport.montecarlo import RPacket from tardis.transport.montecarlo.estimators.radfield_mc_estimators import ( @@ -138,3 +139,21 @@ def random_call(): np.random.random() return njit(random_call) + + +@pytest.fixture(scope="package") +def simulation_rpacket_tracking_enabled(config_verysimple, atomic_dataset): + config_verysimple.montecarlo.iterations = 3 + config_verysimple.montecarlo.no_of_packets = 4000 + config_verysimple.montecarlo.last_no_of_packets = -1 + config_verysimple.spectrum.virtual.virtual_packet_logging = True + config_verysimple.montecarlo.no_of_virtual_packets = 1 + config_verysimple.montecarlo.tracking.track_rpacket = True + config_verysimple.spectrum.num = 2000 + atomic_data = deepcopy(atomic_dataset) + sim = run_tardis( + config_verysimple, + atom_data=atomic_data, + show_convergence_plots=False, + ) + return sim diff --git a/tardis/transport/montecarlo/tests/test_r_packet.py b/tardis/transport/montecarlo/tests/test_r_packet.py index 3e18d190740..f8edafe4bdc 100644 --- a/tardis/transport/montecarlo/tests/test_r_packet.py +++ b/tardis/transport/montecarlo/tests/test_r_packet.py @@ -10,24 +10,6 @@ ) -@pytest.fixture(scope="module") -def simulation_rpacket_tracking_enabled(config_verysimple, atomic_dataset): - config_verysimple.montecarlo.iterations = 3 - config_verysimple.montecarlo.no_of_packets = 4000 - config_verysimple.montecarlo.last_no_of_packets = -1 - config_verysimple.spectrum.virtual.virtual_packet_logging = True - config_verysimple.montecarlo.no_of_virtual_packets = 1 - config_verysimple.montecarlo.tracking.track_rpacket = True - config_verysimple.spectrum.num = 2000 - atomic_data = deepcopy(atomic_dataset) - sim = run_tardis( - config_verysimple, - atom_data=atomic_data, - show_convergence_plots=False, - ) - return sim - - def test_rpacket_trackers_to_dataframe(simulation_rpacket_tracking_enabled): sim = simulation_rpacket_tracking_enabled transport_state = sim.transport.transport_state diff --git a/tardis/transport/montecarlo/tests/test_trackers.py b/tardis/transport/montecarlo/tests/test_trackers.py index c0bda5721e5..055d692e490 100644 --- a/tardis/transport/montecarlo/tests/test_trackers.py +++ b/tardis/transport/montecarlo/tests/test_trackers.py @@ -1,5 +1,8 @@ +from copy import deepcopy + import pytest import numpy as np +import numpy.testing as npt from tardis.transport.montecarlo.packet_trackers import ( RPacketLastInteractionTracker, @@ -7,8 +10,9 @@ @pytest.fixture() -def last_interactions(nb_simulation_verysimple): - transport_state = nb_simulation_verysimple.transport.transport_state +def last_interactions(simulation_rpacket_tracking_enabled): + sim = simulation_rpacket_tracking_enabled + transport_state = sim.transport.transport_state checkedTypes = transport_state.last_interaction_type toCheckTypes = np.empty( len(transport_state.rpacket_last_interaction_trackers), dtype=np.int64 @@ -40,6 +44,101 @@ def test_tracking_manual(static_packet): assert tracker.energy == 0.9 -def test_tracking_simulation(last_interactions): +def test_tracking_from_last_interaction_simulation(last_interactions): checkedTypes, toCheckTypes = last_interactions - assert np.array_equal(checkedTypes, toCheckTypes) + npt.assert_array_equal(checkedTypes, toCheckTypes) + + +def test_tracking_from_rpacket_tracker_simulation( + simulation_rpacket_tracking_enabled, +): + sim = simulation_rpacket_tracking_enabled + rpacket_trackers = sim.transport.transport_state.rpacket_tracker + rpacket_last_interaction_trackers = ( + sim.transport.transport_state.rpacket_last_interaction_trackers + ) + no_of_packets = len(rpacket_trackers) + + index_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.int64) + index_from_last_interaction_tracker = np.empty( + no_of_packets, dtype=np.int64 + ) + + r_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.float64) + r_from_last_interaction_tracker = np.empty(no_of_packets, dtype=np.float64) + + nu_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.float64) + nu_from_last_interaction_tracker = np.empty(no_of_packets, dtype=np.float64) + + energy_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.float64) + energy_from_last_interaction_tracker = np.empty( + no_of_packets, dtype=np.float64 + ) + + shell_id_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.int64) + shell_id_from_last_interaction_tracker = np.empty( + no_of_packets, dtype=np.int64 + ) + + type_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.int64) + type_from_last_interaction_tracker = np.empty(no_of_packets, dtype=np.int64) + + for i in range(no_of_packets): + interactions = rpacket_trackers[i].num_interactions + + index_from_rpacket_tracker[i] = rpacket_trackers[i].index + index_from_last_interaction_tracker[ + i + ] = rpacket_last_interaction_trackers[i].index + + r_from_rpacket_tracker[i] = rpacket_trackers[i].r[interactions - 1] + r_from_last_interaction_tracker[i] = rpacket_last_interaction_trackers[ + i + ].r + + nu_from_rpacket_tracker[i] = rpacket_trackers[i].nu[interactions - 1] + nu_from_last_interaction_tracker[i] = rpacket_last_interaction_trackers[ + i + ].nu + + energy_from_rpacket_tracker[i] = rpacket_trackers[i].energy[ + interactions - 1 + ] + energy_from_last_interaction_tracker[ + i + ] = rpacket_last_interaction_trackers[i].energy + + shell_id_from_rpacket_tracker[i] = rpacket_trackers[i].shell_id[ + interactions - 1 + ] + shell_id_from_last_interaction_tracker[ + i + ] = rpacket_last_interaction_trackers[i].shell_id + + type_from_rpacket_tracker[i] = rpacket_trackers[i].interaction_type[ + interactions - 1 + ] + type_from_last_interaction_tracker[ + i + ] = rpacket_last_interaction_trackers[i].interaction_type + + npt.assert_array_equal( + index_from_rpacket_tracker, index_from_last_interaction_tracker + ) + npt.assert_allclose( + r_from_rpacket_tracker, r_from_last_interaction_tracker, rtol=1e-14 + ) + npt.assert_allclose( + nu_from_rpacket_tracker, nu_from_last_interaction_tracker, rtol=1e-14 + ) + npt.assert_allclose( + energy_from_rpacket_tracker, + energy_from_last_interaction_tracker, + rtol=1e-14, + ) + npt.assert_array_equal( + shell_id_from_rpacket_tracker, shell_id_from_last_interaction_tracker + ) + npt.assert_array_equal( + type_from_rpacket_tracker, type_from_last_interaction_tracker + ) From abe4f6d2dd941c72f74c41aaa4aad7b2ca980c0d Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Tue, 11 Jun 2024 18:31:00 +0530 Subject: [PATCH 07/37] Resolve some issues --- .../montecarlo/montecarlo_main_loop.py | 7 +------ .../transport/montecarlo/packet_trackers.py | 16 +++++++------- tardis/transport/montecarlo/tests/conftest.py | 4 +--- .../montecarlo/tests/test_trackers.py | 21 ++++++++----------- 4 files changed, 19 insertions(+), 29 deletions(-) diff --git a/tardis/transport/montecarlo/montecarlo_main_loop.py b/tardis/transport/montecarlo/montecarlo_main_loop.py index cac31d9bde3..a611d00549f 100644 --- a/tardis/transport/montecarlo/montecarlo_main_loop.py +++ b/tardis/transport/montecarlo/montecarlo_main_loop.py @@ -75,9 +75,6 @@ def montecarlo_main_loop( vpacket_collections = List() # Configuring the Tracking for R_Packets rpacket_trackers = List() - - # Creating an empty List where individual RPacketLastInteractionTracker - # class will be stored. rpacket_last_interaction_trackers = List() for i in range(no_of_packets): vpacket_collections.append( @@ -140,8 +137,6 @@ def montecarlo_main_loop( # RPacket Tracker for this thread rpacket_tracker = rpacket_trackers[i] - - # RPacketLastInteractionTracker for the current RPacket rpacket_last_interaction_tracker = rpacket_last_interaction_trackers[i] loop = single_packet_loop( @@ -158,7 +153,7 @@ def montecarlo_main_loop( last_interaction_tracker.update_last_interaction(r_packet, i) - rpacket_last_interaction_tracker.track_last_interaction(r_packet) + rpacket_last_interaction_tracker.track(r_packet) if r_packet.status == PacketStatus.REABSORBED: packet_collection.output_energies[i] = -r_packet.energy diff --git a/tardis/transport/montecarlo/packet_trackers.py b/tardis/transport/montecarlo/packet_trackers.py index 2866302bcbb..78993925eb3 100644 --- a/tardis/transport/montecarlo/packet_trackers.py +++ b/tardis/transport/montecarlo/packet_trackers.py @@ -189,14 +189,14 @@ class RPacketLastInteractionTracker(object): """ def __init__(self): - self.index = np.int64(-1) - self.r = np.float64(-1) - self.nu = np.float64(0) - self.energy = np.float64(0) - self.shell_id = np.int64(-1) - self.interaction_type = np.int64(-1) - - def track_last_interaction(self, r_packet): + self.index = -1 + self.r = -1.0 + self.nu = 0.0 + self.energy = 0.0 + self.shell_id = -1 + self.interaction_type = -1 + + def track(self, r_packet): self.index = r_packet.index self.r = r_packet.r self.nu = r_packet.nu diff --git a/tardis/transport/montecarlo/tests/conftest.py b/tardis/transport/montecarlo/tests/conftest.py index 6cb88cb3f5a..15327dfadc0 100644 --- a/tardis/transport/montecarlo/tests/conftest.py +++ b/tardis/transport/montecarlo/tests/conftest.py @@ -141,13 +141,11 @@ def random_call(): return njit(random_call) -@pytest.fixture(scope="package") +@pytest.fixture(scope="module") def simulation_rpacket_tracking_enabled(config_verysimple, atomic_dataset): config_verysimple.montecarlo.iterations = 3 config_verysimple.montecarlo.no_of_packets = 4000 config_verysimple.montecarlo.last_no_of_packets = -1 - config_verysimple.spectrum.virtual.virtual_packet_logging = True - config_verysimple.montecarlo.no_of_virtual_packets = 1 config_verysimple.montecarlo.tracking.track_rpacket = True config_verysimple.spectrum.num = 2000 atomic_data = deepcopy(atomic_dataset) diff --git a/tardis/transport/montecarlo/tests/test_trackers.py b/tardis/transport/montecarlo/tests/test_trackers.py index 055d692e490..9ee112616c0 100644 --- a/tardis/transport/montecarlo/tests/test_trackers.py +++ b/tardis/transport/montecarlo/tests/test_trackers.py @@ -1,5 +1,3 @@ -from copy import deepcopy - import pytest import numpy as np import numpy.testing as npt @@ -28,20 +26,20 @@ def last_interactions(simulation_rpacket_tracking_enabled): def test_defaults(): tracker = RPacketLastInteractionTracker() assert tracker.index == -1 - assert tracker.r == -1 - assert tracker.nu == 0 - assert tracker.energy == 0 assert tracker.shell_id == -1 assert tracker.interaction_type == -1 + npt.assert_almost_equal(tracker.r, -1.0) + npt.assert_almost_equal(tracker.nu, 0.0) + npt.assert_almost_equal(tracker.energy, 0.0) def test_tracking_manual(static_packet): tracker = RPacketLastInteractionTracker() - tracker.track_last_interaction(static_packet) + tracker.track(static_packet) assert tracker.index == 0 - assert tracker.r == 7.5e14 - assert tracker.nu == 0.4 - assert tracker.energy == 0.9 + npt.assert_almost_equal(tracker.r, 7.5e14) + npt.assert_almost_equal(tracker.nu, 0.4) + npt.assert_almost_equal(tracker.energy, 0.9) def test_tracking_from_last_interaction_simulation(last_interactions): @@ -126,15 +124,14 @@ def test_tracking_from_rpacket_tracker_simulation( index_from_rpacket_tracker, index_from_last_interaction_tracker ) npt.assert_allclose( - r_from_rpacket_tracker, r_from_last_interaction_tracker, rtol=1e-14 + r_from_rpacket_tracker, r_from_last_interaction_tracker ) npt.assert_allclose( - nu_from_rpacket_tracker, nu_from_last_interaction_tracker, rtol=1e-14 + nu_from_rpacket_tracker, nu_from_last_interaction_tracker ) npt.assert_allclose( energy_from_rpacket_tracker, energy_from_last_interaction_tracker, - rtol=1e-14, ) npt.assert_array_equal( shell_id_from_rpacket_tracker, shell_id_from_last_interaction_tracker From 8a48791af465ec09b145470c6b410b6fc8989f40 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Tue, 11 Jun 2024 18:37:27 +0530 Subject: [PATCH 08/37] Run Black --- tardis/transport/montecarlo/tests/test_trackers.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tardis/transport/montecarlo/tests/test_trackers.py b/tardis/transport/montecarlo/tests/test_trackers.py index 9ee112616c0..540ff0db3e2 100644 --- a/tardis/transport/montecarlo/tests/test_trackers.py +++ b/tardis/transport/montecarlo/tests/test_trackers.py @@ -123,9 +123,7 @@ def test_tracking_from_rpacket_tracker_simulation( npt.assert_array_equal( index_from_rpacket_tracker, index_from_last_interaction_tracker ) - npt.assert_allclose( - r_from_rpacket_tracker, r_from_last_interaction_tracker - ) + npt.assert_allclose(r_from_rpacket_tracker, r_from_last_interaction_tracker) npt.assert_allclose( nu_from_rpacket_tracker, nu_from_last_interaction_tracker ) From 1fa863f0a9e8e8a162be05f49c6867b121509acd Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Tue, 11 Jun 2024 19:09:35 +0530 Subject: [PATCH 09/37] Break the test to seperate out fixtures from the acutal test --- .../montecarlo/tests/test_trackers.py | 158 +++++++++++------- 1 file changed, 101 insertions(+), 57 deletions(-) diff --git a/tardis/transport/montecarlo/tests/test_trackers.py b/tardis/transport/montecarlo/tests/test_trackers.py index 540ff0db3e2..88b6710f078 100644 --- a/tardis/transport/montecarlo/tests/test_trackers.py +++ b/tardis/transport/montecarlo/tests/test_trackers.py @@ -8,7 +8,9 @@ @pytest.fixture() -def last_interactions(simulation_rpacket_tracking_enabled): +def last_interactions_from_both_implementations( + simulation_rpacket_tracking_enabled, +): sim = simulation_rpacket_tracking_enabled transport_state = sim.transport.transport_state checkedTypes = transport_state.last_interaction_type @@ -23,117 +25,159 @@ def last_interactions(simulation_rpacket_tracking_enabled): return (checkedTypes, toCheckTypes) -def test_defaults(): - tracker = RPacketLastInteractionTracker() - assert tracker.index == -1 - assert tracker.shell_id == -1 - assert tracker.interaction_type == -1 - npt.assert_almost_equal(tracker.r, -1.0) - npt.assert_almost_equal(tracker.nu, 0.0) - npt.assert_almost_equal(tracker.energy, 0.0) +@pytest.fixture() +def last_interaction_from_rpacket_trackers(simulation_rpacket_tracking_enabled): + sim = simulation_rpacket_tracking_enabled + rpacket_trackers = sim.transport.transport_state.rpacket_tracker -def test_tracking_manual(static_packet): - tracker = RPacketLastInteractionTracker() - tracker.track(static_packet) - assert tracker.index == 0 - npt.assert_almost_equal(tracker.r, 7.5e14) - npt.assert_almost_equal(tracker.nu, 0.4) - npt.assert_almost_equal(tracker.energy, 0.9) + # ToDo - use no_of_packets from config object. + no_of_packets = len(rpacket_trackers) + index_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.int64) -def test_tracking_from_last_interaction_simulation(last_interactions): - checkedTypes, toCheckTypes = last_interactions - npt.assert_array_equal(checkedTypes, toCheckTypes) + r_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.float64) + nu_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.float64) -def test_tracking_from_rpacket_tracker_simulation( + energy_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.float64) + + shell_id_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.int64) + + type_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.int64) + + for i in range(no_of_packets): + num_interactions = rpacket_trackers[i].num_interactions + + index_from_rpacket_tracker[i] = rpacket_trackers[i].index + + r_from_rpacket_tracker[i] = rpacket_trackers[i].r[num_interactions - 1] + + nu_from_rpacket_tracker[i] = rpacket_trackers[i].nu[ + num_interactions - 1 + ] + + energy_from_rpacket_tracker[i] = rpacket_trackers[i].energy[ + num_interactions - 1 + ] + + shell_id_from_rpacket_tracker[i] = rpacket_trackers[i].shell_id[ + num_interactions - 1 + ] + + type_from_rpacket_tracker[i] = rpacket_trackers[i].interaction_type[ + num_interactions - 1 + ] + return ( + index_from_rpacket_tracker, + r_from_rpacket_tracker, + energy_from_rpacket_tracker, + shell_id_from_rpacket_tracker, + type_from_rpacket_tracker, + ) + + +@pytest.fixture() +def last_interaction_from_rpacket_last_interaction_trackers( simulation_rpacket_tracking_enabled, ): + sim = simulation_rpacket_tracking_enabled - rpacket_trackers = sim.transport.transport_state.rpacket_tracker rpacket_last_interaction_trackers = ( sim.transport.transport_state.rpacket_last_interaction_trackers ) - no_of_packets = len(rpacket_trackers) + # ToDo - use no_of_packets from config object. + no_of_packets = len(rpacket_last_interaction_trackers) - index_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.int64) index_from_last_interaction_tracker = np.empty( no_of_packets, dtype=np.int64 ) - r_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.float64) r_from_last_interaction_tracker = np.empty(no_of_packets, dtype=np.float64) - nu_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.float64) nu_from_last_interaction_tracker = np.empty(no_of_packets, dtype=np.float64) - energy_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.float64) energy_from_last_interaction_tracker = np.empty( no_of_packets, dtype=np.float64 ) - shell_id_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.int64) shell_id_from_last_interaction_tracker = np.empty( no_of_packets, dtype=np.int64 ) - type_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.int64) type_from_last_interaction_tracker = np.empty(no_of_packets, dtype=np.int64) for i in range(no_of_packets): - interactions = rpacket_trackers[i].num_interactions - - index_from_rpacket_tracker[i] = rpacket_trackers[i].index index_from_last_interaction_tracker[ i ] = rpacket_last_interaction_trackers[i].index - r_from_rpacket_tracker[i] = rpacket_trackers[i].r[interactions - 1] r_from_last_interaction_tracker[i] = rpacket_last_interaction_trackers[ i ].r - nu_from_rpacket_tracker[i] = rpacket_trackers[i].nu[interactions - 1] nu_from_last_interaction_tracker[i] = rpacket_last_interaction_trackers[ i ].nu - energy_from_rpacket_tracker[i] = rpacket_trackers[i].energy[ - interactions - 1 - ] energy_from_last_interaction_tracker[ i ] = rpacket_last_interaction_trackers[i].energy - shell_id_from_rpacket_tracker[i] = rpacket_trackers[i].shell_id[ - interactions - 1 - ] shell_id_from_last_interaction_tracker[ i ] = rpacket_last_interaction_trackers[i].shell_id - type_from_rpacket_tracker[i] = rpacket_trackers[i].interaction_type[ - interactions - 1 - ] type_from_last_interaction_tracker[ i ] = rpacket_last_interaction_trackers[i].interaction_type - - npt.assert_array_equal( - index_from_rpacket_tracker, index_from_last_interaction_tracker - ) - npt.assert_allclose(r_from_rpacket_tracker, r_from_last_interaction_tracker) - npt.assert_allclose( - nu_from_rpacket_tracker, nu_from_last_interaction_tracker - ) - npt.assert_allclose( - energy_from_rpacket_tracker, + return ( + index_from_last_interaction_tracker, + r_from_last_interaction_tracker, energy_from_last_interaction_tracker, + shell_id_from_last_interaction_tracker, + type_from_last_interaction_tracker, ) - npt.assert_array_equal( - shell_id_from_rpacket_tracker, shell_id_from_last_interaction_tracker - ) - npt.assert_array_equal( - type_from_rpacket_tracker, type_from_last_interaction_tracker + + +def test_defaults(): + tracker = RPacketLastInteractionTracker() + assert tracker.index == -1 + assert tracker.shell_id == -1 + assert tracker.interaction_type == -1 + npt.assert_almost_equal(tracker.r, -1.0) + npt.assert_almost_equal(tracker.nu, 0.0) + npt.assert_almost_equal(tracker.energy, 0.0) + + +def test_tracking_manual(static_packet): + tracker = RPacketLastInteractionTracker() + tracker.track(static_packet) + assert tracker.index == 0 + npt.assert_almost_equal(tracker.r, 7.5e14) + npt.assert_almost_equal(tracker.nu, 0.4) + npt.assert_almost_equal(tracker.energy, 0.9) + + +def test_tracking_from_last_interaction_simulation( + last_interactions_from_both_implementations, +): + checkedTypes, toCheckTypes = last_interactions_from_both_implementations + npt.assert_array_equal(checkedTypes, toCheckTypes) + + +def test_tracking_from_rpacket_tracker_simulation( + last_interaction_from_rpacket_trackers, + last_interaction_from_rpacket_last_interaction_trackers, +): + # Both the arguments are tuples with the same type stored at the same index position + # index -> data stored + # 0 -> index of Rpacket + # 1 -> radius + # 2 -> energy + # 3 -> shell_id + # 4 -> type + npt.assert_allclose( + last_interaction_from_rpacket_trackers, + last_interaction_from_rpacket_last_interaction_trackers, ) From cf9e3eec8d57f01766c3ba541f0523a3db864578 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Fri, 14 Jun 2024 16:23:16 +0530 Subject: [PATCH 10/37] Change the way last interaction is updated --- tardis/transport/montecarlo/montecarlo_main_loop.py | 3 +-- tardis/transport/montecarlo/single_packet_loop.py | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tardis/transport/montecarlo/montecarlo_main_loop.py b/tardis/transport/montecarlo/montecarlo_main_loop.py index a611d00549f..c676b203856 100644 --- a/tardis/transport/montecarlo/montecarlo_main_loop.py +++ b/tardis/transport/montecarlo/montecarlo_main_loop.py @@ -147,14 +147,13 @@ def montecarlo_main_loop( local_estimators, vpacket_collection, rpacket_tracker, + rpacket_last_interaction_tracker, montecarlo_configuration, ) packet_collection.output_nus[i] = r_packet.nu last_interaction_tracker.update_last_interaction(r_packet, i) - rpacket_last_interaction_tracker.track(r_packet) - if r_packet.status == PacketStatus.REABSORBED: packet_collection.output_energies[i] = -r_packet.energy last_interaction_tracker.types[i] = r_packet.last_interaction_type diff --git a/tardis/transport/montecarlo/single_packet_loop.py b/tardis/transport/montecarlo/single_packet_loop.py index a19e14c077a..297705f5af8 100644 --- a/tardis/transport/montecarlo/single_packet_loop.py +++ b/tardis/transport/montecarlo/single_packet_loop.py @@ -40,6 +40,7 @@ def single_packet_loop( estimators, vpacket_collection, rpacket_tracker, + rpacket_last_interaction_tracker, montecarlo_configuration, ): """ @@ -85,6 +86,7 @@ def single_packet_loop( if montecarlo_configuration.ENABLE_RPACKET_TRACKING: rpacket_tracker.track(r_packet) + rpacket_last_interaction_tracker.track(r_packet) # this part of the code is temporary and will be better incorporated while r_packet.status == PacketStatus.IN_PROCESS: @@ -266,6 +268,7 @@ def single_packet_loop( pass if montecarlo_configuration.ENABLE_RPACKET_TRACKING: rpacket_tracker.track(r_packet) + rpacket_last_interaction_tracker.track(r_packet) @njit From 5311c9419290035de4a0237d31e9575135ff1b02 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Fri, 14 Jun 2024 18:17:23 +0530 Subject: [PATCH 11/37] Use either RPacketTracker or RPacketLastInteractionTracker --- tardis/transport/montecarlo/base.py | 5 +++++ tardis/transport/montecarlo/single_packet_loop.py | 2 ++ 2 files changed, 7 insertions(+) diff --git a/tardis/transport/montecarlo/base.py b/tardis/transport/montecarlo/base.py index faa0841612b..e0a810575fd 100644 --- a/tardis/transport/montecarlo/base.py +++ b/tardis/transport/montecarlo/base.py @@ -213,6 +213,11 @@ def run( # Condition for Checking if RPacket Tracking is enabled if self.montecarlo_configuration.ENABLE_RPACKET_TRACKING: transport_state.rpacket_tracker = rpacket_trackers + else: + self.transport_state.rpacket_last_interaction_trackers = ( + rpacket_last_interaction_trackers + ) + if self.transport_state.rpacket_tracker is not None: self.transport_state.rpacket_tracker_df = ( diff --git a/tardis/transport/montecarlo/single_packet_loop.py b/tardis/transport/montecarlo/single_packet_loop.py index 297705f5af8..82614759e0b 100644 --- a/tardis/transport/montecarlo/single_packet_loop.py +++ b/tardis/transport/montecarlo/single_packet_loop.py @@ -86,6 +86,7 @@ def single_packet_loop( if montecarlo_configuration.ENABLE_RPACKET_TRACKING: rpacket_tracker.track(r_packet) + else rpacket_last_interaction_tracker.track(r_packet) # this part of the code is temporary and will be better incorporated @@ -268,6 +269,7 @@ def single_packet_loop( pass if montecarlo_configuration.ENABLE_RPACKET_TRACKING: rpacket_tracker.track(r_packet) + else: rpacket_last_interaction_tracker.track(r_packet) From 48e70c941cd56ebf11ad22d71d4b702d47279ce3 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Fri, 14 Jun 2024 18:20:48 +0530 Subject: [PATCH 12/37] Store both trackers in same variable using if else --- tardis/transport/montecarlo/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tardis/transport/montecarlo/base.py b/tardis/transport/montecarlo/base.py index e0a810575fd..d520eed67e8 100644 --- a/tardis/transport/montecarlo/base.py +++ b/tardis/transport/montecarlo/base.py @@ -214,7 +214,7 @@ def run( if self.montecarlo_configuration.ENABLE_RPACKET_TRACKING: transport_state.rpacket_tracker = rpacket_trackers else: - self.transport_state.rpacket_last_interaction_trackers = ( + self.transport_state.rpacket_tracker = ( rpacket_last_interaction_trackers ) From 3d4412af739a4b6b346a8dba78fb6b2efc04c614 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Fri, 14 Jun 2024 18:48:51 +0530 Subject: [PATCH 13/37] Remove duplicate assignment --- tardis/transport/montecarlo/base.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tardis/transport/montecarlo/base.py b/tardis/transport/montecarlo/base.py index d520eed67e8..e735d635494 100644 --- a/tardis/transport/montecarlo/base.py +++ b/tardis/transport/montecarlo/base.py @@ -217,7 +217,6 @@ def run( self.transport_state.rpacket_tracker = ( rpacket_last_interaction_trackers ) - if self.transport_state.rpacket_tracker is not None: self.transport_state.rpacket_tracker_df = ( @@ -229,10 +228,6 @@ def run( self.montecarlo_configuration.ENABLE_VPACKET_TRACKING ) - self.transport_state.rpacket_last_interaction_trackers = ( - rpacket_last_interaction_trackers - ) - @classmethod def from_config( cls, config, packet_source, enable_virtual_packet_logging=False From 593ee05f6a8fe926ba6049c49784d74dbddb5b6a Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Fri, 14 Jun 2024 18:55:32 +0530 Subject: [PATCH 14/37] Fix a Typo --- tardis/transport/montecarlo/single_packet_loop.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tardis/transport/montecarlo/single_packet_loop.py b/tardis/transport/montecarlo/single_packet_loop.py index 82614759e0b..70a3f48e706 100644 --- a/tardis/transport/montecarlo/single_packet_loop.py +++ b/tardis/transport/montecarlo/single_packet_loop.py @@ -86,7 +86,7 @@ def single_packet_loop( if montecarlo_configuration.ENABLE_RPACKET_TRACKING: rpacket_tracker.track(r_packet) - else + else: rpacket_last_interaction_tracker.track(r_packet) # this part of the code is temporary and will be better incorporated From ff61a2e93915ad896c926838d3444d98c5eb2d54 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Sun, 16 Jun 2024 17:31:41 +0530 Subject: [PATCH 15/37] Add a flag for last interaction and update the tests --- tardis/transport/montecarlo/base.py | 12 +- .../montecarlo/montecarlo_configuration.py | 5 + .../montecarlo/single_packet_loop.py | 4 +- tardis/transport/montecarlo/tests/conftest.py | 18 ++ .../montecarlo/tests/test_trackers.py | 179 +++++------------- 5 files changed, 78 insertions(+), 140 deletions(-) diff --git a/tardis/transport/montecarlo/base.py b/tardis/transport/montecarlo/base.py index e735d635494..45d7e457b56 100644 --- a/tardis/transport/montecarlo/base.py +++ b/tardis/transport/montecarlo/base.py @@ -58,6 +58,7 @@ def __init__( packet_source, enable_virtual_packet_logging=False, enable_rpacket_tracking=False, + enable_last_interaction_tracking=False, nthreads=1, debug_packets=False, logger_buffer=1, @@ -77,6 +78,7 @@ def __init__( self.enable_vpacket_tracking = enable_virtual_packet_logging self.enable_rpacket_tracking = enable_rpacket_tracking + self.enable_last_interaction_tracking = enable_last_interaction_tracking self.montecarlo_configuration = montecarlo_configuration self.packet_source = packet_source @@ -211,14 +213,13 @@ def run( update_iterations_pbar(1) refresh_packet_pbar() # Condition for Checking if RPacket Tracking is enabled + # Preference is given to tracking of all trackers if self.montecarlo_configuration.ENABLE_RPACKET_TRACKING: transport_state.rpacket_tracker = rpacket_trackers - else: - self.transport_state.rpacket_tracker = ( - rpacket_last_interaction_trackers - ) + elif self.montecarlo_configuration.ENABLE_LAST_INTERACTION_TRACKING: + transport_state.rpacket_tracker = rpacket_last_interaction_trackers - if self.transport_state.rpacket_tracker is not None: + if self.montecarlo_configuration.ENABLE_RPACKET_TRACKING: self.transport_state.rpacket_tracker_df = ( rpacket_trackers_to_dataframe( self.transport_state.rpacket_tracker @@ -309,6 +310,7 @@ def from_config( | enable_virtual_packet_logging ), enable_rpacket_tracking=config.montecarlo.tracking.track_rpacket, + enable_last_interaction_tracking=config.montecarlo.tracking.track_last_interaction, nthreads=config.montecarlo.nthreads, use_gpu=use_gpu, montecarlo_configuration=montecarlo_configuration, diff --git a/tardis/transport/montecarlo/montecarlo_configuration.py b/tardis/transport/montecarlo/montecarlo_configuration.py index 27ad015fd8b..6f3880875f6 100644 --- a/tardis/transport/montecarlo/montecarlo_configuration.py +++ b/tardis/transport/montecarlo/montecarlo_configuration.py @@ -21,6 +21,7 @@ ("INITIAL_TRACKING_ARRAY_LENGTH", int64), ("LEGACY_MODE_ENABLED", boolean), ("ENABLE_RPACKET_TRACKING", boolean), + ("ENABLE_LAST_INTERACTION_TRACKING", boolean), ("CONTINUUM_PROCESSES_ENABLED", boolean), ("VPACKET_SPAWN_START_FREQUENCY", float64), ("VPACKET_SPAWN_END_FREQUENCY", float64), @@ -46,6 +47,7 @@ def __init__(self): self.LEGACY_MODE_ENABLED = False self.ENABLE_RPACKET_TRACKING = False + self.ENABLE_LAST_INTERACTION_TRACKING = False self.CONTINUUM_PROCESSES_ENABLED = False self.VPACKET_SPAWN_START_FREQUENCY = 0 @@ -82,3 +84,6 @@ def configuration_initialize(config, transport, number_of_vpackets): ) config.ENABLE_VPACKET_TRACKING = transport.enable_vpacket_tracking config.ENABLE_RPACKET_TRACKING = transport.enable_rpacket_tracking + config.ENABLE_LAST_INTERACTION_TRACKING = ( + transport.enable_last_interaction_tracking + ) diff --git a/tardis/transport/montecarlo/single_packet_loop.py b/tardis/transport/montecarlo/single_packet_loop.py index 70a3f48e706..d204c110307 100644 --- a/tardis/transport/montecarlo/single_packet_loop.py +++ b/tardis/transport/montecarlo/single_packet_loop.py @@ -86,7 +86,7 @@ def single_packet_loop( if montecarlo_configuration.ENABLE_RPACKET_TRACKING: rpacket_tracker.track(r_packet) - else: + elif montecarlo_configuration.ENABLE_LAST_INTERACTION_TRACKING: rpacket_last_interaction_tracker.track(r_packet) # this part of the code is temporary and will be better incorporated @@ -269,7 +269,7 @@ def single_packet_loop( pass if montecarlo_configuration.ENABLE_RPACKET_TRACKING: rpacket_tracker.track(r_packet) - else: + elif montecarlo_configuration.ENABLE_LAST_INTERACTION_TRACKING: rpacket_last_interaction_tracker.track(r_packet) diff --git a/tardis/transport/montecarlo/tests/conftest.py b/tardis/transport/montecarlo/tests/conftest.py index 15327dfadc0..e94964d90a6 100644 --- a/tardis/transport/montecarlo/tests/conftest.py +++ b/tardis/transport/montecarlo/tests/conftest.py @@ -155,3 +155,21 @@ def simulation_rpacket_tracking_enabled(config_verysimple, atomic_dataset): show_convergence_plots=False, ) return sim + + +@pytest.fixture(scope="module") +def simulation_last_interaction_tracking_enabled( + config_verysimple, atomic_dataset +): + config_verysimple.montecarlo.iterations = 3 + config_verysimple.montecarlo.no_of_packets = 4000 + config_verysimple.montecarlo.last_no_of_packets = -1 + config_verysimple.montecarlo.tracking.track_last_interaction = True + config_verysimple.spectrum.num = 2000 + atomic_data = deepcopy(atomic_dataset) + sim = run_tardis( + config_verysimple, + atom_data=atomic_data, + show_convergence_plots=False, + ) + return sim diff --git a/tardis/transport/montecarlo/tests/test_trackers.py b/tardis/transport/montecarlo/tests/test_trackers.py index 88b6710f078..63c9dba9eaa 100644 --- a/tardis/transport/montecarlo/tests/test_trackers.py +++ b/tardis/transport/montecarlo/tests/test_trackers.py @@ -8,136 +8,54 @@ @pytest.fixture() -def last_interactions_from_both_implementations( - simulation_rpacket_tracking_enabled, +def interaction_type_last_interaction_class1( + simulation_last_interaction_tracking_enabled, ): - sim = simulation_rpacket_tracking_enabled + sim = simulation_last_interaction_tracking_enabled transport_state = sim.transport.transport_state - checkedTypes = transport_state.last_interaction_type - toCheckTypes = np.empty( - len(transport_state.rpacket_last_interaction_trackers), dtype=np.int64 - ) - for i, rpacket_last_interaction_tracker in enumerate( - transport_state.rpacket_last_interaction_trackers - ): - toCheckTypes[i] = rpacket_last_interaction_tracker.interaction_type - - return (checkedTypes, toCheckTypes) - - -@pytest.fixture() -def last_interaction_from_rpacket_trackers(simulation_rpacket_tracking_enabled): - sim = simulation_rpacket_tracking_enabled - - rpacket_trackers = sim.transport.transport_state.rpacket_tracker - - # ToDo - use no_of_packets from config object. - no_of_packets = len(rpacket_trackers) - - index_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.int64) - - r_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.float64) - - nu_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.float64) - - energy_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.float64) - - shell_id_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.int64) - - type_from_rpacket_tracker = np.empty(no_of_packets, dtype=np.int64) - - for i in range(no_of_packets): - num_interactions = rpacket_trackers[i].num_interactions - - index_from_rpacket_tracker[i] = rpacket_trackers[i].index - - r_from_rpacket_tracker[i] = rpacket_trackers[i].r[num_interactions - 1] - - nu_from_rpacket_tracker[i] = rpacket_trackers[i].nu[ - num_interactions - 1 - ] - - energy_from_rpacket_tracker[i] = rpacket_trackers[i].energy[ - num_interactions - 1 - ] - - shell_id_from_rpacket_tracker[i] = rpacket_trackers[i].shell_id[ - num_interactions - 1 - ] - - type_from_rpacket_tracker[i] = rpacket_trackers[i].interaction_type[ - num_interactions - 1 - ] - return ( - index_from_rpacket_tracker, - r_from_rpacket_tracker, - energy_from_rpacket_tracker, - shell_id_from_rpacket_tracker, - type_from_rpacket_tracker, - ) + interaction_type = transport_state.last_interaction_type + return interaction_type @pytest.fixture() -def last_interaction_from_rpacket_last_interaction_trackers( - simulation_rpacket_tracking_enabled, +def interaction_type_last_interaction_class2( + simulation_last_interaction_tracking_enabled, ): - - sim = simulation_rpacket_tracking_enabled - rpacket_last_interaction_trackers = ( - sim.transport.transport_state.rpacket_last_interaction_trackers + sim = simulation_last_interaction_tracking_enabled + transport_state = sim.transport.transport_state + interaction_type = np.empty( + len(transport_state.rpacket_tracker), dtype=np.int64 ) - # ToDo - use no_of_packets from config object. - no_of_packets = len(rpacket_last_interaction_trackers) + for i, last_interaction_tracker in enumerate( + transport_state.rpacket_tracker + ): + interaction_type[i] = last_interaction_tracker.interaction_type - index_from_last_interaction_tracker = np.empty( - no_of_packets, dtype=np.int64 - ) + return interaction_type - r_from_last_interaction_tracker = np.empty(no_of_packets, dtype=np.float64) - nu_from_last_interaction_tracker = np.empty(no_of_packets, dtype=np.float64) +@pytest.fixture() +def nu_from_packet_collection( + simulation_last_interaction_tracking_enabled, +): + sim = simulation_last_interaction_tracking_enabled + packet_collection = sim.transport.transport_state.packet_collection + return packet_collection.output_nus - energy_from_last_interaction_tracker = np.empty( - no_of_packets, dtype=np.float64 - ) - shell_id_from_last_interaction_tracker = np.empty( - no_of_packets, dtype=np.int64 - ) +@pytest.fixture() +def nu_from_last_interaction_class( + simulation_last_interaction_tracking_enabled, +): + sim = simulation_last_interaction_tracking_enabled + transport_state = sim.transport.transport_state + nu = np.empty(len(transport_state.rpacket_tracker), dtype=np.float64) + for i, last_interaction_tracker in enumerate( + transport_state.rpacket_tracker + ): + nu[i] = last_interaction_tracker.nu - type_from_last_interaction_tracker = np.empty(no_of_packets, dtype=np.int64) - - for i in range(no_of_packets): - index_from_last_interaction_tracker[ - i - ] = rpacket_last_interaction_trackers[i].index - - r_from_last_interaction_tracker[i] = rpacket_last_interaction_trackers[ - i - ].r - - nu_from_last_interaction_tracker[i] = rpacket_last_interaction_trackers[ - i - ].nu - - energy_from_last_interaction_tracker[ - i - ] = rpacket_last_interaction_trackers[i].energy - - shell_id_from_last_interaction_tracker[ - i - ] = rpacket_last_interaction_trackers[i].shell_id - - type_from_last_interaction_tracker[ - i - ] = rpacket_last_interaction_trackers[i].interaction_type - return ( - index_from_last_interaction_tracker, - r_from_last_interaction_tracker, - energy_from_last_interaction_tracker, - shell_id_from_last_interaction_tracker, - type_from_last_interaction_tracker, - ) + return nu def test_defaults(): @@ -159,25 +77,20 @@ def test_tracking_manual(static_packet): npt.assert_almost_equal(tracker.energy, 0.9) -def test_tracking_from_last_interaction_simulation( - last_interactions_from_both_implementations, +def test_last_interaction_type( + interaction_type_last_interaction_class1, + interaction_type_last_interaction_class2, ): - checkedTypes, toCheckTypes = last_interactions_from_both_implementations - npt.assert_array_equal(checkedTypes, toCheckTypes) + npt.assert_array_equal( + interaction_type_last_interaction_class1, + interaction_type_last_interaction_class2, + ) -def test_tracking_from_rpacket_tracker_simulation( - last_interaction_from_rpacket_trackers, - last_interaction_from_rpacket_last_interaction_trackers, +def test_last_interaction_nu( + nu_from_packet_collection, + nu_from_last_interaction_class, ): - # Both the arguments are tuples with the same type stored at the same index position - # index -> data stored - # 0 -> index of Rpacket - # 1 -> radius - # 2 -> energy - # 3 -> shell_id - # 4 -> type npt.assert_allclose( - last_interaction_from_rpacket_trackers, - last_interaction_from_rpacket_last_interaction_trackers, + nu_from_packet_collection, nu_from_last_interaction_class ) From 2632443ba9da18648ce103ffc1fe86c502b14315 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Sun, 16 Jun 2024 18:01:56 +0530 Subject: [PATCH 16/37] Update schemas to include Last Interaction Flag --- tardis/io/configuration/schemas/montecarlo.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tardis/io/configuration/schemas/montecarlo.yml b/tardis/io/configuration/schemas/montecarlo.yml index 1baa9f37dac..64904d35f7c 100644 --- a/tardis/io/configuration/schemas/montecarlo.yml +++ b/tardis/io/configuration/schemas/montecarlo.yml @@ -68,6 +68,10 @@ properties: type: boolean default: false description: Allows for Tracking the properties of the RPackets in Single Packet Loop + track_last_interaction: + type: boolean + default: false + description: Allows for Tracking the properties of RPacket Last Interaction. initial_array_length: type: number default: 10 From f288f234dbe9192723f119e2cd25df4676e26ca6 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Sun, 16 Jun 2024 22:10:29 +0530 Subject: [PATCH 17/37] Explicitly set track_rpacket to False --- tardis/transport/montecarlo/tests/conftest.py | 19 +++---------------- .../montecarlo/tests/test_r_packet.py | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/tardis/transport/montecarlo/tests/conftest.py b/tardis/transport/montecarlo/tests/conftest.py index e94964d90a6..3f111d5aa26 100644 --- a/tardis/transport/montecarlo/tests/conftest.py +++ b/tardis/transport/montecarlo/tests/conftest.py @@ -141,22 +141,6 @@ def random_call(): return njit(random_call) -@pytest.fixture(scope="module") -def simulation_rpacket_tracking_enabled(config_verysimple, atomic_dataset): - config_verysimple.montecarlo.iterations = 3 - config_verysimple.montecarlo.no_of_packets = 4000 - config_verysimple.montecarlo.last_no_of_packets = -1 - config_verysimple.montecarlo.tracking.track_rpacket = True - config_verysimple.spectrum.num = 2000 - atomic_data = deepcopy(atomic_dataset) - sim = run_tardis( - config_verysimple, - atom_data=atomic_data, - show_convergence_plots=False, - ) - return sim - - @pytest.fixture(scope="module") def simulation_last_interaction_tracking_enabled( config_verysimple, atomic_dataset @@ -164,6 +148,9 @@ def simulation_last_interaction_tracking_enabled( config_verysimple.montecarlo.iterations = 3 config_verysimple.montecarlo.no_of_packets = 4000 config_verysimple.montecarlo.last_no_of_packets = -1 + # Explicitly setting track_rpacket to False, since is's set by + # True in some previous fixtures + config_verysimple.montecarlo.tracking.track_rpacket = False config_verysimple.montecarlo.tracking.track_last_interaction = True config_verysimple.spectrum.num = 2000 atomic_data = deepcopy(atomic_dataset) diff --git a/tardis/transport/montecarlo/tests/test_r_packet.py b/tardis/transport/montecarlo/tests/test_r_packet.py index f8edafe4bdc..b2a0a47fa3b 100644 --- a/tardis/transport/montecarlo/tests/test_r_packet.py +++ b/tardis/transport/montecarlo/tests/test_r_packet.py @@ -10,6 +10,22 @@ ) +@pytest.fixture() +def simulation_rpacket_tracking_enabled(config_verysimple, atomic_dataset): + config_verysimple.montecarlo.iterations = 3 + config_verysimple.montecarlo.no_of_packets = 4000 + config_verysimple.montecarlo.last_no_of_packets = -1 + config_verysimple.montecarlo.tracking.track_rpacket = True + config_verysimple.spectrum.num = 2000 + atomic_data = deepcopy(atomic_dataset) + sim = run_tardis( + config_verysimple, + atom_data=atomic_data, + show_convergence_plots=False, + ) + return sim + + def test_rpacket_trackers_to_dataframe(simulation_rpacket_tracking_enabled): sim = simulation_rpacket_tracking_enabled transport_state = sim.transport.transport_state From e829d0d317af5fc4fcf4b13c97ebfd8eeb73ec0a Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Mon, 17 Jun 2024 10:45:41 +0530 Subject: [PATCH 18/37] Fix a small typo --- tardis/transport/montecarlo/packet_trackers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tardis/transport/montecarlo/packet_trackers.py b/tardis/transport/montecarlo/packet_trackers.py index 78993925eb3..f7ff0a50cd5 100644 --- a/tardis/transport/montecarlo/packet_trackers.py +++ b/tardis/transport/montecarlo/packet_trackers.py @@ -35,7 +35,7 @@ class RPacketTracker(object): r : float Radius of the shell where the RPacket is present nu : float - Luminosity of the RPacket + Frequency of the RPacket mu : float Cosine of the angle made by the direction of movement of the RPacket from its original direction energy : float From 93a1c1b76bb93464f9d307a440e5a8ab6022a950 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Mon, 17 Jun 2024 21:24:05 +0530 Subject: [PATCH 19/37] Not modifying config fixture since other tests might use it --- tardis/transport/montecarlo/base.py | 7 ++--- tardis/transport/montecarlo/tests/conftest.py | 21 -------------- .../montecarlo/tests/test_r_packet.py | 22 ++++++++++----- .../montecarlo/tests/test_trackers.py | 28 +++++++++++++++++++ 4 files changed, 46 insertions(+), 32 deletions(-) diff --git a/tardis/transport/montecarlo/base.py b/tardis/transport/montecarlo/base.py index 45d7e457b56..3488304103c 100644 --- a/tardis/transport/montecarlo/base.py +++ b/tardis/transport/montecarlo/base.py @@ -216,15 +216,14 @@ def run( # Preference is given to tracking of all trackers if self.montecarlo_configuration.ENABLE_RPACKET_TRACKING: transport_state.rpacket_tracker = rpacket_trackers - elif self.montecarlo_configuration.ENABLE_LAST_INTERACTION_TRACKING: - transport_state.rpacket_tracker = rpacket_last_interaction_trackers - - if self.montecarlo_configuration.ENABLE_RPACKET_TRACKING: self.transport_state.rpacket_tracker_df = ( rpacket_trackers_to_dataframe( self.transport_state.rpacket_tracker ) ) + elif self.montecarlo_configuration.ENABLE_LAST_INTERACTION_TRACKING: + transport_state.rpacket_tracker = rpacket_last_interaction_trackers + transport_state.virt_logging = ( self.montecarlo_configuration.ENABLE_VPACKET_TRACKING ) diff --git a/tardis/transport/montecarlo/tests/conftest.py b/tardis/transport/montecarlo/tests/conftest.py index 3f111d5aa26..828869e727f 100644 --- a/tardis/transport/montecarlo/tests/conftest.py +++ b/tardis/transport/montecarlo/tests/conftest.py @@ -139,24 +139,3 @@ def random_call(): np.random.random() return njit(random_call) - - -@pytest.fixture(scope="module") -def simulation_last_interaction_tracking_enabled( - config_verysimple, atomic_dataset -): - config_verysimple.montecarlo.iterations = 3 - config_verysimple.montecarlo.no_of_packets = 4000 - config_verysimple.montecarlo.last_no_of_packets = -1 - # Explicitly setting track_rpacket to False, since is's set by - # True in some previous fixtures - config_verysimple.montecarlo.tracking.track_rpacket = False - config_verysimple.montecarlo.tracking.track_last_interaction = True - config_verysimple.spectrum.num = 2000 - atomic_data = deepcopy(atomic_dataset) - sim = run_tardis( - config_verysimple, - atom_data=atomic_data, - show_convergence_plots=False, - ) - return sim diff --git a/tardis/transport/montecarlo/tests/test_r_packet.py b/tardis/transport/montecarlo/tests/test_r_packet.py index b2a0a47fa3b..4ef840b5f5d 100644 --- a/tardis/transport/montecarlo/tests/test_r_packet.py +++ b/tardis/transport/montecarlo/tests/test_r_packet.py @@ -4,6 +4,7 @@ import numpy.testing as npt import pytest +from tardis.io.configuration.config_reader import Configuration from tardis.base import run_tardis from tardis.transport.montecarlo.packet_trackers import ( rpacket_trackers_to_dataframe, @@ -11,15 +12,22 @@ @pytest.fixture() -def simulation_rpacket_tracking_enabled(config_verysimple, atomic_dataset): - config_verysimple.montecarlo.iterations = 3 - config_verysimple.montecarlo.no_of_packets = 4000 - config_verysimple.montecarlo.last_no_of_packets = -1 - config_verysimple.montecarlo.tracking.track_rpacket = True - config_verysimple.spectrum.num = 2000 +def config_rpacket_tracker(example_configuration_dir): + return Configuration.from_yaml( + example_configuration_dir / "tardis_configv1_verysimple.yml" + ) + + +@pytest.fixture() +def simulation_rpacket_tracking_enabled(config_rpacket_tracker, atomic_dataset): + config_rpacket_tracker.montecarlo.iterations = 3 + config_rpacket_tracker.montecarlo.no_of_packets = 4000 + config_rpacket_tracker.montecarlo.last_no_of_packets = -1 + config_rpacket_tracker.montecarlo.tracking.track_rpacket = True + config_rpacket_tracker.spectrum.num = 2000 atomic_data = deepcopy(atomic_dataset) sim = run_tardis( - config_verysimple, + config_rpacket_tracker, atom_data=atomic_data, show_convergence_plots=False, ) diff --git a/tardis/transport/montecarlo/tests/test_trackers.py b/tardis/transport/montecarlo/tests/test_trackers.py index 63c9dba9eaa..87fd8c7dccb 100644 --- a/tardis/transport/montecarlo/tests/test_trackers.py +++ b/tardis/transport/montecarlo/tests/test_trackers.py @@ -1,12 +1,40 @@ +from copy import deepcopy + import pytest import numpy as np import numpy.testing as npt +from tardis.io.configuration.config_reader import Configuration +from tardis.base import run_tardis from tardis.transport.montecarlo.packet_trackers import ( RPacketLastInteractionTracker, ) +@pytest.fixture(scope="module") +def config_last_interaction(example_configuration_dir): + return Configuration.from_yaml( + example_configuration_dir / "tardis_configv1_verysimple.yml" + ) + + +@pytest.fixture(scope="module") +def simulation_last_interaction_tracking_enabled( + config_last_interaction, atomic_dataset +): + config_last_interaction.montecarlo.iterations = 3 + config_last_interaction.montecarlo.no_of_packets = 4000 + config_last_interaction.montecarlo.last_no_of_packets = -1 + config_last_interaction.montecarlo.tracking.track_last_interaction = True + atomic_data = deepcopy(atomic_dataset) + sim = run_tardis( + config_last_interaction, + atom_data=atomic_data, + show_convergence_plots=False, + ) + return sim + + @pytest.fixture() def interaction_type_last_interaction_class1( simulation_last_interaction_tracking_enabled, From 1fb5819c37e02e709484ba39e9f8f1cef4a92b1f Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Wed, 19 Jun 2024 10:46:17 +0530 Subject: [PATCH 20/37] Remove config flag for RPacketLastInteractionTracker --- .../io/configuration/schemas/montecarlo.yml | 4 -- tardis/transport/montecarlo/base.py | 5 +-- .../montecarlo/montecarlo_configuration.py | 5 --- .../montecarlo/single_packet_loop.py | 4 +- .../montecarlo/tests/test_r_packet.py | 2 + .../montecarlo/tests/test_trackers.py | 44 +++++-------------- 6 files changed, 17 insertions(+), 47 deletions(-) diff --git a/tardis/io/configuration/schemas/montecarlo.yml b/tardis/io/configuration/schemas/montecarlo.yml index 64904d35f7c..1baa9f37dac 100644 --- a/tardis/io/configuration/schemas/montecarlo.yml +++ b/tardis/io/configuration/schemas/montecarlo.yml @@ -68,10 +68,6 @@ properties: type: boolean default: false description: Allows for Tracking the properties of the RPackets in Single Packet Loop - track_last_interaction: - type: boolean - default: false - description: Allows for Tracking the properties of RPacket Last Interaction. initial_array_length: type: number default: 10 diff --git a/tardis/transport/montecarlo/base.py b/tardis/transport/montecarlo/base.py index 3488304103c..61f3c052795 100644 --- a/tardis/transport/montecarlo/base.py +++ b/tardis/transport/montecarlo/base.py @@ -58,7 +58,6 @@ def __init__( packet_source, enable_virtual_packet_logging=False, enable_rpacket_tracking=False, - enable_last_interaction_tracking=False, nthreads=1, debug_packets=False, logger_buffer=1, @@ -78,7 +77,6 @@ def __init__( self.enable_vpacket_tracking = enable_virtual_packet_logging self.enable_rpacket_tracking = enable_rpacket_tracking - self.enable_last_interaction_tracking = enable_last_interaction_tracking self.montecarlo_configuration = montecarlo_configuration self.packet_source = packet_source @@ -221,7 +219,7 @@ def run( self.transport_state.rpacket_tracker ) ) - elif self.montecarlo_configuration.ENABLE_LAST_INTERACTION_TRACKING: + else: transport_state.rpacket_tracker = rpacket_last_interaction_trackers transport_state.virt_logging = ( @@ -309,7 +307,6 @@ def from_config( | enable_virtual_packet_logging ), enable_rpacket_tracking=config.montecarlo.tracking.track_rpacket, - enable_last_interaction_tracking=config.montecarlo.tracking.track_last_interaction, nthreads=config.montecarlo.nthreads, use_gpu=use_gpu, montecarlo_configuration=montecarlo_configuration, diff --git a/tardis/transport/montecarlo/montecarlo_configuration.py b/tardis/transport/montecarlo/montecarlo_configuration.py index 6f3880875f6..27ad015fd8b 100644 --- a/tardis/transport/montecarlo/montecarlo_configuration.py +++ b/tardis/transport/montecarlo/montecarlo_configuration.py @@ -21,7 +21,6 @@ ("INITIAL_TRACKING_ARRAY_LENGTH", int64), ("LEGACY_MODE_ENABLED", boolean), ("ENABLE_RPACKET_TRACKING", boolean), - ("ENABLE_LAST_INTERACTION_TRACKING", boolean), ("CONTINUUM_PROCESSES_ENABLED", boolean), ("VPACKET_SPAWN_START_FREQUENCY", float64), ("VPACKET_SPAWN_END_FREQUENCY", float64), @@ -47,7 +46,6 @@ def __init__(self): self.LEGACY_MODE_ENABLED = False self.ENABLE_RPACKET_TRACKING = False - self.ENABLE_LAST_INTERACTION_TRACKING = False self.CONTINUUM_PROCESSES_ENABLED = False self.VPACKET_SPAWN_START_FREQUENCY = 0 @@ -84,6 +82,3 @@ def configuration_initialize(config, transport, number_of_vpackets): ) config.ENABLE_VPACKET_TRACKING = transport.enable_vpacket_tracking config.ENABLE_RPACKET_TRACKING = transport.enable_rpacket_tracking - config.ENABLE_LAST_INTERACTION_TRACKING = ( - transport.enable_last_interaction_tracking - ) diff --git a/tardis/transport/montecarlo/single_packet_loop.py b/tardis/transport/montecarlo/single_packet_loop.py index d204c110307..70a3f48e706 100644 --- a/tardis/transport/montecarlo/single_packet_loop.py +++ b/tardis/transport/montecarlo/single_packet_loop.py @@ -86,7 +86,7 @@ def single_packet_loop( if montecarlo_configuration.ENABLE_RPACKET_TRACKING: rpacket_tracker.track(r_packet) - elif montecarlo_configuration.ENABLE_LAST_INTERACTION_TRACKING: + else: rpacket_last_interaction_tracker.track(r_packet) # this part of the code is temporary and will be better incorporated @@ -269,7 +269,7 @@ def single_packet_loop( pass if montecarlo_configuration.ENABLE_RPACKET_TRACKING: rpacket_tracker.track(r_packet) - elif montecarlo_configuration.ENABLE_LAST_INTERACTION_TRACKING: + else: rpacket_last_interaction_tracker.track(r_packet) diff --git a/tardis/transport/montecarlo/tests/test_r_packet.py b/tardis/transport/montecarlo/tests/test_r_packet.py index 4ef840b5f5d..61e801b74d0 100644 --- a/tardis/transport/montecarlo/tests/test_r_packet.py +++ b/tardis/transport/montecarlo/tests/test_r_packet.py @@ -13,6 +13,7 @@ @pytest.fixture() def config_rpacket_tracker(example_configuration_dir): + """Config object for rpacket tracker""" return Configuration.from_yaml( example_configuration_dir / "tardis_configv1_verysimple.yml" ) @@ -20,6 +21,7 @@ def config_rpacket_tracker(example_configuration_dir): @pytest.fixture() def simulation_rpacket_tracking_enabled(config_rpacket_tracker, atomic_dataset): + """Simulation object with track_rpacket enabled""" config_rpacket_tracker.montecarlo.iterations = 3 config_rpacket_tracker.montecarlo.no_of_packets = 4000 config_rpacket_tracker.montecarlo.last_no_of_packets = -1 diff --git a/tardis/transport/montecarlo/tests/test_trackers.py b/tardis/transport/montecarlo/tests/test_trackers.py index 87fd8c7dccb..343fa867653 100644 --- a/tardis/transport/montecarlo/tests/test_trackers.py +++ b/tardis/transport/montecarlo/tests/test_trackers.py @@ -11,35 +11,12 @@ ) -@pytest.fixture(scope="module") -def config_last_interaction(example_configuration_dir): - return Configuration.from_yaml( - example_configuration_dir / "tardis_configv1_verysimple.yml" - ) - - -@pytest.fixture(scope="module") -def simulation_last_interaction_tracking_enabled( - config_last_interaction, atomic_dataset -): - config_last_interaction.montecarlo.iterations = 3 - config_last_interaction.montecarlo.no_of_packets = 4000 - config_last_interaction.montecarlo.last_no_of_packets = -1 - config_last_interaction.montecarlo.tracking.track_last_interaction = True - atomic_data = deepcopy(atomic_dataset) - sim = run_tardis( - config_last_interaction, - atom_data=atomic_data, - show_convergence_plots=False, - ) - return sim - - @pytest.fixture() def interaction_type_last_interaction_class1( - simulation_last_interaction_tracking_enabled, + nb_simulation_verysimple, ): - sim = simulation_last_interaction_tracking_enabled + """Last interaction types of rpacket from LastInteractionTracker""" + sim = nb_simulation_verysimple transport_state = sim.transport.transport_state interaction_type = transport_state.last_interaction_type return interaction_type @@ -47,9 +24,10 @@ def interaction_type_last_interaction_class1( @pytest.fixture() def interaction_type_last_interaction_class2( - simulation_last_interaction_tracking_enabled, + nb_simulation_verysimple, ): - sim = simulation_last_interaction_tracking_enabled + """Last interaction types of rpacket from RPacketLastInteractionTracker""" + sim = nb_simulation_verysimple transport_state = sim.transport.transport_state interaction_type = np.empty( len(transport_state.rpacket_tracker), dtype=np.int64 @@ -64,18 +42,20 @@ def interaction_type_last_interaction_class2( @pytest.fixture() def nu_from_packet_collection( - simulation_last_interaction_tracking_enabled, + nb_simulation_verysimple, ): - sim = simulation_last_interaction_tracking_enabled + """Last interaction output nus of rpacket from packet_collection""" + sim = nb_simulation_verysimple packet_collection = sim.transport.transport_state.packet_collection return packet_collection.output_nus @pytest.fixture() def nu_from_last_interaction_class( - simulation_last_interaction_tracking_enabled, + nb_simulation_verysimple, ): - sim = simulation_last_interaction_tracking_enabled + """Last interaction output nus of rpacket from RPacketLastInteractionTracker""" + sim = nb_simulation_verysimple transport_state = sim.transport.transport_state nu = np.empty(len(transport_state.rpacket_tracker), dtype=np.float64) for i, last_interaction_tracker in enumerate( From b4ebac58b00149a7a15c033e044ade5bc0e3ff2f Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Wed, 19 Jun 2024 10:49:49 +0530 Subject: [PATCH 21/37] Remove unnecessary imports --- tardis/transport/montecarlo/tests/test_trackers.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tardis/transport/montecarlo/tests/test_trackers.py b/tardis/transport/montecarlo/tests/test_trackers.py index 343fa867653..7e6c69e5522 100644 --- a/tardis/transport/montecarlo/tests/test_trackers.py +++ b/tardis/transport/montecarlo/tests/test_trackers.py @@ -1,11 +1,7 @@ -from copy import deepcopy - import pytest import numpy as np import numpy.testing as npt -from tardis.io.configuration.config_reader import Configuration -from tardis.base import run_tardis from tardis.transport.montecarlo.packet_trackers import ( RPacketLastInteractionTracker, ) From e6c6e2d46a5229c191fdd07aeb7e5a4de43c6f84 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Wed, 19 Jun 2024 10:51:33 +0530 Subject: [PATCH 22/37] Remove unnecessary imports --- tardis/transport/montecarlo/tests/conftest.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tardis/transport/montecarlo/tests/conftest.py b/tardis/transport/montecarlo/tests/conftest.py index 828869e727f..21e19c24134 100644 --- a/tardis/transport/montecarlo/tests/conftest.py +++ b/tardis/transport/montecarlo/tests/conftest.py @@ -7,7 +7,6 @@ VPacketCollection, ) -from tardis.base import run_tardis from tardis.simulation import Simulation from tardis.transport.montecarlo import RPacket from tardis.transport.montecarlo.estimators.radfield_mc_estimators import ( From be1a349fc0bf405eb5646622a2684704dee96eb7 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Wed, 19 Jun 2024 14:54:04 +0530 Subject: [PATCH 23/37] Add line interaction attributes to Tracker Classes --- .../transport/montecarlo/packet_trackers.py | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tardis/transport/montecarlo/packet_trackers.py b/tardis/transport/montecarlo/packet_trackers.py index f7ff0a50cd5..c46375a449d 100644 --- a/tardis/transport/montecarlo/packet_trackers.py +++ b/tardis/transport/montecarlo/packet_trackers.py @@ -14,6 +14,9 @@ ("energy", float64[:]), ("shell_id", int64[:]), ("interaction_type", int64[:]), + ("line_interaction_in_id", int64[:]), + ("line_interaction_out_id", int64[:]), + ("line_interaction_in_nu", float64[:]), ("num_interactions", int64), ] @@ -44,6 +47,12 @@ class RPacketTracker(object): Current Shell No in which the RPacket is present interaction_type: int Type of interaction the rpacket undergoes + line_interaction_in_id : int + Id of the absorption line + line_interaction_out_id : int + Id of the transmission line + line_interaction_in_nu : float + frequency corresponding to the absroption line num_interactions : int Internal counter for the interactions that a particular RPacket undergoes """ @@ -59,6 +68,9 @@ def __init__(self, length): self.energy = np.empty(self.length, dtype=np.float64) self.shell_id = np.empty(self.length, dtype=np.int64) self.interaction_type = np.empty(self.length, dtype=np.int64) + self.line_interaction_in_id = np.empty(self.length, dtype=np.int64) + self.line_interaction_out_id = np.empty(self.length, dtype=np.int64) + self.line_interaction_in_nu = np.empty(self.length, dtype=np.float64) self.num_interactions = 0 def track(self, r_packet): @@ -165,6 +177,9 @@ def rpacket_trackers_to_dataframe(rpacket_trackers): ("energy", float64), ("shell_id", int64), ("interaction_type", int64), + ("line_interaction_in_id", int64), + ("line_interaction_out_id", int64), + ("line_interaction_in_nu", float64), ] @@ -186,6 +201,12 @@ class RPacketLastInteractionTracker(object): Current Shell No in which the last interaction happened interaction_type: int Type of interaction the rpacket undergoes + line_interaction_in_id : int + Id of the absorption line + line_interaction_out_id : int + Id of the transmission line + line_interaction_in_nu : float + frequency corresponding to the absroption line """ def __init__(self): @@ -195,6 +216,9 @@ def __init__(self): self.energy = 0.0 self.shell_id = -1 self.interaction_type = -1 + self.line_interaction_in_id = -1 + self.line_interaction_out_id = -1 + self.line_interaction_in_nu = 0.0 def track(self, r_packet): self.index = r_packet.index From 301b1b07e458332b5f1a410f716404bf9f1dd0f9 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Thu, 20 Jun 2024 12:01:31 +0530 Subject: [PATCH 24/37] Update Line interaction attributes using the rpacket --- .../transport/montecarlo/packet_trackers.py | 87 ++++++++++++++----- 1 file changed, 67 insertions(+), 20 deletions(-) diff --git a/tardis/transport/montecarlo/packet_trackers.py b/tardis/transport/montecarlo/packet_trackers.py index c46375a449d..d4854b6c79e 100644 --- a/tardis/transport/montecarlo/packet_trackers.py +++ b/tardis/transport/montecarlo/packet_trackers.py @@ -14,9 +14,9 @@ ("energy", float64[:]), ("shell_id", int64[:]), ("interaction_type", int64[:]), - ("line_interaction_in_id", int64[:]), - ("line_interaction_out_id", int64[:]), - ("line_interaction_in_nu", float64[:]), + ("interaction_in_line_nu", float64[:]), + ("interaction_in_line_id", int64[:]), + ("interaction_out_line_id", int64[:]), ("num_interactions", int64), ] @@ -47,12 +47,12 @@ class RPacketTracker(object): Current Shell No in which the RPacket is present interaction_type: int Type of interaction the rpacket undergoes - line_interaction_in_id : int + interaction_in_line_nu : float + frequency corresponding to the absroption line + interaction_in_line_id : int Id of the absorption line - line_interaction_out_id : int + interaction_out_line_id : int Id of the transmission line - line_interaction_in_nu : float - frequency corresponding to the absroption line num_interactions : int Internal counter for the interactions that a particular RPacket undergoes """ @@ -68,9 +68,9 @@ def __init__(self, length): self.energy = np.empty(self.length, dtype=np.float64) self.shell_id = np.empty(self.length, dtype=np.int64) self.interaction_type = np.empty(self.length, dtype=np.int64) - self.line_interaction_in_id = np.empty(self.length, dtype=np.int64) - self.line_interaction_out_id = np.empty(self.length, dtype=np.int64) - self.line_interaction_in_nu = np.empty(self.length, dtype=np.float64) + self.interaction_in_line_nu = np.empty(self.length, dtype=np.float64) + self.interaction_in_line_id = np.empty(self.length, dtype=np.int64) + self.interaction_out_line_id = np.empty(self.length, dtype=np.int64) self.num_interactions = 0 def track(self, r_packet): @@ -83,6 +83,9 @@ def track(self, r_packet): temp_energy = np.empty(temp_length, dtype=np.float64) temp_shell_id = np.empty(temp_length, dtype=np.int64) temp_interaction_type = np.empty(temp_length, dtype=np.int64) + temp_interaction_in_line_nu = np.empty(temp_length, dtype=np.int64) + temp_interaction_in_line_id = np.empty(temp_length, dtype=np.int64) + temp_interaction_out_line_id = np.empty(temp_length, dtype=np.int64) temp_status[: self.length] = self.status temp_r[: self.length] = self.r @@ -91,6 +94,15 @@ def track(self, r_packet): temp_energy[: self.length] = self.energy temp_shell_id[: self.length] = self.shell_id temp_interaction_type[: self.length] = self.interaction_type + temp_interaction_in_line_nu[ + : self.length + ] = self.interaction_in_line_nu + temp_interaction_in_line_id[ + : self.length + ] = self.interaction_in_line_id + temp_interaction_out_line_id[ + : self.length + ] = self.interaction_out_line_id self.status = temp_status self.r = temp_r @@ -99,6 +111,9 @@ def track(self, r_packet): self.energy = temp_energy self.shell_id = temp_shell_id self.interaction_type = temp_interaction_type + self.interaction_in_line_nu = temp_interaction_in_line_nu + self.interaction_in_line_id = temp_interaction_in_line_id + self.interaction_out_line_id = temp_interaction_out_line_id self.length = temp_length self.index = r_packet.index @@ -112,6 +127,21 @@ def track(self, r_packet): self.interaction_type[ self.num_interactions ] = r_packet.last_interaction_type + # Only set if last interaction is line interaction, else -1 or 0. + if r_packet.last_interaction_type == 2: + self.interaction_in_line_nu[ + self.num_interactions + ] = r_packet.last_interaction_in_nu + self.interaction_in_line_id[ + self.num_interactions + ] = r_packet.last_interaction_in_line_id + self.interaction_out_line_id[ + self.num_interactions + ] = r_packet.last_interaction_out_line_id + else: + self.interaction_in_line_nu[self.num_interactions] = 0.0 + self.interaction_in_line_id[self.num_interactions] = -1 + self.interaction_out_line_id[self.num_interactions] = -1 self.num_interactions += 1 def finalize_array(self): @@ -122,6 +152,15 @@ def finalize_array(self): self.energy = self.energy[: self.num_interactions] self.shell_id = self.shell_id[: self.num_interactions] self.interaction_type = self.interaction_type[: self.num_interactions] + self.interaction_in_line_nu = self.interaction_in_line_nu[ + : self.num_interactions + ] + self.interaction_in_line_id = self.interaction_in_line_id[ + : self.num_interactions + ] + self.interaction_out_line_id = self.interaction_out_line_id[ + : self.num_interactions + ] def rpacket_trackers_to_dataframe(rpacket_trackers): @@ -177,9 +216,9 @@ def rpacket_trackers_to_dataframe(rpacket_trackers): ("energy", float64), ("shell_id", int64), ("interaction_type", int64), - ("line_interaction_in_id", int64), - ("line_interaction_out_id", int64), - ("line_interaction_in_nu", float64), + ("interaction_in_line_nu", float64), + ("interaction_in_line_id", int64), + ("interaction_out_line_id", int64), ] @@ -201,12 +240,12 @@ class RPacketLastInteractionTracker(object): Current Shell No in which the last interaction happened interaction_type: int Type of interaction the rpacket undergoes - line_interaction_in_id : int + interaction_in_line_nu : float + frequency corresponding to the absroption line + interaction_in_line_id : int Id of the absorption line - line_interaction_out_id : int + interaction_out_line_id : int Id of the transmission line - line_interaction_in_nu : float - frequency corresponding to the absroption line """ def __init__(self): @@ -216,9 +255,9 @@ def __init__(self): self.energy = 0.0 self.shell_id = -1 self.interaction_type = -1 - self.line_interaction_in_id = -1 - self.line_interaction_out_id = -1 - self.line_interaction_in_nu = 0.0 + self.interaction_in_line_id = -1 + self.interaction_out_line_id = -1 + self.interaction_in_line_nu = 0.0 def track(self, r_packet): self.index = r_packet.index @@ -227,3 +266,11 @@ def track(self, r_packet): self.energy = r_packet.energy self.shell_id = r_packet.current_shell_id self.interaction_type = r_packet.last_interaction_type + if r_packet.last_interaction_type == 2: + self.interaction_in_line_nu = r_packet.last_interaction_in_nu + self.interaction_in_line_id = r_packet.last_interaction_in_line_id + self.interaction_out_line_id = r_packet.last_interaction_out_line_id + else: + self.interaction_in_line_nu = 0.0 + self.interaction_in_line_id = -1 + self.interaction_out_line_id = -1 From 2d15a4a9b4053beebf2d6976033cbba336291d71 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Thu, 20 Jun 2024 11:35:09 +0530 Subject: [PATCH 25/37] Remove Reassignment of Variables --- tardis/transport/montecarlo/tests/test_trackers.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/tardis/transport/montecarlo/tests/test_trackers.py b/tardis/transport/montecarlo/tests/test_trackers.py index 7e6c69e5522..93aebc21db6 100644 --- a/tardis/transport/montecarlo/tests/test_trackers.py +++ b/tardis/transport/montecarlo/tests/test_trackers.py @@ -12,8 +12,7 @@ def interaction_type_last_interaction_class1( nb_simulation_verysimple, ): """Last interaction types of rpacket from LastInteractionTracker""" - sim = nb_simulation_verysimple - transport_state = sim.transport.transport_state + transport_state = nb_simulation_verysimple.transport.transport_state interaction_type = transport_state.last_interaction_type return interaction_type @@ -23,8 +22,7 @@ def interaction_type_last_interaction_class2( nb_simulation_verysimple, ): """Last interaction types of rpacket from RPacketLastInteractionTracker""" - sim = nb_simulation_verysimple - transport_state = sim.transport.transport_state + transport_state = nb_simulation_verysimple.transport.transport_state interaction_type = np.empty( len(transport_state.rpacket_tracker), dtype=np.int64 ) @@ -41,8 +39,9 @@ def nu_from_packet_collection( nb_simulation_verysimple, ): """Last interaction output nus of rpacket from packet_collection""" - sim = nb_simulation_verysimple - packet_collection = sim.transport.transport_state.packet_collection + packet_collection = ( + nb_simulation_verysimple.transport.transport_state.packet_collection + ) return packet_collection.output_nus @@ -51,8 +50,7 @@ def nu_from_last_interaction_class( nb_simulation_verysimple, ): """Last interaction output nus of rpacket from RPacketLastInteractionTracker""" - sim = nb_simulation_verysimple - transport_state = sim.transport.transport_state + transport_state = nb_simulation_verysimple.transport.transport_state nu = np.empty(len(transport_state.rpacket_tracker), dtype=np.float64) for i, last_interaction_tracker in enumerate( transport_state.rpacket_tracker From 9cbe537bfb763be01b4b6b18860d51f017c9370d Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Thu, 20 Jun 2024 11:36:20 +0530 Subject: [PATCH 26/37] Remove Reassignment of Variables --- tardis/transport/montecarlo/tests/test_r_packet.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tardis/transport/montecarlo/tests/test_r_packet.py b/tardis/transport/montecarlo/tests/test_r_packet.py index 61e801b74d0..5eb254106f1 100644 --- a/tardis/transport/montecarlo/tests/test_r_packet.py +++ b/tardis/transport/montecarlo/tests/test_r_packet.py @@ -37,8 +37,9 @@ def simulation_rpacket_tracking_enabled(config_rpacket_tracker, atomic_dataset): def test_rpacket_trackers_to_dataframe(simulation_rpacket_tracking_enabled): - sim = simulation_rpacket_tracking_enabled - transport_state = sim.transport.transport_state + transport_state = ( + simulation_rpacket_tracking_enabled.transport.transport_state + ) rtracker_df = rpacket_trackers_to_dataframe(transport_state.rpacket_tracker) # check df shape and column names From efa97be4be326a8d663f48c9a8971eaea3781c08 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Thu, 20 Jun 2024 11:38:39 +0530 Subject: [PATCH 27/37] Distinct last interaction tracker classes as old and new --- tardis/transport/montecarlo/tests/test_trackers.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tardis/transport/montecarlo/tests/test_trackers.py b/tardis/transport/montecarlo/tests/test_trackers.py index 93aebc21db6..8560298ce63 100644 --- a/tardis/transport/montecarlo/tests/test_trackers.py +++ b/tardis/transport/montecarlo/tests/test_trackers.py @@ -8,7 +8,7 @@ @pytest.fixture() -def interaction_type_last_interaction_class1( +def interaction_type_last_interaction_class_old( nb_simulation_verysimple, ): """Last interaction types of rpacket from LastInteractionTracker""" @@ -18,7 +18,7 @@ def interaction_type_last_interaction_class1( @pytest.fixture() -def interaction_type_last_interaction_class2( +def interaction_type_last_interaction_class_new( nb_simulation_verysimple, ): """Last interaction types of rpacket from RPacketLastInteractionTracker""" @@ -80,12 +80,12 @@ def test_tracking_manual(static_packet): def test_last_interaction_type( - interaction_type_last_interaction_class1, - interaction_type_last_interaction_class2, + interaction_type_last_interaction_class_old, + interaction_type_last_interaction_class_new, ): npt.assert_array_equal( - interaction_type_last_interaction_class1, - interaction_type_last_interaction_class2, + interaction_type_last_interaction_class_old, + interaction_type_last_interaction_class_new, ) From 26686b818dc4d74248c94614f5e4c9f9ddbd6d1e Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Thu, 20 Jun 2024 12:02:47 +0530 Subject: [PATCH 28/37] Remove Outdated comment --- tardis/transport/montecarlo/base.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tardis/transport/montecarlo/base.py b/tardis/transport/montecarlo/base.py index 61f3c052795..ae3e9a5babc 100644 --- a/tardis/transport/montecarlo/base.py +++ b/tardis/transport/montecarlo/base.py @@ -211,7 +211,6 @@ def run( update_iterations_pbar(1) refresh_packet_pbar() # Condition for Checking if RPacket Tracking is enabled - # Preference is given to tracking of all trackers if self.montecarlo_configuration.ENABLE_RPACKET_TRACKING: transport_state.rpacket_tracker = rpacket_trackers self.transport_state.rpacket_tracker_df = ( From 4367f7ffb4e7568b8247f97e31ab19ac527ecd4a Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Fri, 21 Jun 2024 12:53:25 +0530 Subject: [PATCH 29/37] Add Parametrize Test --- .../transport/montecarlo/tests/test_trackers.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tardis/transport/montecarlo/tests/test_trackers.py b/tardis/transport/montecarlo/tests/test_trackers.py index 8560298ce63..07f701a03e2 100644 --- a/tardis/transport/montecarlo/tests/test_trackers.py +++ b/tardis/transport/montecarlo/tests/test_trackers.py @@ -96,3 +96,19 @@ def test_last_interaction_nu( npt.assert_allclose( nu_from_packet_collection, nu_from_last_interaction_class ) + + +@pytest.mark.parametrize( + "expected,obtained", + [ + ( + "interaction_type_last_interaction_class_old", + "interaction_type_last_interaction_class_new", + ), + ("nu_from_packet_collection", "nu_from_last_interaction_class"), + ], +) +def test_last_interaction_properties(expected, obtained, request): + expected = request.getfixturevalue(expected) + obtained = request.getfixturevalue(obtained) + npt.assert_allclose(expected, obtained) From b90e7ff7ef59b44263f3f8fa5d7c3c5753ed760c Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Fri, 21 Jun 2024 17:13:15 +0530 Subject: [PATCH 30/37] Remove Old tests --- .../montecarlo/tests/test_trackers.py | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/tardis/transport/montecarlo/tests/test_trackers.py b/tardis/transport/montecarlo/tests/test_trackers.py index 07f701a03e2..c423a1261db 100644 --- a/tardis/transport/montecarlo/tests/test_trackers.py +++ b/tardis/transport/montecarlo/tests/test_trackers.py @@ -79,25 +79,6 @@ def test_tracking_manual(static_packet): npt.assert_almost_equal(tracker.energy, 0.9) -def test_last_interaction_type( - interaction_type_last_interaction_class_old, - interaction_type_last_interaction_class_new, -): - npt.assert_array_equal( - interaction_type_last_interaction_class_old, - interaction_type_last_interaction_class_new, - ) - - -def test_last_interaction_nu( - nu_from_packet_collection, - nu_from_last_interaction_class, -): - npt.assert_allclose( - nu_from_packet_collection, nu_from_last_interaction_class - ) - - @pytest.mark.parametrize( "expected,obtained", [ From b390fa74dc71a7b7b496a5c6f10f7c833a31cd13 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Mon, 24 Jun 2024 12:01:01 +0530 Subject: [PATCH 31/37] Add shell_id test --- .../montecarlo/tests/test_trackers.py | 38 +++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/tardis/transport/montecarlo/tests/test_trackers.py b/tardis/transport/montecarlo/tests/test_trackers.py index c423a1261db..270eac3ff56 100644 --- a/tardis/transport/montecarlo/tests/test_trackers.py +++ b/tardis/transport/montecarlo/tests/test_trackers.py @@ -7,7 +7,7 @@ ) -@pytest.fixture() +@pytest.fixture(scope="module") def interaction_type_last_interaction_class_old( nb_simulation_verysimple, ): @@ -18,6 +18,18 @@ def interaction_type_last_interaction_class_old( @pytest.fixture() +def shell_id_last_interaction_class_old( + nb_simulation_verysimple, + interaction_type_last_interaction_class_old, +): + """Last interaction types of rpacket from LastInteractionTracker""" + transport_state = nb_simulation_verysimple.transport.transport_state + shell_id = transport_state.last_line_interaction_shell_id + mask = interaction_type_last_interaction_class_old == 2 + return shell_id[mask] + + +@pytest.fixture(scope="module") def interaction_type_last_interaction_class_new( nb_simulation_verysimple, ): @@ -34,6 +46,22 @@ def interaction_type_last_interaction_class_new( return interaction_type +@pytest.fixture() +def shell_id_last_interaction_class_new( + nb_simulation_verysimple, + interaction_type_last_interaction_class_new, +): + """Last interaction types of rpacket from RPacketLastInteractionTracker""" + transport_state = nb_simulation_verysimple.transport.transport_state + shell_id = np.empty(len(transport_state.rpacket_tracker), dtype=np.int64) + for i, last_interaction_tracker in enumerate( + transport_state.rpacket_tracker + ): + shell_id[i] = last_interaction_tracker.shell_id + mask = interaction_type_last_interaction_class_new == 2 + return shell_id[mask] + + @pytest.fixture() def nu_from_packet_collection( nb_simulation_verysimple, @@ -46,7 +74,7 @@ def nu_from_packet_collection( @pytest.fixture() -def nu_from_last_interaction_class( +def nu_from_last_interaction_class_new( nb_simulation_verysimple, ): """Last interaction output nus of rpacket from RPacketLastInteractionTracker""" @@ -86,7 +114,11 @@ def test_tracking_manual(static_packet): "interaction_type_last_interaction_class_old", "interaction_type_last_interaction_class_new", ), - ("nu_from_packet_collection", "nu_from_last_interaction_class"), + ( + "shell_id_last_interaction_class_old", + "shell_id_last_interaction_class_new", + ), + ("nu_from_packet_collection", "nu_from_last_interaction_class_new"), ], ) def test_last_interaction_properties(expected, obtained, request): From 2141bad1ff26d68d73a25d9c73fd7bcf571b344b Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Mon, 24 Jun 2024 14:56:40 +0530 Subject: [PATCH 32/37] Fix some typos --- tardis/transport/montecarlo/packet_trackers.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tardis/transport/montecarlo/packet_trackers.py b/tardis/transport/montecarlo/packet_trackers.py index d4854b6c79e..0748ce54596 100644 --- a/tardis/transport/montecarlo/packet_trackers.py +++ b/tardis/transport/montecarlo/packet_trackers.py @@ -134,10 +134,10 @@ def track(self, r_packet): ] = r_packet.last_interaction_in_nu self.interaction_in_line_id[ self.num_interactions - ] = r_packet.last_interaction_in_line_id + ] = r_packet.last_line_interaction_in_id self.interaction_out_line_id[ self.num_interactions - ] = r_packet.last_interaction_out_line_id + ] = r_packet.last_line_interaction_out_id else: self.interaction_in_line_nu[self.num_interactions] = 0.0 self.interaction_in_line_id[self.num_interactions] = -1 @@ -268,8 +268,8 @@ def track(self, r_packet): self.interaction_type = r_packet.last_interaction_type if r_packet.last_interaction_type == 2: self.interaction_in_line_nu = r_packet.last_interaction_in_nu - self.interaction_in_line_id = r_packet.last_interaction_in_line_id - self.interaction_out_line_id = r_packet.last_interaction_out_line_id + self.interaction_in_line_id = r_packet.last_line_interaction_in_id + self.interaction_out_line_id = r_packet.last_line_interaction_out_id else: self.interaction_in_line_nu = 0.0 self.interaction_in_line_id = -1 From bf44d33114e6f198fd57728334ba2011cc9804f8 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Mon, 24 Jun 2024 15:28:55 +0530 Subject: [PATCH 33/37] Fix typo --- tardis/transport/montecarlo/packet_trackers.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tardis/transport/montecarlo/packet_trackers.py b/tardis/transport/montecarlo/packet_trackers.py index 0748ce54596..9da55ae125c 100644 --- a/tardis/transport/montecarlo/packet_trackers.py +++ b/tardis/transport/montecarlo/packet_trackers.py @@ -83,7 +83,9 @@ def track(self, r_packet): temp_energy = np.empty(temp_length, dtype=np.float64) temp_shell_id = np.empty(temp_length, dtype=np.int64) temp_interaction_type = np.empty(temp_length, dtype=np.int64) - temp_interaction_in_line_nu = np.empty(temp_length, dtype=np.int64) + temp_interaction_in_line_nu = np.empty( + temp_length, dtype=np.float64 + ) temp_interaction_in_line_id = np.empty(temp_length, dtype=np.int64) temp_interaction_out_line_id = np.empty(temp_length, dtype=np.int64) From 33f62c7a48eed69fef0d9e1dde00987e5a4610b1 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Mon, 24 Jun 2024 15:29:49 +0530 Subject: [PATCH 34/37] Add tests and segregate them into appropriate fixtures and test functions --- .../montecarlo/tests/test_trackers.py | 89 +++++++++++++------ 1 file changed, 64 insertions(+), 25 deletions(-) diff --git a/tardis/transport/montecarlo/tests/test_trackers.py b/tardis/transport/montecarlo/tests/test_trackers.py index 270eac3ff56..2ad8709d327 100644 --- a/tardis/transport/montecarlo/tests/test_trackers.py +++ b/tardis/transport/montecarlo/tests/test_trackers.py @@ -17,18 +17,6 @@ def interaction_type_last_interaction_class_old( return interaction_type -@pytest.fixture() -def shell_id_last_interaction_class_old( - nb_simulation_verysimple, - interaction_type_last_interaction_class_old, -): - """Last interaction types of rpacket from LastInteractionTracker""" - transport_state = nb_simulation_verysimple.transport.transport_state - shell_id = transport_state.last_line_interaction_shell_id - mask = interaction_type_last_interaction_class_old == 2 - return shell_id[mask] - - @pytest.fixture(scope="module") def interaction_type_last_interaction_class_new( nb_simulation_verysimple, @@ -47,19 +35,41 @@ def interaction_type_last_interaction_class_new( @pytest.fixture() -def shell_id_last_interaction_class_new( +def last_line_interaction_old( nb_simulation_verysimple, - interaction_type_last_interaction_class_new, + interaction_type_last_interaction_class_old, ): - """Last interaction types of rpacket from RPacketLastInteractionTracker""" + """Last line interaction data of rpacket from LastInteractionTracker""" transport_state = nb_simulation_verysimple.transport.transport_state - shell_id = np.empty(len(transport_state.rpacket_tracker), dtype=np.int64) - for i, last_interaction_tracker in enumerate( - transport_state.rpacket_tracker - ): - shell_id[i] = last_interaction_tracker.shell_id + mask = interaction_type_last_interaction_class_old == 2 + + def get_attribute_data(attribute): + attribute_data = getattr(transport_state, attribute) + attribute_data = attribute_data[mask] + return attribute_data + + return get_attribute_data + + +@pytest.fixture() +def last_line_interaction_new( + nb_simulation_verysimple, + interaction_type_last_interaction_class_new, +): + """Last line interaction data of rpacket from RPacketLastInteractionTracker""" + rpacket_tracker = ( + nb_simulation_verysimple.transport.transport_state.rpacket_tracker + ) mask = interaction_type_last_interaction_class_new == 2 - return shell_id[mask] + + def get_attribute_data(attribute): + attribute_data = np.empty(len(rpacket_tracker)) + for i, last_interaction_tracker in enumerate(rpacket_tracker): + attribute_data[i] = getattr(last_interaction_tracker, attribute) + attribute_data = attribute_data[mask] + return attribute_data + + return get_attribute_data @pytest.fixture() @@ -114,10 +124,6 @@ def test_tracking_manual(static_packet): "interaction_type_last_interaction_class_old", "interaction_type_last_interaction_class_new", ), - ( - "shell_id_last_interaction_class_old", - "shell_id_last_interaction_class_new", - ), ("nu_from_packet_collection", "nu_from_last_interaction_class_new"), ], ) @@ -125,3 +131,36 @@ def test_last_interaction_properties(expected, obtained, request): expected = request.getfixturevalue(expected) obtained = request.getfixturevalue(obtained) npt.assert_allclose(expected, obtained) + + +@pytest.mark.parametrize( + "argument_old,argument_new", + [ + ( + "last_interaction_in_nu", + "interaction_in_line_nu", + ), + ( + "last_line_interaction_in_id", + "interaction_in_line_id", + ), + ( + "last_line_interaction_out_id", + "interaction_out_line_id", + ), + ( + "last_line_interaction_shell_id", + "shell_id", + ), + ], +) +def test_last_line_interaction_properties( + last_line_interaction_old, + last_line_interaction_new, + argument_old, + argument_new, +): + npt.assert_allclose( + last_line_interaction_old(argument_old), + last_line_interaction_new(argument_new), + ) From 5797157a0bd4d090112624e33e0abb0cd824d827 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Mon, 24 Jun 2024 15:37:24 +0530 Subject: [PATCH 35/37] tracker bug fix --- tardis/transport/montecarlo/single_packet_loop.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tardis/transport/montecarlo/single_packet_loop.py b/tardis/transport/montecarlo/single_packet_loop.py index 70a3f48e706..38d83d30aaa 100644 --- a/tardis/transport/montecarlo/single_packet_loop.py +++ b/tardis/transport/montecarlo/single_packet_loop.py @@ -267,10 +267,11 @@ def single_packet_loop( ) else: pass - if montecarlo_configuration.ENABLE_RPACKET_TRACKING: - rpacket_tracker.track(r_packet) - else: - rpacket_last_interaction_tracker.track(r_packet) + if interaction_type != InteractionType.BOUNDARY: + if montecarlo_configuration.ENABLE_RPACKET_TRACKING: + rpacket_tracker.track(r_packet) + else: + rpacket_last_interaction_tracker.track(r_packet) @njit From 55a89d18ebff775619120508a80bf82ef014d990 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Tue, 25 Jun 2024 16:40:55 +0530 Subject: [PATCH 36/37] Add Enum to tests --- tardis/transport/montecarlo/tests/test_trackers.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tardis/transport/montecarlo/tests/test_trackers.py b/tardis/transport/montecarlo/tests/test_trackers.py index 2ad8709d327..4b544c71f9a 100644 --- a/tardis/transport/montecarlo/tests/test_trackers.py +++ b/tardis/transport/montecarlo/tests/test_trackers.py @@ -2,6 +2,7 @@ import numpy as np import numpy.testing as npt +from tardis.transport.montecarlo.r_packet import InteractionType from tardis.transport.montecarlo.packet_trackers import ( RPacketLastInteractionTracker, ) @@ -41,7 +42,7 @@ def last_line_interaction_old( ): """Last line interaction data of rpacket from LastInteractionTracker""" transport_state = nb_simulation_verysimple.transport.transport_state - mask = interaction_type_last_interaction_class_old == 2 + mask = interaction_type_last_interaction_class_old == InteractionType.LINE def get_attribute_data(attribute): attribute_data = getattr(transport_state, attribute) @@ -60,10 +61,10 @@ def last_line_interaction_new( rpacket_tracker = ( nb_simulation_verysimple.transport.transport_state.rpacket_tracker ) - mask = interaction_type_last_interaction_class_new == 2 + mask = interaction_type_last_interaction_class_new == InteractionType.LINE def get_attribute_data(attribute): - attribute_data = np.empty(len(rpacket_tracker)) + attribute_data = np.empty(len(rpacket_tracker), dtype=np.float64) for i, last_interaction_tracker in enumerate(rpacket_tracker): attribute_data[i] = getattr(last_interaction_tracker, attribute) attribute_data = attribute_data[mask] From 02b845a6f98e5aa618f4ebb7cffa74e38ccf7728 Mon Sep 17 00:00:00 2001 From: Sumit112192 Date: Tue, 25 Jun 2024 19:39:25 +0530 Subject: [PATCH 37/37] Add Enum to packet_trackers --- tardis/transport/montecarlo/packet_trackers.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tardis/transport/montecarlo/packet_trackers.py b/tardis/transport/montecarlo/packet_trackers.py index 9da55ae125c..d99043cf8b0 100644 --- a/tardis/transport/montecarlo/packet_trackers.py +++ b/tardis/transport/montecarlo/packet_trackers.py @@ -3,6 +3,8 @@ import numpy as np import pandas as pd +from tardis.transport.montecarlo.r_packet import InteractionType + rpacket_tracker_spec = [ ("length", int64), ("seed", int64), @@ -130,7 +132,7 @@ def track(self, r_packet): self.num_interactions ] = r_packet.last_interaction_type # Only set if last interaction is line interaction, else -1 or 0. - if r_packet.last_interaction_type == 2: + if r_packet.last_interaction_type == InteractionType.LINE: self.interaction_in_line_nu[ self.num_interactions ] = r_packet.last_interaction_in_nu @@ -268,7 +270,7 @@ def track(self, r_packet): self.energy = r_packet.energy self.shell_id = r_packet.current_shell_id self.interaction_type = r_packet.last_interaction_type - if r_packet.last_interaction_type == 2: + if r_packet.last_interaction_type == InteractionType.LINE: self.interaction_in_line_nu = r_packet.last_interaction_in_nu self.interaction_in_line_id = r_packet.last_line_interaction_in_id self.interaction_out_line_id = r_packet.last_line_interaction_out_id