from abc import ABC, abstractmethod
from gtsimulation.Global import Units, Regions
[docs]
class AbsBfield(ABC):
ToMeters = 1
def __init__(self, use_tesla=True, use_meters=True, **kwargs):
self.Region = Regions.Undefined
self.ModelName = None
self.Units = 'm'
self.use_tesla = use_tesla
self.use_meters = use_meters
[docs]
@abstractmethod
def CalcBfield(self, x, y, z, **kwargs):
pass
[docs]
@abstractmethod
def UpdateState(self, new_date):
pass
[docs]
@classmethod
def from_meters(cls, x, y, z):
return x / cls.ToMeters, y / cls.ToMeters, z / cls.ToMeters
[docs]
@staticmethod
def to_tesla(Bx, By, Bz):
return Bx / Units.T2nT, By / Units.T2nT, Bz / Units.T2nT
[docs]
def GetBfield(self, x, y, z, **kwargs):
if self.use_meters:
x, y, z = self.from_meters(x, y, z)
Bx, By, Bz = self.CalcBfield(x, y, z, **kwargs)
if self.use_tesla:
return self.to_tesla(Bx, By, Bz)
return Bx, By, Bz
[docs]
@abstractmethod
def to_string(self):
pass
def __str__(self):
return self.to_string()