## Smart Lorentz Gauss #

### What the package can do for you #

This package provides functionalities to compute an n-dimensional mixed Lorentz-Gauss line shape, also called an n-dimensional Pseudo-Voigt function. Typically such functions occur in spectroscopic data originating from electro-magnetic radiation. The function can for example be used for fitting or deconvolution of such data, or for simulating (computing) spectra, i.e. as a superposition of several shapes with different parameters.

### The major API functionalities #

• class `LorentzGauss`
1. The following example constructs a LorentzGauss shape with the given amplitude, center, width, and Gaussian fraction.

`LorentzGauss lg = new LorentzGauss.fromPars(amplitude, [center], [width], [0.2]);`

2. The following example computes the value of the above shape value at position x.

`double val = lg.getValueAt(x]);`

3. The following example computes an array of size NPOINTS containing a pure Lorentzian with amplitude 100. The maximum will be at index NPOINTS/4, and line width 20 points at half maximum height.

`Float64List lor = LorentzGauss.array1D(NPOINTS, 100.0, NPOINTS~/4, 20, 0.0, null);`

4. The methods `array1D` and `array2D` return an array or a matrix containing a 1D or 2D Lorentz-Gauss function, respectively.

5. The class `Spectrum2D` computes a sum of 2D Lorentz-Gauss functions, a '2D spectrum' of such functions.

`smart_arrays_base`: Basic functions for 1D and 2D arrays

`smart_arrays_numerics`: Numerics with 1D and 2D arrays

`smart_arrays_compress`: Compress 1D and 2D arrays to a smaller size.

`smart_arrays_sample_data`: Computes 1D and 2D arrays containing sample data.

`smart_arrays_dbstore`: Store 1D and 2D arrays along with metadata on the local device.

`smart_arrays_plot_polyline`: Plot 1D arrays as polyline along with axes and more.

`smart_arrays_peaks`: Detect peaks in 1D and 2D arrays.

`smart_arrays_contour_finder`: Contours the three-dimensional surface represented by the values f(x,y) of a matrix.

`smart_arrays_lmfit`: Fits (x, y) data given as arrays to a specified model function using the Levenberg-Marquardt algorithm.

`smart_signal_processing`: Fourier transform and more.

`smart_dialogs`: Easy-to-use dialogs in Web applications

## Smart Lorentz Gauss #

### Version history #

2.0.0 - 2019-03-14 First version available on pub site

2.0.1 - 2019-03-14 Minor doc changes

2.0.2 - 2019-03-14 Minor doc changes

2.0.7 - 2019-08-07 Fixed health suggestions of pub.dev

2.0.9 - 2019-09-01 Result of example is displayed in the browser

2.0.12 - 2019-09-05 Example updated with mixed shaped

2.0.13 - 2019-09-08 Added function `array1D`

2.0.14 - 2019-09-08 Function `array1D` now static member of LorentzGauss class

2.1.0 - 2019-09-18 Added method `array2D`.

2.1.1 - 2019-09-22 Fixed method `array2D`, add class `Spectrum2D`

2.1.2 - 2019-09-23 Renamed class `Spectrum2D` to class `LorentzGaussMatrix`

example/example.dart

``````// Copyright (c) 2019, Dr. Bruno Guigas. All rights reserved. Use of this source
// code is governed by a BSD-style license that can be found in the LICENSE file.
import 'dart:typed_data';
import 'dart:html';
import 'dart:convert';

import 'package:smart_lorentz_gauss/smart_lorentz_gauss.dart';
import 'package:smart_arrays_plot_polyline/smart_arrays_plot_polyline.dart';

/// Creates three arrays containing a Lorentzian, a Gaussian and a mixed
/// line shape. The resulting curves are displayed in the browser.
main() {
final int NPOINTS = 200; // array length
List<double> height = [100, 100, 100], // function value of line shape maxima
center = [120, 120, 120], // the maxima should be at this array position
width = [15, 15, 15]; // width at half height of maximum (points)
Float64List lor_array = Float64List(NPOINTS), // array for the Lorentzian
gaus_array = Float64List(NPOINTS), // array for the Gaussian
mixed_array = Float64List(NPOINTS); // array for the mixed shape

// construct 3 line shapes, 100% Lorentzian, 100% Gaussian, mixed 50% / 50%
LorentzGauss lor =
LorentzGauss.fromPars(height[0], [center[0]], [width[0]], [0.0]),
gaus = LorentzGauss.fromPars(height[1], [center[1]], [width[1]], [1.0]),
mixed = LorentzGauss.fromPars(height[1], [center[1]], [width[1]], [0.5]);

// fill arrays with line shape values
for (int k = 0; k < NPOINTS; k++) {
lor_array[k] = lor.getValueAt([k.toDouble()]);
gaus_array[k] = gaus.getValueAt([k.toDouble()]);
mixed_array[k] = mixed.getValueAt([k.toDouble()]);
}

plotResult(
[lor_array, gaus_array, mixed_array]); // show computed arrays in browser
}

/// Displays the [arrays] computed by [main] in the browser using the
/// package 'smart_arrays_plot_polyline'.
void plotResult(List<Float64List> arrays) {
// get divs from 'example.html' (application and plot containers)
DivElement appDiv = (querySelector("#app_div") as DivElement);
DivElement plotDiv = (querySelector("#plot_div") as DivElement);

// the plot will take all available space of [appDiv] in this example
plotDiv.style
..width = "\${appDiv.clientWidth}px"
..height = "\${appDiv.clientHeight}px";

// setup some polyline, axis and legend attributes
List<Map<PyA, String>> plotAttr = [
{PyA.YPOSITION_ZERO: "0.8"}, // rel. y position of the shape value 0
{PyA.YPOSITION_ZERO: "0.8"},
{PyA.YPOSITION_ZERO: "0.8"}
];

// x axis labeling
Map<AxA, String> xaxisAttr = {
AxA.PHYS_X_START: "0",
AxA.PHYS_X_WIDTH: "200",
AxA.LEGENDTEXT: "Number of points"
};

// y axis labeling
Map<AxA, String> yaxisAttr = {AxA.LEGENDTEXT: "Function value"};

// legend text and position
Map<LegA, String> legendAttr = {
LegA.TOP_TITLE: "Lorentz / Gauss line shapes",
LegA.SUB_TITLES:
json.encode(["Pure Lorentzian", " Pure Gaussian", " Mixed 50% / 50%"]),
LegA.X: "45",
LegA.Y: "15"
};

// plot the arrays into [plotDiv]
SimplePlot(arrays, plotDiv, plotAttr, xaxisAttr, yaxisAttr, legendAttr, null);
}
``````

## Use this package as a library

### 1. Depend on it

``````
dependencies:
smart_lorentz_gauss: ^2.1.2

``````

### 2. Install it

You can install packages from the command line:

with pub:

``````
\$ pub get

``````

with Flutter:

``````
\$ flutter pub get

``````

Alternatively, your editor might support `pub get` or `flutter pub get`. Check the docs for your editor to learn more.

### 3. Import it

Now in your Dart code, you can use:

``````
import 'package:smart_lorentz_gauss/smart_lorentz_gauss.dart';
``````
 Popularity: Describes how popular the package is relative to other packages. [more] 26 Health: Code health derived from static analysis. [more] 100 Maintenance: Reflects how tidy and up-to-date the package is. [more] 100 Overall: Weighted score of the above. [more] 63

We analyzed this package on Feb 13, 2020, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

• Dart: 2.7.1
• pana: 0.13.5

#### Dependencies

Package Constraint Resolved Available
Direct dependencies
Dart SDK >=2.5.0 <3.0.0
build_runner ^1.6.2 1.7.4
build_web_compilers ^2.1.4 2.9.0
pedantic ^1.7.0 1.9.0
smart_arrays_plot_polyline ^2.0.8 2.2.1
Transitive dependencies
_fe_analyzer_shared 1.0.3
analyzer 0.39.4
archive 2.0.13
args 1.5.2
async 2.4.0
bazel_worker 0.1.23+1
build 1.2.2
build_config 0.4.2
build_daemon 2.1.3
build_modules 2.8.0
build_resolvers 1.3.3
build_runner_core 4.4.0
built_collection 4.3.2
built_value 7.0.9
charcode 1.1.3
checked_yaml 1.0.2
code_builder 3.2.1
collection 1.14.12
convert 2.1.1
crypto 2.1.4
csslib 0.16.1
dart_style 1.3.3
fixnum 0.10.11
glob 1.2.0
graphs 0.2.0
html 0.14.0+3
http 0.12.0+4
http_multi_server 2.2.0
http_parser 3.1.3
io 0.3.3
js 0.6.1+1
json_annotation 3.0.1
logging 0.11.4
matcher 0.12.6
meta 1.1.8
mime 0.9.6+3
node_interop 1.0.3
node_io 1.0.1+2
package_config 1.1.0 2.0.0
package_resolver 1.0.10
path 1.6.4
pool 1.4.0
protobuf 1.0.1
pub_semver 1.4.3
pubspec_parse 0.1.5
quiver 2.1.2+1
scratch_space 0.0.4+2
shelf 0.7.5
shelf_web_socket 0.2.3
smart_arrays_base 2.1.0
smart_arrays_compress 2.1.0
smart_arrays_contour_finder 2.0.6
smart_arrays_numerics 2.1.1
smart_arrays_sample_data 2.0.5
source_maps 0.10.9
source_span 1.6.0
stack_trace 1.9.3
stream_channel 2.0.0
stream_transform 1.1.0
string_scanner 1.0.5
term_glyph 1.1.0
timing 0.1.1+2
typed_data 1.1.6
watcher 0.9.7+13
web_socket_channel 1.1.0
yaml 2.2.0