StoG
This module defines the StoG class that tries to replicate the previous stog program behavior in an organized fashion with the ability to re-construct the workflow.
- exception pystog.stog.NoInputFilesException[source]
Bases:
ExceptionException when no files are given to process
- class pystog.stog.StoG(**kwargs)[source]
Bases:
objectThe StoG class is used to put together the Converter, Transformer, and FourierFilter class functionalities to reproduce the original stog Fortran program behavior. This class is meant to put together the functionality of the classes into higher-level calls to construct workflows for merging and processing multiple recprical space functions into a final output real space function.
This pythonized-version of the original Fortran stog uses numpy for data storage, organization, and manipulation “under the hood”.
- Examples:
>>> import json >>> from pystog import StoG >>> with open("../data/examples/argon_pystog.json", 'r') as f: >>> kwargs = json.load(f) >>> stog = StoG(**kwargs) >>> stog.read_all_data() >>> stog.merge_data() >>> stog.write_out_merged_data()
- property GKofR_title
The title of the
with
all corrections applied.- Getter:
Returns the current title for this function
- Setter:
Sets the title for this function
- Type:
str
- add_dataset(info, yscale=1.0, yoffset=0.0, xoffset=0.0, ydecimals=16, **kwargs)[source]
Takes the info with the dataset and manipulations, such as scales, offsets, cropping, etc., and creates an individual numpy array for the pattern.
- Parameters:
info (dict) – Dict with information for dataset (filename, manipulations, etc.)
yscale (float) – Scale factor for the Y data (i.e.
,
, etc.)yoffset (float) – Offset factor for the Y data (i.e.
,
, etc.)xoffset – Offset factor for the X data (i.e.
)
- append_file(new_file)[source]
Appends a file to the file list
- Parameters:
new_file (str) – New file name to append
- Returns:
File list with appended new_file
- Return type:
list
- apply_lorch(q, sq, r, dsq=None)[source]
Performs the Fourier transform using the Lorch dampening correction on the merged
from
the sq_master dictionary to generate the
desired real space function with
this correction. The results from both reciprocal space and
real space are:Saved back to the respective “master” dictionaries
Saved to files via the stem_name
Returned from function
- Parameters:
q (numpy.array or list) –
-space vectorsq (numpy.array or list) –
vectorr (numpy.array or list) –
-space vectordsq (numpy.array or list, optional) –
uncertainty vector
- Returns:
Returns a tuple with
and selected real space function- Return type:
tuple of numpy.array
- static apply_scales_and_offset(x, y, dy=None, yscale=1.0, yoffset=0.0, xoffset=0.0)[source]
Applies scales to the Y-axis and offsets to both X and Y axes.
- Parameters:
x (numpy.array or list) – X-axis data
y (numpy.array or list) – Y-axis data
yscale (float) – Y-axis scale factor
yoffset (float) – Y-axis offset factor
xoffset (float) – X-axis offset factor
- Returns:
X and Y vectors after scales and offsets applied
- Return type:
numpy.array pair
- property bcoh_sqrd
The average coherent scattering length, squared:
=
where the subscript
implies for atom type
,
is the concentration of
,
is the coherent scattering length of
,
and
is the complex coherent scattering length of 
The real part of the
term can be found
from the Coh b column of the NIST neutron scattering
length and cross section table found here:
https://www.ncnr.nist.gov/resources/n-lengths/list.htmlUnits are in
in the table for the
term.
Thus,
has units of
(and what PyStoG expects). NOTE: 100
== 1
.- Getter:
Return the value of

- Setter:
Set the value for

- Type:
float
- property btot_sqrd
The average coherent scattering length, squared:
=
=
where the subscript
implies for atom type
,
is the concentration of
and
is the total cross-section of 
The real part of the
term can be found
from the Scatt xs column of the NIST neutron scattering
length and cross section table found here:
https://www.ncnr.nist.gov/resources/n-lengths/list.htmlUnits are in
(=100
) in the table
for the
term. Thus, you must multiply
by 100 to go from
to
(what PyStoG expects).- Getter:
Return the value of

- Setter:
Set the value for

- Type:
float
- converter
The converter attribute defines the Converter which is used to do all inner conversions necessary to go from the input reciprocal space functions, produce diagnostics for the selected real space functions, and finally output the desired real space function Must of type
pystog.converter.Converter
- property density
The number density used (atoms/
) used for the
term in the equations- Getter:
Return the density value
- Setter:
Set the density value
- Type:
float
- property dgr_master
The “master” dictionary for the real space function uncertainties that are generated for each processing step.
- Getter:
Returns the current “master” real space uncertainty dictionary generated up to the current step in the workflow.
- Setter:
Sets the “master” real space uncertainty dictionary
- Type:
dict[str:numpy.ndarray]
- property dr
The real space function X axis data,
-space vector- Getter:
Return the
vector- Setter:
Set the
vector- Type:
numpy.array
- property dsq_master
The “master” dictionary for the
uncertainties
that are generated for each processing step.- Getter:
Returns the current “master”
uncertainty
dictionary generated up to the current step in the workflow.- Setter:
Sets the “master”
uncertainty dictionary- Type:
dict[str:numpy.ndarray]
- extend_file_list(new_files)[source]
Extend the file list with a list of new files
- Parameters:
new_files – List of new files
- Returns:
File list extended by new_files
- Return type:
list
- property files
The files that contain the reciprocal space data to merge together.
- Getter:
Current list of files to merge
- Setter:
Set the list of files to merg
- Type:
list
- filter
The filter attribute defines the FourierFilter which is used to do all Fourier filtering if the fourier_filter_cutoff attribute is supplied. Must of type
pystog.fourier_filter.FourierFilter
- fourier_filter()[source]
Performs the Fourier filter on the sq_master pattern to generate the desired real space function with this correction. The results from both reciprocal space and real space are:
Saved back to the respective “master” dictionaries
Saved to files via the stem_name
Returned from function
- Returns:
Returns a tuple with
,
the selected real space function,
,
and
functions- Return type:
tuple of numpy.array
- property fourier_filter_cutoff
This sets the cutoff in
-space for the Fourier
filter. The minimum is automatically 0.0. Thus, from
0.0 to fourier_filter_cutoff is reverse transformed,
subtracted in reciprocal space, and then the difference
is back-transformed.See
pystog.fourier_filter.FourierFilterfor more information.- Getter:
Return currently set cutoff value
- Setter:
Set cutoff value
- Type:
float
- property fq_title
The title of the
function after
merging and a fourier filter correction.- Getter:
Returns the current title for this function
- Setter:
Sets the title for this function
- Type:
str
- property gr_ft_title
The title for the real space function after both merging and a fourier filter correction
- Getter:
Returns the current title for this function
- Setter:
Sets the title for this function
- Type:
str
- property gr_lorch_title
The title for the real space function with the lorch correction
- Getter:
Returns the current title for this function
- Setter:
Sets the title for this function
- Type:
str
- property gr_master
The “master” dictionary for the real space functions that are generated for each processing step.
- Getter:
Returns the current “master” real space functions dictionary generated up to the current step in the workflow.
- Setter:
Sets the “master” real space function dictionary
- Type:
dict[str:numpy.ndarray]
- property gr_title
The title of the real space function directly after merging the reciprocal space functions without any further corrections.
- Getter:
Returns the current title for this function
- Setter:
Sets the title for this function
- Type:
str
- property lorch_flag
This sets the option to perform the Lorch dampening correction for the
range. Generally, will help reduce Fourier “ripples”,
or AKA “Gibbs phenomenon”, due to discontinuity at
if the reciprocal space function is not at the
limit.
Yet, will also broaden real space function peaks, possibly dubiously.See
pystog.transformer.Transformerfourier_transform and _low_x_correction methods for where this is applied.- Getter:
Return bool of applying the Lorch dampening correction
- Setter:
Set whether the correction is applied or not
- Type:
bool
- property low_q_correction
This sets the option to perform a low-
correction
for the omitted
range.See
pystog.transformer.Transformer_low_x_correction method for more information.- Getter:
Return bool of applying the low-
correction- Setter:
Set whether the correction is applied or not
- Type:
bool
- merge_data()[source]
Merges the reciprocal space data stored in the reciprocal_individuals numpy array into a single, merged recirocal space function. Stores the S(Q) result in sq_master dictionary using sq_title (default: “S(Q) Merged”).
Also, converts this merged
into
via the
Converter class and applies any modification
specified in merged_opts dict attribute, specified
by the ‘Q[S(Q)-1]’ key of the dict. If there is modification,
this modified
will be converted to
and replace the
directly after merge.Example dict of merged_opts for scaling of
by 2 and then offsetting
by 5:{ "Merging": { "Y": { "Offset": 0.0, "Scale": 2.0 }, "Q[S(Q)-1]": { "Y": "Offset": 5.0, "Scale": 1.0 } } }
- property merged_opts
This sets the options to perform after merging the reciprocal space functions together, such as an overall offset and scale.
- Getter:
Return the options currently set
- Setter:
Set the options for the merged pattern
- Type:
dict
- property q_master
The “master” dictionary for the domain :math:Q` of the reciprocal space functions that are generated for each processing step.
- Getter:
Returns the current “master”
reciprocal space
functions dictionary generated up to the current step in
the workflow.- Setter:
Sets the “master”
dictionary- Type:
dict[str:numpy.ndarray]
- property qmax
The
value to use for the Fourier
transforms (from recirocal space -> real space). This
overrides xmax attribute if qmax < xmax.- Getter:
Returns the current set value
- Setter:
Set the qmax value for the Fourier transforms
- Type:
float
- property qmin
The
value to use for the Fourier
transforms (from recirocal space -> real space). This
overrides xmin attribute if xmin < qmin.- Getter:
Returns the current set value
- Setter:
Set the
value for the Fourier transforms- Type:
float
- property qsq_minus_one_title
The title of the
function
directly after merging the reciprocal space
functions without any further corrections.- Getter:
Returns the current title for this function
- Setter:
Sets the title for this function
- Type:
str
- property r_master
The “master” dictionary for the domain :math:r` of the real space functions that are generated for each processing step.
- Getter:
Returns the current “master”
real space
functions dictionary generated up to the current step in
the workflow.- Setter:
Sets the “master”
dictionary- Type:
dict[str:numpy.ndarray]
- property rdelta
The
for the
-space vector- Getter:
Return
value- Setter:
Set the
value
and update
-space vector
via the dr attribute- Type:
value
- read_all_data(**kwargs)[source]
Reads all the data from the files attribute Uses the read_dataset method on each file.
Will append all datasets to the numpy storage array, reciprocal_individuals, and also convert to
and add to
the sq_individuals numpy storage array in add_dataset method
via read_dataset method.
- read_dataset(info, xcol=0, ycol=1, dycol=2, sep='\\s+', skiprows=2, **kwargs)[source]
Reads an individual file and uses the add_dataset method to apply all dataset manipulations, such as scales, offsets, cropping, etc.
- Parameters:
info (dict) – Dict with information for dataset (filename, manipulations, etc.)
xcol (int) – Column in data file for X-axis
ycol (int) – Column in data file for Y-axis
dycol (int) – Column in data file for Y uncertainty
sep (raw string) – Separator for the file used by numpy.loadtxt
skiprows (int) – Number of rows to skip. Passed to numpy.loadtxt
- read_nexus_file_by_bank(nexus_file, bank, title, err=False, **kwargs)[source]
Reads an individual file bank by bank and uses the extract_xy to handle extraction and extract_path_from_title to obtain coord paths
- property real_space_function
The real space function to use throughoutt the processing
- Getter:
Returns the currently select real space function
- Setter:
Set the selected real space function and updates other title attributes that rely on this in their name.
- Type:
str
- property reciprocal_individuals
The storage array for the input reciprocal space functions loaded from files and with the loading processing from add_dataset class method.
- Getter:
Returns the current individual, input reciprocal space functions numpy array. The dimensions is
where N is the number
of patterns stored and M is the length of the patterns.- Setter:
Sets the numpy array
- Type:
numpy.ndarray
- property rmax
The
valuefor the
-space vector- Getter:
Return
value- Setter:
Set the
value and update
-space vector
via the dr attribute- Type:
value
- property rmin
The
valuefor the
-space vector- Getter:
Return
value- Setter:
Set the
value and update
-space vector
via the dr attribute- Type:
value
- property sq_ft_title
The title of the
function after
merging and a fourier filter correction.- Getter:
Returns the current title for this function
- Setter:
Sets the title for this function
- Type:
str
- property sq_individuals
The storage array for the
generated from each input
reciprocal space dataset in reciprocal_individuals array.- Getter:
Returns the current individual
reciprocal space
functions numpy array.
The dimensions is
where N is the number
of patterns stored and M is the length of the patterns.- Setter:
Sets the numpy array
- Type:
numpy.ndarray
- property sq_master
The “master” dictionary for the
reciprocal
space functions that are generated for each processing step.- Getter:
Returns the current “master”
reciprocal space
functions dictionary generated up to the current step in
the workflow.- Setter:
Sets the “master”
function dictionary- Type:
dict[str:numpy.ndarray]
- property sq_title
The title of the
function directly after merging
the reciprocal space functions without any further corrections.- Getter:
Returns the current title for this function
- Setter:
Sets the title for this function
- Type:
str
- property stem_name
A stem name to prefix for all output files. Replicates the stog Fortran program behavior.
- Getter:
Return the currently set stem name
- Setter:
Set the stem name for output files
- Type:
str
- transform_merged()[source]
Performs the Fourier transform on the merged sq_master pattern to generate the desired real space function with this correction. The results for real space are: the domain is saved to the r_master dictionary and the range is saved to the gr_master dictionary, with both using the gr_title for the key of the dictionaries.
- transformer
The transformer attribute defines the Transformer which is used to do all Fourier transforms necessary from reciprocal space to real space and vice versa. Must of type
pystog.transformer. Transformer
- write_out_ft(filename=None)[source]
Helper function for writing out the Fourier filter correction.
- Parameters:
filename (str) – Filename to write to
- write_out_ft_gr(filename=None)[source]
Helper function for writing out the Fourier filtered real space function
- Parameters:
filename (str) – Filename to write to
- write_out_ft_sq(filename=None)[source]
Helper function for writing out the Fourier filtered

- Parameters:
filename (str) – Filename to write to
- write_out_lorched_gr(filename=None)[source]
Helper function for writing out the Lorch dampened real space function
- Parameters:
filename (str) – Filename to write to
- write_out_merged_gr(filename=None)[source]
Helper function for writing out the merged real space function
- Parameters:
filename (str) – Filename to write to
- write_out_merged_sq(filename=None)[source]
Helper function for writing out the merged

- Parameters:
filename (str) – Filename to write to
- write_out_rmc_fq(filename=None)[source]
Helper function for writing out the output

- Parameters:
filename (str) – Filename to write to
- write_out_rmc_gr(filename=None)[source]
Helper function for writing out the output

- Parameters:
filename (str) – Filename to write to
- property xmax
The maximum X value of all datasets to use for Fourier transforms (from recirocal space -> real space)
- Getter:
Returns the current set value
- Setter:
Set the xmax value for the Fourier transforms
- Type:
float
- property xmin
The minimum X value of all datasets to use for Fourier transforms (from recirocal space -> real space)
- Getter:
Returns the current set value
- Setter:
Set the xmin value for the Fourier transforms
- Type:
float