コード例 #1
0
    def __init__(self,
                 diameter, diameter_variation = None, diameter_spread = None, diameter_variation_n = None,
                 number = 1., arrival = "synchronised",
                 position = None, position_variation = None, position_spread = None, position_variation_n = None,
                 material_type = None, massdensity = None, atomic_composition = None, electron_density = None): 

        # Initialise base class
        AbstractContinuousParticle.__init__(self,
                                            diameter=diameter, diameter_variation=diameter_variation, diameter_spread=diameter_spread, diameter_variation_n=diameter_variation_n,
                                            rotation_values=None, rotation_formalism=None, rotation_mode="extrinsic",
                                            number=number, arrival=arrival,
                                            position=position, position_variation=position_variation, position_spread=position_spread, position_variation_n=position_variation_n,
                                            material_type=material_type, massdensity=massdensity, atomic_composition=atomic_composition, electron_density=electron_density)
コード例 #2
0
    def __init__(self,
                 diameter,
                 diameter_variation=None,
                 diameter_spread=None,
                 diameter_variation_n=None,
                 flattening=0.75,
                 flattening_variation=None,
                 flattening_spread=None,
                 flattening_variation_n=None,
                 rotation_values=None,
                 rotation_formalism=None,
                 rotation_mode="extrinsic",
                 number=1.,
                 arrival="synchronised",
                 position=None,
                 position_variation=None,
                 position_spread=None,
                 position_variation_n=None,
                 material_type='water',
                 massdensity=None,
                 atomic_composition=None,
                 electron_density=None):

        # Initialise base class
        AbstractContinuousParticle.__init__(
            self,
            diameter=diameter,
            diameter_variation=diameter_variation,
            diameter_spread=diameter_spread,
            diameter_variation_n=diameter_variation_n,
            rotation_values=rotation_values,
            rotation_formalism=rotation_formalism,
            rotation_mode=rotation_mode,
            number=number,
            arrival=arrival,
            position=position,
            position_variation=position_variation,
            position_spread=position_spread,
            position_variation_n=position_variation_n,
            material_type=material_type,
            massdensity=massdensity,
            atomic_composition=atomic_composition,
            electron_density=electron_density)
        self.flattening_mean = flattening
        self.set_flattening_variation(
            flattening_variation=flattening_variation,
            flattening_spread=flattening_spread,
            flattening_variation_n=flattening_variation_n)
コード例 #3
0
 def get_next(self):
     """
     Iterate the parameters and return them as a dictionary
     """
     O = AbstractContinuousParticle.get_next(self)
     O["particle_model"] = "sphere"
     return O
コード例 #4
0
 def get_next(self):
     """
     Iterate the parameters and return them as a dictionary
     """
     O = AbstractContinuousParticle.get_next(self)
     O["particle_model"] = "sphere"
     return O
コード例 #5
0
 def get_next(self):
     """
     Iterate the parameters and return them as a dictionary
     """
     O = AbstractContinuousParticle.get_next(self)
     O["particle_model"] = "spheroid"
     O["flattening"] = self._get_next_flattening()
     return O
コード例 #6
0
 def get_next(self):
     """
     Iterate the parameters and return them as a dictionary
     """
     O = AbstractContinuousParticle.get_next(self)
     O["particle_model"] = "spheroid"
     O["flattening"] = self._get_next_flattening()
     return O
コード例 #7
0
    def __init__(self,
                 diameter,
                 diameter_variation = None, diameter_spread = None, diameter_variation_n = None,
                 flattening = 0.75, flattening_variation = None, flattening_spread = None, flattening_variation_n = None,
                 rotation_values = None, rotation_formalism = None, rotation_mode = "extrinsic",
                 number = 1., arrival = "synchronised",
                 position = None, position_variation = None, position_spread = None, position_variation_n = None,
                 material_type = 'water', massdensity = None, atomic_composition = None, electron_density = None):

        # Initialise base class
        AbstractContinuousParticle.__init__(self,
                                            diameter=diameter, diameter_variation=diameter_variation, diameter_spread=diameter_spread, diameter_variation_n=diameter_variation_n,
                                            rotation_values=rotation_values, rotation_formalism=rotation_formalism, rotation_mode=rotation_mode,
                                            number=number, arrival=arrival,
                                            position=position, position_variation=position_variation, position_spread=position_spread, position_variation_n=position_variation_n,
                                            material_type=material_type, massdensity=massdensity, atomic_composition=atomic_composition, electron_density=electron_density)
        self.flattening_mean = flattening
        self.set_flattening_variation(flattening_variation=flattening_variation, flattening_spread=flattening_spread, flattening_variation_n=flattening_variation_n)
コード例 #8
0
 def get_next(self):
     """
     Iterate the parameters and return them as a dictionary
     """
     O = AbstractContinuousParticle.get_next(self)
     O["particle_model"] = "map"
     O["geometry"] = self.geometry
     if self.geometry == "spheroid":
         O["flattening"] = self.flattening
     return O
コード例 #9
0
ファイル: particle_map.py プロジェクト: FXIhub/condor
 def get_next(self):
     """
     Iterate the parameters and return them as a dictionary
     """
     O = AbstractContinuousParticle.get_next(self)
     O["particle_model"] = "map"
     O["geometry"] = self.geometry
     if self.geometry == "spheroid":
         O["flattening"] = self.flattening
     return O
コード例 #10
0
    def get_conf(sef):
        """
        Get configuration in form of a dictionary. Another identically configured ParticleMap instance can be initialised by:

        .. code-block:: python

          conf = P0.get_conf()                 # P0: already existing ParticleSphere instance
          P1 = condor.ParticleSpheroid(**conf) # P1: new ParticleSphere instance with the same configuration as P0  
        """
        return AbstractContinuousParticle.get_conf(self)
コード例 #11
0
    def get_conf(sef):
        """
        Get configuration in form of a dictionary. Another identically configured ParticleMap instance can be initialised by:

        .. code-block:: python

          conf = P0.get_conf()                 # P0: already existing ParticleSphere instance
          P1 = condor.ParticleSpheroid(**conf) # P1: new ParticleSphere instance with the same configuration as P0  
        """
        return AbstractContinuousParticle.get_conf(self)
コード例 #12
0
    def __init__(self,
                 diameter,
                 diameter_variation=None,
                 diameter_spread=None,
                 diameter_variation_n=None,
                 number=1.,
                 arrival="synchronised",
                 position=None,
                 position_variation=None,
                 position_spread=None,
                 position_variation_n=None,
                 material_type=None,
                 massdensity=None,
                 atomic_composition=None,
                 electron_density=None):

        # Initialise base class
        AbstractContinuousParticle.__init__(
            self,
            diameter=diameter,
            diameter_variation=diameter_variation,
            diameter_spread=diameter_spread,
            diameter_variation_n=diameter_variation_n,
            rotation_values=None,
            rotation_formalism=None,
            rotation_mode="extrinsic",
            number=number,
            arrival=arrival,
            position=position,
            position_variation=position_variation,
            position_spread=position_spread,
            position_variation_n=position_variation_n,
            material_type=material_type,
            massdensity=massdensity,
            atomic_composition=atomic_composition,
            electron_density=electron_density)
コード例 #13
0
    def get_conf(self):
        """
        Get configuration in form of a dictionary. Another identically configured ParticleMap instance can be initialised by:

        .. code-block:: python

          conf = P0.get_conf()                 # P0: already existing ParticleSpheroid instance
          P1 = condor.ParticleSpheroid(**conf) # P1: new ParticleSpheroid instance with the same configuration as P0  
        """
        conf = {}
        conf.update(AbstractContinuousParticle.get_conf(self))
        conf["flattening"] = self.flattening_mean
        fvar = self._flattening_variation.get_conf()
        conf["flattening_variation"] = fvar["mode"]
        conf["flattening_spread"] = fvar["spread"]
        conf["flattening_variation_n"] = fvar["n"]
        return conf
コード例 #14
0
    def get_conf(self):
        """
        Get configuration in form of a dictionary. Another identically configured ParticleMap instance can be initialised by:

        .. code-block:: python

          conf = P0.get_conf()                 # P0: already existing ParticleSpheroid instance
          P1 = condor.ParticleSpheroid(**conf) # P1: new ParticleSpheroid instance with the same configuration as P0  
        """
        conf = {}
        conf.update(AbstractContinuousParticle.get_conf(self))
        conf["flattening"] = self.flattening_mean
        fvar = self._flattening_variation.get_conf()
        conf["flattening_variation"] = fvar["mode"]
        conf["flattening_spread"] = fvar["spread"]
        conf["flattening_variation_n"] = fvar["n"]
        return conf
コード例 #15
0
ファイル: particle_map.py プロジェクト: FXIhub/condor
    def get_conf(self):
        """
        Get configuration in form of a dictionary. Another identically configured ParticleMap instance can be initialised by:

        .. code-block:: python

          conf = P0.get_conf()            # P0: already existing ParticleMap instance
          P1 = condor.ParticleMap(**conf) # P1: new ParticleMap instance with the same configuration as P0  
        """
        conf = {}
        conf.update(AbstractContinuousParticle.get_conf(self))
        conf["geometry"] = self.geometry
        if self.geometry == "custom":
            m, dx = self.get_original_map()
            conf["map3d"] = m
            conf["dx"] = dx
        if self.geometry == "spheroid":
            conf["flattening"] = self.flattening
        return conf
コード例 #16
0
    def get_conf(self):
        """
        Get configuration in form of a dictionary. Another identically configured ParticleMap instance can be initialised by:

        .. code-block:: python

          conf = P0.get_conf()            # P0: already existing ParticleMap instance
          P1 = condor.ParticleMap(**conf) # P1: new ParticleMap instance with the same configuration as P0  
        """
        conf = {}
        conf.update(AbstractContinuousParticle.get_conf(self))
        conf["geometry"] = self.geometry
        if self.geometry == "custom":
            m, dx = self.get_original_map()
            conf["map3d"] = m
            conf["dx"] = dx
        if self.geometry == "spheroid":
            conf["flattening"] = self.flattening
        return conf
コード例 #17
0
ファイル: particle_map.py プロジェクト: FXIhub/condor
    def __init__(
        self,
        geometry,
        diameter=None,
        diameter_variation=None,
        diameter_spread=None,
        diameter_variation_n=None,
        dx=None,
        map3d=None,
        map3d_filename=None,
        map3d_dataset=None,
        emd_id=None,
        rotation_values=None,
        rotation_formalism=None,
        rotation_mode="extrinsic",
        flattening=0.75,
        number=1.0,
        arrival="synchronised",
        position=None,
        position_variation=None,
        position_spread=None,
        position_variation_n=None,
        material_type=None,
        massdensity=None,
        atomic_composition=None,
        electron_density=None,
    ):
        # Initialise base class
        AbstractContinuousParticle.__init__(
            self,
            diameter=diameter,
            diameter_variation=diameter_variation,
            diameter_spread=diameter_spread,
            diameter_variation_n=diameter_variation_n,
            rotation_values=rotation_values,
            rotation_formalism=rotation_formalism,
            rotation_mode=rotation_mode,
            number=number,
            arrival=arrival,
            position=position,
            position_variation=position_variation,
            position_spread=position_spread,
            position_variation_n=position_variation_n,
            material_type=material_type,
            massdensity=massdensity,
            atomic_composition=atomic_composition,
            electron_density=electron_density,
        )

        # Check for valid geometry
        if geometry not in ["icosahedron", "cube", "sphere", "spheroid", "custom"]:
            log_and_raise_error(
                logger,
                "Cannot initialize %s because '%s' is not a valid argument for 'geometry'."
                % (kwargs["geometry"], self.__class__.__name__),
            )
            sys.exit(1)
        self.geometry = geometry

        # Has effect only for spheroids
        self.flattening = flattening

        # Init chache
        self._cache = {}
        self._dx_orig = None
        self._map3d_orig = None

        if geometry == "custom":
            if map3d is not None:
                if dx is None:
                    log_and_raise_error(
                        logger, "Cannot initialize custom geometry with 'map3d' but without grid spacing 'dx'."
                    )
                    sys.exit(1)
                else:
                    log_debug(logger, "Attempting to initialise custom geometry with 'map3d'.")
                    if map3d_filename is not None or map3d_dataset is not None or emd_id is not None:
                        log_and_raise_error(
                            logger, "Cannot initialize custom geometry because of ambiguous keyword arguments."
                        )
                        sys.exit(1)
                    self.set_custom_geometry_by_array(map3d, dx)
            elif map3d_filename is not None and map3d_dataset is not None:
                if dx is None:
                    log_and_raise_error(
                        logger,
                        "You are trying to initialise the map with an HDF5 file. You also need to provide the grid spacing 'dx'",
                    )
                    sys.exit(1)
                log_debug(
                    logger, "Attempting to initialise custom geometry with 'map3d_filename', 'map3d_dataset' and 'dx'."
                )
                if not map3d_filename.endswith(".h5"):
                    log_and_raise_error(logger, "Map file is not an HDF5 file!")
                    sys.exit(1)
                if map3d is not None or emd_id is not None:
                    log_and_raise_error(
                        logger, "Cannot initialize custom geometry because of ambiguous keyword arguments."
                    )
                    sys.exit(1)
                self.set_custom_geometry_by_h5file(map3d_filename, map3d_dataset, dx)
            elif map3d_filename is not None:
                if not map3d_filename.endswith(".map") and not map3d_filename.endswith(".mrc"):
                    log_and_raise_error(logger, "Map file is not an MRC/MAP file!")
                    sys.exit(1)
                self.set_custom_geometry_by_mrcfile(map3d_filename)
            elif emd_id is not None:
                log_debug(logger, "Attempting to initialise custom geometry with 'emd_id'.")
                if map3d_filename is not None or map3d_dataset is not None or map3d is not None or dx is not None:
                    log_and_raise_error(
                        logger, "Cannot initialize custom geometry because of ambiguous keyword arguments."
                    )
                    sys.exit(1)
                self.set_custom_geometry_by_emd_id(emd_id)

        if diameter is None:
            self.diameter_mean = self._dx_orig * self._map3d_orig.shape[-1]
コード例 #18
0
    def __init__(self,
                 geometry,
                 diameter=None,
                 diameter_variation=None,
                 diameter_spread=None,
                 diameter_variation_n=None,
                 dx=None,
                 map3d=None,
                 map3d_filename=None,
                 map3d_dataset=None,
                 emd_id=None,
                 rotation_values=None,
                 rotation_formalism=None,
                 rotation_mode="extrinsic",
                 flattening=0.75,
                 number=1.,
                 arrival="synchronised",
                 position=None,
                 position_variation=None,
                 position_spread=None,
                 position_variation_n=None,
                 material_type=None,
                 massdensity=None,
                 atomic_composition=None,
                 electron_density=None):
        # Initialise base class
        AbstractContinuousParticle.__init__(
            self,
            diameter=diameter,
            diameter_variation=diameter_variation,
            diameter_spread=diameter_spread,
            diameter_variation_n=diameter_variation_n,
            rotation_values=rotation_values,
            rotation_formalism=rotation_formalism,
            rotation_mode=rotation_mode,
            number=number,
            arrival=arrival,
            position=position,
            position_variation=position_variation,
            position_spread=position_spread,
            position_variation_n=position_variation_n,
            material_type=material_type,
            massdensity=massdensity,
            atomic_composition=atomic_composition,
            electron_density=electron_density)

        # Check for valid geometry
        if geometry not in [
                "icosahedron", "cube", "sphere", "spheroid", "custom"
        ]:
            log_and_raise_error(
                logger,
                "Cannot initialize %s because \'%s\' is not a valid argument for \'geometry\'."
                % (kwargs["geometry"], self.__class__.__name__))
            sys.exit(1)
        self.geometry = geometry

        # Has effect only for spheroids
        self.flattening = flattening

        # Init chache
        self._cache = {}
        self._dx_orig = None
        self._map3d_orig = None

        if geometry == "custom":
            if map3d is not None:
                if dx is None:
                    log_and_raise_error(
                        logger,
                        "Cannot initialize custom geometry with \'map3d\' without known grid spacing (\'dx\')."
                    )
                    sys.exit(1)
                else:
                    log_debug(
                        logger,
                        "Attempting to initialise custom geometry with \'map3d\'."
                    )
                    if map3d_filename is not None or map3d_dataset is not None or emd_id is not None:
                        log_and_raise_error(
                            logger,
                            "Cannot initialize custom geometry because of ambiguous keyword arguments."
                        )
                        sys.exit(1)
                    self.set_custom_geometry_by_array(map3d, dx)
            elif map3d_filename is not None and map3d_dataset is not None:
                if dx is None:
                    log_and_raise_error(
                        logger,
                        "You are trying to initialise the map with an HDF5 file. You also need to provide the grid spacing \'dx\'"
                    )
                    sys.exit(1)
                log_debug(
                    logger,
                    "Attempting to initialise custom geometry with \'map3d_filename\', \'map3d_dataset\' and \'dx\'."
                )
                if not map3d_filename.endswith(".h5"):
                    log_and_raise_error(logger,
                                        "Map file is not an HDF5 file!")
                    sys.exit(1)
                if map3d is not None or emd_id is not None:
                    log_and_raise_error(
                        logger,
                        "Cannot initialize custom geometry because of ambiguous keyword arguments."
                    )
                    sys.exit(1)
                self.set_custom_geometry_by_h5file(map3d_filename,
                                                   map3d_dataset, dx)
            elif map3d_filename is not None:
                if not map3d_filename.endswith(
                        ".map") and not map3d_filename.endswith(".mrc"):
                    log_and_raise_error(logger,
                                        "Map file is not an MRC/MAP file!")
                    sys.exit(1)
                self.set_custom_geometry_by_mrcfile(map3d_filename)
            elif emd_id is not None:
                log_debug(
                    logger,
                    "Attempting to initialise custom geometry with \'emd_id\'."
                )
                if map3d_filename is not None or map3d_dataset is not None or map3d is not None or dx is not None:
                    log_and_raise_error(
                        logger,
                        "Cannot initialize custom geometry because of ambiguous keyword arguments."
                    )
                    sys.exit(1)
                self.set_custom_geometry_by_emd_id(emd_id)

        if diameter is None:
            self.diameter_mean = self._dx_orig * self._map3d_orig.shape[-1]