Source code for pydna_epbd.monitors.all_monitors
import os
from pydna_epbd.monitors.bubble_monitor import BubbleMonitor
from pydna_epbd.monitors.coord_monitor import CoordMonitor
from pydna_epbd.monitors.energy_monitor import EnergyMonitor
from pydna_epbd.monitors.flipping_monitor import FlippingMonitor
from pydna_epbd.monitors.flipping_monitor_verbose import FlippingMonitorVerbose
from pydna_epbd.monitors.melting_and_fraction_monitor import MeltingAndFractionMonitor
from pydna_epbd.monitors.melting_and_fraction_many_monitor import (
    MeltingAndFractionManyMonitor,
)
[docs]class Monitors:
    """All monitors to apply for the same DNA object."""
    def __init__(self, dna, n_preheating_steps, n_steps_after_preheating) -> None:
        """Initialize all the monitors if the corresponding switches are on/off.
        Args:
            dna (DNA): A DNA object.
            n_preheating_steps (int): Number of preheating steps.
            n_steps_after_preheating (int): Number of post-preheating steps.
        """
        super(Monitors, self).__init__()
        total_steps = n_preheating_steps, n_steps_after_preheating
        self.monitors = []
        if os.environ["BUBBLE_MONITOR"] == "On":
            self.bubble_monitor = BubbleMonitor(dna)
            self.monitors.append(self.bubble_monitor)
        if os.environ["COORD_MONITOR"] == "On":
            self.coord_monitor = CoordMonitor(dna)
            self.monitors.append(self.coord_monitor)
        if os.environ["FLIPPING_MONITOR"] == "On":
            self.flipping_monitor = FlippingMonitor(dna)
            self.monitors.append(self.flipping_monitor)
        if os.environ["FLIPPING_MONITOR_VERBOSE"] == "On":
            self.flipping_monitor_verbose = FlippingMonitorVerbose(dna)
            self.monitors.append(self.flipping_monitor_verbose)
        if os.environ["ENERGY_MONITOR"] == "On":
            self.energy_monitor = EnergyMonitor(dna, total_steps)
            self.monitors.append(self.energy_monitor)
        if os.environ["MELTING_AND_FRACTION_MONITOR"] == "On":
            self.melting_and_fraction_monitor = MeltingAndFractionMonitor(
                dna, n_steps_after_preheating
            )
            self.monitors.append(self.melting_and_fraction_monitor)
        if os.environ["MELTING_AND_FRACTION_MANY_MONITOR"] == "On":
            self.melting_and_fraction_many_monitor = MeltingAndFractionManyMonitor(
                dna, n_preheating_steps
            )
            self.monitors.append(self.melting_and_fraction_many_monitor)
        # if os.environ['COORD_VERBOSE_MONITOR'] == 'True':
        #     self.monitors.append(CoordMonitorVerbose(dna, input_configs))
[docs]    def update_state(self, seq_id, temp, iter_no):
        """Update state for all monitors.
        Args:
            seq_id (str): Sequence id.
            temp (float): Simulation temperature.
            iter_no (int): Iteration number.
        """
        for monitor in self.monitors:
            monitor.update_state(seq_id, temp, iter_no) 
[docs]    def collect_at_step(self, step_no):
        """Call monitors to record at post-preheating steps.
        Args:
            step_no (int): Step number.
        """
        for monitor in self.monitors:
            monitor.collect_at_step(step_no) 
[docs]    def collect_at_step_preheat(self, step_no):
        """Call monitors to record at preheating steps.
        Args:
            step_no (int): Step number.
        """
        for monitor in self.monitors:
            monitor.collect_at_step_preheat(step_no) 
[docs]    def collect_at_iter(self):
        """Call monitors to record at the end of iterations."""
        for monitor in self.monitors:
            monitor.collect_at_iter()