public release 2.2.0 - see README.md and CHANGES.md for details
This commit is contained in:
@ -60,7 +60,7 @@ Multiple names can be specified and must be separated by spaces.
|
||||
| debug | debug files | delete |
|
||||
| model | output files in ETPAI format: complete simulation (a_-1_-1_-1_-1) | keep |
|
||||
| scan | output files in ETPAI format: scan (a_b_-1_-1_-1) | keep |
|
||||
| symmetry | output files in ETPAI format: symmetry (a_b_c_-1_-1) | delete |
|
||||
| domain | output files in ETPAI format: domain (a_b_c_-1_-1) | delete |
|
||||
| emitter | output files in ETPAI format: emitter (a_b_c_d_-1) | delete |
|
||||
| region | output files in ETPAI format: region (a_b_c_d_e) | delete |
|
||||
| report| final report of results | keep always |
|
||||
|
@ -105,12 +105,12 @@ is assigned to the project's cluster_generator attribute.
|
||||
1. Implement a count_emitters method in your project class
|
||||
if the project uses more than one emitter configurations.
|
||||
It must have same method contract as pmsco.cluster.ClusterGenerator.count_emitters.
|
||||
Specifically, it must return the number of emitter configurations of a given model, scan and symmetry.
|
||||
Specifically, it must return the number of emitter configurations of a given model, scan and domain.
|
||||
If there is only one configuration, the method does not need to be implemented.
|
||||
|
||||
2. Implement a create_cluster method in your project class.
|
||||
It must have same method contract as pmsco.cluster.ClusterGenerator.create_cluster.
|
||||
Specifically, it must return a cluster.Cluster object for the given model, scan, symmetry and emitter configuration.
|
||||
Specifically, it must return a cluster.Cluster object for the given model, scan, domain and emitter configuration.
|
||||
The emitter atoms must be marked according to the emitter configuration specified by the index argument.
|
||||
Note that, depending on the index.emit argument, all emitter atoms must be marked
|
||||
or only the ones of the corresponding emitter configuration.
|
||||
|
@ -1,32 +1,32 @@
|
||||
/*! @page pag_concepts_symmetry Symmetry
|
||||
/*! @page pag_concepts_domain Domain
|
||||
|
||||
\section sec_symmetry Symmetry and Domain Averaging
|
||||
\section sec_domain Domain Averaging
|
||||
|
||||
A _symmetry_ under PMSCO is a discrete variant of a set of calculation parameters (including the atomic cluster)
|
||||
A _domain_ under PMSCO is a discrete variant of a set of calculation parameters (including the atomic cluster)
|
||||
that is derived from the same set of model parameters
|
||||
and that contributes incoherently to the measured diffraction pattern.
|
||||
A symmetry may be represented by a special symmetry parameter which is not subject to optimization.
|
||||
A domain may be represented by special domain parameters that are not subject to optimization.
|
||||
|
||||
For instance, a real sample may have additional rotational domains that are not present in the cluster,
|
||||
increasing the symmetry from three-fold to six-fold.
|
||||
For instance, a real sample may have rotational domains that are not present in the cluster,
|
||||
changing the symmetry from three-fold to six-fold.
|
||||
Or, an adsorbate may be present in a number of different lateral configurations on the substrate.
|
||||
In the first case, it may be sufficient to fold calculated data in the proper way to generate the same symmetry as in the measurement.
|
||||
In the latter case, it may be necessary to execute a scattering calculation for each possible orientation or a representative number of possible orientations.
|
||||
|
||||
PMSCO provides the basic framework to spawn multiple calculations according to the number of symmetries (cf. \ref sec_tasks).
|
||||
The actual data reduction from multiple symmetries to one measurement needs to be implemented on the project level.
|
||||
PMSCO provides the basic framework to spawn multiple calculations according to the number of domains (cf. \ref sec_tasks).
|
||||
The actual data reduction from multiple domain to one measurement needs to be implemented on the project level.
|
||||
This section explains the necessary steps.
|
||||
|
||||
1. Your project needs to populate the pmsco.project.Project.symmetries list.
|
||||
For each symmetry, add a dictionary of symmetry parameters, e.g. <code>{'angle_azi': 15.0}</code>.
|
||||
There must be at least one symmetry in a project, otherwise no calculation is executed.
|
||||
1. Your project needs to populate the pmsco.project.Project.domains list.
|
||||
For each domain, add a dictionary of domain parameters, e.g. <code>{'angle_azi': 15.0}</code>.
|
||||
At least one domain must be declared in a project, otherwise no calculation is executed.
|
||||
|
||||
2. The project may apply the symmetry of a task to the cluster and parameter file if necessary.
|
||||
The pmsco.project.Project.create_cluster and pmsco.project.Project.create_params methods receive the index of the particular symmetry in addition to the model parameters.
|
||||
|
||||
3. The project combines the results of the calculations for the various symmetries into one dataset that can be compared to the measurement.
|
||||
The default method implemented in pmsco.project.Project just adds up all calculations with equal weight.
|
||||
If you need more control, you need to override the pmsco.project.Project.combine_symmetries method and implement your own algorithm.
|
||||
2. The project may use the domain index of a task to build the cluster and parameter file as necessary.
|
||||
The pmsco.project.Project.create_cluster and pmsco.project.Project.create_params methods receive the index of the particular domain in addition to the model parameters.
|
||||
|
||||
3. The project combines the results of the calculations for the various domains into one dataset that can be compared to the measurement.
|
||||
The default method implemented in pmsco.project.Project just adds up all calculations with customizable weight.
|
||||
It uses the special model parameters `wdom1`, `wdom2`, ... (if defined, default 1) to weight each domain.
|
||||
If you need more control, override the pmsco.project.Project.combine_domains method and implement your own algorithm.
|
||||
|
||||
*/
|
||||
|
@ -12,7 +12,7 @@ mandated by the project but also efficient calculations in a multi-process envir
|
||||
A concrete set of parameters is called @ref sec_task_model.
|
||||
2. The sample was measured multiple times or under different conditions (initial states, photon energy, emission angle).
|
||||
Each contiguous measured dataset is called a @ref sec_task_scan.
|
||||
3. The measurement averages over multiple inequivalent domains, cf. @ref sec_task_symmetry.
|
||||
3. The measurement averages over multiple inequivalent domains, cf. @ref sec_task_domain.
|
||||
4. The measurement includes multiple geometrically inequivalent emitters, cf. @ref sec_task_emitter.
|
||||
5. The calculation should be distributed over multiple processes that run in parallel to reduce the wall time, cf. @ref sec_task_region.
|
||||
|
||||
@ -24,7 +24,7 @@ as shown schematically in the following diagram.
|
||||
class CalculationTask {
|
||||
model
|
||||
scan
|
||||
symmetry
|
||||
domain
|
||||
emitter
|
||||
region
|
||||
..
|
||||
@ -55,7 +55,7 @@ class Scan {
|
||||
alphas
|
||||
}
|
||||
|
||||
class Symmetry {
|
||||
class Domain {
|
||||
index
|
||||
..
|
||||
rotation
|
||||
@ -75,13 +75,13 @@ class Region {
|
||||
|
||||
CalculationTask *-- Model
|
||||
CalculationTask *-- Scan
|
||||
CalculationTask *-- Symmetry
|
||||
CalculationTask *-- Domain
|
||||
CalculationTask *-- Emitter
|
||||
CalculationTask *-- Region
|
||||
|
||||
class Project {
|
||||
scans
|
||||
symmetries
|
||||
domains
|
||||
model_handler
|
||||
cluster_generator
|
||||
}
|
||||
@ -98,7 +98,7 @@ class ModelHandler {
|
||||
|
||||
Model ..> ModelHandler
|
||||
Scan ..> Project
|
||||
Symmetry ..> Project
|
||||
Domain ..> Project
|
||||
Emitter ..> ClusterGenerator
|
||||
Region ..> Project
|
||||
|
||||
@ -141,29 +141,29 @@ PMSCO runs a separate calculation for each scan file and compares the combined r
|
||||
This is sometimes called a _global fit_.
|
||||
|
||||
|
||||
\subsection sec_task_symmetry Symmetry
|
||||
\subsection sec_task_domain Domain
|
||||
|
||||
A _symmetry_ is a discrete variant of a set of calculation parameters (including the atomic cluster)
|
||||
A _domain_ is a discrete variant of a set of calculation parameters (including the atomic cluster)
|
||||
that is independent of the _model_ and contributes incoherently to the measured diffraction pattern.
|
||||
For instance, for a system that includes two inequivalent structural domains,
|
||||
two separate clusters have to be generated and calculated for each model.
|
||||
|
||||
The symmetry parameter is not subject to optimization.
|
||||
The domain parameter is not subject to optimization.
|
||||
However, if the branching ratio is unknown a priori, a model parameter can be introduced
|
||||
to control the relative contribution of a particular symmetry to the diffraction pattern.
|
||||
In that case, the @ref pmsco.project.Project.combine_symmetries method must be overridden.
|
||||
to control the relative contribution of a particular domain to the diffraction pattern.
|
||||
The basic @ref pmsco.project.Project.combine_domains method reads the special model parameters `wdom1`, `wdom2`, etc. to weight the individual domains.
|
||||
|
||||
A symmetry is identified by its index which is an index into the project's symmetries table (pmsco.project.Project.symmetries).
|
||||
It is up to the user project to give a physical description of the symmetry, e.g. a rotation angle,
|
||||
by assigning a meaningful value (e.g. a dictionary with key-value pairs) to the symmetries table.
|
||||
A domain is identified by its index which is an index into the project's domains table (pmsco.project.Project.domains).
|
||||
It is up to the user project to give a physical description of the domain, e.g. a rotation angle,
|
||||
by assigning a meaningful value (e.g. a dictionary with key-value pairs) to the domains table.
|
||||
The cluster generator can then read the value from the table rather than from constants in the code.
|
||||
|
||||
The figure shows two examples of symmetry parameters.
|
||||
The corresponding symmetry table could be set up like this:
|
||||
The figure shows two examples of domain parameters.
|
||||
The corresponding domains table could be set up like this:
|
||||
|
||||
@code{.py}
|
||||
project.add_symmetry = {'rotation': 0.0, 'registry': 0.0}
|
||||
project.add_symmetry = {'rotation': 30.0, 'registry': 0.0}
|
||||
project.add_domain({'rotation': 0.0, 'registry': 0.0})
|
||||
project.add_domain({'rotation': 30.0, 'registry': 0.0})
|
||||
@endcode
|
||||
|
||||
|
||||
@ -173,9 +173,9 @@ The _emitter_ component of the calculation task selects a specific emitter confi
|
||||
This is merely an index whose interpretation is up to the cluster generator.
|
||||
The default emitter handler enumerates the emitter index from 1 to the emitter count reported by the cluster generator.
|
||||
|
||||
The emitter count and list of emitters may depend on model, scan and symmetry.
|
||||
The emitter count and list of emitters may depend on model, scan and domain.
|
||||
|
||||
The cluster generator can tailor a cluster to the given model, scan, symmetry and emitter index.
|
||||
The cluster generator can tailor a cluster to the given model, scan, domain and emitter index.
|
||||
For example, in a large unit cell with many inequivalent emitters,
|
||||
the generator might return a small sub-cluster around the actual emitter for better calculation performance
|
||||
since the distant atoms of the unit cell do not contribute to the diffraction pattern.
|
||||
@ -237,20 +237,20 @@ scan
|
||||
|
||||
object ScanHandler
|
||||
|
||||
object "Sym: CalculationTask" as Sym {
|
||||
object "Domain: CalculationTask" as Domain {
|
||||
index = (i,j,k,-1,-1)
|
||||
model
|
||||
scan
|
||||
symmetry
|
||||
domain
|
||||
}
|
||||
|
||||
object "SymmetryHandler" as SymHandler
|
||||
object "DomainHandler" as DomainHandler
|
||||
|
||||
object "Emitter: CalculationTask" as Emitter {
|
||||
index = (i,j,k,l,-1)
|
||||
model
|
||||
scan
|
||||
symmetry
|
||||
domain
|
||||
emitter
|
||||
}
|
||||
|
||||
@ -260,7 +260,7 @@ object "Region: CalculationTask" as Region {
|
||||
index = (i,j,k,l,m)
|
||||
model
|
||||
scan
|
||||
symmetry
|
||||
domain
|
||||
emitter
|
||||
region
|
||||
}
|
||||
@ -270,14 +270,14 @@ object RegionHandler
|
||||
|
||||
Root "1" o.. "1..*" Model
|
||||
Model "1" o.. "1..*" Scan
|
||||
Scan "1" o.. "1..*" Sym
|
||||
Sym "1" o.. "1..*" Emitter
|
||||
Scan "1" o.. "1..*" Domain
|
||||
Domain "1" o.. "1..*" Emitter
|
||||
Emitter "1" o.. "1..*" Region
|
||||
|
||||
(Root, Model) .. ModelHandler
|
||||
(Model, Scan) .. ScanHandler
|
||||
(Scan, Sym) .. SymHandler
|
||||
(Sym, Emitter) .. EmitterHandler
|
||||
(Scan, Domain) .. DomainHandler
|
||||
(Domain, Emitter) .. EmitterHandler
|
||||
(Emitter, Region) .. RegionHandler
|
||||
|
||||
@enduml
|
||||
@ -293,7 +293,7 @@ and the tasks are passed back through the task handler stack.
|
||||
In this phase, each level joins the datasets from the sub-tasks to the data requested by the parent task.
|
||||
For example, at the lowest level, one result file is present for each region.
|
||||
The region handler gathers all files that correspond to the same parent task
|
||||
(i.e. have the same emitter, symmetry, scan and model attributes),
|
||||
(i.e. have the same emitter, domain, scan and model attributes),
|
||||
joins them to one file which includes all regions,
|
||||
links the file to the parent task and passes the result to the next higher level.
|
||||
|
||||
|
@ -10,7 +10,7 @@ digraph G {
|
||||
create_params;
|
||||
calc_modf;
|
||||
calc_rfac;
|
||||
comb_syms;
|
||||
comb_doms;
|
||||
comb_scans;
|
||||
}
|
||||
*/
|
||||
@ -24,11 +24,11 @@ digraph G {
|
||||
model_handler -> model_creator [constraint=false, label="optimize"];
|
||||
}
|
||||
|
||||
subgraph cluster_symmetry {
|
||||
label = "symmetry handler";
|
||||
subgraph cluster_domain {
|
||||
label = "domain handler";
|
||||
rank = same;
|
||||
sym_creator [label="expand models", group=creators];
|
||||
sym_handler [label="combine symmetries", group=handlers];
|
||||
dom_creator [label="expand models", group=creators];
|
||||
dom_handler [label="combine domains", group=handlers];
|
||||
}
|
||||
|
||||
subgraph cluster_scan {
|
||||
@ -47,15 +47,15 @@ digraph G {
|
||||
|
||||
calculator [label="calculator (EDAC)", shape=box];
|
||||
|
||||
model_creator -> sym_creator [label="model", style=bold];
|
||||
sym_creator -> scan_creator [label="models", style=bold];
|
||||
model_creator -> dom_creator [label="model", style=bold];
|
||||
dom_creator -> scan_creator [label="models", style=bold];
|
||||
scan_creator -> calc_creator [label="models", style=bold];
|
||||
calc_creator -> calculator [label="clusters,\rparameters", style=bold];
|
||||
|
||||
calculator -> calc_handler [label="output files", style=bold];
|
||||
calc_handler -> scan_handler [label="raw data files", style=bold];
|
||||
scan_handler -> sym_handler [label="combined scans", style=bold];
|
||||
sym_handler -> model_handler [label="combined symmetries", style=bold];
|
||||
scan_handler -> dom_handler [label="combined scans", style=bold];
|
||||
dom_handler -> model_handler [label="combined domains", style=bold];
|
||||
|
||||
mode [shape=parallelogram];
|
||||
mode -> model_creator [lhead="cluster_model"];
|
||||
@ -76,8 +76,8 @@ digraph G {
|
||||
calc_rfac [shape=cds, label="R-factor function"];
|
||||
calc_rfac -> model_handler [style=dashed];
|
||||
|
||||
comb_syms [shape=cds, label="symmetry combination rule"];
|
||||
comb_syms -> sym_handler [style=dashed];
|
||||
comb_doms [shape=cds, label="domain combination rule"];
|
||||
comb_doms -> dom_handler [style=dashed];
|
||||
|
||||
comb_scans [shape=cds, label="scan combination rule"];
|
||||
comb_scans -> scan_handler [style=dashed];
|
||||
|
@ -9,7 +9,7 @@ the public repository at https://gitlab.psi.ch/pearl/pmsco.
|
||||
For their own developments, users should clone the repository.
|
||||
Changes to common code should be submitted via pull requests.
|
||||
|
||||
The program code of PMSCO and its external programs is written in Python, C++ and Fortran.
|
||||
The program code of PMSCO and its external programs is written in Python 3.6, C++ and Fortran.
|
||||
The code will run in any recent Linux environment on a workstation or in a virtual machine.
|
||||
Scientific Linux, CentOS7, [Ubuntu](https://www.ubuntu.com/)
|
||||
and [Lubuntu](http://lubuntu.net/) (recommended for virtual machine) have been tested.
|
||||
@ -18,6 +18,7 @@ or cluster with 20-50 available processor cores is recommended.
|
||||
The program requires about 2 GB of RAM per process.
|
||||
|
||||
The recommended IDE is [PyCharm (community edition)](https://www.jetbrains.com/pycharm).
|
||||
[Spyder](https://docs.spyder-ide.org/index.html) is a good alternative with a better focus on scientific data.
|
||||
The documentation in [Doxygen](http://www.stack.nl/~dimitri/doxygen/index.html) format is part of the source code.
|
||||
The Doxygen compiler can generate separate documentation in HTML or LaTeX.
|
||||
|
||||
@ -38,7 +39,7 @@ The code depends on the following libraries:
|
||||
- SWIG
|
||||
- BLAS
|
||||
- LAPACK
|
||||
- Python 2.7 or 3.6
|
||||
- Python 3.6
|
||||
- Numpy >= 1.13
|
||||
- Python packages listed in the requirements.txt file
|
||||
|
||||
@ -50,12 +51,6 @@ and it's difficult to switch between different Python versions.
|
||||
On the PSI cluster machines, the environment must be set using the module system and conda (on Ra).
|
||||
Details are explained in the PEARL Wiki.
|
||||
|
||||
PMSCO runs under Python 2.7 or Python 3.6.
|
||||
Since Python 2 is being deprecated, Python 3.6 is recommended.
|
||||
Compatibility with Python 2.7 is currently maintained by using
|
||||
the [future package](http://python-future.org/compatible_idioms.html)
|
||||
but may be dropped at any time.
|
||||
|
||||
|
||||
\subsection sec_install_instructions Instructions
|
||||
|
||||
@ -108,7 +103,6 @@ conda install -q --yes -n pmsco \
|
||||
"numpy>=1.13" \
|
||||
scipy \
|
||||
ipython \
|
||||
mpi4py \
|
||||
matplotlib \
|
||||
nose \
|
||||
mock \
|
||||
@ -116,9 +110,13 @@ conda install -q --yes -n pmsco \
|
||||
statsmodels \
|
||||
swig \
|
||||
gitpython
|
||||
pip install periodictable attrdict fasteners
|
||||
pip install periodictable attrdict fasteners mpi4py
|
||||
@endcode
|
||||
|
||||
@note `mpi4pi` should be installed via pip, _not_ conda.
|
||||
conda might install its own MPI libraries, which can cause a conflict with system libraries.
|
||||
(cf. [mpi4py forum](https://groups.google.com/forum/#!topic/mpi4py/xpPKcOO-H4k))
|
||||
|
||||
\subsubsection sec_install_singularity Installation in Singularity container
|
||||
|
||||
A [Singularity](https://www.sylabs.io/guides/2.5/user-guide/index.html) container
|
||||
@ -149,7 +147,7 @@ or build one from a script provided by the PMSCO repository:
|
||||
|
||||
@code{.sh}
|
||||
cd ~/containers
|
||||
sudo singularity build pmsco.simg ~/containers/pmsco/extras/singularity/singularity_python2
|
||||
sudo singularity build pmsco.simg ~/containers/pmsco/extras/singularity/singularity_python3
|
||||
@endcode
|
||||
|
||||
To work with PMSCO, start an interactive shell in the container and switch to the pmsco environment.
|
||||
|
@ -24,7 +24,7 @@ Other programs may be integrated as well.
|
||||
|
||||
- angle or energy scanned XPD.
|
||||
- various scanning modes including energy, polar angle, azimuthal angle, analyser angle.
|
||||
- averaging over multiple symmetries (domains or emitters).
|
||||
- averaging over multiple domains and emitters.
|
||||
- global optimization of multiple scans.
|
||||
- structural optimization algorithms: particle swarm optimization, grid search, gradient search.
|
||||
- calculation of the modulation function.
|
||||
@ -39,8 +39,8 @@ To set up a new optimization project, you need to:
|
||||
- create a new directory under projects.
|
||||
- create a new Python module in this directory, e.g., my_project.py.
|
||||
- implement a sub-class of project.Project in my_project.py.
|
||||
- override the create_cluster, create_params, and create_domain methods.
|
||||
- optionally, override the combine_symmetries and combine_scans methods.
|
||||
- override the create_cluster, create_params, and create_model_space methods.
|
||||
- optionally, override the combine_domains and combine_scans methods.
|
||||
- add a global function create_project to my_project.py.
|
||||
- provide experimental data files (intensity or modulation function).
|
||||
|
||||
|
@ -38,15 +38,15 @@ custom_scan [label="scan\nconfiguration", shape=note];
|
||||
{rank=same; custom_scan; create_scan; combine_scan;}
|
||||
custom_scan -> create_scan [lhead=cluster_scan];
|
||||
|
||||
subgraph cluster_symmetry {
|
||||
label="symmetry handler";
|
||||
subgraph cluster_domain {
|
||||
label="domain handler";
|
||||
rank=same;
|
||||
create_symmetry [label="define\nsymmetry\ntasks"];
|
||||
combine_symmetry [label="gather\nsymmetry\nresults"];
|
||||
create_model_space [label="define\ndomain\ntasks"];
|
||||
combine_domain [label="gather\ndomain\nresults"];
|
||||
}
|
||||
custom_symmetry [label="symmetry\ndefinition", shape=cds];
|
||||
{rank=same; create_symmetry; combine_symmetry; custom_symmetry;}
|
||||
custom_symmetry -> combine_symmetry [lhead=cluster_symmetry];
|
||||
custom_domain [label="domain\ndefinition", shape=cds];
|
||||
{rank=same; create_model_space; combine_domain; custom_domain;}
|
||||
custom_domain -> combine_domain [lhead=cluster_domain];
|
||||
|
||||
subgraph cluster_emitter {
|
||||
label="emitter handler";
|
||||
@ -80,11 +80,11 @@ create_cluster -> edac;
|
||||
create_model -> create_scan [label="level 1 tasks"];
|
||||
evaluate_model -> combine_scan [label="level 1 results", dir=back];
|
||||
|
||||
create_scan -> create_symmetry [label="level 2 tasks"];
|
||||
combine_scan -> combine_symmetry [label="level 2 results", dir=back];
|
||||
create_scan -> create_model_space [label="level 2 tasks"];
|
||||
combine_scan -> combine_domain [label="level 2 results", dir=back];
|
||||
|
||||
create_symmetry -> create_emitter [label="level 3 tasks"];
|
||||
combine_symmetry -> combine_emitter [label="level 3 results", dir=back];
|
||||
create_model_space -> create_emitter [label="level 3 tasks"];
|
||||
combine_domain -> combine_emitter [label="level 3 results", dir=back];
|
||||
|
||||
create_emitter -> create_region [label="level 4 tasks"];
|
||||
combine_emitter -> combine_region [label="level 4 results", dir=back];
|
||||
|
@ -28,7 +28,7 @@ remove_task_file()
|
||||
class CalcID {
|
||||
model
|
||||
scan
|
||||
sym
|
||||
domain
|
||||
emit
|
||||
region
|
||||
}
|
||||
|
@ -43,15 +43,15 @@ parent = 2, -1, -1, -1, -1
|
||||
model = {'d': 7}
|
||||
}
|
||||
|
||||
Scan11 o.. Sym111
|
||||
Scan11 o.. Dom111
|
||||
|
||||
object Sym111 {
|
||||
object Dom111 {
|
||||
id = 1, 1, 1, -1, -1
|
||||
parent = 1, 1, -1, -1, -1
|
||||
model = {'d': 5}
|
||||
}
|
||||
|
||||
Sym111 o.. Emitter1111
|
||||
Dom111 o.. Emitter1111
|
||||
|
||||
object Emitter1111 {
|
||||
id = 1, 1, 1, 1, -1
|
||||
@ -90,18 +90,18 @@ scan
|
||||
|
||||
object ScanHandler
|
||||
|
||||
object "Sym: CalculationTask" as Sym {
|
||||
object "Domain: CalculationTask" as Domain {
|
||||
model
|
||||
scan
|
||||
symmetry
|
||||
domain
|
||||
}
|
||||
|
||||
object "SymmetryHandler" as SymHandler
|
||||
object "DomainHandler" as DomainHandler
|
||||
|
||||
object "Emitter: CalculationTask" as Emitter {
|
||||
model
|
||||
scan
|
||||
symmetry
|
||||
domain
|
||||
emitter
|
||||
}
|
||||
|
||||
@ -110,7 +110,7 @@ object EmitterHandler
|
||||
object "Region: CalculationTask" as Region {
|
||||
model
|
||||
scan
|
||||
symmetry
|
||||
domain
|
||||
emitter
|
||||
region
|
||||
}
|
||||
@ -120,14 +120,14 @@ object RegionHandler
|
||||
|
||||
Root "1" o.. "1..*" Model
|
||||
Model "1" o.. "1..*" Scan
|
||||
Scan "1" o.. "1..*" Sym
|
||||
Sym "1" o.. "1..*" Emitter
|
||||
Scan "1" o.. "1..*" Domain
|
||||
Domain "1" o.. "1..*" Emitter
|
||||
Emitter "1" o.. "1..*" Region
|
||||
|
||||
(Root, Model) .. ModelHandler
|
||||
(Model, Scan) .. ScanHandler
|
||||
(Scan, Sym) .. SymHandler
|
||||
(Sym, Emitter) .. EmitterHandler
|
||||
(Scan, Domain) .. DomainHandler
|
||||
(Domain, Emitter) .. EmitterHandler
|
||||
(Emitter, Region) .. RegionHandler
|
||||
|
||||
@enduml
|
||||
|
@ -4,7 +4,7 @@
|
||||
class CalculationTask {
|
||||
model
|
||||
scan
|
||||
symmetry
|
||||
domain
|
||||
emitter
|
||||
region
|
||||
..
|
||||
@ -35,7 +35,7 @@ class Scan {
|
||||
alphas
|
||||
}
|
||||
|
||||
class Symmetry {
|
||||
class Domain {
|
||||
index
|
||||
..
|
||||
rotation
|
||||
@ -55,13 +55,13 @@ class Region {
|
||||
|
||||
CalculationTask *-- Model
|
||||
CalculationTask *-- Scan
|
||||
CalculationTask *-- Symmetry
|
||||
CalculationTask *-- Domain
|
||||
CalculationTask *-- Emitter
|
||||
CalculationTask *-- Region
|
||||
|
||||
class Project {
|
||||
scans
|
||||
symmetries
|
||||
domains
|
||||
model_handler
|
||||
cluster_generator
|
||||
}
|
||||
@ -78,7 +78,7 @@ class ModelHandler {
|
||||
|
||||
Model ..> ModelHandler
|
||||
Scan ..> Project
|
||||
Symmetry ..> Project
|
||||
Domain ..> Project
|
||||
Emitter ..> ClusterGenerator
|
||||
Region ..> Project
|
||||
|
||||
|
@ -9,14 +9,6 @@ name
|
||||
code
|
||||
}
|
||||
|
||||
class Scan << (T,orchid) >> {
|
||||
id
|
||||
..
|
||||
job_id
|
||||
..
|
||||
name
|
||||
}
|
||||
|
||||
class Job << (T,orchid) >> {
|
||||
id
|
||||
..
|
||||
@ -30,6 +22,22 @@ datetime
|
||||
description
|
||||
}
|
||||
|
||||
class Tag << (T,orchid) >> {
|
||||
id
|
||||
..
|
||||
..
|
||||
key
|
||||
}
|
||||
|
||||
class JobTag << (T,orchid) >> {
|
||||
id
|
||||
..
|
||||
tag_id
|
||||
job_id
|
||||
..
|
||||
value
|
||||
}
|
||||
|
||||
class Model << (T,orchid) >> {
|
||||
id
|
||||
..
|
||||
@ -46,7 +54,7 @@ id
|
||||
model_id
|
||||
..
|
||||
scan
|
||||
sym
|
||||
domain
|
||||
emit
|
||||
region
|
||||
rfac
|
||||
@ -69,8 +77,9 @@ value
|
||||
}
|
||||
|
||||
Project "1" *-- "*" Job
|
||||
Job "1" *-- "*" JobTag
|
||||
Tag "1" *-- "*" JobTag
|
||||
Job "1" *-- "*" Model
|
||||
Job "1" *-- "*" Scan
|
||||
Param "1" *-- "*" ParamValue
|
||||
Model "1" *-- "*" ParamValue
|
||||
Model "1" *-- "*" Result
|
||||
|
@ -20,7 +20,7 @@ repeat
|
||||
partition "generate tasks" {
|
||||
:define model tasks;
|
||||
:define scan tasks;
|
||||
:define symmetry tasks;
|
||||
:define domain tasks;
|
||||
:define emitter tasks;
|
||||
:define region tasks;
|
||||
}
|
||||
@ -34,7 +34,7 @@ end fork
|
||||
partition "collect results" {
|
||||
:gather region results;
|
||||
:gather emitter results;
|
||||
:gather symmetry results;
|
||||
:gather domain results;
|
||||
:gather scan results;
|
||||
:gather model results;
|
||||
}
|
||||
|
@ -5,10 +5,10 @@ package pmsco {
|
||||
mode
|
||||
code
|
||||
scans
|
||||
symmetries
|
||||
domains
|
||||
{abstract} create_cluster()
|
||||
{abstract} create_params()
|
||||
{abstract} create_domain()
|
||||
{abstract} create_model_space()
|
||||
}
|
||||
|
||||
}
|
||||
@ -18,7 +18,7 @@ package projects {
|
||||
__init__()
|
||||
create_cluster()
|
||||
create_params()
|
||||
create_domain()
|
||||
create_model_space()
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -4,13 +4,13 @@ abstract class Project {
|
||||
mode : str = "single"
|
||||
code : str = "edac"
|
||||
scans : Scan [1..*]
|
||||
symmetries : dict [1..*]
|
||||
domains : dict [1..*]
|
||||
cluster_generator : ClusterGenerator
|
||||
handler_classes
|
||||
files : FileTracker
|
||||
{abstract} create_cluster() : Cluster
|
||||
{abstract} create_params() : Params
|
||||
{abstract} create_domain() : Domain
|
||||
{abstract} create_params() : CalculatorParams
|
||||
{abstract} create_model_space() : ModelSpace
|
||||
}
|
||||
|
||||
class Scan {
|
||||
@ -28,7 +28,7 @@ class Scan {
|
||||
import_scan_file()
|
||||
}
|
||||
|
||||
class Domain {
|
||||
class ModelSpace {
|
||||
start : dict
|
||||
min : dict
|
||||
max : dict
|
||||
@ -37,7 +37,7 @@ class Domain {
|
||||
get_param(name)
|
||||
}
|
||||
|
||||
class Params {
|
||||
class CalculatorParams {
|
||||
title
|
||||
comment
|
||||
cluster_file
|
||||
|
@ -25,7 +25,7 @@ stop
|
||||
|
||||
|pmsco|
|
||||
start
|
||||
:define task (model, scan, symmetry, emitter, region);
|
||||
:define task (model, scan, domain, emitter, region);
|
||||
|project|
|
||||
:create cluster;
|
||||
:create parameters;
|
||||
|
@ -5,16 +5,16 @@ package pmsco {
|
||||
mode
|
||||
code
|
||||
scans
|
||||
symmetries
|
||||
domains
|
||||
cluster_generator
|
||||
handler_classes
|
||||
__
|
||||
{abstract} create_cluster()
|
||||
{abstract} create_params()
|
||||
{abstract} create_domain()
|
||||
{abstract} create_model_space()
|
||||
..
|
||||
combine_scans()
|
||||
combine_symmetries()
|
||||
combine_domains()
|
||||
combine_emitters()
|
||||
calc_modulation()
|
||||
calc_rfactor()
|
||||
@ -34,9 +34,9 @@ package projects {
|
||||
setup()
|
||||
..
|
||||
create_params()
|
||||
create_domain()
|
||||
create_model_space()
|
||||
..
|
||||
combine_symmetries()
|
||||
combine_domains()
|
||||
}
|
||||
|
||||
class UserClusterGenerator {
|
||||
|
Reference in New Issue
Block a user